diff --git a/SQF/dayz_code/init/publicEH.sqf b/SQF/dayz_code/init/publicEH.sqf index 2ea0d650f..94d447ddd 100644 --- a/SQF/dayz_code/init/publicEH.sqf +++ b/SQF/dayz_code/init/publicEH.sqf @@ -59,7 +59,7 @@ if (isServer) then { //Client only if (!isDedicated) then { "PVDZE_plr_SetDate" addPublicVariableEventHandler {(_this select 1) call player_setDate}; - "PVDZE_plr_SetWeather" addPublicVariableEventHandler {zeroPreviousWeather = zeroCurrentWeather; zeroCurrentWeather = (_this select 1)}; + "PVDZE_plr_SetSaveTime" addPublicVariableEventHandler {DZE_SaveTime = (_this select 1)}; "PVDZE_obj_RoadFlare" addPublicVariableEventHandler {(_this select 1) spawn object_roadFlare}; "PVDZE_plr_Morph2" addPublicVariableEventHandler {(_this select 1) call player_serverModelChange}; "PVDZE_plr_Morph" addPublicVariableEventHandler {(_this select 1) call server_switchPlayer}; diff --git a/SQF/dayz_code/init/variables.sqf b/SQF/dayz_code/init/variables.sqf index eebe4053b..48c36e164 100644 --- a/SQF/dayz_code/init/variables.sqf +++ b/SQF/dayz_code/init/variables.sqf @@ -675,4 +675,8 @@ if(!isDedicated) then { DZE_TEMP_treedmg = 1; DZE_Surrender = false; + DZE_Quarantine = false; + DZE_InRadiationZone = false; + + DZE_SaveTime = 30; }; diff --git a/SQF/dayz_code/system/player_spawn_2.sqf b/SQF/dayz_code/system/player_spawn_2.sqf index e7b75b658..2c3fbf069 100644 --- a/SQF/dayz_code/system/player_spawn_2.sqf +++ b/SQF/dayz_code/system/player_spawn_2.sqf @@ -1,21 +1,13 @@ -private ["_refObj","_size","_vel","_speed","_hunger","_thirst","_timeOut","_result","_factor","_randomSpot","_mylastPos","_distance","_lastTemp","_rnd","_listTalk","_bloodChanged","_id","_messTimer","_display","_control","_combatdisplay","_combatcontrol","_timeleft","_inVehicle","_tempPos","_lastUpdate","_foodVal","_thirstVal","_lowBlood","_startcombattimer","_combattimeout","_myPos","_lastPos","_debug","_saveTime","_maxDistanceTravel","_maxDistanceDebug","_maxDistanceZeroPos","_maxDistancePlayer","_maxDistanceVehicle","_isPZombie"]; +private ["_refObj","_size","_vel","_speed","_hunger","_thirst","_result","_factor","_mylastPos","_distance","_lastTemp","_rnd","_listTalk","_id","_messTimer","_combatdisplay","_combatcontrol","_timeleft","_inVehicle","_lastUpdate","_foodVal","_thirstVal","_lowBlood","_startcombattimer","_combattimeout","_isPZombie","_outsideMap","_radsound","_bloodloss","_radTimer","_currentBlood"]; disableSerialization; -_timeOut = 0; + _messTimer = 0; +_radTimer = 0; _lastTemp = dayz_temperatur; -_debug = getMarkerpos "respawn_west"; _isPZombie = player isKindOf "PZombie_VB"; -// override vars -_maxDistanceTravel = DZE_teleport select 0; -_maxDistanceDebug = DZE_teleport select 1; -_maxDistanceZeroPos = DZE_teleport select 2; -_maxDistancePlayer = DZE_teleport select 3; -_maxDistanceVehicle = DZE_teleport select 4; - player setVariable ["temperature",dayz_temperatur,true]; - player setVariable["friendlies",DZE_Friends,true]; dayz_myLoad = (((count dayz_myBackpackMags) * 0.2) + (count dayz_myBackpackWpns)) + (((count dayz_myMagazines) * 0.1) + (count dayz_myWeapons * 0.5)); @@ -26,54 +18,12 @@ while {true} do { _refObj = vehicle player; _factor = 0.6; _inVehicle = (_refObj != player); - - _bloodChanged = false; - _size = (sizeOf typeOf _refObj) * _factor; _vel = velocity player; _speed = round((_vel distance [0,0,0]) * 3.5); - _saveTime = (playersNumber west * 4) + 10; - - //reset position - _randomSpot = true; - _tempPos = getPosATL _refObj; - _distance = _debug distance _tempPos; - - if (_distance < _maxDistanceDebug) then { - _randomSpot = false; - }; - - _distance = [0,0,0] distance _tempPos; - if (_distance < _maxDistanceZeroPos) then { - _randomSpot = false; - }; - - if (!isNil "_mylastPos") then { - _distance = _mylastPos distance _tempPos; - if (_distance > _maxDistanceTravel) then { - _randomSpot = false; - }; - }; - - if (_randomSpot) then { - _mylastPos = _tempPos; - }; - - /* not used - if (!isNil "_mylastPos") then { - dayz_mylastPos = _mylastPos; - }; - */ - dayz_areaAffect = _size; - /* not used - if (_speed > 0.1) then { - _timeOut = _timeOut + 1; - }; - */ - //Record Check _lastUpdate = time - dayZ_lastPlayerUpdate; if (_lastUpdate > 8) then { @@ -82,6 +32,16 @@ while {true} do { if (_distance > 10) then { //Player has moved dayz_myPosition = getPosATL _refObj; + + // Check for radiation + DZE_InRadiationZone = false; + + _outsideMap = ((dayz_myPosition select 0) < dayz_minpos OR (dayz_myPosition select 1) < dayz_minpos OR (dayz_myPosition select 0) > dayz_maxpos OR (dayz_myPosition select 1) > dayz_maxpos); + + if(_outsideMap OR DZE_Quarantine) then { + DZE_InRadiationZone = true; + }; + player setVariable["posForceUpdate",true,true]; dayz_unsaved = true; dayZ_lastPlayerUpdate = time; @@ -153,7 +113,6 @@ while {true} do { }; if (r_player_blood > 3000) then { r_player_blood = r_player_blood - 3; - _bloodChanged = true; }; }; @@ -172,7 +131,6 @@ while {true} do { _id = [player,"dehyd"] spawn player_death; } else { r_player_blood = _result; - _bloodChanged = true; }; }; if (_foodVal <= 0) then { @@ -181,10 +139,43 @@ while {true} do { _id = [player,"starve"] spawn player_death; } else { r_player_blood = _result; - _bloodChanged = true; }; }; + // Radiation zones rapid blood loss + if (DZE_InRadiationZone) then { + + _radsound = "radzone1"; + _bloodloss = 10; + if(_radTimer > 5 AND _radTimer < 10) then { + _radsound = "radzone2"; + _bloodloss = 20; + playSound "breath_1"; + }; + if(_radTimer > 10) then { + _radsound = "radzone3"; + _bloodloss = 30; + addCamShake [2, 1, 25]; + }; + if(_radTimer > 15) then { + _radsound = "radzone4"; + _bloodloss = 50; + [player,"cough",_rnd,false,9] call dayz_zombieSpeak; + }; + _result = r_player_blood - _bloodloss; + if (_result < 0) then { + _id = [player,"rad"] spawn player_death; + } else { + r_player_blood = _result; + }; + + [player,_radsound,0,true] call dayz_zombieSpeak; + _radTimer = _radTimer + 1; + } else { + _radTimer = 0; + }; + + // Health uptick when healty not thirsty or hungry if (_foodVal >= 0.9 and _thirstVal >= 0.9) then { if (!r_player_infected and !r_player_inpain and !r_player_injured) then { _result = r_player_blood + 10; @@ -193,7 +184,6 @@ while {true} do { } else { r_player_blood = _result; }; - _bloodChanged = true; }; }; @@ -210,61 +200,34 @@ while {true} do { player setVariable ["messing",[dayz_hunger,dayz_thirst],true]; }; - //check if can disconnect - if (!dayz_canDisconnect) then { - if ((time - dayz_damageCounter) > 180) then { - if (!r_player_unconscious) then { - dayz_canDisconnect = true; - //["PVDZE_plr_DiscRem",getPlayerUID player] call callRpcProcedure; - PVDZE_plr_DiscRem = getPlayerUID player; - publicVariableServer "PVDZE_plr_DiscRem"; - - //Ensure Control is hidden - _display = uiNamespace getVariable 'DAYZ_GUI_display'; - _control = _display displayCtrl 1204; - _control ctrlShow false; - }; - }; - }; - - if(_bloodChanged) then { - player setVariable["USEC_BloodQty",r_player_blood]; + // Update blood only if PVAR does not match GVAR. + _currentBlood = player getVariable ["USEC_BloodQty", 12000]; + if (_currentBlood != r_player_blood) then { + player setVariable["USEC_BloodQty",r_player_blood,true]; }; //Save Checker if (dayz_unsaved) then { - if ((time - dayz_lastSave) > _saveTime) then { + if ((time - dayz_lastSave) > DZE_SaveTime) then { PVDZE_plr_Save = [player,dayz_Magazines,false,false]; publicVariableServer "PVDZE_plr_Save"; - dayz_unsaved = false; - - //diag_log format["Save Checker: %1", PVDZE_plr_Save]; - - if (isServer) then { - PVDZE_plr_Save call server_playerSync; - }; - dayz_lastSave = time; dayz_Magazines = []; }; }; - //Attach Trigger Current Object - //dayz_playerTrigger attachTo [_refObj,[0,0,0]]; - //dayz_playerTrigger setTriggerArea [_size,_size,0,false]; - // If in combat, display counter and restrict logout _startcombattimer = player getVariable["startcombattimer",0]; if (_startcombattimer == 1) then { - player setVariable["combattimeout", time + 30, true]; + player setVariable["combattimeout", diag_tickTime + 30, true]; player setVariable["startcombattimer", 0, true]; dayz_combat = 1; }; _combattimeout = player getVariable["combattimeout",0]; if (_combattimeout > 0) then { - _timeleft = _combattimeout - time; + _timeleft = _combattimeout - diag_tickTime; if (_timeleft > 0) then { //hintSilent format["In Combat: %1",round(_timeleft)]; } else { @@ -283,37 +246,9 @@ while {true} do { _combatcontrol ctrlShow true; }; - /* - setGroupIconsVisible [false,false]; - clearGroupIcons group player; - */ + // Blood Effects "colorCorrections" ppEffectAdjust [1, 1, 0, [1, 1, 1, 0.0], [1, 1, 1, (r_player_blood/r_player_bloodTotal)], [1, 1, 1, 0.0]]; "colorCorrections" ppEffectCommit 0; + sleep 2; - - _myPos = player getVariable["lastPos",[]]; - if (count _myPos > 0) then { - player setVariable["lastPos",_mylastPos, true]; - player setVariable["lastPos",[]]; - }; - - if (!isNil "_mylastPos") then { - _lastPos = getPosATL _refObj; - if (!_inVehicle) then { - if (_mylastPos distance _lastPos > _maxDistancePlayer) then { - if (alive player) then { - player setPosATL _mylastPos; - diag_log ("Player Teleport Revert : "+ str(_mylastPos distance _lastPos)); - }; - }; - } else { - if (_mylastPos distance _lastPos > _maxDistanceVehicle) then { - if (alive player) then { - player setPosATL _mylastPos; - diag_log ("Vehicle Teleport Revert : "+ str(_mylastPos distance _lastPos)); - }; - }; - }; - }; - }; \ No newline at end of file diff --git a/SQF/dayz_server/init/server_functions.sqf b/SQF/dayz_server/init/server_functions.sqf index e9a849653..a8bb1ad73 100644 --- a/SQF/dayz_server/init/server_functions.sqf +++ b/SQF/dayz_server/init/server_functions.sqf @@ -503,9 +503,9 @@ if(isnil "DZE_DiagVerbose") then { dze_diag_fps = { if(DZE_DiagVerbose) then { - diag_log format["DEBUG FPS : %1 OBJECTS: %2 : PLAYERS: %3", diag_fps,(count (allMissionObjects "")),(playersNumber west)]; + diag_log format["DEBUG FPS : %1 OBJECTS: %2 : PLAYERS: %3", DZE_diag_fps,(count (allMissionObjects "")),(playersNumber west)]; } else { - diag_log format["DEBUG FPS : %1", diag_fps]; + diag_log format["DEBUG FPS : %1", DZE_diag_fps]; }; }; diff --git a/SQF/dayz_server/system/server_cleanup.fsm b/SQF/dayz_server/system/server_cleanup.fsm index 5b1424740..0a55bbf6b 100644 --- a/SQF/dayz_server/system/server_cleanup.fsm +++ b/SQF/dayz_server/system/server_cleanup.fsm @@ -5,7 +5,7 @@ item0[] = {"init",0,250,-75.000000,-500.000000,25.000000,-450.000000,0.000000,"i item1[] = {"true",8,218,-75.000000,-275.000000,25.000000,-225.000000,0.000000,"true"}; item2[] = {"waiting",2,250,-75.000000,-200.000000,25.000000,-150.000000,0.000000,"waiting"}; item3[] = {"___min_loop",4,218,-75.000000,-75.000000,25.000000,-25.000000,4.000000,"5 min" \n "loop"}; -item4[] = {"sync_time__and_w",2,250,-75.000000,25.000000,25.000000,75.000000,0.000000,"sync time" \n " and weather"}; +item4[] = {"sync_time",2,250,-75.000000,25.000000,25.000000,75.000000,0.000000,"sync time"}; item5[] = {"true",8,218,-75.000000,125.000000,25.000000,175.000000,0.000000,"true"}; item6[] = {"general_cleanup",2,250,-75.000000,200.000000,25.000000,250.000000,0.000000,"general" \n "cleanup" \n "loop"}; item7[] = {"",7,210,-491.500000,220.999985,-483.500000,229.000015,0.000000,""}; @@ -58,8 +58,8 @@ link28[] = {21,22}; link29[] = {22,5}; link30[] = {23,24}; link31[] = {24,5}; -globals[] = {25.000000,1,0,0,0,640,480,1,42,6316128,1,-508.946564,440.498199,435.888916,-341.331024,859,704,1}; -window[] = {0,-1,-1,-1,-1,902,-1628,-86,52,1,877}; +globals[] = {25.000000,1,0,0,0,640,480,1,42,6316128,1,-508.946564,440.498199,435.888916,-341.331024,861,630,1}; +window[] = {2,-1,-1,-32000,-32000,890,78,1370,78,3,879}; *//*%FSM*/ class FSM { @@ -130,7 +130,7 @@ class FSM class ___min_loop { priority = 4.000000; - to="sync_time__and_w"; + to="sync_time"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"((diag_tickTime - _lastUpdate) > 300)"/*%FSM*/; action=/*%FSM*/"_lastUpdate = diag_tickTime;"/*%FSM*/; @@ -179,16 +179,14 @@ class FSM }; }; /*%FSM*/ - /*%FSM*/ - class sync_time__and_w + /*%FSM*/ + class sync_time { - name = "sync_time__and_w"; + name = "sync_time"; init = /*%FSM*/"if (DZE_DiagFpsSlow) then {" \n " call dze_diag_fps;" \n "};" \n - "call server_timeSync;" \n - "call server_weather;" \n - ""/*%FSM*/; + "call server_timeSync;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { @@ -343,10 +341,17 @@ class FSM class cleanup_loot { name = "cleanup_loot"; - init = /*%FSM*/"if (DZE_DiagFpsFast) then {" \n - " [] call dze_diag_fps;" \n + init = /*%FSM*/"DZE_diag_fps = diag_fps;" \n + "" \n + "if (DZE_DiagFpsFast) then {" \n + " call dze_diag_fps;" \n "};" \n - "[] spawn server_spawnCleanLoot;"/*%FSM*/; + "" \n + "spawn server_spawnCleanLoot;" \n + "" \n + "// set player save time based on server performance" \n + "PVDZE_plr_SetSaveTime = round(60 - DZE_diag_fps);" \n + "publicVariable ""PVDZE_plr_SetSaveTime"";"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { diff --git a/SQF/dayz_sfx/CfgSounds.hpp b/SQF/dayz_sfx/CfgSounds.hpp index 1125b46c6..a0e748fa8 100644 --- a/SQF/dayz_sfx/CfgSounds.hpp +++ b/SQF/dayz_sfx/CfgSounds.hpp @@ -611,4 +611,25 @@ class CfgSounds { sound[] = {"\dayz_sfx\effects\combo_locked.ogg",1,1,10}; titles[] = {}; }; + + class z_radzone1_0 { + name = ""; + sound[] = {"\dayz_sfx\effects\geiger_level_0.ogg",1,1,10}; + titles[] = {}; + }; + class z_radzone2_0 { + name = ""; + sound[] = {"\dayz_sfx\effects\geiger_level_1.ogg",1,1,10}; + titles[] = {}; + }; + class z_radzone3_0 { + name = ""; + sound[] = {"\dayz_sfx\effects\geiger_level_2.ogg",1,1,10}; + titles[] = {}; + }; + class z_radzone4_0 { + name = ""; + sound[] = {"\dayz_sfx\effects\geiger_level_3.ogg",1,1,10}; + titles[] = {}; + }; }; \ No newline at end of file