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