private ["_hunger","_thirst","_timeOut","_result","_randomSpot","_distance","_mylastPos","_lastTemp","_rnd","_messTimer","_PlayerNearby","_ZedsNearby","_saveTime"]; disableSerialization; _timeOut = 0; _messTimer = 0; _lastTemp = dayz_temperatur; _debug = getMarkerpos "respawn_west"; _isPZombie = player isKindOf "PZombie_VB"; _radTimer = 0; _timer = diag_tickTime; _timer1 = diag_tickTime; _spawnCheck = diag_tickTime; _timer2 = diag_Ticktime; _timer5 = diag_Ticktime; _timer10 = diag_Ticktime; _timer30 = diag_Ticktime; _timer150 = diag_ticktime; _forceHumanity = false; _runonce = false; _timerMonitor = diag_ticktime; player setVariable ["temperature",dayz_temperatur,true]; player setVariable["friendlies",DZE_Friends,true]; [player,0] call player_humanityChange; //player addMagazine "Hatchet_swing"; //player addWeapon "MeleeHatchet"; while {1 == 1} do { _start = diag_tickTime; //Initialize _refObj = vehicle player; _size = (sizeOf typeOf _refObj) * 0.6; _vel = velocity player; _speed = round((_vel distance [0,0,0]) * 3.5); _saveTime = (playersNumber west * 2) + 10; //reset rating always if (((rating player) > 0) or ((rating player) < 0)) then { player setUnitRank "PRIVATE"; }; dayz_myLoad = (((count dayz_myBackpackMags) * 0.2) + (count dayz_myBackpackWpns)) + (((count dayz_myMagazines) * 0.1) + (count dayz_myWeapons * 0.5)); //reset position _randomSpot = true; _tempPos = getPosATL player; _distance = _debug distance _tempPos; if (_distance < 2000) then { _randomSpot = false; }; _distance = [0,0,0] distance _tempPos; if (_distance < 500) then { _randomSpot = false; }; if (!isNil "_mylastPos") then { _distance = _mylastPos distance _tempPos; if (_distance > 400) then { _randomSpot = false; }; }; if (_randomSpot) then { _mylastPos = _tempPos; }; if (!isNil "_mylastPos") then { dayz_mylastPos = _mylastPos; }; dayz_areaAffect = _size; if (_speed > 0.1) then { _timeOut = _timeOut + 1; }; if (_timeOut > 150) then { _humanity = player getVariable ["humanity",0]; if (_humanity < 1 or _forceHumanity) then { if (vehicle player != player) then { [player, round(_timeOut / 10)] call player_humanityChange; _forceHumanity = false; } else { _humanity = _humanity + round(_timeOut / 10); player setVariable["humanity",_humanity,true]; _forceHumanity = true; }; }; _timeOut = 0; }; /* if ((Dayz_loginCompleted) && (diag_tickTime < 25)) then { [player,0] call player_humanityChange; diag_log ("Running"); _timer10 = diag_Ticktime; }; */ //reset OpenTarget variable if the timer has run out. if (OpenTarget_Time > 0 && {diag_tickTime - OpenTarget_Time >= dayz_OpenTarget_TimerTicks}) then { player setVariable ["OpenTarget",false,true]; }; if ((diag_tickTime - _timer150) > 60) then { //Digest Food. if (r_player_foodstack > 0) then { r_player_foodstack = r_player_foodstack - 1; }; _timer150 = diag_ticktime; }; if ((diag_tickTime - _timer) > 300) then { //Other Counters dayz_currentGlobalAnimals = count entities "CAAnimalBase"; dayz_currentGlobalZombies = count entities "zZombie_Base"; //Animals //[] call player_animalCheck; _timer = diag_tickTime; }; //Every 30 seconds force the client to update the server of all medical Values if ((diag_tickTime - _timer30) > 30) then { [] spawn { _medical = player call player_sumMedical; PVDZ_playerMedicalSync = [player,_medical]; publicVariableServer "PVDZ_playerMedicalSync"; }; _timer30 = diag_tickTime; }; //Record Check _lastUpdate = diag_ticktime - dayZ_lastPlayerUpdate; if (_lastUpdate > 8) then { //POSITION? _distance = dayz_myPosition distance player; if (_distance > 10) then { //Player has moved dayz_myPosition = getPosATL player; // Check for radiation DZE_InRadiationZone = false; _outsideMap = ((dayz_myPosition select 0) < dayz_minpos || (dayz_myPosition select 1) < dayz_minpos || (dayz_myPosition select 0) > dayz_maxpos || (dayz_myPosition select 1) > dayz_maxpos); if((_outsideMap || DZE_Quarantine) && !r_player_dead && !isNull (findDisplay 46)) then { DZE_InRadiationZone = true; }; player setVariable["posForceUpdate",true,true]; dayz_unsaved = true; dayZ_lastPlayerUpdate = diag_ticktime; }; }; _hunger = (abs((((r_player_bloodTotal - r_player_blood) / r_player_bloodTotal) * 5) + _speed + dayz_myLoad) * 3); if (diag_ticktime - dayz_panicCooldown < 120) then { _hunger = _hunger * 2; }; dayz_hunger = dayz_hunger + (_hunger / 70); //60 Updated to 80 dayz_hunger = (dayz_hunger min SleepFood) max 0; if (dayz_hunger >= SleepFood) then { if (r_player_blood < 10) then { _id = [player,"starve"] spawn player_death; }; }; //Thirst _thirst = 2; if (_refObj == player) then { _thirst = (_speed + 4) * 3; }; dayz_thirst = dayz_thirst + (_thirst / 60) * (dayz_temperatur / dayz_temperaturnormal); //TeeChange Temperatur effects added Max Effects: -25% and + 16.6% waterloss dayz_thirst = (dayz_thirst min SleepWater) max 0; if (dayz_thirst >= SleepWater) then { if (r_player_blood < 10) then { _id = [player,"dehyd"] spawn player_death; }; }; //diag_log format ["playerSpawn2 %1/%2",dayz_hunger,dayz_thirst]; //Calories if (dayz_nutrition > 0) then { _Nutrition = dayz_nutrition; _hunger = (abs((((r_player_bloodTotal - r_player_blood) / r_player_bloodTotal) * 5) + _speed + dayz_myLoad) * 3); _thirst = 2; if (_refObj == player) then {_thirst = (_speed + 4) * 3;}; _NutritionLoss = _Nutrition - (((_thirst / 1000) + (_hunger / 1000)) * (dayz_temperatur / dayz_temperaturnormal)); r_player_Nutrition = [_NutritionLoss]; } else { r_player_Nutrition = [0]; }; dayz_nutrition = r_player_Nutrition select 0; //Temperatur 2 call player_temp_calculation; //2 = sleep time of this loop //TeeChange if ((_lastTemp - dayz_temperatur) > 0.75 or (_lastTemp - dayz_temperatur) < -0.75 ) then { player setVariable ["temperature",dayz_temperatur,false]; PVDZ_serverStoreVar = [player,"temperature",dayz_temperatur]; publicVariableServer "PVDZ_serverStoreVar"; _lastTemp = dayz_temperatur; }; dayz_temperatur = (dayz_temperatur min dayz_temperaturmax) max dayz_temperaturmin; //can get nearby infection if (!r_player_infected && !_isPZombie) then { // Infectionriskstart if (dayz_temperatur < ((80 / 100) * (dayz_temperaturnormal - dayz_temperaturmin) + dayz_temperaturmin)) then { //TeeChange { if (_x getVariable["USEC_infected",false]) then { _rnd = (random 1) * (((dayz_temperaturnormal - dayz_temperatur) * (100 /(dayz_temperaturnormal - dayz_temperaturmin)))/ 50); //TeeChange if (_rnd < 0.1) then { _rnd = random 1; if (_rnd > 0.7) then { r_player_infected = true; //player setVariable["USEC_infected",true]; }; }; }; } count (_mylastPos nearEntities ["CAManBase",12]); if (dayz_temperatur < ((50 / 100) * (dayz_temperaturnormal - dayz_temperaturmin) + dayz_temperaturmin)) then { //TeeChange _rnd = (random 1) * (((dayz_temperaturnormal - dayz_temperatur) * (100 /(dayz_temperaturnormal - dayz_temperaturmin)))/ 25); //TeeChange if (_rnd < 0.05) then { _rnd = random 1; if (_rnd > 0.95) then { r_player_infected = true; //player setVariable["USEC_infected",true]; }; }; }; }; }; //If has infection reduce blood cough and add shake if (r_player_infected) then { if !(player getVariable["USEC_infected",false]) then { player setVariable["USEC_infected",true,true]; }; if (r_player_blood < 3) then { _id = [player,"sick"] spawn player_death; }; }; // Radiation zones rapid blood loss if (DZE_InRadiationZone) then { _radsound = "radzone1"; _bloodloss = 10; if (_radTimer > 5 && _radTimer < 10) then { _radsound = "radzone2"; _bloodloss = 20; }; if (_radTimer > 10) then { _radsound = "radzone3"; _bloodloss = 30; }; if (_radTimer > 15) then { _radsound = "radzone4"; _bloodloss = 50; }; _result = r_player_blood - _bloodloss; if (_result < 0) then { _id = [player,"rad"] spawn player_death; } else { r_player_blood = _result; }; addCamShake [2, 1, 25]; [player,_radsound,0,true] call dayz_zombieSpeak; _radTimer = _radTimer + 1; } else { _radTimer = 0; }; // Regen some blood if player is well fed and resting // Attention: regen _result must not trigger the "up" arrow of the blood icon if (r_player_blood < 12000 and dayz_hunger < SleepFood and dayz_thirst < SleepWater and !r_player_injured and !r_player_infected and !(r_player_Sepsis select 0) and !r_player_unconscious) then { _result = (1-(dayz_hunger + dayz_thirst)/(SleepWater + SleepFood)); switch (1==1) do { case (_result < 0.25) : {}; // not well fed case ((toArray(animationState player) select 5) == 112) : { // prone _result = _result * (1 + 10 * (12000 - r_player_blood) / 12000); }; case (speed player < 1) : { // still _result = _result * (1 + 4 * sqrt((12000 - r_player_blood) / 12000)); }; default { // moving }; }; r_player_bloodregen = r_player_bloodregen + _result; }; if (r_player_blood > 12000) then { r_player_blood = 12000; }; //Record low bloow _lowBlood = player getVariable ["USEC_lowBlood", false]; if ((r_player_blood < r_player_bloodTotal) and !_lowBlood) then { player setVariable["USEC_lowBlood",true,true]; }; //Broadcast Hunger/Thirst _messTimer = _messTimer + 1; if (_messTimer > 60) then { _messTimer = 0; player setVariable ["messing",[dayz_hunger,dayz_thirst,dayz_nutrition],false]; PVDZ_serverStoreVar = [player,"messing",[dayz_hunger,dayz_thirst,dayz_nutrition]]; publicVariableServer "PVDZ_serverStoreVar"; }; //Save Checker if (dayz_unsaved or ((diag_ticktime - dayz_lastSave) > 300)) then { if ((diag_ticktime - dayz_lastSave) > _saveTime) then { PVDZ_plr_Save = [player,nil,false,dayz_playerAchievements]; publicVariableServer "PVDZ_plr_Save"; PVDZ_serverStoreVar = [player,"Achievements",dayz_playerAchievements]; publicVariableServer "PVDZ_serverStoreVar"; player setVariable ["Achievements",dayz_playerAchievements,false]; if (isServer) then { PVDZ_plr_Save call server_playerSync; }; dayz_unsaved = false; dayz_lastSave = diag_ticktime; }; }; // sort out pickup actions _isOK = (pickupInit and !canPickup) or (!pickupInit and canPickup); if (_isOK) then { if (pickupInit and !canPickup) then { canPickup = true; pickupInit = false; }; } else { // reset canPickup = false; pickupInit = true; }; _PlayerNearby = false; _ZedsNearby = false; if ({isPlayer _x} count (player nearEntities ["AllVehicles", 5]) > 1) then { _PlayerNearby = true; }; if (count (player nearEntities ["zZombie_Base", 10]) > 0) then { _ZedsNearby = true; }; _startcombattimer = player getVariable["startcombattimer", 0]; if (_startcombattimer == 1 || _PlayerNearby) then { player setVariable["combattimeout", diag_tickTime + 30, false]; player setVariable["startcombattimer", 0, false]; dayz_combat = 1; } else { if (_ZedsNearby) then { player setVariable["combattimeout", diag_tickTime + 10, false]; player setVariable["startcombattimer", 0, false]; dayz_combat = 1; }; }; if (toLower DZE_UI != "vanilla") then { _combattimeout = player getVariable["combattimeout",0]; if (_combattimeout > 0) then { _timeleft = _combattimeout - time; if (_timeleft > 0) then { //hintSilent format["In Combat: %1",round(_timeleft)]; } else { //hintSilent "Not in Combat"; player setVariable["combattimeout", 0, true]; dayz_combat = 0; _combatdisplay = uiNamespace getVariable 'DAYZ_GUI_display'; _combatcontrol = _combatdisplay displayCtrl 1307; _combatcontrol ctrlShow true; }; } else { //hintSilent "Not in Combat"; dayz_combat = 0; _combatdisplay = uiNamespace getVariable 'DAYZ_GUI_display'; _combatcontrol = _combatdisplay displayCtrl 1307; _combatcontrol ctrlShow true; }; }; //setGroupIconsVisible [false,false]; //clearGroupIcons group player; uiSleep 2; _myPos = player getVariable["lastPos",[]]; if (count _myPos > 0) then { player setVariable["lastPos",_mylastPos, true]; player setVariable["lastPos",[]]; }; //Melee Weapons ammo fix if(isNil {login_ammochecked}) then { login_ammochecked = true; _wpnType = primaryWeapon player; _ismelee = (getNumber (configFile >> "CfgWeapons" >> _wpnType >> "melee") == 1); if (_ismelee) then { call dayz_meleeMagazineCheck; }; }; if ((diag_tickTime - _timer1) > 10) then { _position = getPosATL player; _zeds = _position nearEntities ["zZombie_Base",200]; dayz_spawnZombies = 0; dayz_CurrentNearByZombies = 0; //Current amounts { if (alive _x) then { if (local _x) then { dayz_spawnZombies = dayz_spawnZombies + 1; }; dayz_CurrentNearByZombies = dayz_CurrentNearByZombies + 1; }; } count _zeds; //dayz_spawnZombies = {alive _x AND local _x} count (_position nearEntities ["zZombie_Base",400]); //dayz_CurrentNearByZombies = {alive _x} count (_position nearEntities ["zZombie_Base",400]); dayz_currentWeaponHolders = count (_position nearObjects ["ReammoBox",200]); //Remove empty cardborad box's << this needs to be changed moved (action menu or close button) { //get contents _weapons = getWeaponCargo _x; _magazines = getMagazineCargo _x; _backpacks = getBackpackCargo _x; if ((count (_weapons select 0) < 1) and (count (_magazines select 0) < 1) and (count (_backpacks select 0) < 1)) then { //remove vehicle, Need to ask server to remove. diag_log format["Deleting empty nearby box: %1",_x]; PVDZ_obj_Delete = [_x,player]; publicVariableServer "PVDZ_obj_Delete"; }; } count (_position nearObjects ["CardboardBox",10]); _timer1 = diag_tickTime; }; //Two primary guns pickup exploit fix if ((primaryWeapon player != "") && (!(primaryWeapon player in MeleeWeapons)) && (dayz_onBack != "") && (!(dayz_onBack in MeleeWeapons)) && (isNull (findDisplay 106)) && (animationState player != "amovpknlmstpslowwrfldnon_amovpknlmstpsraswrfldnon" OR animationState player != "amovpercmstpslowwrfldnon_amovpercmstpsraswrfldnon" OR animationState player != "amovpercmstpslowwrfldnon_amovpercmstpsraswrfldnon")) then { cutText [localize "str_player_ammo_2primary","PLAIN DOWN"]; player playActionNow "stop"; player action ["dropWeapon", player, primaryWeapon player]; //sleep 3; //["gear"] call player_switchWeapon; //sleep 1; }; //Crowbar ammo fix //"MeleeCrowbar" call dayz_meleeMagazineCheck; _stop = diag_tickTime; /* if ((diag_tickTime - _timerMonitor) > 60) then { diag_log format ["Loop Monitor - Spawn2: %1, DA: %2, UA: %3, SA: %4",(_stop - _start),(diag_tickTime - (player getVariable "damageActions")),(diag_tickTime - (player getVariable "upgradeActions")),(diag_tickTime - (player getVariable "selfActions"))]; _timerMonitor = diag_ticktime; }; */ };