diff --git a/CHANGE LOG 1.0.6.2.txt b/CHANGE LOG 1.0.6.2.txt index 1950ab556..4e4e34473 100644 --- a/CHANGE LOG 1.0.6.2.txt +++ b/CHANGE LOG 1.0.6.2.txt @@ -1,7 +1,10 @@ [NEW] Added a few loot positions for Namalsk and Takistan. @skigoggles [FIXED] Kamaz refuel trucks no longer allow automatic refueling. #1855 @coresync2k @dreamforceinc + +[NOTE] Fixes below are included in the mission file and server pbo as part of server package 1.0.6.1A (March 10th 2017) [FIXED] Fixed food and drink going down 10x faster from melee and other "working" actions. [FIXED] Glitch where group icons scaled very large momentarily while moving off screen. +[FIXED] Possible mission file exploit [INFO] See Documents\CHANGE LOG 1.0.6.txt for the full list of 1.0.5.1 --> 1.0.6 changes. \ No newline at end of file diff --git a/CHANGE LOG 1.0.6.1.txt b/Documents/CHANGE LOG 1.0.6.1.txt similarity index 100% rename from CHANGE LOG 1.0.6.1.txt rename to Documents/CHANGE LOG 1.0.6.1.txt diff --git a/SQF/dayz_server/init/mission_check.sqf b/SQF/dayz_server/init/mission_check.sqf new file mode 100644 index 000000000..6ab899299 --- /dev/null +++ b/SQF/dayz_server/init/mission_check.sqf @@ -0,0 +1,48 @@ +//Temporary block for A2OA mission override exploit. +//This bug should be fixed in the next EOL patch. +//Put this code at the bottom of dayz_server\init\server_functions.sqf + +//List all of the files in your mission. For example, you may need to add 'custom\variables.sqf', etc. +_files = ['description.ext','init.sqf','mission.sqm','rules.sqf']; + +_list = []; +{ + _file = toArray (toLower(preprocessFile _x)); + _sum = 0; + _count = {_sum = _sum + _x; true} count _file; + _sum = _sum min 999999; + _list set [count _list,[_count,_sum]]; +} forEach _files; + +//Check mission integrity on all clients +_temp = "HeliHEmpty" createVehicle [0,0,0]; +_temp setVehicleInit format[" + if (isServer) exitWith {}; + + _list = []; + { + _file = toArray (toLower(preprocessFile _x)); + _sum = 0; + _count = {_sum = _sum + _x; true} count _file; + _sum = _sum min 999999; + _list set [count _list,[_count,_sum]]; + } forEach %1; + + _file = -1; + { + if ((_x select 0 != (_list select _forEachIndex) select 0) or (_x select 1 != (_list select _forEachIndex) select 1)) then { + _file = _forEachIndex; + }; + } forEach %2; + + if (_file != -1) then { + MISSION_CHECK = if ((_list select _file) select 0 < 49999) then {preprocessFileLineNumbers (%1 select _file)} else {'TOO BIG'}; + publicVariableServer 'MISSION_CHECK'; + [] spawn { + uiSleep 1; + {(findDisplay _x) closeDisplay 2;} count [0,8,12,18,46,70]; + }; + }; +",_files,_list]; + +processInitCommands; \ 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 02cb476bc..443035622 100644 --- a/SQF/dayz_server/init/server_functions.sqf +++ b/SQF/dayz_server/init/server_functions.sqf @@ -267,4 +267,5 @@ array_reduceSize = { }; // Precise base building 1.0.5 -call compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\kk_functions.sqf"; \ No newline at end of file +call compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\kk_functions.sqf"; +#include "mission_check.sqf" diff --git a/Server Files/MPMissions/DayZ_Epoch_1.Takistan/DZE_Hotfix_1.0.6.1A/groups/groupMarkers.sqf b/Server Files/MPMissions/DayZ_Epoch_1.Takistan/DZE_Hotfix_1.0.6.1A/groups/groupMarkers.sqf new file mode 100644 index 000000000..e43cffbac --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_1.Takistan/DZE_Hotfix_1.0.6.1A/groups/groupMarkers.sqf @@ -0,0 +1,75 @@ +private ["_bodyCount","_count","_group","_hasGPS","_index","_inGroup","_marker","_markBody","_markGroup","_markSelf","_name","_pos","_self","_vehicle"]; + +while {true} do { + _group = player call dayz_filterGroup; + _inGroup = count _group > 1; + + if (dayz_requireRadio && {_inGroup} && {!("ItemRadio" in items player)}) then { + [player] joinSilent grpNull; + if (!isNull findDisplay 80000) then {findDisplay 80000 closeDisplay 2;}; + terminate dayz_groupTags; + 80000 cutText ["","PLAIN"]; + localize "STR_EPOCH_LOST_RADIO_CONTACT" call dayz_rollingMessages; + } else { + if (_inGroup && scriptDone dayz_groupTags) then { + dayz_groupTags = execVM "DZE_Hotfix_1.0.6.1A\groups\groupTags.sqf"; + }; + + if (visibleMap or !isNull (uiNamespace getVariable["BIS_RscMiniMap",displayNull])) then { + _hasGPS = "ItemGPS" in items player; + _markBody = (dayz_markBody == 1 or (dayz_markBody == 2 && _hasGPS)); + _markGroup = (dayz_markGroup == 1 or (dayz_markGroup == 2 && _hasGPS)); + _markSelf = (dayz_markSelf == 1 or (dayz_markSelf == 2 && _hasGPS)); + + _index = 0; + { + _self = _x == player; + _vehicle = vehicle _x; + if ((_self or _markGroup) && (!_self or _markSelf) && (effectiveCommander _vehicle == _x)) then { + _pos = [_x] call FNC_GetPos; + deleteMarkerLocal format["groupMember%1",_index]; + _marker = createMarkerLocal [format["groupMember%1",_index],_pos]; + _marker setMarkerTypeLocal "DestroyedVehicle"; + _marker setMarkerTextLocal format ["%1",if (_vehicle == _x) then {name _x} else {_vehicle call dayz_getCrew}]; + _marker setMarkerColorLocal "ColorGreen"; + } else { + deleteMarkerLocal format["groupMember%1",_index]; + }; + _index = _index + 1; + } count _group; + + // Remove markers for group members that left + _count = count _group; + if (dayz_oldMemberCount > _count) then { + for "_i" from _count to dayz_oldMemberCount do {deleteMarkerLocal format["groupMember%1",_i];}; + }; + dayz_oldMemberCount = _count; + + if (_markBody) then { + _bodyCount = 0; + _name = name player; + { + if (_x getVariable["bodyName",""] == _name) then { + _bodyCount = _bodyCount + 1; + _pos = [_x] call FNC_GetPos; + deleteMarkerLocal format["MyBody%1",_bodyCount]; + _marker = createMarkerLocal [format["MyBody%1",_bodyCount],_pos]; + _marker setMarkerTypeLocal "DestroyedVehicle"; + _marker setMarkerTextLocal localize "STR_EPOCH_RIP"; + _marker setMarkerColorLocal "ColorRed"; + }; + } count allDead; + + // Remove markers for bodies that were deleted + if (dayz_oldBodyCount > _bodyCount) then { + for "_i" from _bodyCount to dayz_oldBodyCount do {deleteMarkerLocal format["MyBody%1",_i];}; + }; + dayz_oldBodyCount = _bodyCount; + } else { + for "_i" from 1 to dayz_oldBodyCount do {deleteMarkerLocal format["MyBody%1",_i];}; + }; + }; + }; + + uiSleep 1; +}; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_1.Takistan/DZE_Hotfix_1.0.6.1A/groups/groupTags.sqf b/Server Files/MPMissions/DayZ_Epoch_1.Takistan/DZE_Hotfix_1.0.6.1A/groups/groupTags.sqf new file mode 100644 index 000000000..0e9d72539 --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_1.Takistan/DZE_Hotfix_1.0.6.1A/groups/groupTags.sqf @@ -0,0 +1,52 @@ +#define DRAW_TAGS (!visibleMap && count units group player > 1) //Use && cameraView != "GROUP" if tactical view is allowed (blocked by default) +private ["_display","_distance","_group","_icon","_index","_pos","_scale","_screen","_text"]; +disableSerialization; + +_refresh = { + _group = player call dayz_filterGroup; + + _display = uiNamespace getVariable "DZ_GroupTags"; + _index = 0; + { + _pos = [_x] call FNC_GetPos; + _distance = _pos distance player; + _icon = _display displayCtrl (100 + _index); + if (_distance > 1 && _distance < 2500 && vehicle _x != vehicle player) then { + _pos set [2,(_pos select 2) + 1.5]; + _screen = worldToScreen _pos; + _text = composeText [image "\ca\ui\data\igui_side_unknown_ca.paa"," ",if (dayz_groupNameTags) then {name _x} else {""}]; + if (count _screen > 1) then { + _scale = if (_distance < 200) then {.3} else {1 min ((1 - (_distance - 3) / 15) max .3)}; + _icon ctrlSetStructuredText _text; + _icon ctrlSetPosition [(_screen select 0),(_screen select 1),.99,.65]; + _icon ctrlSetScale _scale; + _icon ctrlSetFade ((1 - _scale) / 2); + _icon ctrlCommit 0; + _icon ctrlShow true; + } else { + _icon ctrlShow false; + }; + } else { + _icon ctrlShow false; + }; + _index = _index + 1; + } count _group; + + if (dayz_oldGroupCount > count _group) then { + _display displayCtrl (100 + _index) ctrlShow false; + }; + + dayz_oldGroupCount = count _group; +}; + +while {true} do { + waitUntil {uiSleep 1; DRAW_TAGS}; + 80000 cutRsc ["DZ_GroupTags","PLAIN"]; + + while {DRAW_TAGS} do { + call _refresh; //Must be called to finish in current frame + uiSleep 0.01; + }; + + 80000 cutText ["","PLAIN"]; +}; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_1.Takistan/DZE_Hotfix_1.0.6.1A/groups/init.sqf b/Server Files/MPMissions/DayZ_Epoch_1.Takistan/DZE_Hotfix_1.0.6.1A/groups/init.sqf new file mode 100644 index 000000000..6a61f5db4 --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_1.Takistan/DZE_Hotfix_1.0.6.1A/groups/init.sqf @@ -0,0 +1,51 @@ +private ["_leader","_oldGroup","_savedGroup"]; + +uiSleep 1; +if (count (units group player) > 1) then { + [player] joinSilent grpNull; + diag_log "Clearing group"; +}; + +_savedGroup = (PVCDZ_plr_Login select 10) - [getPlayerUID player]; + +if (count _savedGroup > 0 && {!dayz_requireRadio or {dayz_requireRadio && "ItemRadio" in items player}}) then { + { + //Only auto join player into group if leader is in their savedGroup + _leader = leader _x; + if (getPlayerUID _leader in _savedGroup) exitWith { + _oldGroup = group player; + [player] joinSilent _x; + if (count (units _oldGroup) == 0) then {deleteGroup _oldGroup;}; + format[localize "STR_EPOCH_REJOINED_GROUP",name _leader] call dayz_rollingMessages; + + // Update saved group in DB + PVDZ_Server_UpdateGroup = [1,player]; + publicVariableServer "PVDZ_Server_UpdateGroup"; + }; + } count allGroups; +}; + +dayz_oldBodyCount = 0; +dayz_oldGroupCount = 0; +dayz_oldMemberCount = 0; +dayz_disbandGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\disband.sqf"; +dayz_filterGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\filter.sqf"; +dayz_getCrew = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\getCrew.sqf"; +dayz_getPlayer = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\getPlayer.sqf"; +dayz_inviteToGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\invite.sqf"; +dayz_joinGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\join.sqf"; +dayz_kickFromGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\kick.sqf"; +dayz_leaveGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\leave.sqf"; +dayz_openGroupDialog = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\open.sqf"; +dayz_pickGroupMember = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\pickGroupMember.sqf"; +dayz_pickPlayer = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\pickPlayer.sqf"; +dayz_promotePlayer = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\promote.sqf"; +dayz_rejectGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\reject.sqf"; +dayz_groupInit = true; + +//Initialize as script data type, no scriptNull in A2 +dayz_groupDisbandThread = 0 spawn {}; +dayz_groupLeaveThread = 0 spawn {}; +dayz_groupTags = 0 spawn {}; + +execVM "DZE_Hotfix_1.0.6.1A\groups\groupMarkers.sqf"; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_1.Takistan/DZE_Hotfix_1.0.6.1A/init/compiles.sqf b/Server Files/MPMissions/DayZ_Epoch_1.Takistan/DZE_Hotfix_1.0.6.1A/init/compiles.sqf new file mode 100644 index 000000000..e0a4a3c84 --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_1.Takistan/DZE_Hotfix_1.0.6.1A/init/compiles.sqf @@ -0,0 +1,47 @@ +if (!isDedicated) then { + dayz_NutritionSystem = { + private ["_type","_baseRegen","_nutrition","_calorieCount","_hungerCount","_thirstCount","_tempCount","_Thirst","_Hunger","_bloodregen","_golbalNutrition"]; + _type = _this select 0; + _baseRegen = _this select 1; + _nutrition = _this select 2; + _calorieCount = ((_this select 2) select 0); + _hungerCount = ((_this select 2) select 1); + _thirstCount = ((_this select 2) select 2); + _tempCount = ((_this select 2) select 3); + if (_calorieCount > 0) then { + _hungerCount = _hungerCount + (SleepFood * (((ln ((_calorieCount / 3610) * 100)) * (1 - (dayz_hunger / SleepFood))) / 100)); + _thirstCount = _thirstCount + (SleepWater * (((ln ((_calorieCount / 3610) * 100)) * (1 - (dayz_thirst / SleepWater))) / 100)); + }; + switch (_type) do { + case "FoodDrink": { + if (_hungerCount > 0) then { + if (dayz_hunger > _hungerCount) then { + dayz_hunger = dayz_hunger - (_hungerCount); + } else { + dayz_hunger = 0; + }; + }; + if (_thirstCount > 0) then { + if (dayz_thirst > _thirstCount) then { + dayz_thirst = dayz_thirst - _thirstCount; + } else { + dayz_thirst = 0; + }; + }; + if (_tempCount > 0) then { dayz_temperatur = dayz_temperatur + _tempCount; }; + if (_calorieCount > 0) then { dayz_nutrition = dayz_nutrition + _calorieCount; }; + if (_baseRegen > 0) then { r_player_bloodregen = r_player_bloodregen + _baseRegen; }; + }; + case "Working": { + if (_calorieCount > 0) then { dayz_nutrition = dayz_nutrition - (_calorieCount / ((DZE_NutritionDivisor select 0) max 0.1)); }; + if (_thirstCount > 0) then { dayz_thirst = dayz_thirst + (_thirstCount / ((DZE_NutritionDivisor select 1) max 0.1)); }; + if (_hungerCount > 0) then { dayz_hunger = dayz_hunger + (_hungerCount / ((DZE_NutritionDivisor select 2) max 0.1)); }; + if (_tempCount > 0) then { dayz_temperatur = dayz_temperatur + (_tempCount / ((DZE_NutritionDivisor select 3) max 0.1)); }; + }; + }; + dayz_thirst = (dayz_thirst min SleepWater) max 0; + dayz_hunger = (dayz_hunger min SleepFood) max 0; + dayz_temperatur = (dayz_temperatur min dayz_temperaturmax) max dayz_temperaturmin; + }; + Diag_Log "DZE_Hotfix_1.0.6.1A: dayz_NutritionSystem patched"; +}; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_1.Takistan/DZE_Hotfix_1.0.6.1A/system/progress_monitor.sqf b/Server Files/MPMissions/DayZ_Epoch_1.Takistan/DZE_Hotfix_1.0.6.1A/system/progress_monitor.sqf new file mode 100644 index 000000000..5660c9e1b --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_1.Takistan/DZE_Hotfix_1.0.6.1A/system/progress_monitor.sqf @@ -0,0 +1,43 @@ +private["_display","_control1","_control2","_watermark"]; +disableSerialization; +//diag_log "DEBUG: loadscreen guard started."; + +_timeoutStart=diag_ticktime; +while {true} do { + if (diag_ticktime - _timeoutStart >= 120) exitWith { + 1 cutText [localize "str_player_login_timeout", "PLAIN DOWN"]; + uiSleep 5; + endMission "END1"; + }; + if ((!isNil "Dayz_loginCompleted") and {(Dayz_loginCompleted)}) exitWith { + //diag_log [ __FILE__, __LINE__, "End loop"]; + + // Logo watermark: adding a logo in the bottom left corner of the screen with the server name + if (!isNil "dayZ_serverName") then { + 5 cutRsc ["wm_disp","PLAIN"]; + _watermark = (uiNamespace getVariable "wm_disp") displayCtrl 1; + _watermark ctrlSetText dayZ_serverName; + if (profileNamespace getVariable ["streamerMode",0] == 1) then {_watermark ctrlShow false;}; + }; + + if (dayz_enableRules && (profileNamespace getVariable ["streamerMode",0] == 0)) then { + dayz_rulesHandle = execVM "rules.sqf"; + }; + + if (dayz_groupSystem) then {execVM "DZE_Hotfix_1.0.6.1A\groups\init.sqf";}; + Diag_Log "DZE_Hotfix_1.0.6.1A: dayz_groupSystem patched"; + }; + _display = uiNameSpace getVariable "BIS_loadingScreen"; + if (!isNil "_display") then { + if (dayz_loadScreenMsg != "" ) then { + _control1 = _display displayctrl 8400; + _control1 ctrlSetText dayz_loadScreenMsg; + }; + _control2 = _display displayctrl 102; + _control2 ctrlSetText format["%1",floor(diag_ticktime - _timeoutStart)]; + }; + + uiSleep 0.2; + //diag_log [ __FILE__, __LINE__, "Looping..."]; +}; + diff --git a/Server Files/MPMissions/DayZ_Epoch_1.Takistan/init.sqf b/Server Files/MPMissions/DayZ_Epoch_1.Takistan/init.sqf index 5be1aa459..fd232188f 100644 --- a/Server Files/MPMissions/DayZ_Epoch_1.Takistan/init.sqf +++ b/Server Files/MPMissions/DayZ_Epoch_1.Takistan/init.sqf @@ -79,12 +79,16 @@ onPreloadStarted "diag_log [diag_tickTime,'onPreloadStarted']; dayz_preloadFinis onPreloadFinished "diag_log [diag_tickTime,'onPreloadFinished']; dayz_preloadFinished = true;"; with uiNameSpace do {RscDMSLoad=nil;}; // autologon at next logon +_verCheck = (getText (configFile >> "CfgMods" >> "DayZ" >> "version") == "DayZ Epoch 1.0.6.1"); if (!isDedicated) then { - enableSaving [false, false]; - startLoadingScreen ["","RscDisplayLoadCustom"]; + enableSaving [false, false]; startLoadingScreen ["","RscDisplayLoadCustom"]; progressLoadingScreen 0; dayz_loadScreenMsg = localize 'str_login_missionFile'; - progress_monitor = [] execVM "\z\addons\dayz_code\system\progress_monitor.sqf"; + if (_verCheck) then { + progress_monitor = [] execVM "DZE_Hotfix_1.0.6.1A\system\progress_monitor.sqf"; + } else { + progress_monitor = [] execVM "\z\addons\dayz_code\system\progress_monitor.sqf"; + }; 0 cutText ['','BLACK',0]; 0 fadeSound 0; 0 fadeMusic 0; @@ -98,6 +102,9 @@ progressLoadingScreen 0.1; call compile preprocessFileLineNumbers "\z\addons\dayz_code\medical\setup_functions_med.sqf"; progressLoadingScreen 0.15; call compile preprocessFileLineNumbers "\z\addons\dayz_code\init\compiles.sqf"; +if (_verCheck) then { + #include "DZE_Hotfix_1.0.6.1A\init\compiles.sqf" +}; progressLoadingScreen 0.25; call compile preprocessFileLineNumbers "server_traders.sqf"; call compile preprocessFileLineNumbers "\z\addons\dayz_code\system\mission\takistan.sqf"; //Add trader city objects locally on every machine early diff --git a/Server Files/MPMissions/DayZ_Epoch_10.Mountains_ACR/DZE_Hotfix_1.0.6.1A/groups/groupMarkers.sqf b/Server Files/MPMissions/DayZ_Epoch_10.Mountains_ACR/DZE_Hotfix_1.0.6.1A/groups/groupMarkers.sqf new file mode 100644 index 000000000..e43cffbac --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_10.Mountains_ACR/DZE_Hotfix_1.0.6.1A/groups/groupMarkers.sqf @@ -0,0 +1,75 @@ +private ["_bodyCount","_count","_group","_hasGPS","_index","_inGroup","_marker","_markBody","_markGroup","_markSelf","_name","_pos","_self","_vehicle"]; + +while {true} do { + _group = player call dayz_filterGroup; + _inGroup = count _group > 1; + + if (dayz_requireRadio && {_inGroup} && {!("ItemRadio" in items player)}) then { + [player] joinSilent grpNull; + if (!isNull findDisplay 80000) then {findDisplay 80000 closeDisplay 2;}; + terminate dayz_groupTags; + 80000 cutText ["","PLAIN"]; + localize "STR_EPOCH_LOST_RADIO_CONTACT" call dayz_rollingMessages; + } else { + if (_inGroup && scriptDone dayz_groupTags) then { + dayz_groupTags = execVM "DZE_Hotfix_1.0.6.1A\groups\groupTags.sqf"; + }; + + if (visibleMap or !isNull (uiNamespace getVariable["BIS_RscMiniMap",displayNull])) then { + _hasGPS = "ItemGPS" in items player; + _markBody = (dayz_markBody == 1 or (dayz_markBody == 2 && _hasGPS)); + _markGroup = (dayz_markGroup == 1 or (dayz_markGroup == 2 && _hasGPS)); + _markSelf = (dayz_markSelf == 1 or (dayz_markSelf == 2 && _hasGPS)); + + _index = 0; + { + _self = _x == player; + _vehicle = vehicle _x; + if ((_self or _markGroup) && (!_self or _markSelf) && (effectiveCommander _vehicle == _x)) then { + _pos = [_x] call FNC_GetPos; + deleteMarkerLocal format["groupMember%1",_index]; + _marker = createMarkerLocal [format["groupMember%1",_index],_pos]; + _marker setMarkerTypeLocal "DestroyedVehicle"; + _marker setMarkerTextLocal format ["%1",if (_vehicle == _x) then {name _x} else {_vehicle call dayz_getCrew}]; + _marker setMarkerColorLocal "ColorGreen"; + } else { + deleteMarkerLocal format["groupMember%1",_index]; + }; + _index = _index + 1; + } count _group; + + // Remove markers for group members that left + _count = count _group; + if (dayz_oldMemberCount > _count) then { + for "_i" from _count to dayz_oldMemberCount do {deleteMarkerLocal format["groupMember%1",_i];}; + }; + dayz_oldMemberCount = _count; + + if (_markBody) then { + _bodyCount = 0; + _name = name player; + { + if (_x getVariable["bodyName",""] == _name) then { + _bodyCount = _bodyCount + 1; + _pos = [_x] call FNC_GetPos; + deleteMarkerLocal format["MyBody%1",_bodyCount]; + _marker = createMarkerLocal [format["MyBody%1",_bodyCount],_pos]; + _marker setMarkerTypeLocal "DestroyedVehicle"; + _marker setMarkerTextLocal localize "STR_EPOCH_RIP"; + _marker setMarkerColorLocal "ColorRed"; + }; + } count allDead; + + // Remove markers for bodies that were deleted + if (dayz_oldBodyCount > _bodyCount) then { + for "_i" from _bodyCount to dayz_oldBodyCount do {deleteMarkerLocal format["MyBody%1",_i];}; + }; + dayz_oldBodyCount = _bodyCount; + } else { + for "_i" from 1 to dayz_oldBodyCount do {deleteMarkerLocal format["MyBody%1",_i];}; + }; + }; + }; + + uiSleep 1; +}; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_10.Mountains_ACR/DZE_Hotfix_1.0.6.1A/groups/groupTags.sqf b/Server Files/MPMissions/DayZ_Epoch_10.Mountains_ACR/DZE_Hotfix_1.0.6.1A/groups/groupTags.sqf new file mode 100644 index 000000000..0e9d72539 --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_10.Mountains_ACR/DZE_Hotfix_1.0.6.1A/groups/groupTags.sqf @@ -0,0 +1,52 @@ +#define DRAW_TAGS (!visibleMap && count units group player > 1) //Use && cameraView != "GROUP" if tactical view is allowed (blocked by default) +private ["_display","_distance","_group","_icon","_index","_pos","_scale","_screen","_text"]; +disableSerialization; + +_refresh = { + _group = player call dayz_filterGroup; + + _display = uiNamespace getVariable "DZ_GroupTags"; + _index = 0; + { + _pos = [_x] call FNC_GetPos; + _distance = _pos distance player; + _icon = _display displayCtrl (100 + _index); + if (_distance > 1 && _distance < 2500 && vehicle _x != vehicle player) then { + _pos set [2,(_pos select 2) + 1.5]; + _screen = worldToScreen _pos; + _text = composeText [image "\ca\ui\data\igui_side_unknown_ca.paa"," ",if (dayz_groupNameTags) then {name _x} else {""}]; + if (count _screen > 1) then { + _scale = if (_distance < 200) then {.3} else {1 min ((1 - (_distance - 3) / 15) max .3)}; + _icon ctrlSetStructuredText _text; + _icon ctrlSetPosition [(_screen select 0),(_screen select 1),.99,.65]; + _icon ctrlSetScale _scale; + _icon ctrlSetFade ((1 - _scale) / 2); + _icon ctrlCommit 0; + _icon ctrlShow true; + } else { + _icon ctrlShow false; + }; + } else { + _icon ctrlShow false; + }; + _index = _index + 1; + } count _group; + + if (dayz_oldGroupCount > count _group) then { + _display displayCtrl (100 + _index) ctrlShow false; + }; + + dayz_oldGroupCount = count _group; +}; + +while {true} do { + waitUntil {uiSleep 1; DRAW_TAGS}; + 80000 cutRsc ["DZ_GroupTags","PLAIN"]; + + while {DRAW_TAGS} do { + call _refresh; //Must be called to finish in current frame + uiSleep 0.01; + }; + + 80000 cutText ["","PLAIN"]; +}; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_10.Mountains_ACR/DZE_Hotfix_1.0.6.1A/groups/init.sqf b/Server Files/MPMissions/DayZ_Epoch_10.Mountains_ACR/DZE_Hotfix_1.0.6.1A/groups/init.sqf new file mode 100644 index 000000000..6a61f5db4 --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_10.Mountains_ACR/DZE_Hotfix_1.0.6.1A/groups/init.sqf @@ -0,0 +1,51 @@ +private ["_leader","_oldGroup","_savedGroup"]; + +uiSleep 1; +if (count (units group player) > 1) then { + [player] joinSilent grpNull; + diag_log "Clearing group"; +}; + +_savedGroup = (PVCDZ_plr_Login select 10) - [getPlayerUID player]; + +if (count _savedGroup > 0 && {!dayz_requireRadio or {dayz_requireRadio && "ItemRadio" in items player}}) then { + { + //Only auto join player into group if leader is in their savedGroup + _leader = leader _x; + if (getPlayerUID _leader in _savedGroup) exitWith { + _oldGroup = group player; + [player] joinSilent _x; + if (count (units _oldGroup) == 0) then {deleteGroup _oldGroup;}; + format[localize "STR_EPOCH_REJOINED_GROUP",name _leader] call dayz_rollingMessages; + + // Update saved group in DB + PVDZ_Server_UpdateGroup = [1,player]; + publicVariableServer "PVDZ_Server_UpdateGroup"; + }; + } count allGroups; +}; + +dayz_oldBodyCount = 0; +dayz_oldGroupCount = 0; +dayz_oldMemberCount = 0; +dayz_disbandGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\disband.sqf"; +dayz_filterGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\filter.sqf"; +dayz_getCrew = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\getCrew.sqf"; +dayz_getPlayer = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\getPlayer.sqf"; +dayz_inviteToGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\invite.sqf"; +dayz_joinGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\join.sqf"; +dayz_kickFromGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\kick.sqf"; +dayz_leaveGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\leave.sqf"; +dayz_openGroupDialog = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\open.sqf"; +dayz_pickGroupMember = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\pickGroupMember.sqf"; +dayz_pickPlayer = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\pickPlayer.sqf"; +dayz_promotePlayer = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\promote.sqf"; +dayz_rejectGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\reject.sqf"; +dayz_groupInit = true; + +//Initialize as script data type, no scriptNull in A2 +dayz_groupDisbandThread = 0 spawn {}; +dayz_groupLeaveThread = 0 spawn {}; +dayz_groupTags = 0 spawn {}; + +execVM "DZE_Hotfix_1.0.6.1A\groups\groupMarkers.sqf"; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_10.Mountains_ACR/DZE_Hotfix_1.0.6.1A/init/compiles.sqf b/Server Files/MPMissions/DayZ_Epoch_10.Mountains_ACR/DZE_Hotfix_1.0.6.1A/init/compiles.sqf new file mode 100644 index 000000000..e0a4a3c84 --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_10.Mountains_ACR/DZE_Hotfix_1.0.6.1A/init/compiles.sqf @@ -0,0 +1,47 @@ +if (!isDedicated) then { + dayz_NutritionSystem = { + private ["_type","_baseRegen","_nutrition","_calorieCount","_hungerCount","_thirstCount","_tempCount","_Thirst","_Hunger","_bloodregen","_golbalNutrition"]; + _type = _this select 0; + _baseRegen = _this select 1; + _nutrition = _this select 2; + _calorieCount = ((_this select 2) select 0); + _hungerCount = ((_this select 2) select 1); + _thirstCount = ((_this select 2) select 2); + _tempCount = ((_this select 2) select 3); + if (_calorieCount > 0) then { + _hungerCount = _hungerCount + (SleepFood * (((ln ((_calorieCount / 3610) * 100)) * (1 - (dayz_hunger / SleepFood))) / 100)); + _thirstCount = _thirstCount + (SleepWater * (((ln ((_calorieCount / 3610) * 100)) * (1 - (dayz_thirst / SleepWater))) / 100)); + }; + switch (_type) do { + case "FoodDrink": { + if (_hungerCount > 0) then { + if (dayz_hunger > _hungerCount) then { + dayz_hunger = dayz_hunger - (_hungerCount); + } else { + dayz_hunger = 0; + }; + }; + if (_thirstCount > 0) then { + if (dayz_thirst > _thirstCount) then { + dayz_thirst = dayz_thirst - _thirstCount; + } else { + dayz_thirst = 0; + }; + }; + if (_tempCount > 0) then { dayz_temperatur = dayz_temperatur + _tempCount; }; + if (_calorieCount > 0) then { dayz_nutrition = dayz_nutrition + _calorieCount; }; + if (_baseRegen > 0) then { r_player_bloodregen = r_player_bloodregen + _baseRegen; }; + }; + case "Working": { + if (_calorieCount > 0) then { dayz_nutrition = dayz_nutrition - (_calorieCount / ((DZE_NutritionDivisor select 0) max 0.1)); }; + if (_thirstCount > 0) then { dayz_thirst = dayz_thirst + (_thirstCount / ((DZE_NutritionDivisor select 1) max 0.1)); }; + if (_hungerCount > 0) then { dayz_hunger = dayz_hunger + (_hungerCount / ((DZE_NutritionDivisor select 2) max 0.1)); }; + if (_tempCount > 0) then { dayz_temperatur = dayz_temperatur + (_tempCount / ((DZE_NutritionDivisor select 3) max 0.1)); }; + }; + }; + dayz_thirst = (dayz_thirst min SleepWater) max 0; + dayz_hunger = (dayz_hunger min SleepFood) max 0; + dayz_temperatur = (dayz_temperatur min dayz_temperaturmax) max dayz_temperaturmin; + }; + Diag_Log "DZE_Hotfix_1.0.6.1A: dayz_NutritionSystem patched"; +}; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_10.Mountains_ACR/DZE_Hotfix_1.0.6.1A/system/progress_monitor.sqf b/Server Files/MPMissions/DayZ_Epoch_10.Mountains_ACR/DZE_Hotfix_1.0.6.1A/system/progress_monitor.sqf new file mode 100644 index 000000000..5660c9e1b --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_10.Mountains_ACR/DZE_Hotfix_1.0.6.1A/system/progress_monitor.sqf @@ -0,0 +1,43 @@ +private["_display","_control1","_control2","_watermark"]; +disableSerialization; +//diag_log "DEBUG: loadscreen guard started."; + +_timeoutStart=diag_ticktime; +while {true} do { + if (diag_ticktime - _timeoutStart >= 120) exitWith { + 1 cutText [localize "str_player_login_timeout", "PLAIN DOWN"]; + uiSleep 5; + endMission "END1"; + }; + if ((!isNil "Dayz_loginCompleted") and {(Dayz_loginCompleted)}) exitWith { + //diag_log [ __FILE__, __LINE__, "End loop"]; + + // Logo watermark: adding a logo in the bottom left corner of the screen with the server name + if (!isNil "dayZ_serverName") then { + 5 cutRsc ["wm_disp","PLAIN"]; + _watermark = (uiNamespace getVariable "wm_disp") displayCtrl 1; + _watermark ctrlSetText dayZ_serverName; + if (profileNamespace getVariable ["streamerMode",0] == 1) then {_watermark ctrlShow false;}; + }; + + if (dayz_enableRules && (profileNamespace getVariable ["streamerMode",0] == 0)) then { + dayz_rulesHandle = execVM "rules.sqf"; + }; + + if (dayz_groupSystem) then {execVM "DZE_Hotfix_1.0.6.1A\groups\init.sqf";}; + Diag_Log "DZE_Hotfix_1.0.6.1A: dayz_groupSystem patched"; + }; + _display = uiNameSpace getVariable "BIS_loadingScreen"; + if (!isNil "_display") then { + if (dayz_loadScreenMsg != "" ) then { + _control1 = _display displayctrl 8400; + _control1 ctrlSetText dayz_loadScreenMsg; + }; + _control2 = _display displayctrl 102; + _control2 ctrlSetText format["%1",floor(diag_ticktime - _timeoutStart)]; + }; + + uiSleep 0.2; + //diag_log [ __FILE__, __LINE__, "Looping..."]; +}; + diff --git a/Server Files/MPMissions/DayZ_Epoch_10.Mountains_ACR/init.sqf b/Server Files/MPMissions/DayZ_Epoch_10.Mountains_ACR/init.sqf index 9f5e0a210..36fa8032a 100644 --- a/Server Files/MPMissions/DayZ_Epoch_10.Mountains_ACR/init.sqf +++ b/Server Files/MPMissions/DayZ_Epoch_10.Mountains_ACR/init.sqf @@ -79,12 +79,16 @@ onPreloadStarted "diag_log [diag_tickTime,'onPreloadStarted']; dayz_preloadFinis onPreloadFinished "diag_log [diag_tickTime,'onPreloadFinished']; dayz_preloadFinished = true;"; with uiNameSpace do {RscDMSLoad=nil;}; // autologon at next logon +_verCheck = (getText (configFile >> "CfgMods" >> "DayZ" >> "version") == "DayZ Epoch 1.0.6.1"); if (!isDedicated) then { - enableSaving [false, false]; - startLoadingScreen ["","RscDisplayLoadCustom"]; + enableSaving [false, false]; startLoadingScreen ["","RscDisplayLoadCustom"]; progressLoadingScreen 0; dayz_loadScreenMsg = localize 'str_login_missionFile'; - progress_monitor = [] execVM "\z\addons\dayz_code\system\progress_monitor.sqf"; + if (_verCheck) then { + progress_monitor = [] execVM "DZE_Hotfix_1.0.6.1A\system\progress_monitor.sqf"; + } else { + progress_monitor = [] execVM "\z\addons\dayz_code\system\progress_monitor.sqf"; + }; 0 cutText ['','BLACK',0]; 0 fadeSound 0; 0 fadeMusic 0; @@ -98,6 +102,9 @@ progressLoadingScreen 0.1; call compile preprocessFileLineNumbers "\z\addons\dayz_code\medical\setup_functions_med.sqf"; progressLoadingScreen 0.15; call compile preprocessFileLineNumbers "\z\addons\dayz_code\init\compiles.sqf"; +if (_verCheck) then { + #include "DZE_Hotfix_1.0.6.1A\init\compiles.sqf" +}; progressLoadingScreen 0.25; call compile preprocessFileLineNumbers "server_traders.sqf"; call compile preprocessFileLineNumbers "\z\addons\dayz_code\system\mission\mountains_acr.sqf"; //Add trader city objects locally on every machine early diff --git a/Server Files/MPMissions/DayZ_Epoch_11.Chernarus/DZE_Hotfix_1.0.6.1A/groups/groupMarkers.sqf b/Server Files/MPMissions/DayZ_Epoch_11.Chernarus/DZE_Hotfix_1.0.6.1A/groups/groupMarkers.sqf new file mode 100644 index 000000000..e43cffbac --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_11.Chernarus/DZE_Hotfix_1.0.6.1A/groups/groupMarkers.sqf @@ -0,0 +1,75 @@ +private ["_bodyCount","_count","_group","_hasGPS","_index","_inGroup","_marker","_markBody","_markGroup","_markSelf","_name","_pos","_self","_vehicle"]; + +while {true} do { + _group = player call dayz_filterGroup; + _inGroup = count _group > 1; + + if (dayz_requireRadio && {_inGroup} && {!("ItemRadio" in items player)}) then { + [player] joinSilent grpNull; + if (!isNull findDisplay 80000) then {findDisplay 80000 closeDisplay 2;}; + terminate dayz_groupTags; + 80000 cutText ["","PLAIN"]; + localize "STR_EPOCH_LOST_RADIO_CONTACT" call dayz_rollingMessages; + } else { + if (_inGroup && scriptDone dayz_groupTags) then { + dayz_groupTags = execVM "DZE_Hotfix_1.0.6.1A\groups\groupTags.sqf"; + }; + + if (visibleMap or !isNull (uiNamespace getVariable["BIS_RscMiniMap",displayNull])) then { + _hasGPS = "ItemGPS" in items player; + _markBody = (dayz_markBody == 1 or (dayz_markBody == 2 && _hasGPS)); + _markGroup = (dayz_markGroup == 1 or (dayz_markGroup == 2 && _hasGPS)); + _markSelf = (dayz_markSelf == 1 or (dayz_markSelf == 2 && _hasGPS)); + + _index = 0; + { + _self = _x == player; + _vehicle = vehicle _x; + if ((_self or _markGroup) && (!_self or _markSelf) && (effectiveCommander _vehicle == _x)) then { + _pos = [_x] call FNC_GetPos; + deleteMarkerLocal format["groupMember%1",_index]; + _marker = createMarkerLocal [format["groupMember%1",_index],_pos]; + _marker setMarkerTypeLocal "DestroyedVehicle"; + _marker setMarkerTextLocal format ["%1",if (_vehicle == _x) then {name _x} else {_vehicle call dayz_getCrew}]; + _marker setMarkerColorLocal "ColorGreen"; + } else { + deleteMarkerLocal format["groupMember%1",_index]; + }; + _index = _index + 1; + } count _group; + + // Remove markers for group members that left + _count = count _group; + if (dayz_oldMemberCount > _count) then { + for "_i" from _count to dayz_oldMemberCount do {deleteMarkerLocal format["groupMember%1",_i];}; + }; + dayz_oldMemberCount = _count; + + if (_markBody) then { + _bodyCount = 0; + _name = name player; + { + if (_x getVariable["bodyName",""] == _name) then { + _bodyCount = _bodyCount + 1; + _pos = [_x] call FNC_GetPos; + deleteMarkerLocal format["MyBody%1",_bodyCount]; + _marker = createMarkerLocal [format["MyBody%1",_bodyCount],_pos]; + _marker setMarkerTypeLocal "DestroyedVehicle"; + _marker setMarkerTextLocal localize "STR_EPOCH_RIP"; + _marker setMarkerColorLocal "ColorRed"; + }; + } count allDead; + + // Remove markers for bodies that were deleted + if (dayz_oldBodyCount > _bodyCount) then { + for "_i" from _bodyCount to dayz_oldBodyCount do {deleteMarkerLocal format["MyBody%1",_i];}; + }; + dayz_oldBodyCount = _bodyCount; + } else { + for "_i" from 1 to dayz_oldBodyCount do {deleteMarkerLocal format["MyBody%1",_i];}; + }; + }; + }; + + uiSleep 1; +}; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_11.Chernarus/DZE_Hotfix_1.0.6.1A/groups/groupTags.sqf b/Server Files/MPMissions/DayZ_Epoch_11.Chernarus/DZE_Hotfix_1.0.6.1A/groups/groupTags.sqf new file mode 100644 index 000000000..0e9d72539 --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_11.Chernarus/DZE_Hotfix_1.0.6.1A/groups/groupTags.sqf @@ -0,0 +1,52 @@ +#define DRAW_TAGS (!visibleMap && count units group player > 1) //Use && cameraView != "GROUP" if tactical view is allowed (blocked by default) +private ["_display","_distance","_group","_icon","_index","_pos","_scale","_screen","_text"]; +disableSerialization; + +_refresh = { + _group = player call dayz_filterGroup; + + _display = uiNamespace getVariable "DZ_GroupTags"; + _index = 0; + { + _pos = [_x] call FNC_GetPos; + _distance = _pos distance player; + _icon = _display displayCtrl (100 + _index); + if (_distance > 1 && _distance < 2500 && vehicle _x != vehicle player) then { + _pos set [2,(_pos select 2) + 1.5]; + _screen = worldToScreen _pos; + _text = composeText [image "\ca\ui\data\igui_side_unknown_ca.paa"," ",if (dayz_groupNameTags) then {name _x} else {""}]; + if (count _screen > 1) then { + _scale = if (_distance < 200) then {.3} else {1 min ((1 - (_distance - 3) / 15) max .3)}; + _icon ctrlSetStructuredText _text; + _icon ctrlSetPosition [(_screen select 0),(_screen select 1),.99,.65]; + _icon ctrlSetScale _scale; + _icon ctrlSetFade ((1 - _scale) / 2); + _icon ctrlCommit 0; + _icon ctrlShow true; + } else { + _icon ctrlShow false; + }; + } else { + _icon ctrlShow false; + }; + _index = _index + 1; + } count _group; + + if (dayz_oldGroupCount > count _group) then { + _display displayCtrl (100 + _index) ctrlShow false; + }; + + dayz_oldGroupCount = count _group; +}; + +while {true} do { + waitUntil {uiSleep 1; DRAW_TAGS}; + 80000 cutRsc ["DZ_GroupTags","PLAIN"]; + + while {DRAW_TAGS} do { + call _refresh; //Must be called to finish in current frame + uiSleep 0.01; + }; + + 80000 cutText ["","PLAIN"]; +}; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_11.Chernarus/DZE_Hotfix_1.0.6.1A/groups/init.sqf b/Server Files/MPMissions/DayZ_Epoch_11.Chernarus/DZE_Hotfix_1.0.6.1A/groups/init.sqf new file mode 100644 index 000000000..6a61f5db4 --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_11.Chernarus/DZE_Hotfix_1.0.6.1A/groups/init.sqf @@ -0,0 +1,51 @@ +private ["_leader","_oldGroup","_savedGroup"]; + +uiSleep 1; +if (count (units group player) > 1) then { + [player] joinSilent grpNull; + diag_log "Clearing group"; +}; + +_savedGroup = (PVCDZ_plr_Login select 10) - [getPlayerUID player]; + +if (count _savedGroup > 0 && {!dayz_requireRadio or {dayz_requireRadio && "ItemRadio" in items player}}) then { + { + //Only auto join player into group if leader is in their savedGroup + _leader = leader _x; + if (getPlayerUID _leader in _savedGroup) exitWith { + _oldGroup = group player; + [player] joinSilent _x; + if (count (units _oldGroup) == 0) then {deleteGroup _oldGroup;}; + format[localize "STR_EPOCH_REJOINED_GROUP",name _leader] call dayz_rollingMessages; + + // Update saved group in DB + PVDZ_Server_UpdateGroup = [1,player]; + publicVariableServer "PVDZ_Server_UpdateGroup"; + }; + } count allGroups; +}; + +dayz_oldBodyCount = 0; +dayz_oldGroupCount = 0; +dayz_oldMemberCount = 0; +dayz_disbandGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\disband.sqf"; +dayz_filterGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\filter.sqf"; +dayz_getCrew = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\getCrew.sqf"; +dayz_getPlayer = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\getPlayer.sqf"; +dayz_inviteToGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\invite.sqf"; +dayz_joinGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\join.sqf"; +dayz_kickFromGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\kick.sqf"; +dayz_leaveGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\leave.sqf"; +dayz_openGroupDialog = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\open.sqf"; +dayz_pickGroupMember = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\pickGroupMember.sqf"; +dayz_pickPlayer = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\pickPlayer.sqf"; +dayz_promotePlayer = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\promote.sqf"; +dayz_rejectGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\reject.sqf"; +dayz_groupInit = true; + +//Initialize as script data type, no scriptNull in A2 +dayz_groupDisbandThread = 0 spawn {}; +dayz_groupLeaveThread = 0 spawn {}; +dayz_groupTags = 0 spawn {}; + +execVM "DZE_Hotfix_1.0.6.1A\groups\groupMarkers.sqf"; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_11.Chernarus/DZE_Hotfix_1.0.6.1A/init/compiles.sqf b/Server Files/MPMissions/DayZ_Epoch_11.Chernarus/DZE_Hotfix_1.0.6.1A/init/compiles.sqf new file mode 100644 index 000000000..e0a4a3c84 --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_11.Chernarus/DZE_Hotfix_1.0.6.1A/init/compiles.sqf @@ -0,0 +1,47 @@ +if (!isDedicated) then { + dayz_NutritionSystem = { + private ["_type","_baseRegen","_nutrition","_calorieCount","_hungerCount","_thirstCount","_tempCount","_Thirst","_Hunger","_bloodregen","_golbalNutrition"]; + _type = _this select 0; + _baseRegen = _this select 1; + _nutrition = _this select 2; + _calorieCount = ((_this select 2) select 0); + _hungerCount = ((_this select 2) select 1); + _thirstCount = ((_this select 2) select 2); + _tempCount = ((_this select 2) select 3); + if (_calorieCount > 0) then { + _hungerCount = _hungerCount + (SleepFood * (((ln ((_calorieCount / 3610) * 100)) * (1 - (dayz_hunger / SleepFood))) / 100)); + _thirstCount = _thirstCount + (SleepWater * (((ln ((_calorieCount / 3610) * 100)) * (1 - (dayz_thirst / SleepWater))) / 100)); + }; + switch (_type) do { + case "FoodDrink": { + if (_hungerCount > 0) then { + if (dayz_hunger > _hungerCount) then { + dayz_hunger = dayz_hunger - (_hungerCount); + } else { + dayz_hunger = 0; + }; + }; + if (_thirstCount > 0) then { + if (dayz_thirst > _thirstCount) then { + dayz_thirst = dayz_thirst - _thirstCount; + } else { + dayz_thirst = 0; + }; + }; + if (_tempCount > 0) then { dayz_temperatur = dayz_temperatur + _tempCount; }; + if (_calorieCount > 0) then { dayz_nutrition = dayz_nutrition + _calorieCount; }; + if (_baseRegen > 0) then { r_player_bloodregen = r_player_bloodregen + _baseRegen; }; + }; + case "Working": { + if (_calorieCount > 0) then { dayz_nutrition = dayz_nutrition - (_calorieCount / ((DZE_NutritionDivisor select 0) max 0.1)); }; + if (_thirstCount > 0) then { dayz_thirst = dayz_thirst + (_thirstCount / ((DZE_NutritionDivisor select 1) max 0.1)); }; + if (_hungerCount > 0) then { dayz_hunger = dayz_hunger + (_hungerCount / ((DZE_NutritionDivisor select 2) max 0.1)); }; + if (_tempCount > 0) then { dayz_temperatur = dayz_temperatur + (_tempCount / ((DZE_NutritionDivisor select 3) max 0.1)); }; + }; + }; + dayz_thirst = (dayz_thirst min SleepWater) max 0; + dayz_hunger = (dayz_hunger min SleepFood) max 0; + dayz_temperatur = (dayz_temperatur min dayz_temperaturmax) max dayz_temperaturmin; + }; + Diag_Log "DZE_Hotfix_1.0.6.1A: dayz_NutritionSystem patched"; +}; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_11.Chernarus/DZE_Hotfix_1.0.6.1A/system/progress_monitor.sqf b/Server Files/MPMissions/DayZ_Epoch_11.Chernarus/DZE_Hotfix_1.0.6.1A/system/progress_monitor.sqf new file mode 100644 index 000000000..5660c9e1b --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_11.Chernarus/DZE_Hotfix_1.0.6.1A/system/progress_monitor.sqf @@ -0,0 +1,43 @@ +private["_display","_control1","_control2","_watermark"]; +disableSerialization; +//diag_log "DEBUG: loadscreen guard started."; + +_timeoutStart=diag_ticktime; +while {true} do { + if (diag_ticktime - _timeoutStart >= 120) exitWith { + 1 cutText [localize "str_player_login_timeout", "PLAIN DOWN"]; + uiSleep 5; + endMission "END1"; + }; + if ((!isNil "Dayz_loginCompleted") and {(Dayz_loginCompleted)}) exitWith { + //diag_log [ __FILE__, __LINE__, "End loop"]; + + // Logo watermark: adding a logo in the bottom left corner of the screen with the server name + if (!isNil "dayZ_serverName") then { + 5 cutRsc ["wm_disp","PLAIN"]; + _watermark = (uiNamespace getVariable "wm_disp") displayCtrl 1; + _watermark ctrlSetText dayZ_serverName; + if (profileNamespace getVariable ["streamerMode",0] == 1) then {_watermark ctrlShow false;}; + }; + + if (dayz_enableRules && (profileNamespace getVariable ["streamerMode",0] == 0)) then { + dayz_rulesHandle = execVM "rules.sqf"; + }; + + if (dayz_groupSystem) then {execVM "DZE_Hotfix_1.0.6.1A\groups\init.sqf";}; + Diag_Log "DZE_Hotfix_1.0.6.1A: dayz_groupSystem patched"; + }; + _display = uiNameSpace getVariable "BIS_loadingScreen"; + if (!isNil "_display") then { + if (dayz_loadScreenMsg != "" ) then { + _control1 = _display displayctrl 8400; + _control1 ctrlSetText dayz_loadScreenMsg; + }; + _control2 = _display displayctrl 102; + _control2 ctrlSetText format["%1",floor(diag_ticktime - _timeoutStart)]; + }; + + uiSleep 0.2; + //diag_log [ __FILE__, __LINE__, "Looping..."]; +}; + diff --git a/Server Files/MPMissions/DayZ_Epoch_11.Chernarus/init.sqf b/Server Files/MPMissions/DayZ_Epoch_11.Chernarus/init.sqf index 466555359..dd94f633b 100644 --- a/Server Files/MPMissions/DayZ_Epoch_11.Chernarus/init.sqf +++ b/Server Files/MPMissions/DayZ_Epoch_11.Chernarus/init.sqf @@ -71,7 +71,7 @@ spawnShoremode = 1; // Random spawn locations 1 = on shores, 0 = inland EpochUseEvents = false; //Enable event scheduler. Define custom scripts in dayz_server\modules to run on a schedule. EpochEvents = [["any","any","any","any",30,"crash_spawner"],["any","any","any","any",0,"crash_spawner"],["any","any","any","any",15,"supply_drop"]]; // EPOCH CONFIG VARIABLES END // - +dayz_groupSystem = true; diag_log 'dayz_preloadFinished reset'; dayz_preloadFinished=nil; @@ -79,12 +79,16 @@ onPreloadStarted "diag_log [diag_tickTime,'onPreloadStarted']; dayz_preloadFinis onPreloadFinished "diag_log [diag_tickTime,'onPreloadFinished']; dayz_preloadFinished = true;"; with uiNameSpace do {RscDMSLoad=nil;}; // autologon at next logon +_verCheck = (getText (configFile >> "CfgMods" >> "DayZ" >> "version") == "DayZ Epoch 1.0.6.1"); if (!isDedicated) then { - enableSaving [false, false]; - startLoadingScreen ["","RscDisplayLoadCustom"]; + enableSaving [false, false]; startLoadingScreen ["","RscDisplayLoadCustom"]; progressLoadingScreen 0; dayz_loadScreenMsg = localize 'str_login_missionFile'; - progress_monitor = [] execVM "\z\addons\dayz_code\system\progress_monitor.sqf"; + if (_verCheck) then { + progress_monitor = [] execVM "DZE_Hotfix_1.0.6.1A\system\progress_monitor.sqf"; + } else { + progress_monitor = [] execVM "\z\addons\dayz_code\system\progress_monitor.sqf"; + }; 0 cutText ['','BLACK',0]; 0 fadeSound 0; 0 fadeMusic 0; @@ -98,6 +102,9 @@ progressLoadingScreen 0.1; call compile preprocessFileLineNumbers "\z\addons\dayz_code\medical\setup_functions_med.sqf"; progressLoadingScreen 0.15; call compile preprocessFileLineNumbers "\z\addons\dayz_code\init\compiles.sqf"; +if (_verCheck) then { + #include "DZE_Hotfix_1.0.6.1A\init\compiles.sqf" +}; progressLoadingScreen 0.25; call compile preprocessFileLineNumbers "server_traders.sqf"; call compile preprocessFileLineNumbers "\z\addons\dayz_code\system\mission\chernarus11.sqf"; //Add trader city objects locally on every machine early diff --git a/Server Files/MPMissions/DayZ_Epoch_12.isladuala/DZE_Hotfix_1.0.6.1A/groups/groupMarkers.sqf b/Server Files/MPMissions/DayZ_Epoch_12.isladuala/DZE_Hotfix_1.0.6.1A/groups/groupMarkers.sqf new file mode 100644 index 000000000..e43cffbac --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_12.isladuala/DZE_Hotfix_1.0.6.1A/groups/groupMarkers.sqf @@ -0,0 +1,75 @@ +private ["_bodyCount","_count","_group","_hasGPS","_index","_inGroup","_marker","_markBody","_markGroup","_markSelf","_name","_pos","_self","_vehicle"]; + +while {true} do { + _group = player call dayz_filterGroup; + _inGroup = count _group > 1; + + if (dayz_requireRadio && {_inGroup} && {!("ItemRadio" in items player)}) then { + [player] joinSilent grpNull; + if (!isNull findDisplay 80000) then {findDisplay 80000 closeDisplay 2;}; + terminate dayz_groupTags; + 80000 cutText ["","PLAIN"]; + localize "STR_EPOCH_LOST_RADIO_CONTACT" call dayz_rollingMessages; + } else { + if (_inGroup && scriptDone dayz_groupTags) then { + dayz_groupTags = execVM "DZE_Hotfix_1.0.6.1A\groups\groupTags.sqf"; + }; + + if (visibleMap or !isNull (uiNamespace getVariable["BIS_RscMiniMap",displayNull])) then { + _hasGPS = "ItemGPS" in items player; + _markBody = (dayz_markBody == 1 or (dayz_markBody == 2 && _hasGPS)); + _markGroup = (dayz_markGroup == 1 or (dayz_markGroup == 2 && _hasGPS)); + _markSelf = (dayz_markSelf == 1 or (dayz_markSelf == 2 && _hasGPS)); + + _index = 0; + { + _self = _x == player; + _vehicle = vehicle _x; + if ((_self or _markGroup) && (!_self or _markSelf) && (effectiveCommander _vehicle == _x)) then { + _pos = [_x] call FNC_GetPos; + deleteMarkerLocal format["groupMember%1",_index]; + _marker = createMarkerLocal [format["groupMember%1",_index],_pos]; + _marker setMarkerTypeLocal "DestroyedVehicle"; + _marker setMarkerTextLocal format ["%1",if (_vehicle == _x) then {name _x} else {_vehicle call dayz_getCrew}]; + _marker setMarkerColorLocal "ColorGreen"; + } else { + deleteMarkerLocal format["groupMember%1",_index]; + }; + _index = _index + 1; + } count _group; + + // Remove markers for group members that left + _count = count _group; + if (dayz_oldMemberCount > _count) then { + for "_i" from _count to dayz_oldMemberCount do {deleteMarkerLocal format["groupMember%1",_i];}; + }; + dayz_oldMemberCount = _count; + + if (_markBody) then { + _bodyCount = 0; + _name = name player; + { + if (_x getVariable["bodyName",""] == _name) then { + _bodyCount = _bodyCount + 1; + _pos = [_x] call FNC_GetPos; + deleteMarkerLocal format["MyBody%1",_bodyCount]; + _marker = createMarkerLocal [format["MyBody%1",_bodyCount],_pos]; + _marker setMarkerTypeLocal "DestroyedVehicle"; + _marker setMarkerTextLocal localize "STR_EPOCH_RIP"; + _marker setMarkerColorLocal "ColorRed"; + }; + } count allDead; + + // Remove markers for bodies that were deleted + if (dayz_oldBodyCount > _bodyCount) then { + for "_i" from _bodyCount to dayz_oldBodyCount do {deleteMarkerLocal format["MyBody%1",_i];}; + }; + dayz_oldBodyCount = _bodyCount; + } else { + for "_i" from 1 to dayz_oldBodyCount do {deleteMarkerLocal format["MyBody%1",_i];}; + }; + }; + }; + + uiSleep 1; +}; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_12.isladuala/DZE_Hotfix_1.0.6.1A/groups/groupTags.sqf b/Server Files/MPMissions/DayZ_Epoch_12.isladuala/DZE_Hotfix_1.0.6.1A/groups/groupTags.sqf new file mode 100644 index 000000000..0e9d72539 --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_12.isladuala/DZE_Hotfix_1.0.6.1A/groups/groupTags.sqf @@ -0,0 +1,52 @@ +#define DRAW_TAGS (!visibleMap && count units group player > 1) //Use && cameraView != "GROUP" if tactical view is allowed (blocked by default) +private ["_display","_distance","_group","_icon","_index","_pos","_scale","_screen","_text"]; +disableSerialization; + +_refresh = { + _group = player call dayz_filterGroup; + + _display = uiNamespace getVariable "DZ_GroupTags"; + _index = 0; + { + _pos = [_x] call FNC_GetPos; + _distance = _pos distance player; + _icon = _display displayCtrl (100 + _index); + if (_distance > 1 && _distance < 2500 && vehicle _x != vehicle player) then { + _pos set [2,(_pos select 2) + 1.5]; + _screen = worldToScreen _pos; + _text = composeText [image "\ca\ui\data\igui_side_unknown_ca.paa"," ",if (dayz_groupNameTags) then {name _x} else {""}]; + if (count _screen > 1) then { + _scale = if (_distance < 200) then {.3} else {1 min ((1 - (_distance - 3) / 15) max .3)}; + _icon ctrlSetStructuredText _text; + _icon ctrlSetPosition [(_screen select 0),(_screen select 1),.99,.65]; + _icon ctrlSetScale _scale; + _icon ctrlSetFade ((1 - _scale) / 2); + _icon ctrlCommit 0; + _icon ctrlShow true; + } else { + _icon ctrlShow false; + }; + } else { + _icon ctrlShow false; + }; + _index = _index + 1; + } count _group; + + if (dayz_oldGroupCount > count _group) then { + _display displayCtrl (100 + _index) ctrlShow false; + }; + + dayz_oldGroupCount = count _group; +}; + +while {true} do { + waitUntil {uiSleep 1; DRAW_TAGS}; + 80000 cutRsc ["DZ_GroupTags","PLAIN"]; + + while {DRAW_TAGS} do { + call _refresh; //Must be called to finish in current frame + uiSleep 0.01; + }; + + 80000 cutText ["","PLAIN"]; +}; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_12.isladuala/DZE_Hotfix_1.0.6.1A/groups/init.sqf b/Server Files/MPMissions/DayZ_Epoch_12.isladuala/DZE_Hotfix_1.0.6.1A/groups/init.sqf new file mode 100644 index 000000000..6a61f5db4 --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_12.isladuala/DZE_Hotfix_1.0.6.1A/groups/init.sqf @@ -0,0 +1,51 @@ +private ["_leader","_oldGroup","_savedGroup"]; + +uiSleep 1; +if (count (units group player) > 1) then { + [player] joinSilent grpNull; + diag_log "Clearing group"; +}; + +_savedGroup = (PVCDZ_plr_Login select 10) - [getPlayerUID player]; + +if (count _savedGroup > 0 && {!dayz_requireRadio or {dayz_requireRadio && "ItemRadio" in items player}}) then { + { + //Only auto join player into group if leader is in their savedGroup + _leader = leader _x; + if (getPlayerUID _leader in _savedGroup) exitWith { + _oldGroup = group player; + [player] joinSilent _x; + if (count (units _oldGroup) == 0) then {deleteGroup _oldGroup;}; + format[localize "STR_EPOCH_REJOINED_GROUP",name _leader] call dayz_rollingMessages; + + // Update saved group in DB + PVDZ_Server_UpdateGroup = [1,player]; + publicVariableServer "PVDZ_Server_UpdateGroup"; + }; + } count allGroups; +}; + +dayz_oldBodyCount = 0; +dayz_oldGroupCount = 0; +dayz_oldMemberCount = 0; +dayz_disbandGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\disband.sqf"; +dayz_filterGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\filter.sqf"; +dayz_getCrew = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\getCrew.sqf"; +dayz_getPlayer = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\getPlayer.sqf"; +dayz_inviteToGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\invite.sqf"; +dayz_joinGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\join.sqf"; +dayz_kickFromGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\kick.sqf"; +dayz_leaveGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\leave.sqf"; +dayz_openGroupDialog = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\open.sqf"; +dayz_pickGroupMember = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\pickGroupMember.sqf"; +dayz_pickPlayer = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\pickPlayer.sqf"; +dayz_promotePlayer = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\promote.sqf"; +dayz_rejectGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\reject.sqf"; +dayz_groupInit = true; + +//Initialize as script data type, no scriptNull in A2 +dayz_groupDisbandThread = 0 spawn {}; +dayz_groupLeaveThread = 0 spawn {}; +dayz_groupTags = 0 spawn {}; + +execVM "DZE_Hotfix_1.0.6.1A\groups\groupMarkers.sqf"; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_12.isladuala/DZE_Hotfix_1.0.6.1A/init/compiles.sqf b/Server Files/MPMissions/DayZ_Epoch_12.isladuala/DZE_Hotfix_1.0.6.1A/init/compiles.sqf new file mode 100644 index 000000000..e0a4a3c84 --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_12.isladuala/DZE_Hotfix_1.0.6.1A/init/compiles.sqf @@ -0,0 +1,47 @@ +if (!isDedicated) then { + dayz_NutritionSystem = { + private ["_type","_baseRegen","_nutrition","_calorieCount","_hungerCount","_thirstCount","_tempCount","_Thirst","_Hunger","_bloodregen","_golbalNutrition"]; + _type = _this select 0; + _baseRegen = _this select 1; + _nutrition = _this select 2; + _calorieCount = ((_this select 2) select 0); + _hungerCount = ((_this select 2) select 1); + _thirstCount = ((_this select 2) select 2); + _tempCount = ((_this select 2) select 3); + if (_calorieCount > 0) then { + _hungerCount = _hungerCount + (SleepFood * (((ln ((_calorieCount / 3610) * 100)) * (1 - (dayz_hunger / SleepFood))) / 100)); + _thirstCount = _thirstCount + (SleepWater * (((ln ((_calorieCount / 3610) * 100)) * (1 - (dayz_thirst / SleepWater))) / 100)); + }; + switch (_type) do { + case "FoodDrink": { + if (_hungerCount > 0) then { + if (dayz_hunger > _hungerCount) then { + dayz_hunger = dayz_hunger - (_hungerCount); + } else { + dayz_hunger = 0; + }; + }; + if (_thirstCount > 0) then { + if (dayz_thirst > _thirstCount) then { + dayz_thirst = dayz_thirst - _thirstCount; + } else { + dayz_thirst = 0; + }; + }; + if (_tempCount > 0) then { dayz_temperatur = dayz_temperatur + _tempCount; }; + if (_calorieCount > 0) then { dayz_nutrition = dayz_nutrition + _calorieCount; }; + if (_baseRegen > 0) then { r_player_bloodregen = r_player_bloodregen + _baseRegen; }; + }; + case "Working": { + if (_calorieCount > 0) then { dayz_nutrition = dayz_nutrition - (_calorieCount / ((DZE_NutritionDivisor select 0) max 0.1)); }; + if (_thirstCount > 0) then { dayz_thirst = dayz_thirst + (_thirstCount / ((DZE_NutritionDivisor select 1) max 0.1)); }; + if (_hungerCount > 0) then { dayz_hunger = dayz_hunger + (_hungerCount / ((DZE_NutritionDivisor select 2) max 0.1)); }; + if (_tempCount > 0) then { dayz_temperatur = dayz_temperatur + (_tempCount / ((DZE_NutritionDivisor select 3) max 0.1)); }; + }; + }; + dayz_thirst = (dayz_thirst min SleepWater) max 0; + dayz_hunger = (dayz_hunger min SleepFood) max 0; + dayz_temperatur = (dayz_temperatur min dayz_temperaturmax) max dayz_temperaturmin; + }; + Diag_Log "DZE_Hotfix_1.0.6.1A: dayz_NutritionSystem patched"; +}; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_12.isladuala/DZE_Hotfix_1.0.6.1A/system/progress_monitor.sqf b/Server Files/MPMissions/DayZ_Epoch_12.isladuala/DZE_Hotfix_1.0.6.1A/system/progress_monitor.sqf new file mode 100644 index 000000000..5660c9e1b --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_12.isladuala/DZE_Hotfix_1.0.6.1A/system/progress_monitor.sqf @@ -0,0 +1,43 @@ +private["_display","_control1","_control2","_watermark"]; +disableSerialization; +//diag_log "DEBUG: loadscreen guard started."; + +_timeoutStart=diag_ticktime; +while {true} do { + if (diag_ticktime - _timeoutStart >= 120) exitWith { + 1 cutText [localize "str_player_login_timeout", "PLAIN DOWN"]; + uiSleep 5; + endMission "END1"; + }; + if ((!isNil "Dayz_loginCompleted") and {(Dayz_loginCompleted)}) exitWith { + //diag_log [ __FILE__, __LINE__, "End loop"]; + + // Logo watermark: adding a logo in the bottom left corner of the screen with the server name + if (!isNil "dayZ_serverName") then { + 5 cutRsc ["wm_disp","PLAIN"]; + _watermark = (uiNamespace getVariable "wm_disp") displayCtrl 1; + _watermark ctrlSetText dayZ_serverName; + if (profileNamespace getVariable ["streamerMode",0] == 1) then {_watermark ctrlShow false;}; + }; + + if (dayz_enableRules && (profileNamespace getVariable ["streamerMode",0] == 0)) then { + dayz_rulesHandle = execVM "rules.sqf"; + }; + + if (dayz_groupSystem) then {execVM "DZE_Hotfix_1.0.6.1A\groups\init.sqf";}; + Diag_Log "DZE_Hotfix_1.0.6.1A: dayz_groupSystem patched"; + }; + _display = uiNameSpace getVariable "BIS_loadingScreen"; + if (!isNil "_display") then { + if (dayz_loadScreenMsg != "" ) then { + _control1 = _display displayctrl 8400; + _control1 ctrlSetText dayz_loadScreenMsg; + }; + _control2 = _display displayctrl 102; + _control2 ctrlSetText format["%1",floor(diag_ticktime - _timeoutStart)]; + }; + + uiSleep 0.2; + //diag_log [ __FILE__, __LINE__, "Looping..."]; +}; + diff --git a/Server Files/MPMissions/DayZ_Epoch_12.isladuala/init.sqf b/Server Files/MPMissions/DayZ_Epoch_12.isladuala/init.sqf index 47d91e27b..08c7af770 100644 --- a/Server Files/MPMissions/DayZ_Epoch_12.isladuala/init.sqf +++ b/Server Files/MPMissions/DayZ_Epoch_12.isladuala/init.sqf @@ -79,12 +79,16 @@ onPreloadStarted "diag_log [diag_tickTime,'onPreloadStarted']; dayz_preloadFinis onPreloadFinished "diag_log [diag_tickTime,'onPreloadFinished']; dayz_preloadFinished = true;"; with uiNameSpace do {RscDMSLoad=nil;}; // autologon at next logon +_verCheck = (getText (configFile >> "CfgMods" >> "DayZ" >> "version") == "DayZ Epoch 1.0.6.1"); if (!isDedicated) then { - enableSaving [false, false]; - startLoadingScreen ["","RscDisplayLoadCustom"]; + enableSaving [false, false]; startLoadingScreen ["","RscDisplayLoadCustom"]; progressLoadingScreen 0; dayz_loadScreenMsg = localize 'str_login_missionFile'; - progress_monitor = [] execVM "\z\addons\dayz_code\system\progress_monitor.sqf"; + if (_verCheck) then { + progress_monitor = [] execVM "DZE_Hotfix_1.0.6.1A\system\progress_monitor.sqf"; + } else { + progress_monitor = [] execVM "\z\addons\dayz_code\system\progress_monitor.sqf"; + }; 0 cutText ['','BLACK',0]; 0 fadeSound 0; 0 fadeMusic 0; @@ -98,6 +102,9 @@ progressLoadingScreen 0.1; call compile preprocessFileLineNumbers "\z\addons\dayz_code\medical\setup_functions_med.sqf"; progressLoadingScreen 0.15; call compile preprocessFileLineNumbers "\z\addons\dayz_code\init\compiles.sqf"; +if (_verCheck) then { + #include "DZE_Hotfix_1.0.6.1A\init\compiles.sqf" +}; progressLoadingScreen 0.25; call compile preprocessFileLineNumbers "server_traders.sqf"; call compile preprocessFileLineNumbers "\z\addons\dayz_code\system\mission\isladuala.sqf"; //Add trader city objects locally on every machine early diff --git a/Server Files/MPMissions/DayZ_Epoch_13.Tavi/DZE_Hotfix_1.0.6.1A/groups/groupMarkers.sqf b/Server Files/MPMissions/DayZ_Epoch_13.Tavi/DZE_Hotfix_1.0.6.1A/groups/groupMarkers.sqf new file mode 100644 index 000000000..e43cffbac --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_13.Tavi/DZE_Hotfix_1.0.6.1A/groups/groupMarkers.sqf @@ -0,0 +1,75 @@ +private ["_bodyCount","_count","_group","_hasGPS","_index","_inGroup","_marker","_markBody","_markGroup","_markSelf","_name","_pos","_self","_vehicle"]; + +while {true} do { + _group = player call dayz_filterGroup; + _inGroup = count _group > 1; + + if (dayz_requireRadio && {_inGroup} && {!("ItemRadio" in items player)}) then { + [player] joinSilent grpNull; + if (!isNull findDisplay 80000) then {findDisplay 80000 closeDisplay 2;}; + terminate dayz_groupTags; + 80000 cutText ["","PLAIN"]; + localize "STR_EPOCH_LOST_RADIO_CONTACT" call dayz_rollingMessages; + } else { + if (_inGroup && scriptDone dayz_groupTags) then { + dayz_groupTags = execVM "DZE_Hotfix_1.0.6.1A\groups\groupTags.sqf"; + }; + + if (visibleMap or !isNull (uiNamespace getVariable["BIS_RscMiniMap",displayNull])) then { + _hasGPS = "ItemGPS" in items player; + _markBody = (dayz_markBody == 1 or (dayz_markBody == 2 && _hasGPS)); + _markGroup = (dayz_markGroup == 1 or (dayz_markGroup == 2 && _hasGPS)); + _markSelf = (dayz_markSelf == 1 or (dayz_markSelf == 2 && _hasGPS)); + + _index = 0; + { + _self = _x == player; + _vehicle = vehicle _x; + if ((_self or _markGroup) && (!_self or _markSelf) && (effectiveCommander _vehicle == _x)) then { + _pos = [_x] call FNC_GetPos; + deleteMarkerLocal format["groupMember%1",_index]; + _marker = createMarkerLocal [format["groupMember%1",_index],_pos]; + _marker setMarkerTypeLocal "DestroyedVehicle"; + _marker setMarkerTextLocal format ["%1",if (_vehicle == _x) then {name _x} else {_vehicle call dayz_getCrew}]; + _marker setMarkerColorLocal "ColorGreen"; + } else { + deleteMarkerLocal format["groupMember%1",_index]; + }; + _index = _index + 1; + } count _group; + + // Remove markers for group members that left + _count = count _group; + if (dayz_oldMemberCount > _count) then { + for "_i" from _count to dayz_oldMemberCount do {deleteMarkerLocal format["groupMember%1",_i];}; + }; + dayz_oldMemberCount = _count; + + if (_markBody) then { + _bodyCount = 0; + _name = name player; + { + if (_x getVariable["bodyName",""] == _name) then { + _bodyCount = _bodyCount + 1; + _pos = [_x] call FNC_GetPos; + deleteMarkerLocal format["MyBody%1",_bodyCount]; + _marker = createMarkerLocal [format["MyBody%1",_bodyCount],_pos]; + _marker setMarkerTypeLocal "DestroyedVehicle"; + _marker setMarkerTextLocal localize "STR_EPOCH_RIP"; + _marker setMarkerColorLocal "ColorRed"; + }; + } count allDead; + + // Remove markers for bodies that were deleted + if (dayz_oldBodyCount > _bodyCount) then { + for "_i" from _bodyCount to dayz_oldBodyCount do {deleteMarkerLocal format["MyBody%1",_i];}; + }; + dayz_oldBodyCount = _bodyCount; + } else { + for "_i" from 1 to dayz_oldBodyCount do {deleteMarkerLocal format["MyBody%1",_i];}; + }; + }; + }; + + uiSleep 1; +}; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_13.Tavi/DZE_Hotfix_1.0.6.1A/groups/groupTags.sqf b/Server Files/MPMissions/DayZ_Epoch_13.Tavi/DZE_Hotfix_1.0.6.1A/groups/groupTags.sqf new file mode 100644 index 000000000..0e9d72539 --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_13.Tavi/DZE_Hotfix_1.0.6.1A/groups/groupTags.sqf @@ -0,0 +1,52 @@ +#define DRAW_TAGS (!visibleMap && count units group player > 1) //Use && cameraView != "GROUP" if tactical view is allowed (blocked by default) +private ["_display","_distance","_group","_icon","_index","_pos","_scale","_screen","_text"]; +disableSerialization; + +_refresh = { + _group = player call dayz_filterGroup; + + _display = uiNamespace getVariable "DZ_GroupTags"; + _index = 0; + { + _pos = [_x] call FNC_GetPos; + _distance = _pos distance player; + _icon = _display displayCtrl (100 + _index); + if (_distance > 1 && _distance < 2500 && vehicle _x != vehicle player) then { + _pos set [2,(_pos select 2) + 1.5]; + _screen = worldToScreen _pos; + _text = composeText [image "\ca\ui\data\igui_side_unknown_ca.paa"," ",if (dayz_groupNameTags) then {name _x} else {""}]; + if (count _screen > 1) then { + _scale = if (_distance < 200) then {.3} else {1 min ((1 - (_distance - 3) / 15) max .3)}; + _icon ctrlSetStructuredText _text; + _icon ctrlSetPosition [(_screen select 0),(_screen select 1),.99,.65]; + _icon ctrlSetScale _scale; + _icon ctrlSetFade ((1 - _scale) / 2); + _icon ctrlCommit 0; + _icon ctrlShow true; + } else { + _icon ctrlShow false; + }; + } else { + _icon ctrlShow false; + }; + _index = _index + 1; + } count _group; + + if (dayz_oldGroupCount > count _group) then { + _display displayCtrl (100 + _index) ctrlShow false; + }; + + dayz_oldGroupCount = count _group; +}; + +while {true} do { + waitUntil {uiSleep 1; DRAW_TAGS}; + 80000 cutRsc ["DZ_GroupTags","PLAIN"]; + + while {DRAW_TAGS} do { + call _refresh; //Must be called to finish in current frame + uiSleep 0.01; + }; + + 80000 cutText ["","PLAIN"]; +}; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_13.Tavi/DZE_Hotfix_1.0.6.1A/groups/init.sqf b/Server Files/MPMissions/DayZ_Epoch_13.Tavi/DZE_Hotfix_1.0.6.1A/groups/init.sqf new file mode 100644 index 000000000..6a61f5db4 --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_13.Tavi/DZE_Hotfix_1.0.6.1A/groups/init.sqf @@ -0,0 +1,51 @@ +private ["_leader","_oldGroup","_savedGroup"]; + +uiSleep 1; +if (count (units group player) > 1) then { + [player] joinSilent grpNull; + diag_log "Clearing group"; +}; + +_savedGroup = (PVCDZ_plr_Login select 10) - [getPlayerUID player]; + +if (count _savedGroup > 0 && {!dayz_requireRadio or {dayz_requireRadio && "ItemRadio" in items player}}) then { + { + //Only auto join player into group if leader is in their savedGroup + _leader = leader _x; + if (getPlayerUID _leader in _savedGroup) exitWith { + _oldGroup = group player; + [player] joinSilent _x; + if (count (units _oldGroup) == 0) then {deleteGroup _oldGroup;}; + format[localize "STR_EPOCH_REJOINED_GROUP",name _leader] call dayz_rollingMessages; + + // Update saved group in DB + PVDZ_Server_UpdateGroup = [1,player]; + publicVariableServer "PVDZ_Server_UpdateGroup"; + }; + } count allGroups; +}; + +dayz_oldBodyCount = 0; +dayz_oldGroupCount = 0; +dayz_oldMemberCount = 0; +dayz_disbandGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\disband.sqf"; +dayz_filterGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\filter.sqf"; +dayz_getCrew = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\getCrew.sqf"; +dayz_getPlayer = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\getPlayer.sqf"; +dayz_inviteToGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\invite.sqf"; +dayz_joinGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\join.sqf"; +dayz_kickFromGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\kick.sqf"; +dayz_leaveGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\leave.sqf"; +dayz_openGroupDialog = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\open.sqf"; +dayz_pickGroupMember = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\pickGroupMember.sqf"; +dayz_pickPlayer = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\pickPlayer.sqf"; +dayz_promotePlayer = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\promote.sqf"; +dayz_rejectGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\reject.sqf"; +dayz_groupInit = true; + +//Initialize as script data type, no scriptNull in A2 +dayz_groupDisbandThread = 0 spawn {}; +dayz_groupLeaveThread = 0 spawn {}; +dayz_groupTags = 0 spawn {}; + +execVM "DZE_Hotfix_1.0.6.1A\groups\groupMarkers.sqf"; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_13.Tavi/DZE_Hotfix_1.0.6.1A/init/compiles.sqf b/Server Files/MPMissions/DayZ_Epoch_13.Tavi/DZE_Hotfix_1.0.6.1A/init/compiles.sqf new file mode 100644 index 000000000..e0a4a3c84 --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_13.Tavi/DZE_Hotfix_1.0.6.1A/init/compiles.sqf @@ -0,0 +1,47 @@ +if (!isDedicated) then { + dayz_NutritionSystem = { + private ["_type","_baseRegen","_nutrition","_calorieCount","_hungerCount","_thirstCount","_tempCount","_Thirst","_Hunger","_bloodregen","_golbalNutrition"]; + _type = _this select 0; + _baseRegen = _this select 1; + _nutrition = _this select 2; + _calorieCount = ((_this select 2) select 0); + _hungerCount = ((_this select 2) select 1); + _thirstCount = ((_this select 2) select 2); + _tempCount = ((_this select 2) select 3); + if (_calorieCount > 0) then { + _hungerCount = _hungerCount + (SleepFood * (((ln ((_calorieCount / 3610) * 100)) * (1 - (dayz_hunger / SleepFood))) / 100)); + _thirstCount = _thirstCount + (SleepWater * (((ln ((_calorieCount / 3610) * 100)) * (1 - (dayz_thirst / SleepWater))) / 100)); + }; + switch (_type) do { + case "FoodDrink": { + if (_hungerCount > 0) then { + if (dayz_hunger > _hungerCount) then { + dayz_hunger = dayz_hunger - (_hungerCount); + } else { + dayz_hunger = 0; + }; + }; + if (_thirstCount > 0) then { + if (dayz_thirst > _thirstCount) then { + dayz_thirst = dayz_thirst - _thirstCount; + } else { + dayz_thirst = 0; + }; + }; + if (_tempCount > 0) then { dayz_temperatur = dayz_temperatur + _tempCount; }; + if (_calorieCount > 0) then { dayz_nutrition = dayz_nutrition + _calorieCount; }; + if (_baseRegen > 0) then { r_player_bloodregen = r_player_bloodregen + _baseRegen; }; + }; + case "Working": { + if (_calorieCount > 0) then { dayz_nutrition = dayz_nutrition - (_calorieCount / ((DZE_NutritionDivisor select 0) max 0.1)); }; + if (_thirstCount > 0) then { dayz_thirst = dayz_thirst + (_thirstCount / ((DZE_NutritionDivisor select 1) max 0.1)); }; + if (_hungerCount > 0) then { dayz_hunger = dayz_hunger + (_hungerCount / ((DZE_NutritionDivisor select 2) max 0.1)); }; + if (_tempCount > 0) then { dayz_temperatur = dayz_temperatur + (_tempCount / ((DZE_NutritionDivisor select 3) max 0.1)); }; + }; + }; + dayz_thirst = (dayz_thirst min SleepWater) max 0; + dayz_hunger = (dayz_hunger min SleepFood) max 0; + dayz_temperatur = (dayz_temperatur min dayz_temperaturmax) max dayz_temperaturmin; + }; + Diag_Log "DZE_Hotfix_1.0.6.1A: dayz_NutritionSystem patched"; +}; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_13.Tavi/DZE_Hotfix_1.0.6.1A/system/progress_monitor.sqf b/Server Files/MPMissions/DayZ_Epoch_13.Tavi/DZE_Hotfix_1.0.6.1A/system/progress_monitor.sqf new file mode 100644 index 000000000..5660c9e1b --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_13.Tavi/DZE_Hotfix_1.0.6.1A/system/progress_monitor.sqf @@ -0,0 +1,43 @@ +private["_display","_control1","_control2","_watermark"]; +disableSerialization; +//diag_log "DEBUG: loadscreen guard started."; + +_timeoutStart=diag_ticktime; +while {true} do { + if (diag_ticktime - _timeoutStart >= 120) exitWith { + 1 cutText [localize "str_player_login_timeout", "PLAIN DOWN"]; + uiSleep 5; + endMission "END1"; + }; + if ((!isNil "Dayz_loginCompleted") and {(Dayz_loginCompleted)}) exitWith { + //diag_log [ __FILE__, __LINE__, "End loop"]; + + // Logo watermark: adding a logo in the bottom left corner of the screen with the server name + if (!isNil "dayZ_serverName") then { + 5 cutRsc ["wm_disp","PLAIN"]; + _watermark = (uiNamespace getVariable "wm_disp") displayCtrl 1; + _watermark ctrlSetText dayZ_serverName; + if (profileNamespace getVariable ["streamerMode",0] == 1) then {_watermark ctrlShow false;}; + }; + + if (dayz_enableRules && (profileNamespace getVariable ["streamerMode",0] == 0)) then { + dayz_rulesHandle = execVM "rules.sqf"; + }; + + if (dayz_groupSystem) then {execVM "DZE_Hotfix_1.0.6.1A\groups\init.sqf";}; + Diag_Log "DZE_Hotfix_1.0.6.1A: dayz_groupSystem patched"; + }; + _display = uiNameSpace getVariable "BIS_loadingScreen"; + if (!isNil "_display") then { + if (dayz_loadScreenMsg != "" ) then { + _control1 = _display displayctrl 8400; + _control1 ctrlSetText dayz_loadScreenMsg; + }; + _control2 = _display displayctrl 102; + _control2 ctrlSetText format["%1",floor(diag_ticktime - _timeoutStart)]; + }; + + uiSleep 0.2; + //diag_log [ __FILE__, __LINE__, "Looping..."]; +}; + diff --git a/Server Files/MPMissions/DayZ_Epoch_13.Tavi/init.sqf b/Server Files/MPMissions/DayZ_Epoch_13.Tavi/init.sqf index 3e9471966..3edb96dfa 100644 --- a/Server Files/MPMissions/DayZ_Epoch_13.Tavi/init.sqf +++ b/Server Files/MPMissions/DayZ_Epoch_13.Tavi/init.sqf @@ -79,12 +79,16 @@ onPreloadStarted "diag_log [diag_tickTime,'onPreloadStarted']; dayz_preloadFinis onPreloadFinished "diag_log [diag_tickTime,'onPreloadFinished']; dayz_preloadFinished = true;"; with uiNameSpace do {RscDMSLoad=nil;}; // autologon at next logon +_verCheck = (getText (configFile >> "CfgMods" >> "DayZ" >> "version") == "DayZ Epoch 1.0.6.1"); if (!isDedicated) then { - enableSaving [false, false]; - startLoadingScreen ["","RscDisplayLoadCustom"]; + enableSaving [false, false]; startLoadingScreen ["","RscDisplayLoadCustom"]; progressLoadingScreen 0; dayz_loadScreenMsg = localize 'str_login_missionFile'; - progress_monitor = [] execVM "\z\addons\dayz_code\system\progress_monitor.sqf"; + if (_verCheck) then { + progress_monitor = [] execVM "DZE_Hotfix_1.0.6.1A\system\progress_monitor.sqf"; + } else { + progress_monitor = [] execVM "\z\addons\dayz_code\system\progress_monitor.sqf"; + }; 0 cutText ['','BLACK',0]; 0 fadeSound 0; 0 fadeMusic 0; @@ -98,6 +102,9 @@ progressLoadingScreen 0.1; call compile preprocessFileLineNumbers "\z\addons\dayz_code\medical\setup_functions_med.sqf"; progressLoadingScreen 0.15; call compile preprocessFileLineNumbers "\z\addons\dayz_code\init\compiles.sqf"; +if (_verCheck) then { + #include "DZE_Hotfix_1.0.6.1A\init\compiles.sqf" +}; progressLoadingScreen 0.25; call compile preprocessFileLineNumbers "server_traders.sqf"; call compile preprocessFileLineNumbers "\z\addons\dayz_code\system\mission\tavi.sqf"; //Add trader city objects locally on every machine early diff --git a/Server Files/MPMissions/DayZ_Epoch_15.namalsk/DZE_Hotfix_1.0.6.1A/groups/groupMarkers.sqf b/Server Files/MPMissions/DayZ_Epoch_15.namalsk/DZE_Hotfix_1.0.6.1A/groups/groupMarkers.sqf new file mode 100644 index 000000000..e43cffbac --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_15.namalsk/DZE_Hotfix_1.0.6.1A/groups/groupMarkers.sqf @@ -0,0 +1,75 @@ +private ["_bodyCount","_count","_group","_hasGPS","_index","_inGroup","_marker","_markBody","_markGroup","_markSelf","_name","_pos","_self","_vehicle"]; + +while {true} do { + _group = player call dayz_filterGroup; + _inGroup = count _group > 1; + + if (dayz_requireRadio && {_inGroup} && {!("ItemRadio" in items player)}) then { + [player] joinSilent grpNull; + if (!isNull findDisplay 80000) then {findDisplay 80000 closeDisplay 2;}; + terminate dayz_groupTags; + 80000 cutText ["","PLAIN"]; + localize "STR_EPOCH_LOST_RADIO_CONTACT" call dayz_rollingMessages; + } else { + if (_inGroup && scriptDone dayz_groupTags) then { + dayz_groupTags = execVM "DZE_Hotfix_1.0.6.1A\groups\groupTags.sqf"; + }; + + if (visibleMap or !isNull (uiNamespace getVariable["BIS_RscMiniMap",displayNull])) then { + _hasGPS = "ItemGPS" in items player; + _markBody = (dayz_markBody == 1 or (dayz_markBody == 2 && _hasGPS)); + _markGroup = (dayz_markGroup == 1 or (dayz_markGroup == 2 && _hasGPS)); + _markSelf = (dayz_markSelf == 1 or (dayz_markSelf == 2 && _hasGPS)); + + _index = 0; + { + _self = _x == player; + _vehicle = vehicle _x; + if ((_self or _markGroup) && (!_self or _markSelf) && (effectiveCommander _vehicle == _x)) then { + _pos = [_x] call FNC_GetPos; + deleteMarkerLocal format["groupMember%1",_index]; + _marker = createMarkerLocal [format["groupMember%1",_index],_pos]; + _marker setMarkerTypeLocal "DestroyedVehicle"; + _marker setMarkerTextLocal format ["%1",if (_vehicle == _x) then {name _x} else {_vehicle call dayz_getCrew}]; + _marker setMarkerColorLocal "ColorGreen"; + } else { + deleteMarkerLocal format["groupMember%1",_index]; + }; + _index = _index + 1; + } count _group; + + // Remove markers for group members that left + _count = count _group; + if (dayz_oldMemberCount > _count) then { + for "_i" from _count to dayz_oldMemberCount do {deleteMarkerLocal format["groupMember%1",_i];}; + }; + dayz_oldMemberCount = _count; + + if (_markBody) then { + _bodyCount = 0; + _name = name player; + { + if (_x getVariable["bodyName",""] == _name) then { + _bodyCount = _bodyCount + 1; + _pos = [_x] call FNC_GetPos; + deleteMarkerLocal format["MyBody%1",_bodyCount]; + _marker = createMarkerLocal [format["MyBody%1",_bodyCount],_pos]; + _marker setMarkerTypeLocal "DestroyedVehicle"; + _marker setMarkerTextLocal localize "STR_EPOCH_RIP"; + _marker setMarkerColorLocal "ColorRed"; + }; + } count allDead; + + // Remove markers for bodies that were deleted + if (dayz_oldBodyCount > _bodyCount) then { + for "_i" from _bodyCount to dayz_oldBodyCount do {deleteMarkerLocal format["MyBody%1",_i];}; + }; + dayz_oldBodyCount = _bodyCount; + } else { + for "_i" from 1 to dayz_oldBodyCount do {deleteMarkerLocal format["MyBody%1",_i];}; + }; + }; + }; + + uiSleep 1; +}; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_15.namalsk/DZE_Hotfix_1.0.6.1A/groups/groupTags.sqf b/Server Files/MPMissions/DayZ_Epoch_15.namalsk/DZE_Hotfix_1.0.6.1A/groups/groupTags.sqf new file mode 100644 index 000000000..0e9d72539 --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_15.namalsk/DZE_Hotfix_1.0.6.1A/groups/groupTags.sqf @@ -0,0 +1,52 @@ +#define DRAW_TAGS (!visibleMap && count units group player > 1) //Use && cameraView != "GROUP" if tactical view is allowed (blocked by default) +private ["_display","_distance","_group","_icon","_index","_pos","_scale","_screen","_text"]; +disableSerialization; + +_refresh = { + _group = player call dayz_filterGroup; + + _display = uiNamespace getVariable "DZ_GroupTags"; + _index = 0; + { + _pos = [_x] call FNC_GetPos; + _distance = _pos distance player; + _icon = _display displayCtrl (100 + _index); + if (_distance > 1 && _distance < 2500 && vehicle _x != vehicle player) then { + _pos set [2,(_pos select 2) + 1.5]; + _screen = worldToScreen _pos; + _text = composeText [image "\ca\ui\data\igui_side_unknown_ca.paa"," ",if (dayz_groupNameTags) then {name _x} else {""}]; + if (count _screen > 1) then { + _scale = if (_distance < 200) then {.3} else {1 min ((1 - (_distance - 3) / 15) max .3)}; + _icon ctrlSetStructuredText _text; + _icon ctrlSetPosition [(_screen select 0),(_screen select 1),.99,.65]; + _icon ctrlSetScale _scale; + _icon ctrlSetFade ((1 - _scale) / 2); + _icon ctrlCommit 0; + _icon ctrlShow true; + } else { + _icon ctrlShow false; + }; + } else { + _icon ctrlShow false; + }; + _index = _index + 1; + } count _group; + + if (dayz_oldGroupCount > count _group) then { + _display displayCtrl (100 + _index) ctrlShow false; + }; + + dayz_oldGroupCount = count _group; +}; + +while {true} do { + waitUntil {uiSleep 1; DRAW_TAGS}; + 80000 cutRsc ["DZ_GroupTags","PLAIN"]; + + while {DRAW_TAGS} do { + call _refresh; //Must be called to finish in current frame + uiSleep 0.01; + }; + + 80000 cutText ["","PLAIN"]; +}; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_15.namalsk/DZE_Hotfix_1.0.6.1A/groups/init.sqf b/Server Files/MPMissions/DayZ_Epoch_15.namalsk/DZE_Hotfix_1.0.6.1A/groups/init.sqf new file mode 100644 index 000000000..6a61f5db4 --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_15.namalsk/DZE_Hotfix_1.0.6.1A/groups/init.sqf @@ -0,0 +1,51 @@ +private ["_leader","_oldGroup","_savedGroup"]; + +uiSleep 1; +if (count (units group player) > 1) then { + [player] joinSilent grpNull; + diag_log "Clearing group"; +}; + +_savedGroup = (PVCDZ_plr_Login select 10) - [getPlayerUID player]; + +if (count _savedGroup > 0 && {!dayz_requireRadio or {dayz_requireRadio && "ItemRadio" in items player}}) then { + { + //Only auto join player into group if leader is in their savedGroup + _leader = leader _x; + if (getPlayerUID _leader in _savedGroup) exitWith { + _oldGroup = group player; + [player] joinSilent _x; + if (count (units _oldGroup) == 0) then {deleteGroup _oldGroup;}; + format[localize "STR_EPOCH_REJOINED_GROUP",name _leader] call dayz_rollingMessages; + + // Update saved group in DB + PVDZ_Server_UpdateGroup = [1,player]; + publicVariableServer "PVDZ_Server_UpdateGroup"; + }; + } count allGroups; +}; + +dayz_oldBodyCount = 0; +dayz_oldGroupCount = 0; +dayz_oldMemberCount = 0; +dayz_disbandGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\disband.sqf"; +dayz_filterGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\filter.sqf"; +dayz_getCrew = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\getCrew.sqf"; +dayz_getPlayer = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\getPlayer.sqf"; +dayz_inviteToGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\invite.sqf"; +dayz_joinGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\join.sqf"; +dayz_kickFromGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\kick.sqf"; +dayz_leaveGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\leave.sqf"; +dayz_openGroupDialog = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\open.sqf"; +dayz_pickGroupMember = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\pickGroupMember.sqf"; +dayz_pickPlayer = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\pickPlayer.sqf"; +dayz_promotePlayer = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\promote.sqf"; +dayz_rejectGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\reject.sqf"; +dayz_groupInit = true; + +//Initialize as script data type, no scriptNull in A2 +dayz_groupDisbandThread = 0 spawn {}; +dayz_groupLeaveThread = 0 spawn {}; +dayz_groupTags = 0 spawn {}; + +execVM "DZE_Hotfix_1.0.6.1A\groups\groupMarkers.sqf"; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_15.namalsk/DZE_Hotfix_1.0.6.1A/init/compiles.sqf b/Server Files/MPMissions/DayZ_Epoch_15.namalsk/DZE_Hotfix_1.0.6.1A/init/compiles.sqf new file mode 100644 index 000000000..e0a4a3c84 --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_15.namalsk/DZE_Hotfix_1.0.6.1A/init/compiles.sqf @@ -0,0 +1,47 @@ +if (!isDedicated) then { + dayz_NutritionSystem = { + private ["_type","_baseRegen","_nutrition","_calorieCount","_hungerCount","_thirstCount","_tempCount","_Thirst","_Hunger","_bloodregen","_golbalNutrition"]; + _type = _this select 0; + _baseRegen = _this select 1; + _nutrition = _this select 2; + _calorieCount = ((_this select 2) select 0); + _hungerCount = ((_this select 2) select 1); + _thirstCount = ((_this select 2) select 2); + _tempCount = ((_this select 2) select 3); + if (_calorieCount > 0) then { + _hungerCount = _hungerCount + (SleepFood * (((ln ((_calorieCount / 3610) * 100)) * (1 - (dayz_hunger / SleepFood))) / 100)); + _thirstCount = _thirstCount + (SleepWater * (((ln ((_calorieCount / 3610) * 100)) * (1 - (dayz_thirst / SleepWater))) / 100)); + }; + switch (_type) do { + case "FoodDrink": { + if (_hungerCount > 0) then { + if (dayz_hunger > _hungerCount) then { + dayz_hunger = dayz_hunger - (_hungerCount); + } else { + dayz_hunger = 0; + }; + }; + if (_thirstCount > 0) then { + if (dayz_thirst > _thirstCount) then { + dayz_thirst = dayz_thirst - _thirstCount; + } else { + dayz_thirst = 0; + }; + }; + if (_tempCount > 0) then { dayz_temperatur = dayz_temperatur + _tempCount; }; + if (_calorieCount > 0) then { dayz_nutrition = dayz_nutrition + _calorieCount; }; + if (_baseRegen > 0) then { r_player_bloodregen = r_player_bloodregen + _baseRegen; }; + }; + case "Working": { + if (_calorieCount > 0) then { dayz_nutrition = dayz_nutrition - (_calorieCount / ((DZE_NutritionDivisor select 0) max 0.1)); }; + if (_thirstCount > 0) then { dayz_thirst = dayz_thirst + (_thirstCount / ((DZE_NutritionDivisor select 1) max 0.1)); }; + if (_hungerCount > 0) then { dayz_hunger = dayz_hunger + (_hungerCount / ((DZE_NutritionDivisor select 2) max 0.1)); }; + if (_tempCount > 0) then { dayz_temperatur = dayz_temperatur + (_tempCount / ((DZE_NutritionDivisor select 3) max 0.1)); }; + }; + }; + dayz_thirst = (dayz_thirst min SleepWater) max 0; + dayz_hunger = (dayz_hunger min SleepFood) max 0; + dayz_temperatur = (dayz_temperatur min dayz_temperaturmax) max dayz_temperaturmin; + }; + Diag_Log "DZE_Hotfix_1.0.6.1A: dayz_NutritionSystem patched"; +}; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_15.namalsk/DZE_Hotfix_1.0.6.1A/system/progress_monitor.sqf b/Server Files/MPMissions/DayZ_Epoch_15.namalsk/DZE_Hotfix_1.0.6.1A/system/progress_monitor.sqf new file mode 100644 index 000000000..5660c9e1b --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_15.namalsk/DZE_Hotfix_1.0.6.1A/system/progress_monitor.sqf @@ -0,0 +1,43 @@ +private["_display","_control1","_control2","_watermark"]; +disableSerialization; +//diag_log "DEBUG: loadscreen guard started."; + +_timeoutStart=diag_ticktime; +while {true} do { + if (diag_ticktime - _timeoutStart >= 120) exitWith { + 1 cutText [localize "str_player_login_timeout", "PLAIN DOWN"]; + uiSleep 5; + endMission "END1"; + }; + if ((!isNil "Dayz_loginCompleted") and {(Dayz_loginCompleted)}) exitWith { + //diag_log [ __FILE__, __LINE__, "End loop"]; + + // Logo watermark: adding a logo in the bottom left corner of the screen with the server name + if (!isNil "dayZ_serverName") then { + 5 cutRsc ["wm_disp","PLAIN"]; + _watermark = (uiNamespace getVariable "wm_disp") displayCtrl 1; + _watermark ctrlSetText dayZ_serverName; + if (profileNamespace getVariable ["streamerMode",0] == 1) then {_watermark ctrlShow false;}; + }; + + if (dayz_enableRules && (profileNamespace getVariable ["streamerMode",0] == 0)) then { + dayz_rulesHandle = execVM "rules.sqf"; + }; + + if (dayz_groupSystem) then {execVM "DZE_Hotfix_1.0.6.1A\groups\init.sqf";}; + Diag_Log "DZE_Hotfix_1.0.6.1A: dayz_groupSystem patched"; + }; + _display = uiNameSpace getVariable "BIS_loadingScreen"; + if (!isNil "_display") then { + if (dayz_loadScreenMsg != "" ) then { + _control1 = _display displayctrl 8400; + _control1 ctrlSetText dayz_loadScreenMsg; + }; + _control2 = _display displayctrl 102; + _control2 ctrlSetText format["%1",floor(diag_ticktime - _timeoutStart)]; + }; + + uiSleep 0.2; + //diag_log [ __FILE__, __LINE__, "Looping..."]; +}; + diff --git a/Server Files/MPMissions/DayZ_Epoch_15.namalsk/init.sqf b/Server Files/MPMissions/DayZ_Epoch_15.namalsk/init.sqf index efae9afbd..b0f105bb9 100644 --- a/Server Files/MPMissions/DayZ_Epoch_15.namalsk/init.sqf +++ b/Server Files/MPMissions/DayZ_Epoch_15.namalsk/init.sqf @@ -79,12 +79,16 @@ onPreloadStarted "diag_log [diag_tickTime,'onPreloadStarted']; dayz_preloadFinis onPreloadFinished "diag_log [diag_tickTime,'onPreloadFinished']; dayz_preloadFinished = true;"; with uiNameSpace do {RscDMSLoad=nil;}; // autologon at next logon +_verCheck = (getText (configFile >> "CfgMods" >> "DayZ" >> "version") == "DayZ Epoch 1.0.6.1"); if (!isDedicated) then { - enableSaving [false, false]; - startLoadingScreen ["","RscDisplayLoadCustom"]; + enableSaving [false, false]; startLoadingScreen ["","RscDisplayLoadCustom"]; progressLoadingScreen 0; dayz_loadScreenMsg = localize 'str_login_missionFile'; - progress_monitor = [] execVM "\z\addons\dayz_code\system\progress_monitor.sqf"; + if (_verCheck) then { + progress_monitor = [] execVM "DZE_Hotfix_1.0.6.1A\system\progress_monitor.sqf"; + } else { + progress_monitor = [] execVM "\z\addons\dayz_code\system\progress_monitor.sqf"; + }; 0 cutText ['','BLACK',0]; 0 fadeSound 0; 0 fadeMusic 0; @@ -98,6 +102,9 @@ progressLoadingScreen 0.1; call compile preprocessFileLineNumbers "\z\addons\dayz_code\medical\setup_functions_med.sqf"; progressLoadingScreen 0.15; call compile preprocessFileLineNumbers "\z\addons\dayz_code\init\compiles.sqf"; +if (_verCheck) then { + #include "DZE_Hotfix_1.0.6.1A\init\compiles.sqf" +}; progressLoadingScreen 0.25; call compile preprocessFileLineNumbers "server_traders.sqf"; call compile preprocessFileLineNumbers "\z\addons\dayz_code\system\mission\namalsk.sqf"; //Add trader city objects locally on every machine early diff --git a/Server Files/MPMissions/DayZ_Epoch_16.Panthera2/DZE_Hotfix_1.0.6.1A/groups/groupMarkers.sqf b/Server Files/MPMissions/DayZ_Epoch_16.Panthera2/DZE_Hotfix_1.0.6.1A/groups/groupMarkers.sqf new file mode 100644 index 000000000..e43cffbac --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_16.Panthera2/DZE_Hotfix_1.0.6.1A/groups/groupMarkers.sqf @@ -0,0 +1,75 @@ +private ["_bodyCount","_count","_group","_hasGPS","_index","_inGroup","_marker","_markBody","_markGroup","_markSelf","_name","_pos","_self","_vehicle"]; + +while {true} do { + _group = player call dayz_filterGroup; + _inGroup = count _group > 1; + + if (dayz_requireRadio && {_inGroup} && {!("ItemRadio" in items player)}) then { + [player] joinSilent grpNull; + if (!isNull findDisplay 80000) then {findDisplay 80000 closeDisplay 2;}; + terminate dayz_groupTags; + 80000 cutText ["","PLAIN"]; + localize "STR_EPOCH_LOST_RADIO_CONTACT" call dayz_rollingMessages; + } else { + if (_inGroup && scriptDone dayz_groupTags) then { + dayz_groupTags = execVM "DZE_Hotfix_1.0.6.1A\groups\groupTags.sqf"; + }; + + if (visibleMap or !isNull (uiNamespace getVariable["BIS_RscMiniMap",displayNull])) then { + _hasGPS = "ItemGPS" in items player; + _markBody = (dayz_markBody == 1 or (dayz_markBody == 2 && _hasGPS)); + _markGroup = (dayz_markGroup == 1 or (dayz_markGroup == 2 && _hasGPS)); + _markSelf = (dayz_markSelf == 1 or (dayz_markSelf == 2 && _hasGPS)); + + _index = 0; + { + _self = _x == player; + _vehicle = vehicle _x; + if ((_self or _markGroup) && (!_self or _markSelf) && (effectiveCommander _vehicle == _x)) then { + _pos = [_x] call FNC_GetPos; + deleteMarkerLocal format["groupMember%1",_index]; + _marker = createMarkerLocal [format["groupMember%1",_index],_pos]; + _marker setMarkerTypeLocal "DestroyedVehicle"; + _marker setMarkerTextLocal format ["%1",if (_vehicle == _x) then {name _x} else {_vehicle call dayz_getCrew}]; + _marker setMarkerColorLocal "ColorGreen"; + } else { + deleteMarkerLocal format["groupMember%1",_index]; + }; + _index = _index + 1; + } count _group; + + // Remove markers for group members that left + _count = count _group; + if (dayz_oldMemberCount > _count) then { + for "_i" from _count to dayz_oldMemberCount do {deleteMarkerLocal format["groupMember%1",_i];}; + }; + dayz_oldMemberCount = _count; + + if (_markBody) then { + _bodyCount = 0; + _name = name player; + { + if (_x getVariable["bodyName",""] == _name) then { + _bodyCount = _bodyCount + 1; + _pos = [_x] call FNC_GetPos; + deleteMarkerLocal format["MyBody%1",_bodyCount]; + _marker = createMarkerLocal [format["MyBody%1",_bodyCount],_pos]; + _marker setMarkerTypeLocal "DestroyedVehicle"; + _marker setMarkerTextLocal localize "STR_EPOCH_RIP"; + _marker setMarkerColorLocal "ColorRed"; + }; + } count allDead; + + // Remove markers for bodies that were deleted + if (dayz_oldBodyCount > _bodyCount) then { + for "_i" from _bodyCount to dayz_oldBodyCount do {deleteMarkerLocal format["MyBody%1",_i];}; + }; + dayz_oldBodyCount = _bodyCount; + } else { + for "_i" from 1 to dayz_oldBodyCount do {deleteMarkerLocal format["MyBody%1",_i];}; + }; + }; + }; + + uiSleep 1; +}; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_16.Panthera2/DZE_Hotfix_1.0.6.1A/groups/groupTags.sqf b/Server Files/MPMissions/DayZ_Epoch_16.Panthera2/DZE_Hotfix_1.0.6.1A/groups/groupTags.sqf new file mode 100644 index 000000000..0e9d72539 --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_16.Panthera2/DZE_Hotfix_1.0.6.1A/groups/groupTags.sqf @@ -0,0 +1,52 @@ +#define DRAW_TAGS (!visibleMap && count units group player > 1) //Use && cameraView != "GROUP" if tactical view is allowed (blocked by default) +private ["_display","_distance","_group","_icon","_index","_pos","_scale","_screen","_text"]; +disableSerialization; + +_refresh = { + _group = player call dayz_filterGroup; + + _display = uiNamespace getVariable "DZ_GroupTags"; + _index = 0; + { + _pos = [_x] call FNC_GetPos; + _distance = _pos distance player; + _icon = _display displayCtrl (100 + _index); + if (_distance > 1 && _distance < 2500 && vehicle _x != vehicle player) then { + _pos set [2,(_pos select 2) + 1.5]; + _screen = worldToScreen _pos; + _text = composeText [image "\ca\ui\data\igui_side_unknown_ca.paa"," ",if (dayz_groupNameTags) then {name _x} else {""}]; + if (count _screen > 1) then { + _scale = if (_distance < 200) then {.3} else {1 min ((1 - (_distance - 3) / 15) max .3)}; + _icon ctrlSetStructuredText _text; + _icon ctrlSetPosition [(_screen select 0),(_screen select 1),.99,.65]; + _icon ctrlSetScale _scale; + _icon ctrlSetFade ((1 - _scale) / 2); + _icon ctrlCommit 0; + _icon ctrlShow true; + } else { + _icon ctrlShow false; + }; + } else { + _icon ctrlShow false; + }; + _index = _index + 1; + } count _group; + + if (dayz_oldGroupCount > count _group) then { + _display displayCtrl (100 + _index) ctrlShow false; + }; + + dayz_oldGroupCount = count _group; +}; + +while {true} do { + waitUntil {uiSleep 1; DRAW_TAGS}; + 80000 cutRsc ["DZ_GroupTags","PLAIN"]; + + while {DRAW_TAGS} do { + call _refresh; //Must be called to finish in current frame + uiSleep 0.01; + }; + + 80000 cutText ["","PLAIN"]; +}; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_16.Panthera2/DZE_Hotfix_1.0.6.1A/groups/init.sqf b/Server Files/MPMissions/DayZ_Epoch_16.Panthera2/DZE_Hotfix_1.0.6.1A/groups/init.sqf new file mode 100644 index 000000000..6a61f5db4 --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_16.Panthera2/DZE_Hotfix_1.0.6.1A/groups/init.sqf @@ -0,0 +1,51 @@ +private ["_leader","_oldGroup","_savedGroup"]; + +uiSleep 1; +if (count (units group player) > 1) then { + [player] joinSilent grpNull; + diag_log "Clearing group"; +}; + +_savedGroup = (PVCDZ_plr_Login select 10) - [getPlayerUID player]; + +if (count _savedGroup > 0 && {!dayz_requireRadio or {dayz_requireRadio && "ItemRadio" in items player}}) then { + { + //Only auto join player into group if leader is in their savedGroup + _leader = leader _x; + if (getPlayerUID _leader in _savedGroup) exitWith { + _oldGroup = group player; + [player] joinSilent _x; + if (count (units _oldGroup) == 0) then {deleteGroup _oldGroup;}; + format[localize "STR_EPOCH_REJOINED_GROUP",name _leader] call dayz_rollingMessages; + + // Update saved group in DB + PVDZ_Server_UpdateGroup = [1,player]; + publicVariableServer "PVDZ_Server_UpdateGroup"; + }; + } count allGroups; +}; + +dayz_oldBodyCount = 0; +dayz_oldGroupCount = 0; +dayz_oldMemberCount = 0; +dayz_disbandGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\disband.sqf"; +dayz_filterGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\filter.sqf"; +dayz_getCrew = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\getCrew.sqf"; +dayz_getPlayer = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\getPlayer.sqf"; +dayz_inviteToGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\invite.sqf"; +dayz_joinGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\join.sqf"; +dayz_kickFromGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\kick.sqf"; +dayz_leaveGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\leave.sqf"; +dayz_openGroupDialog = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\open.sqf"; +dayz_pickGroupMember = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\pickGroupMember.sqf"; +dayz_pickPlayer = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\pickPlayer.sqf"; +dayz_promotePlayer = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\promote.sqf"; +dayz_rejectGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\reject.sqf"; +dayz_groupInit = true; + +//Initialize as script data type, no scriptNull in A2 +dayz_groupDisbandThread = 0 spawn {}; +dayz_groupLeaveThread = 0 spawn {}; +dayz_groupTags = 0 spawn {}; + +execVM "DZE_Hotfix_1.0.6.1A\groups\groupMarkers.sqf"; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_16.Panthera2/DZE_Hotfix_1.0.6.1A/init/compiles.sqf b/Server Files/MPMissions/DayZ_Epoch_16.Panthera2/DZE_Hotfix_1.0.6.1A/init/compiles.sqf new file mode 100644 index 000000000..e0a4a3c84 --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_16.Panthera2/DZE_Hotfix_1.0.6.1A/init/compiles.sqf @@ -0,0 +1,47 @@ +if (!isDedicated) then { + dayz_NutritionSystem = { + private ["_type","_baseRegen","_nutrition","_calorieCount","_hungerCount","_thirstCount","_tempCount","_Thirst","_Hunger","_bloodregen","_golbalNutrition"]; + _type = _this select 0; + _baseRegen = _this select 1; + _nutrition = _this select 2; + _calorieCount = ((_this select 2) select 0); + _hungerCount = ((_this select 2) select 1); + _thirstCount = ((_this select 2) select 2); + _tempCount = ((_this select 2) select 3); + if (_calorieCount > 0) then { + _hungerCount = _hungerCount + (SleepFood * (((ln ((_calorieCount / 3610) * 100)) * (1 - (dayz_hunger / SleepFood))) / 100)); + _thirstCount = _thirstCount + (SleepWater * (((ln ((_calorieCount / 3610) * 100)) * (1 - (dayz_thirst / SleepWater))) / 100)); + }; + switch (_type) do { + case "FoodDrink": { + if (_hungerCount > 0) then { + if (dayz_hunger > _hungerCount) then { + dayz_hunger = dayz_hunger - (_hungerCount); + } else { + dayz_hunger = 0; + }; + }; + if (_thirstCount > 0) then { + if (dayz_thirst > _thirstCount) then { + dayz_thirst = dayz_thirst - _thirstCount; + } else { + dayz_thirst = 0; + }; + }; + if (_tempCount > 0) then { dayz_temperatur = dayz_temperatur + _tempCount; }; + if (_calorieCount > 0) then { dayz_nutrition = dayz_nutrition + _calorieCount; }; + if (_baseRegen > 0) then { r_player_bloodregen = r_player_bloodregen + _baseRegen; }; + }; + case "Working": { + if (_calorieCount > 0) then { dayz_nutrition = dayz_nutrition - (_calorieCount / ((DZE_NutritionDivisor select 0) max 0.1)); }; + if (_thirstCount > 0) then { dayz_thirst = dayz_thirst + (_thirstCount / ((DZE_NutritionDivisor select 1) max 0.1)); }; + if (_hungerCount > 0) then { dayz_hunger = dayz_hunger + (_hungerCount / ((DZE_NutritionDivisor select 2) max 0.1)); }; + if (_tempCount > 0) then { dayz_temperatur = dayz_temperatur + (_tempCount / ((DZE_NutritionDivisor select 3) max 0.1)); }; + }; + }; + dayz_thirst = (dayz_thirst min SleepWater) max 0; + dayz_hunger = (dayz_hunger min SleepFood) max 0; + dayz_temperatur = (dayz_temperatur min dayz_temperaturmax) max dayz_temperaturmin; + }; + Diag_Log "DZE_Hotfix_1.0.6.1A: dayz_NutritionSystem patched"; +}; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_16.Panthera2/DZE_Hotfix_1.0.6.1A/system/progress_monitor.sqf b/Server Files/MPMissions/DayZ_Epoch_16.Panthera2/DZE_Hotfix_1.0.6.1A/system/progress_monitor.sqf new file mode 100644 index 000000000..5660c9e1b --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_16.Panthera2/DZE_Hotfix_1.0.6.1A/system/progress_monitor.sqf @@ -0,0 +1,43 @@ +private["_display","_control1","_control2","_watermark"]; +disableSerialization; +//diag_log "DEBUG: loadscreen guard started."; + +_timeoutStart=diag_ticktime; +while {true} do { + if (diag_ticktime - _timeoutStart >= 120) exitWith { + 1 cutText [localize "str_player_login_timeout", "PLAIN DOWN"]; + uiSleep 5; + endMission "END1"; + }; + if ((!isNil "Dayz_loginCompleted") and {(Dayz_loginCompleted)}) exitWith { + //diag_log [ __FILE__, __LINE__, "End loop"]; + + // Logo watermark: adding a logo in the bottom left corner of the screen with the server name + if (!isNil "dayZ_serverName") then { + 5 cutRsc ["wm_disp","PLAIN"]; + _watermark = (uiNamespace getVariable "wm_disp") displayCtrl 1; + _watermark ctrlSetText dayZ_serverName; + if (profileNamespace getVariable ["streamerMode",0] == 1) then {_watermark ctrlShow false;}; + }; + + if (dayz_enableRules && (profileNamespace getVariable ["streamerMode",0] == 0)) then { + dayz_rulesHandle = execVM "rules.sqf"; + }; + + if (dayz_groupSystem) then {execVM "DZE_Hotfix_1.0.6.1A\groups\init.sqf";}; + Diag_Log "DZE_Hotfix_1.0.6.1A: dayz_groupSystem patched"; + }; + _display = uiNameSpace getVariable "BIS_loadingScreen"; + if (!isNil "_display") then { + if (dayz_loadScreenMsg != "" ) then { + _control1 = _display displayctrl 8400; + _control1 ctrlSetText dayz_loadScreenMsg; + }; + _control2 = _display displayctrl 102; + _control2 ctrlSetText format["%1",floor(diag_ticktime - _timeoutStart)]; + }; + + uiSleep 0.2; + //diag_log [ __FILE__, __LINE__, "Looping..."]; +}; + diff --git a/Server Files/MPMissions/DayZ_Epoch_16.Panthera2/init.sqf b/Server Files/MPMissions/DayZ_Epoch_16.Panthera2/init.sqf index c56e5285f..9d58fe94c 100644 --- a/Server Files/MPMissions/DayZ_Epoch_16.Panthera2/init.sqf +++ b/Server Files/MPMissions/DayZ_Epoch_16.Panthera2/init.sqf @@ -79,12 +79,16 @@ onPreloadStarted "diag_log [diag_tickTime,'onPreloadStarted']; dayz_preloadFinis onPreloadFinished "diag_log [diag_tickTime,'onPreloadFinished']; dayz_preloadFinished = true;"; with uiNameSpace do {RscDMSLoad=nil;}; // autologon at next logon +_verCheck = (getText (configFile >> "CfgMods" >> "DayZ" >> "version") == "DayZ Epoch 1.0.6.1"); if (!isDedicated) then { - enableSaving [false, false]; - startLoadingScreen ["","RscDisplayLoadCustom"]; + enableSaving [false, false]; startLoadingScreen ["","RscDisplayLoadCustom"]; progressLoadingScreen 0; dayz_loadScreenMsg = localize 'str_login_missionFile'; - progress_monitor = [] execVM "\z\addons\dayz_code\system\progress_monitor.sqf"; + if (_verCheck) then { + progress_monitor = [] execVM "DZE_Hotfix_1.0.6.1A\system\progress_monitor.sqf"; + } else { + progress_monitor = [] execVM "\z\addons\dayz_code\system\progress_monitor.sqf"; + }; 0 cutText ['','BLACK',0]; 0 fadeSound 0; 0 fadeMusic 0; @@ -98,6 +102,9 @@ progressLoadingScreen 0.1; call compile preprocessFileLineNumbers "\z\addons\dayz_code\medical\setup_functions_med.sqf"; progressLoadingScreen 0.15; call compile preprocessFileLineNumbers "\z\addons\dayz_code\init\compiles.sqf"; +if (_verCheck) then { + #include "DZE_Hotfix_1.0.6.1A\init\compiles.sqf" +}; progressLoadingScreen 0.25; call compile preprocessFileLineNumbers "server_traders.sqf"; call compile preprocessFileLineNumbers "\z\addons\dayz_code\system\mission\panthera2.sqf"; //Add trader city objects locally on every machine early diff --git a/Server Files/MPMissions/DayZ_Epoch_17.Chernarus/DZE_Hotfix_1.0.6.1A/groups/groupMarkers.sqf b/Server Files/MPMissions/DayZ_Epoch_17.Chernarus/DZE_Hotfix_1.0.6.1A/groups/groupMarkers.sqf new file mode 100644 index 000000000..e43cffbac --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_17.Chernarus/DZE_Hotfix_1.0.6.1A/groups/groupMarkers.sqf @@ -0,0 +1,75 @@ +private ["_bodyCount","_count","_group","_hasGPS","_index","_inGroup","_marker","_markBody","_markGroup","_markSelf","_name","_pos","_self","_vehicle"]; + +while {true} do { + _group = player call dayz_filterGroup; + _inGroup = count _group > 1; + + if (dayz_requireRadio && {_inGroup} && {!("ItemRadio" in items player)}) then { + [player] joinSilent grpNull; + if (!isNull findDisplay 80000) then {findDisplay 80000 closeDisplay 2;}; + terminate dayz_groupTags; + 80000 cutText ["","PLAIN"]; + localize "STR_EPOCH_LOST_RADIO_CONTACT" call dayz_rollingMessages; + } else { + if (_inGroup && scriptDone dayz_groupTags) then { + dayz_groupTags = execVM "DZE_Hotfix_1.0.6.1A\groups\groupTags.sqf"; + }; + + if (visibleMap or !isNull (uiNamespace getVariable["BIS_RscMiniMap",displayNull])) then { + _hasGPS = "ItemGPS" in items player; + _markBody = (dayz_markBody == 1 or (dayz_markBody == 2 && _hasGPS)); + _markGroup = (dayz_markGroup == 1 or (dayz_markGroup == 2 && _hasGPS)); + _markSelf = (dayz_markSelf == 1 or (dayz_markSelf == 2 && _hasGPS)); + + _index = 0; + { + _self = _x == player; + _vehicle = vehicle _x; + if ((_self or _markGroup) && (!_self or _markSelf) && (effectiveCommander _vehicle == _x)) then { + _pos = [_x] call FNC_GetPos; + deleteMarkerLocal format["groupMember%1",_index]; + _marker = createMarkerLocal [format["groupMember%1",_index],_pos]; + _marker setMarkerTypeLocal "DestroyedVehicle"; + _marker setMarkerTextLocal format ["%1",if (_vehicle == _x) then {name _x} else {_vehicle call dayz_getCrew}]; + _marker setMarkerColorLocal "ColorGreen"; + } else { + deleteMarkerLocal format["groupMember%1",_index]; + }; + _index = _index + 1; + } count _group; + + // Remove markers for group members that left + _count = count _group; + if (dayz_oldMemberCount > _count) then { + for "_i" from _count to dayz_oldMemberCount do {deleteMarkerLocal format["groupMember%1",_i];}; + }; + dayz_oldMemberCount = _count; + + if (_markBody) then { + _bodyCount = 0; + _name = name player; + { + if (_x getVariable["bodyName",""] == _name) then { + _bodyCount = _bodyCount + 1; + _pos = [_x] call FNC_GetPos; + deleteMarkerLocal format["MyBody%1",_bodyCount]; + _marker = createMarkerLocal [format["MyBody%1",_bodyCount],_pos]; + _marker setMarkerTypeLocal "DestroyedVehicle"; + _marker setMarkerTextLocal localize "STR_EPOCH_RIP"; + _marker setMarkerColorLocal "ColorRed"; + }; + } count allDead; + + // Remove markers for bodies that were deleted + if (dayz_oldBodyCount > _bodyCount) then { + for "_i" from _bodyCount to dayz_oldBodyCount do {deleteMarkerLocal format["MyBody%1",_i];}; + }; + dayz_oldBodyCount = _bodyCount; + } else { + for "_i" from 1 to dayz_oldBodyCount do {deleteMarkerLocal format["MyBody%1",_i];}; + }; + }; + }; + + uiSleep 1; +}; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_17.Chernarus/DZE_Hotfix_1.0.6.1A/groups/groupTags.sqf b/Server Files/MPMissions/DayZ_Epoch_17.Chernarus/DZE_Hotfix_1.0.6.1A/groups/groupTags.sqf new file mode 100644 index 000000000..0e9d72539 --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_17.Chernarus/DZE_Hotfix_1.0.6.1A/groups/groupTags.sqf @@ -0,0 +1,52 @@ +#define DRAW_TAGS (!visibleMap && count units group player > 1) //Use && cameraView != "GROUP" if tactical view is allowed (blocked by default) +private ["_display","_distance","_group","_icon","_index","_pos","_scale","_screen","_text"]; +disableSerialization; + +_refresh = { + _group = player call dayz_filterGroup; + + _display = uiNamespace getVariable "DZ_GroupTags"; + _index = 0; + { + _pos = [_x] call FNC_GetPos; + _distance = _pos distance player; + _icon = _display displayCtrl (100 + _index); + if (_distance > 1 && _distance < 2500 && vehicle _x != vehicle player) then { + _pos set [2,(_pos select 2) + 1.5]; + _screen = worldToScreen _pos; + _text = composeText [image "\ca\ui\data\igui_side_unknown_ca.paa"," ",if (dayz_groupNameTags) then {name _x} else {""}]; + if (count _screen > 1) then { + _scale = if (_distance < 200) then {.3} else {1 min ((1 - (_distance - 3) / 15) max .3)}; + _icon ctrlSetStructuredText _text; + _icon ctrlSetPosition [(_screen select 0),(_screen select 1),.99,.65]; + _icon ctrlSetScale _scale; + _icon ctrlSetFade ((1 - _scale) / 2); + _icon ctrlCommit 0; + _icon ctrlShow true; + } else { + _icon ctrlShow false; + }; + } else { + _icon ctrlShow false; + }; + _index = _index + 1; + } count _group; + + if (dayz_oldGroupCount > count _group) then { + _display displayCtrl (100 + _index) ctrlShow false; + }; + + dayz_oldGroupCount = count _group; +}; + +while {true} do { + waitUntil {uiSleep 1; DRAW_TAGS}; + 80000 cutRsc ["DZ_GroupTags","PLAIN"]; + + while {DRAW_TAGS} do { + call _refresh; //Must be called to finish in current frame + uiSleep 0.01; + }; + + 80000 cutText ["","PLAIN"]; +}; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_17.Chernarus/DZE_Hotfix_1.0.6.1A/groups/init.sqf b/Server Files/MPMissions/DayZ_Epoch_17.Chernarus/DZE_Hotfix_1.0.6.1A/groups/init.sqf new file mode 100644 index 000000000..6a61f5db4 --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_17.Chernarus/DZE_Hotfix_1.0.6.1A/groups/init.sqf @@ -0,0 +1,51 @@ +private ["_leader","_oldGroup","_savedGroup"]; + +uiSleep 1; +if (count (units group player) > 1) then { + [player] joinSilent grpNull; + diag_log "Clearing group"; +}; + +_savedGroup = (PVCDZ_plr_Login select 10) - [getPlayerUID player]; + +if (count _savedGroup > 0 && {!dayz_requireRadio or {dayz_requireRadio && "ItemRadio" in items player}}) then { + { + //Only auto join player into group if leader is in their savedGroup + _leader = leader _x; + if (getPlayerUID _leader in _savedGroup) exitWith { + _oldGroup = group player; + [player] joinSilent _x; + if (count (units _oldGroup) == 0) then {deleteGroup _oldGroup;}; + format[localize "STR_EPOCH_REJOINED_GROUP",name _leader] call dayz_rollingMessages; + + // Update saved group in DB + PVDZ_Server_UpdateGroup = [1,player]; + publicVariableServer "PVDZ_Server_UpdateGroup"; + }; + } count allGroups; +}; + +dayz_oldBodyCount = 0; +dayz_oldGroupCount = 0; +dayz_oldMemberCount = 0; +dayz_disbandGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\disband.sqf"; +dayz_filterGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\filter.sqf"; +dayz_getCrew = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\getCrew.sqf"; +dayz_getPlayer = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\getPlayer.sqf"; +dayz_inviteToGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\invite.sqf"; +dayz_joinGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\join.sqf"; +dayz_kickFromGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\kick.sqf"; +dayz_leaveGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\leave.sqf"; +dayz_openGroupDialog = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\open.sqf"; +dayz_pickGroupMember = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\pickGroupMember.sqf"; +dayz_pickPlayer = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\pickPlayer.sqf"; +dayz_promotePlayer = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\promote.sqf"; +dayz_rejectGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\reject.sqf"; +dayz_groupInit = true; + +//Initialize as script data type, no scriptNull in A2 +dayz_groupDisbandThread = 0 spawn {}; +dayz_groupLeaveThread = 0 spawn {}; +dayz_groupTags = 0 spawn {}; + +execVM "DZE_Hotfix_1.0.6.1A\groups\groupMarkers.sqf"; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_17.Chernarus/DZE_Hotfix_1.0.6.1A/init/compiles.sqf b/Server Files/MPMissions/DayZ_Epoch_17.Chernarus/DZE_Hotfix_1.0.6.1A/init/compiles.sqf new file mode 100644 index 000000000..e0a4a3c84 --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_17.Chernarus/DZE_Hotfix_1.0.6.1A/init/compiles.sqf @@ -0,0 +1,47 @@ +if (!isDedicated) then { + dayz_NutritionSystem = { + private ["_type","_baseRegen","_nutrition","_calorieCount","_hungerCount","_thirstCount","_tempCount","_Thirst","_Hunger","_bloodregen","_golbalNutrition"]; + _type = _this select 0; + _baseRegen = _this select 1; + _nutrition = _this select 2; + _calorieCount = ((_this select 2) select 0); + _hungerCount = ((_this select 2) select 1); + _thirstCount = ((_this select 2) select 2); + _tempCount = ((_this select 2) select 3); + if (_calorieCount > 0) then { + _hungerCount = _hungerCount + (SleepFood * (((ln ((_calorieCount / 3610) * 100)) * (1 - (dayz_hunger / SleepFood))) / 100)); + _thirstCount = _thirstCount + (SleepWater * (((ln ((_calorieCount / 3610) * 100)) * (1 - (dayz_thirst / SleepWater))) / 100)); + }; + switch (_type) do { + case "FoodDrink": { + if (_hungerCount > 0) then { + if (dayz_hunger > _hungerCount) then { + dayz_hunger = dayz_hunger - (_hungerCount); + } else { + dayz_hunger = 0; + }; + }; + if (_thirstCount > 0) then { + if (dayz_thirst > _thirstCount) then { + dayz_thirst = dayz_thirst - _thirstCount; + } else { + dayz_thirst = 0; + }; + }; + if (_tempCount > 0) then { dayz_temperatur = dayz_temperatur + _tempCount; }; + if (_calorieCount > 0) then { dayz_nutrition = dayz_nutrition + _calorieCount; }; + if (_baseRegen > 0) then { r_player_bloodregen = r_player_bloodregen + _baseRegen; }; + }; + case "Working": { + if (_calorieCount > 0) then { dayz_nutrition = dayz_nutrition - (_calorieCount / ((DZE_NutritionDivisor select 0) max 0.1)); }; + if (_thirstCount > 0) then { dayz_thirst = dayz_thirst + (_thirstCount / ((DZE_NutritionDivisor select 1) max 0.1)); }; + if (_hungerCount > 0) then { dayz_hunger = dayz_hunger + (_hungerCount / ((DZE_NutritionDivisor select 2) max 0.1)); }; + if (_tempCount > 0) then { dayz_temperatur = dayz_temperatur + (_tempCount / ((DZE_NutritionDivisor select 3) max 0.1)); }; + }; + }; + dayz_thirst = (dayz_thirst min SleepWater) max 0; + dayz_hunger = (dayz_hunger min SleepFood) max 0; + dayz_temperatur = (dayz_temperatur min dayz_temperaturmax) max dayz_temperaturmin; + }; + Diag_Log "DZE_Hotfix_1.0.6.1A: dayz_NutritionSystem patched"; +}; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_17.Chernarus/DZE_Hotfix_1.0.6.1A/system/progress_monitor.sqf b/Server Files/MPMissions/DayZ_Epoch_17.Chernarus/DZE_Hotfix_1.0.6.1A/system/progress_monitor.sqf new file mode 100644 index 000000000..5660c9e1b --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_17.Chernarus/DZE_Hotfix_1.0.6.1A/system/progress_monitor.sqf @@ -0,0 +1,43 @@ +private["_display","_control1","_control2","_watermark"]; +disableSerialization; +//diag_log "DEBUG: loadscreen guard started."; + +_timeoutStart=diag_ticktime; +while {true} do { + if (diag_ticktime - _timeoutStart >= 120) exitWith { + 1 cutText [localize "str_player_login_timeout", "PLAIN DOWN"]; + uiSleep 5; + endMission "END1"; + }; + if ((!isNil "Dayz_loginCompleted") and {(Dayz_loginCompleted)}) exitWith { + //diag_log [ __FILE__, __LINE__, "End loop"]; + + // Logo watermark: adding a logo in the bottom left corner of the screen with the server name + if (!isNil "dayZ_serverName") then { + 5 cutRsc ["wm_disp","PLAIN"]; + _watermark = (uiNamespace getVariable "wm_disp") displayCtrl 1; + _watermark ctrlSetText dayZ_serverName; + if (profileNamespace getVariable ["streamerMode",0] == 1) then {_watermark ctrlShow false;}; + }; + + if (dayz_enableRules && (profileNamespace getVariable ["streamerMode",0] == 0)) then { + dayz_rulesHandle = execVM "rules.sqf"; + }; + + if (dayz_groupSystem) then {execVM "DZE_Hotfix_1.0.6.1A\groups\init.sqf";}; + Diag_Log "DZE_Hotfix_1.0.6.1A: dayz_groupSystem patched"; + }; + _display = uiNameSpace getVariable "BIS_loadingScreen"; + if (!isNil "_display") then { + if (dayz_loadScreenMsg != "" ) then { + _control1 = _display displayctrl 8400; + _control1 ctrlSetText dayz_loadScreenMsg; + }; + _control2 = _display displayctrl 102; + _control2 ctrlSetText format["%1",floor(diag_ticktime - _timeoutStart)]; + }; + + uiSleep 0.2; + //diag_log [ __FILE__, __LINE__, "Looping..."]; +}; + diff --git a/Server Files/MPMissions/DayZ_Epoch_17.Chernarus/init.sqf b/Server Files/MPMissions/DayZ_Epoch_17.Chernarus/init.sqf index ef489f266..1938d8316 100644 --- a/Server Files/MPMissions/DayZ_Epoch_17.Chernarus/init.sqf +++ b/Server Files/MPMissions/DayZ_Epoch_17.Chernarus/init.sqf @@ -79,12 +79,16 @@ onPreloadStarted "diag_log [diag_tickTime,'onPreloadStarted']; dayz_preloadFinis onPreloadFinished "diag_log [diag_tickTime,'onPreloadFinished']; dayz_preloadFinished = true;"; with uiNameSpace do {RscDMSLoad=nil;}; // autologon at next logon +_verCheck = (getText (configFile >> "CfgMods" >> "DayZ" >> "version") == "DayZ Epoch 1.0.6.1"); if (!isDedicated) then { - enableSaving [false, false]; - startLoadingScreen ["","RscDisplayLoadCustom"]; + enableSaving [false, false]; startLoadingScreen ["","RscDisplayLoadCustom"]; progressLoadingScreen 0; dayz_loadScreenMsg = localize 'str_login_missionFile'; - progress_monitor = [] execVM "\z\addons\dayz_code\system\progress_monitor.sqf"; + if (_verCheck) then { + progress_monitor = [] execVM "DZE_Hotfix_1.0.6.1A\system\progress_monitor.sqf"; + } else { + progress_monitor = [] execVM "\z\addons\dayz_code\system\progress_monitor.sqf"; + }; 0 cutText ['','BLACK',0]; 0 fadeSound 0; 0 fadeMusic 0; @@ -98,6 +102,9 @@ progressLoadingScreen 0.1; call compile preprocessFileLineNumbers "\z\addons\dayz_code\medical\setup_functions_med.sqf"; progressLoadingScreen 0.15; call compile preprocessFileLineNumbers "\z\addons\dayz_code\init\compiles.sqf"; +if (_verCheck) then { + #include "DZE_Hotfix_1.0.6.1A\init\compiles.sqf" +}; progressLoadingScreen 0.25; call compile preprocessFileLineNumbers "server_traders.sqf"; call compile preprocessFileLineNumbers "\z\addons\dayz_code\system\mission\chernarus17.sqf"; //Add trader city objects locally on every machine early diff --git a/Server Files/MPMissions/DayZ_Epoch_19.FDF_Isle1_a/DZE_Hotfix_1.0.6.1A/groups/groupMarkers.sqf b/Server Files/MPMissions/DayZ_Epoch_19.FDF_Isle1_a/DZE_Hotfix_1.0.6.1A/groups/groupMarkers.sqf new file mode 100644 index 000000000..e43cffbac --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_19.FDF_Isle1_a/DZE_Hotfix_1.0.6.1A/groups/groupMarkers.sqf @@ -0,0 +1,75 @@ +private ["_bodyCount","_count","_group","_hasGPS","_index","_inGroup","_marker","_markBody","_markGroup","_markSelf","_name","_pos","_self","_vehicle"]; + +while {true} do { + _group = player call dayz_filterGroup; + _inGroup = count _group > 1; + + if (dayz_requireRadio && {_inGroup} && {!("ItemRadio" in items player)}) then { + [player] joinSilent grpNull; + if (!isNull findDisplay 80000) then {findDisplay 80000 closeDisplay 2;}; + terminate dayz_groupTags; + 80000 cutText ["","PLAIN"]; + localize "STR_EPOCH_LOST_RADIO_CONTACT" call dayz_rollingMessages; + } else { + if (_inGroup && scriptDone dayz_groupTags) then { + dayz_groupTags = execVM "DZE_Hotfix_1.0.6.1A\groups\groupTags.sqf"; + }; + + if (visibleMap or !isNull (uiNamespace getVariable["BIS_RscMiniMap",displayNull])) then { + _hasGPS = "ItemGPS" in items player; + _markBody = (dayz_markBody == 1 or (dayz_markBody == 2 && _hasGPS)); + _markGroup = (dayz_markGroup == 1 or (dayz_markGroup == 2 && _hasGPS)); + _markSelf = (dayz_markSelf == 1 or (dayz_markSelf == 2 && _hasGPS)); + + _index = 0; + { + _self = _x == player; + _vehicle = vehicle _x; + if ((_self or _markGroup) && (!_self or _markSelf) && (effectiveCommander _vehicle == _x)) then { + _pos = [_x] call FNC_GetPos; + deleteMarkerLocal format["groupMember%1",_index]; + _marker = createMarkerLocal [format["groupMember%1",_index],_pos]; + _marker setMarkerTypeLocal "DestroyedVehicle"; + _marker setMarkerTextLocal format ["%1",if (_vehicle == _x) then {name _x} else {_vehicle call dayz_getCrew}]; + _marker setMarkerColorLocal "ColorGreen"; + } else { + deleteMarkerLocal format["groupMember%1",_index]; + }; + _index = _index + 1; + } count _group; + + // Remove markers for group members that left + _count = count _group; + if (dayz_oldMemberCount > _count) then { + for "_i" from _count to dayz_oldMemberCount do {deleteMarkerLocal format["groupMember%1",_i];}; + }; + dayz_oldMemberCount = _count; + + if (_markBody) then { + _bodyCount = 0; + _name = name player; + { + if (_x getVariable["bodyName",""] == _name) then { + _bodyCount = _bodyCount + 1; + _pos = [_x] call FNC_GetPos; + deleteMarkerLocal format["MyBody%1",_bodyCount]; + _marker = createMarkerLocal [format["MyBody%1",_bodyCount],_pos]; + _marker setMarkerTypeLocal "DestroyedVehicle"; + _marker setMarkerTextLocal localize "STR_EPOCH_RIP"; + _marker setMarkerColorLocal "ColorRed"; + }; + } count allDead; + + // Remove markers for bodies that were deleted + if (dayz_oldBodyCount > _bodyCount) then { + for "_i" from _bodyCount to dayz_oldBodyCount do {deleteMarkerLocal format["MyBody%1",_i];}; + }; + dayz_oldBodyCount = _bodyCount; + } else { + for "_i" from 1 to dayz_oldBodyCount do {deleteMarkerLocal format["MyBody%1",_i];}; + }; + }; + }; + + uiSleep 1; +}; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_19.FDF_Isle1_a/DZE_Hotfix_1.0.6.1A/groups/groupTags.sqf b/Server Files/MPMissions/DayZ_Epoch_19.FDF_Isle1_a/DZE_Hotfix_1.0.6.1A/groups/groupTags.sqf new file mode 100644 index 000000000..0e9d72539 --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_19.FDF_Isle1_a/DZE_Hotfix_1.0.6.1A/groups/groupTags.sqf @@ -0,0 +1,52 @@ +#define DRAW_TAGS (!visibleMap && count units group player > 1) //Use && cameraView != "GROUP" if tactical view is allowed (blocked by default) +private ["_display","_distance","_group","_icon","_index","_pos","_scale","_screen","_text"]; +disableSerialization; + +_refresh = { + _group = player call dayz_filterGroup; + + _display = uiNamespace getVariable "DZ_GroupTags"; + _index = 0; + { + _pos = [_x] call FNC_GetPos; + _distance = _pos distance player; + _icon = _display displayCtrl (100 + _index); + if (_distance > 1 && _distance < 2500 && vehicle _x != vehicle player) then { + _pos set [2,(_pos select 2) + 1.5]; + _screen = worldToScreen _pos; + _text = composeText [image "\ca\ui\data\igui_side_unknown_ca.paa"," ",if (dayz_groupNameTags) then {name _x} else {""}]; + if (count _screen > 1) then { + _scale = if (_distance < 200) then {.3} else {1 min ((1 - (_distance - 3) / 15) max .3)}; + _icon ctrlSetStructuredText _text; + _icon ctrlSetPosition [(_screen select 0),(_screen select 1),.99,.65]; + _icon ctrlSetScale _scale; + _icon ctrlSetFade ((1 - _scale) / 2); + _icon ctrlCommit 0; + _icon ctrlShow true; + } else { + _icon ctrlShow false; + }; + } else { + _icon ctrlShow false; + }; + _index = _index + 1; + } count _group; + + if (dayz_oldGroupCount > count _group) then { + _display displayCtrl (100 + _index) ctrlShow false; + }; + + dayz_oldGroupCount = count _group; +}; + +while {true} do { + waitUntil {uiSleep 1; DRAW_TAGS}; + 80000 cutRsc ["DZ_GroupTags","PLAIN"]; + + while {DRAW_TAGS} do { + call _refresh; //Must be called to finish in current frame + uiSleep 0.01; + }; + + 80000 cutText ["","PLAIN"]; +}; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_19.FDF_Isle1_a/DZE_Hotfix_1.0.6.1A/groups/init.sqf b/Server Files/MPMissions/DayZ_Epoch_19.FDF_Isle1_a/DZE_Hotfix_1.0.6.1A/groups/init.sqf new file mode 100644 index 000000000..6a61f5db4 --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_19.FDF_Isle1_a/DZE_Hotfix_1.0.6.1A/groups/init.sqf @@ -0,0 +1,51 @@ +private ["_leader","_oldGroup","_savedGroup"]; + +uiSleep 1; +if (count (units group player) > 1) then { + [player] joinSilent grpNull; + diag_log "Clearing group"; +}; + +_savedGroup = (PVCDZ_plr_Login select 10) - [getPlayerUID player]; + +if (count _savedGroup > 0 && {!dayz_requireRadio or {dayz_requireRadio && "ItemRadio" in items player}}) then { + { + //Only auto join player into group if leader is in their savedGroup + _leader = leader _x; + if (getPlayerUID _leader in _savedGroup) exitWith { + _oldGroup = group player; + [player] joinSilent _x; + if (count (units _oldGroup) == 0) then {deleteGroup _oldGroup;}; + format[localize "STR_EPOCH_REJOINED_GROUP",name _leader] call dayz_rollingMessages; + + // Update saved group in DB + PVDZ_Server_UpdateGroup = [1,player]; + publicVariableServer "PVDZ_Server_UpdateGroup"; + }; + } count allGroups; +}; + +dayz_oldBodyCount = 0; +dayz_oldGroupCount = 0; +dayz_oldMemberCount = 0; +dayz_disbandGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\disband.sqf"; +dayz_filterGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\filter.sqf"; +dayz_getCrew = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\getCrew.sqf"; +dayz_getPlayer = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\getPlayer.sqf"; +dayz_inviteToGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\invite.sqf"; +dayz_joinGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\join.sqf"; +dayz_kickFromGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\kick.sqf"; +dayz_leaveGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\leave.sqf"; +dayz_openGroupDialog = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\open.sqf"; +dayz_pickGroupMember = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\pickGroupMember.sqf"; +dayz_pickPlayer = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\pickPlayer.sqf"; +dayz_promotePlayer = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\promote.sqf"; +dayz_rejectGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\reject.sqf"; +dayz_groupInit = true; + +//Initialize as script data type, no scriptNull in A2 +dayz_groupDisbandThread = 0 spawn {}; +dayz_groupLeaveThread = 0 spawn {}; +dayz_groupTags = 0 spawn {}; + +execVM "DZE_Hotfix_1.0.6.1A\groups\groupMarkers.sqf"; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_19.FDF_Isle1_a/DZE_Hotfix_1.0.6.1A/init/compiles.sqf b/Server Files/MPMissions/DayZ_Epoch_19.FDF_Isle1_a/DZE_Hotfix_1.0.6.1A/init/compiles.sqf new file mode 100644 index 000000000..e0a4a3c84 --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_19.FDF_Isle1_a/DZE_Hotfix_1.0.6.1A/init/compiles.sqf @@ -0,0 +1,47 @@ +if (!isDedicated) then { + dayz_NutritionSystem = { + private ["_type","_baseRegen","_nutrition","_calorieCount","_hungerCount","_thirstCount","_tempCount","_Thirst","_Hunger","_bloodregen","_golbalNutrition"]; + _type = _this select 0; + _baseRegen = _this select 1; + _nutrition = _this select 2; + _calorieCount = ((_this select 2) select 0); + _hungerCount = ((_this select 2) select 1); + _thirstCount = ((_this select 2) select 2); + _tempCount = ((_this select 2) select 3); + if (_calorieCount > 0) then { + _hungerCount = _hungerCount + (SleepFood * (((ln ((_calorieCount / 3610) * 100)) * (1 - (dayz_hunger / SleepFood))) / 100)); + _thirstCount = _thirstCount + (SleepWater * (((ln ((_calorieCount / 3610) * 100)) * (1 - (dayz_thirst / SleepWater))) / 100)); + }; + switch (_type) do { + case "FoodDrink": { + if (_hungerCount > 0) then { + if (dayz_hunger > _hungerCount) then { + dayz_hunger = dayz_hunger - (_hungerCount); + } else { + dayz_hunger = 0; + }; + }; + if (_thirstCount > 0) then { + if (dayz_thirst > _thirstCount) then { + dayz_thirst = dayz_thirst - _thirstCount; + } else { + dayz_thirst = 0; + }; + }; + if (_tempCount > 0) then { dayz_temperatur = dayz_temperatur + _tempCount; }; + if (_calorieCount > 0) then { dayz_nutrition = dayz_nutrition + _calorieCount; }; + if (_baseRegen > 0) then { r_player_bloodregen = r_player_bloodregen + _baseRegen; }; + }; + case "Working": { + if (_calorieCount > 0) then { dayz_nutrition = dayz_nutrition - (_calorieCount / ((DZE_NutritionDivisor select 0) max 0.1)); }; + if (_thirstCount > 0) then { dayz_thirst = dayz_thirst + (_thirstCount / ((DZE_NutritionDivisor select 1) max 0.1)); }; + if (_hungerCount > 0) then { dayz_hunger = dayz_hunger + (_hungerCount / ((DZE_NutritionDivisor select 2) max 0.1)); }; + if (_tempCount > 0) then { dayz_temperatur = dayz_temperatur + (_tempCount / ((DZE_NutritionDivisor select 3) max 0.1)); }; + }; + }; + dayz_thirst = (dayz_thirst min SleepWater) max 0; + dayz_hunger = (dayz_hunger min SleepFood) max 0; + dayz_temperatur = (dayz_temperatur min dayz_temperaturmax) max dayz_temperaturmin; + }; + Diag_Log "DZE_Hotfix_1.0.6.1A: dayz_NutritionSystem patched"; +}; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_19.FDF_Isle1_a/DZE_Hotfix_1.0.6.1A/system/progress_monitor.sqf b/Server Files/MPMissions/DayZ_Epoch_19.FDF_Isle1_a/DZE_Hotfix_1.0.6.1A/system/progress_monitor.sqf new file mode 100644 index 000000000..5660c9e1b --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_19.FDF_Isle1_a/DZE_Hotfix_1.0.6.1A/system/progress_monitor.sqf @@ -0,0 +1,43 @@ +private["_display","_control1","_control2","_watermark"]; +disableSerialization; +//diag_log "DEBUG: loadscreen guard started."; + +_timeoutStart=diag_ticktime; +while {true} do { + if (diag_ticktime - _timeoutStart >= 120) exitWith { + 1 cutText [localize "str_player_login_timeout", "PLAIN DOWN"]; + uiSleep 5; + endMission "END1"; + }; + if ((!isNil "Dayz_loginCompleted") and {(Dayz_loginCompleted)}) exitWith { + //diag_log [ __FILE__, __LINE__, "End loop"]; + + // Logo watermark: adding a logo in the bottom left corner of the screen with the server name + if (!isNil "dayZ_serverName") then { + 5 cutRsc ["wm_disp","PLAIN"]; + _watermark = (uiNamespace getVariable "wm_disp") displayCtrl 1; + _watermark ctrlSetText dayZ_serverName; + if (profileNamespace getVariable ["streamerMode",0] == 1) then {_watermark ctrlShow false;}; + }; + + if (dayz_enableRules && (profileNamespace getVariable ["streamerMode",0] == 0)) then { + dayz_rulesHandle = execVM "rules.sqf"; + }; + + if (dayz_groupSystem) then {execVM "DZE_Hotfix_1.0.6.1A\groups\init.sqf";}; + Diag_Log "DZE_Hotfix_1.0.6.1A: dayz_groupSystem patched"; + }; + _display = uiNameSpace getVariable "BIS_loadingScreen"; + if (!isNil "_display") then { + if (dayz_loadScreenMsg != "" ) then { + _control1 = _display displayctrl 8400; + _control1 ctrlSetText dayz_loadScreenMsg; + }; + _control2 = _display displayctrl 102; + _control2 ctrlSetText format["%1",floor(diag_ticktime - _timeoutStart)]; + }; + + uiSleep 0.2; + //diag_log [ __FILE__, __LINE__, "Looping..."]; +}; + diff --git a/Server Files/MPMissions/DayZ_Epoch_19.FDF_Isle1_a/init.sqf b/Server Files/MPMissions/DayZ_Epoch_19.FDF_Isle1_a/init.sqf index 5e9f1cc98..a4f1ebf89 100644 --- a/Server Files/MPMissions/DayZ_Epoch_19.FDF_Isle1_a/init.sqf +++ b/Server Files/MPMissions/DayZ_Epoch_19.FDF_Isle1_a/init.sqf @@ -79,12 +79,16 @@ onPreloadStarted "diag_log [diag_tickTime,'onPreloadStarted']; dayz_preloadFinis onPreloadFinished "diag_log [diag_tickTime,'onPreloadFinished']; dayz_preloadFinished = true;"; with uiNameSpace do {RscDMSLoad=nil;}; // autologon at next logon +_verCheck = (getText (configFile >> "CfgMods" >> "DayZ" >> "version") == "DayZ Epoch 1.0.6.1"); if (!isDedicated) then { - enableSaving [false, false]; - startLoadingScreen ["","RscDisplayLoadCustom"]; + enableSaving [false, false]; startLoadingScreen ["","RscDisplayLoadCustom"]; progressLoadingScreen 0; dayz_loadScreenMsg = localize 'str_login_missionFile'; - progress_monitor = [] execVM "\z\addons\dayz_code\system\progress_monitor.sqf"; + if (_verCheck) then { + progress_monitor = [] execVM "DZE_Hotfix_1.0.6.1A\system\progress_monitor.sqf"; + } else { + progress_monitor = [] execVM "\z\addons\dayz_code\system\progress_monitor.sqf"; + }; 0 cutText ['','BLACK',0]; 0 fadeSound 0; 0 fadeMusic 0; @@ -98,6 +102,9 @@ progressLoadingScreen 0.1; call compile preprocessFileLineNumbers "\z\addons\dayz_code\medical\setup_functions_med.sqf"; progressLoadingScreen 0.15; call compile preprocessFileLineNumbers "\z\addons\dayz_code\init\compiles.sqf"; +if (_verCheck) then { + #include "DZE_Hotfix_1.0.6.1A\init\compiles.sqf" +}; progressLoadingScreen 0.25; call compile preprocessFileLineNumbers "server_traders.sqf"; call compile preprocessFileLineNumbers "\z\addons\dayz_code\system\mission\fdf_isle1_a.sqf"; //Add trader city objects locally on every machine early diff --git a/Server Files/MPMissions/DayZ_Epoch_2.Utes/DZE_Hotfix_1.0.6.1A/groups/groupMarkers.sqf b/Server Files/MPMissions/DayZ_Epoch_2.Utes/DZE_Hotfix_1.0.6.1A/groups/groupMarkers.sqf new file mode 100644 index 000000000..e43cffbac --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_2.Utes/DZE_Hotfix_1.0.6.1A/groups/groupMarkers.sqf @@ -0,0 +1,75 @@ +private ["_bodyCount","_count","_group","_hasGPS","_index","_inGroup","_marker","_markBody","_markGroup","_markSelf","_name","_pos","_self","_vehicle"]; + +while {true} do { + _group = player call dayz_filterGroup; + _inGroup = count _group > 1; + + if (dayz_requireRadio && {_inGroup} && {!("ItemRadio" in items player)}) then { + [player] joinSilent grpNull; + if (!isNull findDisplay 80000) then {findDisplay 80000 closeDisplay 2;}; + terminate dayz_groupTags; + 80000 cutText ["","PLAIN"]; + localize "STR_EPOCH_LOST_RADIO_CONTACT" call dayz_rollingMessages; + } else { + if (_inGroup && scriptDone dayz_groupTags) then { + dayz_groupTags = execVM "DZE_Hotfix_1.0.6.1A\groups\groupTags.sqf"; + }; + + if (visibleMap or !isNull (uiNamespace getVariable["BIS_RscMiniMap",displayNull])) then { + _hasGPS = "ItemGPS" in items player; + _markBody = (dayz_markBody == 1 or (dayz_markBody == 2 && _hasGPS)); + _markGroup = (dayz_markGroup == 1 or (dayz_markGroup == 2 && _hasGPS)); + _markSelf = (dayz_markSelf == 1 or (dayz_markSelf == 2 && _hasGPS)); + + _index = 0; + { + _self = _x == player; + _vehicle = vehicle _x; + if ((_self or _markGroup) && (!_self or _markSelf) && (effectiveCommander _vehicle == _x)) then { + _pos = [_x] call FNC_GetPos; + deleteMarkerLocal format["groupMember%1",_index]; + _marker = createMarkerLocal [format["groupMember%1",_index],_pos]; + _marker setMarkerTypeLocal "DestroyedVehicle"; + _marker setMarkerTextLocal format ["%1",if (_vehicle == _x) then {name _x} else {_vehicle call dayz_getCrew}]; + _marker setMarkerColorLocal "ColorGreen"; + } else { + deleteMarkerLocal format["groupMember%1",_index]; + }; + _index = _index + 1; + } count _group; + + // Remove markers for group members that left + _count = count _group; + if (dayz_oldMemberCount > _count) then { + for "_i" from _count to dayz_oldMemberCount do {deleteMarkerLocal format["groupMember%1",_i];}; + }; + dayz_oldMemberCount = _count; + + if (_markBody) then { + _bodyCount = 0; + _name = name player; + { + if (_x getVariable["bodyName",""] == _name) then { + _bodyCount = _bodyCount + 1; + _pos = [_x] call FNC_GetPos; + deleteMarkerLocal format["MyBody%1",_bodyCount]; + _marker = createMarkerLocal [format["MyBody%1",_bodyCount],_pos]; + _marker setMarkerTypeLocal "DestroyedVehicle"; + _marker setMarkerTextLocal localize "STR_EPOCH_RIP"; + _marker setMarkerColorLocal "ColorRed"; + }; + } count allDead; + + // Remove markers for bodies that were deleted + if (dayz_oldBodyCount > _bodyCount) then { + for "_i" from _bodyCount to dayz_oldBodyCount do {deleteMarkerLocal format["MyBody%1",_i];}; + }; + dayz_oldBodyCount = _bodyCount; + } else { + for "_i" from 1 to dayz_oldBodyCount do {deleteMarkerLocal format["MyBody%1",_i];}; + }; + }; + }; + + uiSleep 1; +}; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_2.Utes/DZE_Hotfix_1.0.6.1A/groups/groupTags.sqf b/Server Files/MPMissions/DayZ_Epoch_2.Utes/DZE_Hotfix_1.0.6.1A/groups/groupTags.sqf new file mode 100644 index 000000000..0e9d72539 --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_2.Utes/DZE_Hotfix_1.0.6.1A/groups/groupTags.sqf @@ -0,0 +1,52 @@ +#define DRAW_TAGS (!visibleMap && count units group player > 1) //Use && cameraView != "GROUP" if tactical view is allowed (blocked by default) +private ["_display","_distance","_group","_icon","_index","_pos","_scale","_screen","_text"]; +disableSerialization; + +_refresh = { + _group = player call dayz_filterGroup; + + _display = uiNamespace getVariable "DZ_GroupTags"; + _index = 0; + { + _pos = [_x] call FNC_GetPos; + _distance = _pos distance player; + _icon = _display displayCtrl (100 + _index); + if (_distance > 1 && _distance < 2500 && vehicle _x != vehicle player) then { + _pos set [2,(_pos select 2) + 1.5]; + _screen = worldToScreen _pos; + _text = composeText [image "\ca\ui\data\igui_side_unknown_ca.paa"," ",if (dayz_groupNameTags) then {name _x} else {""}]; + if (count _screen > 1) then { + _scale = if (_distance < 200) then {.3} else {1 min ((1 - (_distance - 3) / 15) max .3)}; + _icon ctrlSetStructuredText _text; + _icon ctrlSetPosition [(_screen select 0),(_screen select 1),.99,.65]; + _icon ctrlSetScale _scale; + _icon ctrlSetFade ((1 - _scale) / 2); + _icon ctrlCommit 0; + _icon ctrlShow true; + } else { + _icon ctrlShow false; + }; + } else { + _icon ctrlShow false; + }; + _index = _index + 1; + } count _group; + + if (dayz_oldGroupCount > count _group) then { + _display displayCtrl (100 + _index) ctrlShow false; + }; + + dayz_oldGroupCount = count _group; +}; + +while {true} do { + waitUntil {uiSleep 1; DRAW_TAGS}; + 80000 cutRsc ["DZ_GroupTags","PLAIN"]; + + while {DRAW_TAGS} do { + call _refresh; //Must be called to finish in current frame + uiSleep 0.01; + }; + + 80000 cutText ["","PLAIN"]; +}; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_2.Utes/DZE_Hotfix_1.0.6.1A/groups/init.sqf b/Server Files/MPMissions/DayZ_Epoch_2.Utes/DZE_Hotfix_1.0.6.1A/groups/init.sqf new file mode 100644 index 000000000..6a61f5db4 --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_2.Utes/DZE_Hotfix_1.0.6.1A/groups/init.sqf @@ -0,0 +1,51 @@ +private ["_leader","_oldGroup","_savedGroup"]; + +uiSleep 1; +if (count (units group player) > 1) then { + [player] joinSilent grpNull; + diag_log "Clearing group"; +}; + +_savedGroup = (PVCDZ_plr_Login select 10) - [getPlayerUID player]; + +if (count _savedGroup > 0 && {!dayz_requireRadio or {dayz_requireRadio && "ItemRadio" in items player}}) then { + { + //Only auto join player into group if leader is in their savedGroup + _leader = leader _x; + if (getPlayerUID _leader in _savedGroup) exitWith { + _oldGroup = group player; + [player] joinSilent _x; + if (count (units _oldGroup) == 0) then {deleteGroup _oldGroup;}; + format[localize "STR_EPOCH_REJOINED_GROUP",name _leader] call dayz_rollingMessages; + + // Update saved group in DB + PVDZ_Server_UpdateGroup = [1,player]; + publicVariableServer "PVDZ_Server_UpdateGroup"; + }; + } count allGroups; +}; + +dayz_oldBodyCount = 0; +dayz_oldGroupCount = 0; +dayz_oldMemberCount = 0; +dayz_disbandGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\disband.sqf"; +dayz_filterGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\filter.sqf"; +dayz_getCrew = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\getCrew.sqf"; +dayz_getPlayer = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\getPlayer.sqf"; +dayz_inviteToGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\invite.sqf"; +dayz_joinGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\join.sqf"; +dayz_kickFromGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\kick.sqf"; +dayz_leaveGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\leave.sqf"; +dayz_openGroupDialog = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\open.sqf"; +dayz_pickGroupMember = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\pickGroupMember.sqf"; +dayz_pickPlayer = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\pickPlayer.sqf"; +dayz_promotePlayer = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\promote.sqf"; +dayz_rejectGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\reject.sqf"; +dayz_groupInit = true; + +//Initialize as script data type, no scriptNull in A2 +dayz_groupDisbandThread = 0 spawn {}; +dayz_groupLeaveThread = 0 spawn {}; +dayz_groupTags = 0 spawn {}; + +execVM "DZE_Hotfix_1.0.6.1A\groups\groupMarkers.sqf"; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_2.Utes/DZE_Hotfix_1.0.6.1A/init/compiles.sqf b/Server Files/MPMissions/DayZ_Epoch_2.Utes/DZE_Hotfix_1.0.6.1A/init/compiles.sqf new file mode 100644 index 000000000..e0a4a3c84 --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_2.Utes/DZE_Hotfix_1.0.6.1A/init/compiles.sqf @@ -0,0 +1,47 @@ +if (!isDedicated) then { + dayz_NutritionSystem = { + private ["_type","_baseRegen","_nutrition","_calorieCount","_hungerCount","_thirstCount","_tempCount","_Thirst","_Hunger","_bloodregen","_golbalNutrition"]; + _type = _this select 0; + _baseRegen = _this select 1; + _nutrition = _this select 2; + _calorieCount = ((_this select 2) select 0); + _hungerCount = ((_this select 2) select 1); + _thirstCount = ((_this select 2) select 2); + _tempCount = ((_this select 2) select 3); + if (_calorieCount > 0) then { + _hungerCount = _hungerCount + (SleepFood * (((ln ((_calorieCount / 3610) * 100)) * (1 - (dayz_hunger / SleepFood))) / 100)); + _thirstCount = _thirstCount + (SleepWater * (((ln ((_calorieCount / 3610) * 100)) * (1 - (dayz_thirst / SleepWater))) / 100)); + }; + switch (_type) do { + case "FoodDrink": { + if (_hungerCount > 0) then { + if (dayz_hunger > _hungerCount) then { + dayz_hunger = dayz_hunger - (_hungerCount); + } else { + dayz_hunger = 0; + }; + }; + if (_thirstCount > 0) then { + if (dayz_thirst > _thirstCount) then { + dayz_thirst = dayz_thirst - _thirstCount; + } else { + dayz_thirst = 0; + }; + }; + if (_tempCount > 0) then { dayz_temperatur = dayz_temperatur + _tempCount; }; + if (_calorieCount > 0) then { dayz_nutrition = dayz_nutrition + _calorieCount; }; + if (_baseRegen > 0) then { r_player_bloodregen = r_player_bloodregen + _baseRegen; }; + }; + case "Working": { + if (_calorieCount > 0) then { dayz_nutrition = dayz_nutrition - (_calorieCount / ((DZE_NutritionDivisor select 0) max 0.1)); }; + if (_thirstCount > 0) then { dayz_thirst = dayz_thirst + (_thirstCount / ((DZE_NutritionDivisor select 1) max 0.1)); }; + if (_hungerCount > 0) then { dayz_hunger = dayz_hunger + (_hungerCount / ((DZE_NutritionDivisor select 2) max 0.1)); }; + if (_tempCount > 0) then { dayz_temperatur = dayz_temperatur + (_tempCount / ((DZE_NutritionDivisor select 3) max 0.1)); }; + }; + }; + dayz_thirst = (dayz_thirst min SleepWater) max 0; + dayz_hunger = (dayz_hunger min SleepFood) max 0; + dayz_temperatur = (dayz_temperatur min dayz_temperaturmax) max dayz_temperaturmin; + }; + Diag_Log "DZE_Hotfix_1.0.6.1A: dayz_NutritionSystem patched"; +}; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_2.Utes/DZE_Hotfix_1.0.6.1A/system/progress_monitor.sqf b/Server Files/MPMissions/DayZ_Epoch_2.Utes/DZE_Hotfix_1.0.6.1A/system/progress_monitor.sqf new file mode 100644 index 000000000..5660c9e1b --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_2.Utes/DZE_Hotfix_1.0.6.1A/system/progress_monitor.sqf @@ -0,0 +1,43 @@ +private["_display","_control1","_control2","_watermark"]; +disableSerialization; +//diag_log "DEBUG: loadscreen guard started."; + +_timeoutStart=diag_ticktime; +while {true} do { + if (diag_ticktime - _timeoutStart >= 120) exitWith { + 1 cutText [localize "str_player_login_timeout", "PLAIN DOWN"]; + uiSleep 5; + endMission "END1"; + }; + if ((!isNil "Dayz_loginCompleted") and {(Dayz_loginCompleted)}) exitWith { + //diag_log [ __FILE__, __LINE__, "End loop"]; + + // Logo watermark: adding a logo in the bottom left corner of the screen with the server name + if (!isNil "dayZ_serverName") then { + 5 cutRsc ["wm_disp","PLAIN"]; + _watermark = (uiNamespace getVariable "wm_disp") displayCtrl 1; + _watermark ctrlSetText dayZ_serverName; + if (profileNamespace getVariable ["streamerMode",0] == 1) then {_watermark ctrlShow false;}; + }; + + if (dayz_enableRules && (profileNamespace getVariable ["streamerMode",0] == 0)) then { + dayz_rulesHandle = execVM "rules.sqf"; + }; + + if (dayz_groupSystem) then {execVM "DZE_Hotfix_1.0.6.1A\groups\init.sqf";}; + Diag_Log "DZE_Hotfix_1.0.6.1A: dayz_groupSystem patched"; + }; + _display = uiNameSpace getVariable "BIS_loadingScreen"; + if (!isNil "_display") then { + if (dayz_loadScreenMsg != "" ) then { + _control1 = _display displayctrl 8400; + _control1 ctrlSetText dayz_loadScreenMsg; + }; + _control2 = _display displayctrl 102; + _control2 ctrlSetText format["%1",floor(diag_ticktime - _timeoutStart)]; + }; + + uiSleep 0.2; + //diag_log [ __FILE__, __LINE__, "Looping..."]; +}; + diff --git a/Server Files/MPMissions/DayZ_Epoch_2.Utes/init.sqf b/Server Files/MPMissions/DayZ_Epoch_2.Utes/init.sqf index b958de3a9..2b8d04f49 100644 --- a/Server Files/MPMissions/DayZ_Epoch_2.Utes/init.sqf +++ b/Server Files/MPMissions/DayZ_Epoch_2.Utes/init.sqf @@ -79,12 +79,16 @@ onPreloadStarted "diag_log [diag_tickTime,'onPreloadStarted']; dayz_preloadFinis onPreloadFinished "diag_log [diag_tickTime,'onPreloadFinished']; dayz_preloadFinished = true;"; with uiNameSpace do {RscDMSLoad=nil;}; // autologon at next logon +_verCheck = (getText (configFile >> "CfgMods" >> "DayZ" >> "version") == "DayZ Epoch 1.0.6.1"); if (!isDedicated) then { - enableSaving [false, false]; - startLoadingScreen ["","RscDisplayLoadCustom"]; + enableSaving [false, false]; startLoadingScreen ["","RscDisplayLoadCustom"]; progressLoadingScreen 0; dayz_loadScreenMsg = localize 'str_login_missionFile'; - progress_monitor = [] execVM "\z\addons\dayz_code\system\progress_monitor.sqf"; + if (_verCheck) then { + progress_monitor = [] execVM "DZE_Hotfix_1.0.6.1A\system\progress_monitor.sqf"; + } else { + progress_monitor = [] execVM "\z\addons\dayz_code\system\progress_monitor.sqf"; + }; 0 cutText ['','BLACK',0]; 0 fadeSound 0; 0 fadeMusic 0; @@ -98,6 +102,9 @@ progressLoadingScreen 0.1; call compile preprocessFileLineNumbers "\z\addons\dayz_code\medical\setup_functions_med.sqf"; progressLoadingScreen 0.15; call compile preprocessFileLineNumbers "\z\addons\dayz_code\init\compiles.sqf"; +if (_verCheck) then { + #include "DZE_Hotfix_1.0.6.1A\init\compiles.sqf" +}; progressLoadingScreen 0.25; call compile preprocessFileLineNumbers "server_traders.sqf"; call compile preprocessFileLineNumbers "\z\addons\dayz_code\system\mission\utes.sqf"; //Add trader city objects locally on every machine early diff --git a/Server Files/MPMissions/DayZ_Epoch_20.fapovo/DZE_Hotfix_1.0.6.1A/groups/groupMarkers.sqf b/Server Files/MPMissions/DayZ_Epoch_20.fapovo/DZE_Hotfix_1.0.6.1A/groups/groupMarkers.sqf new file mode 100644 index 000000000..e43cffbac --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_20.fapovo/DZE_Hotfix_1.0.6.1A/groups/groupMarkers.sqf @@ -0,0 +1,75 @@ +private ["_bodyCount","_count","_group","_hasGPS","_index","_inGroup","_marker","_markBody","_markGroup","_markSelf","_name","_pos","_self","_vehicle"]; + +while {true} do { + _group = player call dayz_filterGroup; + _inGroup = count _group > 1; + + if (dayz_requireRadio && {_inGroup} && {!("ItemRadio" in items player)}) then { + [player] joinSilent grpNull; + if (!isNull findDisplay 80000) then {findDisplay 80000 closeDisplay 2;}; + terminate dayz_groupTags; + 80000 cutText ["","PLAIN"]; + localize "STR_EPOCH_LOST_RADIO_CONTACT" call dayz_rollingMessages; + } else { + if (_inGroup && scriptDone dayz_groupTags) then { + dayz_groupTags = execVM "DZE_Hotfix_1.0.6.1A\groups\groupTags.sqf"; + }; + + if (visibleMap or !isNull (uiNamespace getVariable["BIS_RscMiniMap",displayNull])) then { + _hasGPS = "ItemGPS" in items player; + _markBody = (dayz_markBody == 1 or (dayz_markBody == 2 && _hasGPS)); + _markGroup = (dayz_markGroup == 1 or (dayz_markGroup == 2 && _hasGPS)); + _markSelf = (dayz_markSelf == 1 or (dayz_markSelf == 2 && _hasGPS)); + + _index = 0; + { + _self = _x == player; + _vehicle = vehicle _x; + if ((_self or _markGroup) && (!_self or _markSelf) && (effectiveCommander _vehicle == _x)) then { + _pos = [_x] call FNC_GetPos; + deleteMarkerLocal format["groupMember%1",_index]; + _marker = createMarkerLocal [format["groupMember%1",_index],_pos]; + _marker setMarkerTypeLocal "DestroyedVehicle"; + _marker setMarkerTextLocal format ["%1",if (_vehicle == _x) then {name _x} else {_vehicle call dayz_getCrew}]; + _marker setMarkerColorLocal "ColorGreen"; + } else { + deleteMarkerLocal format["groupMember%1",_index]; + }; + _index = _index + 1; + } count _group; + + // Remove markers for group members that left + _count = count _group; + if (dayz_oldMemberCount > _count) then { + for "_i" from _count to dayz_oldMemberCount do {deleteMarkerLocal format["groupMember%1",_i];}; + }; + dayz_oldMemberCount = _count; + + if (_markBody) then { + _bodyCount = 0; + _name = name player; + { + if (_x getVariable["bodyName",""] == _name) then { + _bodyCount = _bodyCount + 1; + _pos = [_x] call FNC_GetPos; + deleteMarkerLocal format["MyBody%1",_bodyCount]; + _marker = createMarkerLocal [format["MyBody%1",_bodyCount],_pos]; + _marker setMarkerTypeLocal "DestroyedVehicle"; + _marker setMarkerTextLocal localize "STR_EPOCH_RIP"; + _marker setMarkerColorLocal "ColorRed"; + }; + } count allDead; + + // Remove markers for bodies that were deleted + if (dayz_oldBodyCount > _bodyCount) then { + for "_i" from _bodyCount to dayz_oldBodyCount do {deleteMarkerLocal format["MyBody%1",_i];}; + }; + dayz_oldBodyCount = _bodyCount; + } else { + for "_i" from 1 to dayz_oldBodyCount do {deleteMarkerLocal format["MyBody%1",_i];}; + }; + }; + }; + + uiSleep 1; +}; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_20.fapovo/DZE_Hotfix_1.0.6.1A/groups/groupTags.sqf b/Server Files/MPMissions/DayZ_Epoch_20.fapovo/DZE_Hotfix_1.0.6.1A/groups/groupTags.sqf new file mode 100644 index 000000000..0e9d72539 --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_20.fapovo/DZE_Hotfix_1.0.6.1A/groups/groupTags.sqf @@ -0,0 +1,52 @@ +#define DRAW_TAGS (!visibleMap && count units group player > 1) //Use && cameraView != "GROUP" if tactical view is allowed (blocked by default) +private ["_display","_distance","_group","_icon","_index","_pos","_scale","_screen","_text"]; +disableSerialization; + +_refresh = { + _group = player call dayz_filterGroup; + + _display = uiNamespace getVariable "DZ_GroupTags"; + _index = 0; + { + _pos = [_x] call FNC_GetPos; + _distance = _pos distance player; + _icon = _display displayCtrl (100 + _index); + if (_distance > 1 && _distance < 2500 && vehicle _x != vehicle player) then { + _pos set [2,(_pos select 2) + 1.5]; + _screen = worldToScreen _pos; + _text = composeText [image "\ca\ui\data\igui_side_unknown_ca.paa"," ",if (dayz_groupNameTags) then {name _x} else {""}]; + if (count _screen > 1) then { + _scale = if (_distance < 200) then {.3} else {1 min ((1 - (_distance - 3) / 15) max .3)}; + _icon ctrlSetStructuredText _text; + _icon ctrlSetPosition [(_screen select 0),(_screen select 1),.99,.65]; + _icon ctrlSetScale _scale; + _icon ctrlSetFade ((1 - _scale) / 2); + _icon ctrlCommit 0; + _icon ctrlShow true; + } else { + _icon ctrlShow false; + }; + } else { + _icon ctrlShow false; + }; + _index = _index + 1; + } count _group; + + if (dayz_oldGroupCount > count _group) then { + _display displayCtrl (100 + _index) ctrlShow false; + }; + + dayz_oldGroupCount = count _group; +}; + +while {true} do { + waitUntil {uiSleep 1; DRAW_TAGS}; + 80000 cutRsc ["DZ_GroupTags","PLAIN"]; + + while {DRAW_TAGS} do { + call _refresh; //Must be called to finish in current frame + uiSleep 0.01; + }; + + 80000 cutText ["","PLAIN"]; +}; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_20.fapovo/DZE_Hotfix_1.0.6.1A/groups/init.sqf b/Server Files/MPMissions/DayZ_Epoch_20.fapovo/DZE_Hotfix_1.0.6.1A/groups/init.sqf new file mode 100644 index 000000000..6a61f5db4 --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_20.fapovo/DZE_Hotfix_1.0.6.1A/groups/init.sqf @@ -0,0 +1,51 @@ +private ["_leader","_oldGroup","_savedGroup"]; + +uiSleep 1; +if (count (units group player) > 1) then { + [player] joinSilent grpNull; + diag_log "Clearing group"; +}; + +_savedGroup = (PVCDZ_plr_Login select 10) - [getPlayerUID player]; + +if (count _savedGroup > 0 && {!dayz_requireRadio or {dayz_requireRadio && "ItemRadio" in items player}}) then { + { + //Only auto join player into group if leader is in their savedGroup + _leader = leader _x; + if (getPlayerUID _leader in _savedGroup) exitWith { + _oldGroup = group player; + [player] joinSilent _x; + if (count (units _oldGroup) == 0) then {deleteGroup _oldGroup;}; + format[localize "STR_EPOCH_REJOINED_GROUP",name _leader] call dayz_rollingMessages; + + // Update saved group in DB + PVDZ_Server_UpdateGroup = [1,player]; + publicVariableServer "PVDZ_Server_UpdateGroup"; + }; + } count allGroups; +}; + +dayz_oldBodyCount = 0; +dayz_oldGroupCount = 0; +dayz_oldMemberCount = 0; +dayz_disbandGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\disband.sqf"; +dayz_filterGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\filter.sqf"; +dayz_getCrew = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\getCrew.sqf"; +dayz_getPlayer = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\getPlayer.sqf"; +dayz_inviteToGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\invite.sqf"; +dayz_joinGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\join.sqf"; +dayz_kickFromGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\kick.sqf"; +dayz_leaveGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\leave.sqf"; +dayz_openGroupDialog = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\open.sqf"; +dayz_pickGroupMember = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\pickGroupMember.sqf"; +dayz_pickPlayer = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\pickPlayer.sqf"; +dayz_promotePlayer = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\promote.sqf"; +dayz_rejectGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\reject.sqf"; +dayz_groupInit = true; + +//Initialize as script data type, no scriptNull in A2 +dayz_groupDisbandThread = 0 spawn {}; +dayz_groupLeaveThread = 0 spawn {}; +dayz_groupTags = 0 spawn {}; + +execVM "DZE_Hotfix_1.0.6.1A\groups\groupMarkers.sqf"; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_20.fapovo/DZE_Hotfix_1.0.6.1A/init/compiles.sqf b/Server Files/MPMissions/DayZ_Epoch_20.fapovo/DZE_Hotfix_1.0.6.1A/init/compiles.sqf new file mode 100644 index 000000000..e0a4a3c84 --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_20.fapovo/DZE_Hotfix_1.0.6.1A/init/compiles.sqf @@ -0,0 +1,47 @@ +if (!isDedicated) then { + dayz_NutritionSystem = { + private ["_type","_baseRegen","_nutrition","_calorieCount","_hungerCount","_thirstCount","_tempCount","_Thirst","_Hunger","_bloodregen","_golbalNutrition"]; + _type = _this select 0; + _baseRegen = _this select 1; + _nutrition = _this select 2; + _calorieCount = ((_this select 2) select 0); + _hungerCount = ((_this select 2) select 1); + _thirstCount = ((_this select 2) select 2); + _tempCount = ((_this select 2) select 3); + if (_calorieCount > 0) then { + _hungerCount = _hungerCount + (SleepFood * (((ln ((_calorieCount / 3610) * 100)) * (1 - (dayz_hunger / SleepFood))) / 100)); + _thirstCount = _thirstCount + (SleepWater * (((ln ((_calorieCount / 3610) * 100)) * (1 - (dayz_thirst / SleepWater))) / 100)); + }; + switch (_type) do { + case "FoodDrink": { + if (_hungerCount > 0) then { + if (dayz_hunger > _hungerCount) then { + dayz_hunger = dayz_hunger - (_hungerCount); + } else { + dayz_hunger = 0; + }; + }; + if (_thirstCount > 0) then { + if (dayz_thirst > _thirstCount) then { + dayz_thirst = dayz_thirst - _thirstCount; + } else { + dayz_thirst = 0; + }; + }; + if (_tempCount > 0) then { dayz_temperatur = dayz_temperatur + _tempCount; }; + if (_calorieCount > 0) then { dayz_nutrition = dayz_nutrition + _calorieCount; }; + if (_baseRegen > 0) then { r_player_bloodregen = r_player_bloodregen + _baseRegen; }; + }; + case "Working": { + if (_calorieCount > 0) then { dayz_nutrition = dayz_nutrition - (_calorieCount / ((DZE_NutritionDivisor select 0) max 0.1)); }; + if (_thirstCount > 0) then { dayz_thirst = dayz_thirst + (_thirstCount / ((DZE_NutritionDivisor select 1) max 0.1)); }; + if (_hungerCount > 0) then { dayz_hunger = dayz_hunger + (_hungerCount / ((DZE_NutritionDivisor select 2) max 0.1)); }; + if (_tempCount > 0) then { dayz_temperatur = dayz_temperatur + (_tempCount / ((DZE_NutritionDivisor select 3) max 0.1)); }; + }; + }; + dayz_thirst = (dayz_thirst min SleepWater) max 0; + dayz_hunger = (dayz_hunger min SleepFood) max 0; + dayz_temperatur = (dayz_temperatur min dayz_temperaturmax) max dayz_temperaturmin; + }; + Diag_Log "DZE_Hotfix_1.0.6.1A: dayz_NutritionSystem patched"; +}; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_20.fapovo/DZE_Hotfix_1.0.6.1A/system/progress_monitor.sqf b/Server Files/MPMissions/DayZ_Epoch_20.fapovo/DZE_Hotfix_1.0.6.1A/system/progress_monitor.sqf new file mode 100644 index 000000000..5660c9e1b --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_20.fapovo/DZE_Hotfix_1.0.6.1A/system/progress_monitor.sqf @@ -0,0 +1,43 @@ +private["_display","_control1","_control2","_watermark"]; +disableSerialization; +//diag_log "DEBUG: loadscreen guard started."; + +_timeoutStart=diag_ticktime; +while {true} do { + if (diag_ticktime - _timeoutStart >= 120) exitWith { + 1 cutText [localize "str_player_login_timeout", "PLAIN DOWN"]; + uiSleep 5; + endMission "END1"; + }; + if ((!isNil "Dayz_loginCompleted") and {(Dayz_loginCompleted)}) exitWith { + //diag_log [ __FILE__, __LINE__, "End loop"]; + + // Logo watermark: adding a logo in the bottom left corner of the screen with the server name + if (!isNil "dayZ_serverName") then { + 5 cutRsc ["wm_disp","PLAIN"]; + _watermark = (uiNamespace getVariable "wm_disp") displayCtrl 1; + _watermark ctrlSetText dayZ_serverName; + if (profileNamespace getVariable ["streamerMode",0] == 1) then {_watermark ctrlShow false;}; + }; + + if (dayz_enableRules && (profileNamespace getVariable ["streamerMode",0] == 0)) then { + dayz_rulesHandle = execVM "rules.sqf"; + }; + + if (dayz_groupSystem) then {execVM "DZE_Hotfix_1.0.6.1A\groups\init.sqf";}; + Diag_Log "DZE_Hotfix_1.0.6.1A: dayz_groupSystem patched"; + }; + _display = uiNameSpace getVariable "BIS_loadingScreen"; + if (!isNil "_display") then { + if (dayz_loadScreenMsg != "" ) then { + _control1 = _display displayctrl 8400; + _control1 ctrlSetText dayz_loadScreenMsg; + }; + _control2 = _display displayctrl 102; + _control2 ctrlSetText format["%1",floor(diag_ticktime - _timeoutStart)]; + }; + + uiSleep 0.2; + //diag_log [ __FILE__, __LINE__, "Looping..."]; +}; + diff --git a/Server Files/MPMissions/DayZ_Epoch_20.fapovo/init.sqf b/Server Files/MPMissions/DayZ_Epoch_20.fapovo/init.sqf index 55ffd8387..933343c62 100644 --- a/Server Files/MPMissions/DayZ_Epoch_20.fapovo/init.sqf +++ b/Server Files/MPMissions/DayZ_Epoch_20.fapovo/init.sqf @@ -79,12 +79,16 @@ onPreloadStarted "diag_log [diag_tickTime,'onPreloadStarted']; dayz_preloadFinis onPreloadFinished "diag_log [diag_tickTime,'onPreloadFinished']; dayz_preloadFinished = true;"; with uiNameSpace do {RscDMSLoad=nil;}; // autologon at next logon +_verCheck = (getText (configFile >> "CfgMods" >> "DayZ" >> "version") == "DayZ Epoch 1.0.6.1"); if (!isDedicated) then { - enableSaving [false, false]; - startLoadingScreen ["","RscDisplayLoadCustom"]; + enableSaving [false, false]; startLoadingScreen ["","RscDisplayLoadCustom"]; progressLoadingScreen 0; dayz_loadScreenMsg = localize 'str_login_missionFile'; - progress_monitor = [] execVM "\z\addons\dayz_code\system\progress_monitor.sqf"; + if (_verCheck) then { + progress_monitor = [] execVM "DZE_Hotfix_1.0.6.1A\system\progress_monitor.sqf"; + } else { + progress_monitor = [] execVM "\z\addons\dayz_code\system\progress_monitor.sqf"; + }; 0 cutText ['','BLACK',0]; 0 fadeSound 0; 0 fadeMusic 0; @@ -98,6 +102,9 @@ progressLoadingScreen 0.1; call compile preprocessFileLineNumbers "\z\addons\dayz_code\medical\setup_functions_med.sqf"; progressLoadingScreen 0.15; call compile preprocessFileLineNumbers "\z\addons\dayz_code\init\compiles.sqf"; +if (_verCheck) then { + #include "DZE_Hotfix_1.0.6.1A\init\compiles.sqf" +}; progressLoadingScreen 0.25; call compile preprocessFileLineNumbers "server_traders.sqf"; call compile preprocessFileLineNumbers "\z\addons\dayz_code\system\mission\fapovo.sqf"; //Add trader city objects locally on every machine early diff --git a/Server Files/MPMissions/DayZ_Epoch_21.Caribou/DZE_Hotfix_1.0.6.1A/groups/groupMarkers.sqf b/Server Files/MPMissions/DayZ_Epoch_21.Caribou/DZE_Hotfix_1.0.6.1A/groups/groupMarkers.sqf new file mode 100644 index 000000000..e43cffbac --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_21.Caribou/DZE_Hotfix_1.0.6.1A/groups/groupMarkers.sqf @@ -0,0 +1,75 @@ +private ["_bodyCount","_count","_group","_hasGPS","_index","_inGroup","_marker","_markBody","_markGroup","_markSelf","_name","_pos","_self","_vehicle"]; + +while {true} do { + _group = player call dayz_filterGroup; + _inGroup = count _group > 1; + + if (dayz_requireRadio && {_inGroup} && {!("ItemRadio" in items player)}) then { + [player] joinSilent grpNull; + if (!isNull findDisplay 80000) then {findDisplay 80000 closeDisplay 2;}; + terminate dayz_groupTags; + 80000 cutText ["","PLAIN"]; + localize "STR_EPOCH_LOST_RADIO_CONTACT" call dayz_rollingMessages; + } else { + if (_inGroup && scriptDone dayz_groupTags) then { + dayz_groupTags = execVM "DZE_Hotfix_1.0.6.1A\groups\groupTags.sqf"; + }; + + if (visibleMap or !isNull (uiNamespace getVariable["BIS_RscMiniMap",displayNull])) then { + _hasGPS = "ItemGPS" in items player; + _markBody = (dayz_markBody == 1 or (dayz_markBody == 2 && _hasGPS)); + _markGroup = (dayz_markGroup == 1 or (dayz_markGroup == 2 && _hasGPS)); + _markSelf = (dayz_markSelf == 1 or (dayz_markSelf == 2 && _hasGPS)); + + _index = 0; + { + _self = _x == player; + _vehicle = vehicle _x; + if ((_self or _markGroup) && (!_self or _markSelf) && (effectiveCommander _vehicle == _x)) then { + _pos = [_x] call FNC_GetPos; + deleteMarkerLocal format["groupMember%1",_index]; + _marker = createMarkerLocal [format["groupMember%1",_index],_pos]; + _marker setMarkerTypeLocal "DestroyedVehicle"; + _marker setMarkerTextLocal format ["%1",if (_vehicle == _x) then {name _x} else {_vehicle call dayz_getCrew}]; + _marker setMarkerColorLocal "ColorGreen"; + } else { + deleteMarkerLocal format["groupMember%1",_index]; + }; + _index = _index + 1; + } count _group; + + // Remove markers for group members that left + _count = count _group; + if (dayz_oldMemberCount > _count) then { + for "_i" from _count to dayz_oldMemberCount do {deleteMarkerLocal format["groupMember%1",_i];}; + }; + dayz_oldMemberCount = _count; + + if (_markBody) then { + _bodyCount = 0; + _name = name player; + { + if (_x getVariable["bodyName",""] == _name) then { + _bodyCount = _bodyCount + 1; + _pos = [_x] call FNC_GetPos; + deleteMarkerLocal format["MyBody%1",_bodyCount]; + _marker = createMarkerLocal [format["MyBody%1",_bodyCount],_pos]; + _marker setMarkerTypeLocal "DestroyedVehicle"; + _marker setMarkerTextLocal localize "STR_EPOCH_RIP"; + _marker setMarkerColorLocal "ColorRed"; + }; + } count allDead; + + // Remove markers for bodies that were deleted + if (dayz_oldBodyCount > _bodyCount) then { + for "_i" from _bodyCount to dayz_oldBodyCount do {deleteMarkerLocal format["MyBody%1",_i];}; + }; + dayz_oldBodyCount = _bodyCount; + } else { + for "_i" from 1 to dayz_oldBodyCount do {deleteMarkerLocal format["MyBody%1",_i];}; + }; + }; + }; + + uiSleep 1; +}; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_21.Caribou/DZE_Hotfix_1.0.6.1A/groups/groupTags.sqf b/Server Files/MPMissions/DayZ_Epoch_21.Caribou/DZE_Hotfix_1.0.6.1A/groups/groupTags.sqf new file mode 100644 index 000000000..0e9d72539 --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_21.Caribou/DZE_Hotfix_1.0.6.1A/groups/groupTags.sqf @@ -0,0 +1,52 @@ +#define DRAW_TAGS (!visibleMap && count units group player > 1) //Use && cameraView != "GROUP" if tactical view is allowed (blocked by default) +private ["_display","_distance","_group","_icon","_index","_pos","_scale","_screen","_text"]; +disableSerialization; + +_refresh = { + _group = player call dayz_filterGroup; + + _display = uiNamespace getVariable "DZ_GroupTags"; + _index = 0; + { + _pos = [_x] call FNC_GetPos; + _distance = _pos distance player; + _icon = _display displayCtrl (100 + _index); + if (_distance > 1 && _distance < 2500 && vehicle _x != vehicle player) then { + _pos set [2,(_pos select 2) + 1.5]; + _screen = worldToScreen _pos; + _text = composeText [image "\ca\ui\data\igui_side_unknown_ca.paa"," ",if (dayz_groupNameTags) then {name _x} else {""}]; + if (count _screen > 1) then { + _scale = if (_distance < 200) then {.3} else {1 min ((1 - (_distance - 3) / 15) max .3)}; + _icon ctrlSetStructuredText _text; + _icon ctrlSetPosition [(_screen select 0),(_screen select 1),.99,.65]; + _icon ctrlSetScale _scale; + _icon ctrlSetFade ((1 - _scale) / 2); + _icon ctrlCommit 0; + _icon ctrlShow true; + } else { + _icon ctrlShow false; + }; + } else { + _icon ctrlShow false; + }; + _index = _index + 1; + } count _group; + + if (dayz_oldGroupCount > count _group) then { + _display displayCtrl (100 + _index) ctrlShow false; + }; + + dayz_oldGroupCount = count _group; +}; + +while {true} do { + waitUntil {uiSleep 1; DRAW_TAGS}; + 80000 cutRsc ["DZ_GroupTags","PLAIN"]; + + while {DRAW_TAGS} do { + call _refresh; //Must be called to finish in current frame + uiSleep 0.01; + }; + + 80000 cutText ["","PLAIN"]; +}; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_21.Caribou/DZE_Hotfix_1.0.6.1A/groups/init.sqf b/Server Files/MPMissions/DayZ_Epoch_21.Caribou/DZE_Hotfix_1.0.6.1A/groups/init.sqf new file mode 100644 index 000000000..6a61f5db4 --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_21.Caribou/DZE_Hotfix_1.0.6.1A/groups/init.sqf @@ -0,0 +1,51 @@ +private ["_leader","_oldGroup","_savedGroup"]; + +uiSleep 1; +if (count (units group player) > 1) then { + [player] joinSilent grpNull; + diag_log "Clearing group"; +}; + +_savedGroup = (PVCDZ_plr_Login select 10) - [getPlayerUID player]; + +if (count _savedGroup > 0 && {!dayz_requireRadio or {dayz_requireRadio && "ItemRadio" in items player}}) then { + { + //Only auto join player into group if leader is in their savedGroup + _leader = leader _x; + if (getPlayerUID _leader in _savedGroup) exitWith { + _oldGroup = group player; + [player] joinSilent _x; + if (count (units _oldGroup) == 0) then {deleteGroup _oldGroup;}; + format[localize "STR_EPOCH_REJOINED_GROUP",name _leader] call dayz_rollingMessages; + + // Update saved group in DB + PVDZ_Server_UpdateGroup = [1,player]; + publicVariableServer "PVDZ_Server_UpdateGroup"; + }; + } count allGroups; +}; + +dayz_oldBodyCount = 0; +dayz_oldGroupCount = 0; +dayz_oldMemberCount = 0; +dayz_disbandGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\disband.sqf"; +dayz_filterGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\filter.sqf"; +dayz_getCrew = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\getCrew.sqf"; +dayz_getPlayer = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\getPlayer.sqf"; +dayz_inviteToGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\invite.sqf"; +dayz_joinGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\join.sqf"; +dayz_kickFromGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\kick.sqf"; +dayz_leaveGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\leave.sqf"; +dayz_openGroupDialog = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\open.sqf"; +dayz_pickGroupMember = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\pickGroupMember.sqf"; +dayz_pickPlayer = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\pickPlayer.sqf"; +dayz_promotePlayer = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\promote.sqf"; +dayz_rejectGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\reject.sqf"; +dayz_groupInit = true; + +//Initialize as script data type, no scriptNull in A2 +dayz_groupDisbandThread = 0 spawn {}; +dayz_groupLeaveThread = 0 spawn {}; +dayz_groupTags = 0 spawn {}; + +execVM "DZE_Hotfix_1.0.6.1A\groups\groupMarkers.sqf"; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_21.Caribou/DZE_Hotfix_1.0.6.1A/init/compiles.sqf b/Server Files/MPMissions/DayZ_Epoch_21.Caribou/DZE_Hotfix_1.0.6.1A/init/compiles.sqf new file mode 100644 index 000000000..e0a4a3c84 --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_21.Caribou/DZE_Hotfix_1.0.6.1A/init/compiles.sqf @@ -0,0 +1,47 @@ +if (!isDedicated) then { + dayz_NutritionSystem = { + private ["_type","_baseRegen","_nutrition","_calorieCount","_hungerCount","_thirstCount","_tempCount","_Thirst","_Hunger","_bloodregen","_golbalNutrition"]; + _type = _this select 0; + _baseRegen = _this select 1; + _nutrition = _this select 2; + _calorieCount = ((_this select 2) select 0); + _hungerCount = ((_this select 2) select 1); + _thirstCount = ((_this select 2) select 2); + _tempCount = ((_this select 2) select 3); + if (_calorieCount > 0) then { + _hungerCount = _hungerCount + (SleepFood * (((ln ((_calorieCount / 3610) * 100)) * (1 - (dayz_hunger / SleepFood))) / 100)); + _thirstCount = _thirstCount + (SleepWater * (((ln ((_calorieCount / 3610) * 100)) * (1 - (dayz_thirst / SleepWater))) / 100)); + }; + switch (_type) do { + case "FoodDrink": { + if (_hungerCount > 0) then { + if (dayz_hunger > _hungerCount) then { + dayz_hunger = dayz_hunger - (_hungerCount); + } else { + dayz_hunger = 0; + }; + }; + if (_thirstCount > 0) then { + if (dayz_thirst > _thirstCount) then { + dayz_thirst = dayz_thirst - _thirstCount; + } else { + dayz_thirst = 0; + }; + }; + if (_tempCount > 0) then { dayz_temperatur = dayz_temperatur + _tempCount; }; + if (_calorieCount > 0) then { dayz_nutrition = dayz_nutrition + _calorieCount; }; + if (_baseRegen > 0) then { r_player_bloodregen = r_player_bloodregen + _baseRegen; }; + }; + case "Working": { + if (_calorieCount > 0) then { dayz_nutrition = dayz_nutrition - (_calorieCount / ((DZE_NutritionDivisor select 0) max 0.1)); }; + if (_thirstCount > 0) then { dayz_thirst = dayz_thirst + (_thirstCount / ((DZE_NutritionDivisor select 1) max 0.1)); }; + if (_hungerCount > 0) then { dayz_hunger = dayz_hunger + (_hungerCount / ((DZE_NutritionDivisor select 2) max 0.1)); }; + if (_tempCount > 0) then { dayz_temperatur = dayz_temperatur + (_tempCount / ((DZE_NutritionDivisor select 3) max 0.1)); }; + }; + }; + dayz_thirst = (dayz_thirst min SleepWater) max 0; + dayz_hunger = (dayz_hunger min SleepFood) max 0; + dayz_temperatur = (dayz_temperatur min dayz_temperaturmax) max dayz_temperaturmin; + }; + Diag_Log "DZE_Hotfix_1.0.6.1A: dayz_NutritionSystem patched"; +}; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_21.Caribou/DZE_Hotfix_1.0.6.1A/system/progress_monitor.sqf b/Server Files/MPMissions/DayZ_Epoch_21.Caribou/DZE_Hotfix_1.0.6.1A/system/progress_monitor.sqf new file mode 100644 index 000000000..5660c9e1b --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_21.Caribou/DZE_Hotfix_1.0.6.1A/system/progress_monitor.sqf @@ -0,0 +1,43 @@ +private["_display","_control1","_control2","_watermark"]; +disableSerialization; +//diag_log "DEBUG: loadscreen guard started."; + +_timeoutStart=diag_ticktime; +while {true} do { + if (diag_ticktime - _timeoutStart >= 120) exitWith { + 1 cutText [localize "str_player_login_timeout", "PLAIN DOWN"]; + uiSleep 5; + endMission "END1"; + }; + if ((!isNil "Dayz_loginCompleted") and {(Dayz_loginCompleted)}) exitWith { + //diag_log [ __FILE__, __LINE__, "End loop"]; + + // Logo watermark: adding a logo in the bottom left corner of the screen with the server name + if (!isNil "dayZ_serverName") then { + 5 cutRsc ["wm_disp","PLAIN"]; + _watermark = (uiNamespace getVariable "wm_disp") displayCtrl 1; + _watermark ctrlSetText dayZ_serverName; + if (profileNamespace getVariable ["streamerMode",0] == 1) then {_watermark ctrlShow false;}; + }; + + if (dayz_enableRules && (profileNamespace getVariable ["streamerMode",0] == 0)) then { + dayz_rulesHandle = execVM "rules.sqf"; + }; + + if (dayz_groupSystem) then {execVM "DZE_Hotfix_1.0.6.1A\groups\init.sqf";}; + Diag_Log "DZE_Hotfix_1.0.6.1A: dayz_groupSystem patched"; + }; + _display = uiNameSpace getVariable "BIS_loadingScreen"; + if (!isNil "_display") then { + if (dayz_loadScreenMsg != "" ) then { + _control1 = _display displayctrl 8400; + _control1 ctrlSetText dayz_loadScreenMsg; + }; + _control2 = _display displayctrl 102; + _control2 ctrlSetText format["%1",floor(diag_ticktime - _timeoutStart)]; + }; + + uiSleep 0.2; + //diag_log [ __FILE__, __LINE__, "Looping..."]; +}; + diff --git a/Server Files/MPMissions/DayZ_Epoch_21.Caribou/init.sqf b/Server Files/MPMissions/DayZ_Epoch_21.Caribou/init.sqf index 19d780eea..8214bac32 100644 --- a/Server Files/MPMissions/DayZ_Epoch_21.Caribou/init.sqf +++ b/Server Files/MPMissions/DayZ_Epoch_21.Caribou/init.sqf @@ -79,12 +79,16 @@ onPreloadStarted "diag_log [diag_tickTime,'onPreloadStarted']; dayz_preloadFinis onPreloadFinished "diag_log [diag_tickTime,'onPreloadFinished']; dayz_preloadFinished = true;"; with uiNameSpace do {RscDMSLoad=nil;}; // autologon at next logon +_verCheck = (getText (configFile >> "CfgMods" >> "DayZ" >> "version") == "DayZ Epoch 1.0.6.1"); if (!isDedicated) then { - enableSaving [false, false]; - startLoadingScreen ["","RscDisplayLoadCustom"]; + enableSaving [false, false]; startLoadingScreen ["","RscDisplayLoadCustom"]; progressLoadingScreen 0; dayz_loadScreenMsg = localize 'str_login_missionFile'; - progress_monitor = [] execVM "\z\addons\dayz_code\system\progress_monitor.sqf"; + if (_verCheck) then { + progress_monitor = [] execVM "DZE_Hotfix_1.0.6.1A\system\progress_monitor.sqf"; + } else { + progress_monitor = [] execVM "\z\addons\dayz_code\system\progress_monitor.sqf"; + }; 0 cutText ['','BLACK',0]; 0 fadeSound 0; 0 fadeMusic 0; @@ -98,6 +102,9 @@ progressLoadingScreen 0.1; call compile preprocessFileLineNumbers "\z\addons\dayz_code\medical\setup_functions_med.sqf"; progressLoadingScreen 0.15; call compile preprocessFileLineNumbers "\z\addons\dayz_code\init\compiles.sqf"; +if (_verCheck) then { + #include "DZE_Hotfix_1.0.6.1A\init\compiles.sqf" +}; progressLoadingScreen 0.25; call compile preprocessFileLineNumbers "server_traders.sqf"; call compile preprocessFileLineNumbers "\z\addons\dayz_code\system\mission\caribou.sqf"; //Add trader city objects locally on every machine early diff --git a/Server Files/MPMissions/DayZ_Epoch_22.smd_sahrani_A2/DZE_Hotfix_1.0.6.1A/groups/groupMarkers.sqf b/Server Files/MPMissions/DayZ_Epoch_22.smd_sahrani_A2/DZE_Hotfix_1.0.6.1A/groups/groupMarkers.sqf new file mode 100644 index 000000000..e43cffbac --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_22.smd_sahrani_A2/DZE_Hotfix_1.0.6.1A/groups/groupMarkers.sqf @@ -0,0 +1,75 @@ +private ["_bodyCount","_count","_group","_hasGPS","_index","_inGroup","_marker","_markBody","_markGroup","_markSelf","_name","_pos","_self","_vehicle"]; + +while {true} do { + _group = player call dayz_filterGroup; + _inGroup = count _group > 1; + + if (dayz_requireRadio && {_inGroup} && {!("ItemRadio" in items player)}) then { + [player] joinSilent grpNull; + if (!isNull findDisplay 80000) then {findDisplay 80000 closeDisplay 2;}; + terminate dayz_groupTags; + 80000 cutText ["","PLAIN"]; + localize "STR_EPOCH_LOST_RADIO_CONTACT" call dayz_rollingMessages; + } else { + if (_inGroup && scriptDone dayz_groupTags) then { + dayz_groupTags = execVM "DZE_Hotfix_1.0.6.1A\groups\groupTags.sqf"; + }; + + if (visibleMap or !isNull (uiNamespace getVariable["BIS_RscMiniMap",displayNull])) then { + _hasGPS = "ItemGPS" in items player; + _markBody = (dayz_markBody == 1 or (dayz_markBody == 2 && _hasGPS)); + _markGroup = (dayz_markGroup == 1 or (dayz_markGroup == 2 && _hasGPS)); + _markSelf = (dayz_markSelf == 1 or (dayz_markSelf == 2 && _hasGPS)); + + _index = 0; + { + _self = _x == player; + _vehicle = vehicle _x; + if ((_self or _markGroup) && (!_self or _markSelf) && (effectiveCommander _vehicle == _x)) then { + _pos = [_x] call FNC_GetPos; + deleteMarkerLocal format["groupMember%1",_index]; + _marker = createMarkerLocal [format["groupMember%1",_index],_pos]; + _marker setMarkerTypeLocal "DestroyedVehicle"; + _marker setMarkerTextLocal format ["%1",if (_vehicle == _x) then {name _x} else {_vehicle call dayz_getCrew}]; + _marker setMarkerColorLocal "ColorGreen"; + } else { + deleteMarkerLocal format["groupMember%1",_index]; + }; + _index = _index + 1; + } count _group; + + // Remove markers for group members that left + _count = count _group; + if (dayz_oldMemberCount > _count) then { + for "_i" from _count to dayz_oldMemberCount do {deleteMarkerLocal format["groupMember%1",_i];}; + }; + dayz_oldMemberCount = _count; + + if (_markBody) then { + _bodyCount = 0; + _name = name player; + { + if (_x getVariable["bodyName",""] == _name) then { + _bodyCount = _bodyCount + 1; + _pos = [_x] call FNC_GetPos; + deleteMarkerLocal format["MyBody%1",_bodyCount]; + _marker = createMarkerLocal [format["MyBody%1",_bodyCount],_pos]; + _marker setMarkerTypeLocal "DestroyedVehicle"; + _marker setMarkerTextLocal localize "STR_EPOCH_RIP"; + _marker setMarkerColorLocal "ColorRed"; + }; + } count allDead; + + // Remove markers for bodies that were deleted + if (dayz_oldBodyCount > _bodyCount) then { + for "_i" from _bodyCount to dayz_oldBodyCount do {deleteMarkerLocal format["MyBody%1",_i];}; + }; + dayz_oldBodyCount = _bodyCount; + } else { + for "_i" from 1 to dayz_oldBodyCount do {deleteMarkerLocal format["MyBody%1",_i];}; + }; + }; + }; + + uiSleep 1; +}; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_22.smd_sahrani_A2/DZE_Hotfix_1.0.6.1A/groups/groupTags.sqf b/Server Files/MPMissions/DayZ_Epoch_22.smd_sahrani_A2/DZE_Hotfix_1.0.6.1A/groups/groupTags.sqf new file mode 100644 index 000000000..0e9d72539 --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_22.smd_sahrani_A2/DZE_Hotfix_1.0.6.1A/groups/groupTags.sqf @@ -0,0 +1,52 @@ +#define DRAW_TAGS (!visibleMap && count units group player > 1) //Use && cameraView != "GROUP" if tactical view is allowed (blocked by default) +private ["_display","_distance","_group","_icon","_index","_pos","_scale","_screen","_text"]; +disableSerialization; + +_refresh = { + _group = player call dayz_filterGroup; + + _display = uiNamespace getVariable "DZ_GroupTags"; + _index = 0; + { + _pos = [_x] call FNC_GetPos; + _distance = _pos distance player; + _icon = _display displayCtrl (100 + _index); + if (_distance > 1 && _distance < 2500 && vehicle _x != vehicle player) then { + _pos set [2,(_pos select 2) + 1.5]; + _screen = worldToScreen _pos; + _text = composeText [image "\ca\ui\data\igui_side_unknown_ca.paa"," ",if (dayz_groupNameTags) then {name _x} else {""}]; + if (count _screen > 1) then { + _scale = if (_distance < 200) then {.3} else {1 min ((1 - (_distance - 3) / 15) max .3)}; + _icon ctrlSetStructuredText _text; + _icon ctrlSetPosition [(_screen select 0),(_screen select 1),.99,.65]; + _icon ctrlSetScale _scale; + _icon ctrlSetFade ((1 - _scale) / 2); + _icon ctrlCommit 0; + _icon ctrlShow true; + } else { + _icon ctrlShow false; + }; + } else { + _icon ctrlShow false; + }; + _index = _index + 1; + } count _group; + + if (dayz_oldGroupCount > count _group) then { + _display displayCtrl (100 + _index) ctrlShow false; + }; + + dayz_oldGroupCount = count _group; +}; + +while {true} do { + waitUntil {uiSleep 1; DRAW_TAGS}; + 80000 cutRsc ["DZ_GroupTags","PLAIN"]; + + while {DRAW_TAGS} do { + call _refresh; //Must be called to finish in current frame + uiSleep 0.01; + }; + + 80000 cutText ["","PLAIN"]; +}; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_22.smd_sahrani_A2/DZE_Hotfix_1.0.6.1A/groups/init.sqf b/Server Files/MPMissions/DayZ_Epoch_22.smd_sahrani_A2/DZE_Hotfix_1.0.6.1A/groups/init.sqf new file mode 100644 index 000000000..6a61f5db4 --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_22.smd_sahrani_A2/DZE_Hotfix_1.0.6.1A/groups/init.sqf @@ -0,0 +1,51 @@ +private ["_leader","_oldGroup","_savedGroup"]; + +uiSleep 1; +if (count (units group player) > 1) then { + [player] joinSilent grpNull; + diag_log "Clearing group"; +}; + +_savedGroup = (PVCDZ_plr_Login select 10) - [getPlayerUID player]; + +if (count _savedGroup > 0 && {!dayz_requireRadio or {dayz_requireRadio && "ItemRadio" in items player}}) then { + { + //Only auto join player into group if leader is in their savedGroup + _leader = leader _x; + if (getPlayerUID _leader in _savedGroup) exitWith { + _oldGroup = group player; + [player] joinSilent _x; + if (count (units _oldGroup) == 0) then {deleteGroup _oldGroup;}; + format[localize "STR_EPOCH_REJOINED_GROUP",name _leader] call dayz_rollingMessages; + + // Update saved group in DB + PVDZ_Server_UpdateGroup = [1,player]; + publicVariableServer "PVDZ_Server_UpdateGroup"; + }; + } count allGroups; +}; + +dayz_oldBodyCount = 0; +dayz_oldGroupCount = 0; +dayz_oldMemberCount = 0; +dayz_disbandGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\disband.sqf"; +dayz_filterGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\filter.sqf"; +dayz_getCrew = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\getCrew.sqf"; +dayz_getPlayer = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\getPlayer.sqf"; +dayz_inviteToGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\invite.sqf"; +dayz_joinGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\join.sqf"; +dayz_kickFromGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\kick.sqf"; +dayz_leaveGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\leave.sqf"; +dayz_openGroupDialog = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\open.sqf"; +dayz_pickGroupMember = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\pickGroupMember.sqf"; +dayz_pickPlayer = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\pickPlayer.sqf"; +dayz_promotePlayer = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\promote.sqf"; +dayz_rejectGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\reject.sqf"; +dayz_groupInit = true; + +//Initialize as script data type, no scriptNull in A2 +dayz_groupDisbandThread = 0 spawn {}; +dayz_groupLeaveThread = 0 spawn {}; +dayz_groupTags = 0 spawn {}; + +execVM "DZE_Hotfix_1.0.6.1A\groups\groupMarkers.sqf"; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_22.smd_sahrani_A2/DZE_Hotfix_1.0.6.1A/init/compiles.sqf b/Server Files/MPMissions/DayZ_Epoch_22.smd_sahrani_A2/DZE_Hotfix_1.0.6.1A/init/compiles.sqf new file mode 100644 index 000000000..e0a4a3c84 --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_22.smd_sahrani_A2/DZE_Hotfix_1.0.6.1A/init/compiles.sqf @@ -0,0 +1,47 @@ +if (!isDedicated) then { + dayz_NutritionSystem = { + private ["_type","_baseRegen","_nutrition","_calorieCount","_hungerCount","_thirstCount","_tempCount","_Thirst","_Hunger","_bloodregen","_golbalNutrition"]; + _type = _this select 0; + _baseRegen = _this select 1; + _nutrition = _this select 2; + _calorieCount = ((_this select 2) select 0); + _hungerCount = ((_this select 2) select 1); + _thirstCount = ((_this select 2) select 2); + _tempCount = ((_this select 2) select 3); + if (_calorieCount > 0) then { + _hungerCount = _hungerCount + (SleepFood * (((ln ((_calorieCount / 3610) * 100)) * (1 - (dayz_hunger / SleepFood))) / 100)); + _thirstCount = _thirstCount + (SleepWater * (((ln ((_calorieCount / 3610) * 100)) * (1 - (dayz_thirst / SleepWater))) / 100)); + }; + switch (_type) do { + case "FoodDrink": { + if (_hungerCount > 0) then { + if (dayz_hunger > _hungerCount) then { + dayz_hunger = dayz_hunger - (_hungerCount); + } else { + dayz_hunger = 0; + }; + }; + if (_thirstCount > 0) then { + if (dayz_thirst > _thirstCount) then { + dayz_thirst = dayz_thirst - _thirstCount; + } else { + dayz_thirst = 0; + }; + }; + if (_tempCount > 0) then { dayz_temperatur = dayz_temperatur + _tempCount; }; + if (_calorieCount > 0) then { dayz_nutrition = dayz_nutrition + _calorieCount; }; + if (_baseRegen > 0) then { r_player_bloodregen = r_player_bloodregen + _baseRegen; }; + }; + case "Working": { + if (_calorieCount > 0) then { dayz_nutrition = dayz_nutrition - (_calorieCount / ((DZE_NutritionDivisor select 0) max 0.1)); }; + if (_thirstCount > 0) then { dayz_thirst = dayz_thirst + (_thirstCount / ((DZE_NutritionDivisor select 1) max 0.1)); }; + if (_hungerCount > 0) then { dayz_hunger = dayz_hunger + (_hungerCount / ((DZE_NutritionDivisor select 2) max 0.1)); }; + if (_tempCount > 0) then { dayz_temperatur = dayz_temperatur + (_tempCount / ((DZE_NutritionDivisor select 3) max 0.1)); }; + }; + }; + dayz_thirst = (dayz_thirst min SleepWater) max 0; + dayz_hunger = (dayz_hunger min SleepFood) max 0; + dayz_temperatur = (dayz_temperatur min dayz_temperaturmax) max dayz_temperaturmin; + }; + Diag_Log "DZE_Hotfix_1.0.6.1A: dayz_NutritionSystem patched"; +}; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_22.smd_sahrani_A2/DZE_Hotfix_1.0.6.1A/system/progress_monitor.sqf b/Server Files/MPMissions/DayZ_Epoch_22.smd_sahrani_A2/DZE_Hotfix_1.0.6.1A/system/progress_monitor.sqf new file mode 100644 index 000000000..5660c9e1b --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_22.smd_sahrani_A2/DZE_Hotfix_1.0.6.1A/system/progress_monitor.sqf @@ -0,0 +1,43 @@ +private["_display","_control1","_control2","_watermark"]; +disableSerialization; +//diag_log "DEBUG: loadscreen guard started."; + +_timeoutStart=diag_ticktime; +while {true} do { + if (diag_ticktime - _timeoutStart >= 120) exitWith { + 1 cutText [localize "str_player_login_timeout", "PLAIN DOWN"]; + uiSleep 5; + endMission "END1"; + }; + if ((!isNil "Dayz_loginCompleted") and {(Dayz_loginCompleted)}) exitWith { + //diag_log [ __FILE__, __LINE__, "End loop"]; + + // Logo watermark: adding a logo in the bottom left corner of the screen with the server name + if (!isNil "dayZ_serverName") then { + 5 cutRsc ["wm_disp","PLAIN"]; + _watermark = (uiNamespace getVariable "wm_disp") displayCtrl 1; + _watermark ctrlSetText dayZ_serverName; + if (profileNamespace getVariable ["streamerMode",0] == 1) then {_watermark ctrlShow false;}; + }; + + if (dayz_enableRules && (profileNamespace getVariable ["streamerMode",0] == 0)) then { + dayz_rulesHandle = execVM "rules.sqf"; + }; + + if (dayz_groupSystem) then {execVM "DZE_Hotfix_1.0.6.1A\groups\init.sqf";}; + Diag_Log "DZE_Hotfix_1.0.6.1A: dayz_groupSystem patched"; + }; + _display = uiNameSpace getVariable "BIS_loadingScreen"; + if (!isNil "_display") then { + if (dayz_loadScreenMsg != "" ) then { + _control1 = _display displayctrl 8400; + _control1 ctrlSetText dayz_loadScreenMsg; + }; + _control2 = _display displayctrl 102; + _control2 ctrlSetText format["%1",floor(diag_ticktime - _timeoutStart)]; + }; + + uiSleep 0.2; + //diag_log [ __FILE__, __LINE__, "Looping..."]; +}; + diff --git a/Server Files/MPMissions/DayZ_Epoch_22.smd_sahrani_A2/init.sqf b/Server Files/MPMissions/DayZ_Epoch_22.smd_sahrani_A2/init.sqf index 5934a4fc0..81b34cf41 100644 --- a/Server Files/MPMissions/DayZ_Epoch_22.smd_sahrani_A2/init.sqf +++ b/Server Files/MPMissions/DayZ_Epoch_22.smd_sahrani_A2/init.sqf @@ -79,12 +79,16 @@ onPreloadStarted "diag_log [diag_tickTime,'onPreloadStarted']; dayz_preloadFinis onPreloadFinished "diag_log [diag_tickTime,'onPreloadFinished']; dayz_preloadFinished = true;"; with uiNameSpace do {RscDMSLoad=nil;}; // autologon at next logon +_verCheck = (getText (configFile >> "CfgMods" >> "DayZ" >> "version") == "DayZ Epoch 1.0.6.1"); if (!isDedicated) then { - enableSaving [false, false]; - startLoadingScreen ["","RscDisplayLoadCustom"]; + enableSaving [false, false]; startLoadingScreen ["","RscDisplayLoadCustom"]; progressLoadingScreen 0; dayz_loadScreenMsg = localize 'str_login_missionFile'; - progress_monitor = [] execVM "\z\addons\dayz_code\system\progress_monitor.sqf"; + if (_verCheck) then { + progress_monitor = [] execVM "DZE_Hotfix_1.0.6.1A\system\progress_monitor.sqf"; + } else { + progress_monitor = [] execVM "\z\addons\dayz_code\system\progress_monitor.sqf"; + }; 0 cutText ['','BLACK',0]; 0 fadeSound 0; 0 fadeMusic 0; @@ -98,6 +102,9 @@ progressLoadingScreen 0.1; call compile preprocessFileLineNumbers "\z\addons\dayz_code\medical\setup_functions_med.sqf"; progressLoadingScreen 0.15; call compile preprocessFileLineNumbers "\z\addons\dayz_code\init\compiles.sqf"; +if (_verCheck) then { + #include "DZE_Hotfix_1.0.6.1A\init\compiles.sqf" +}; progressLoadingScreen 0.25; call compile preprocessFileLineNumbers "server_traders.sqf"; call compile preprocessFileLineNumbers "\z\addons\dayz_code\system\mission\smd_sahrani_a2.sqf"; //Add trader city objects locally on every machine early diff --git a/Server Files/MPMissions/DayZ_Epoch_23.cmr_ovaron/DZE_Hotfix_1.0.6.1A/groups/groupMarkers.sqf b/Server Files/MPMissions/DayZ_Epoch_23.cmr_ovaron/DZE_Hotfix_1.0.6.1A/groups/groupMarkers.sqf new file mode 100644 index 000000000..e43cffbac --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_23.cmr_ovaron/DZE_Hotfix_1.0.6.1A/groups/groupMarkers.sqf @@ -0,0 +1,75 @@ +private ["_bodyCount","_count","_group","_hasGPS","_index","_inGroup","_marker","_markBody","_markGroup","_markSelf","_name","_pos","_self","_vehicle"]; + +while {true} do { + _group = player call dayz_filterGroup; + _inGroup = count _group > 1; + + if (dayz_requireRadio && {_inGroup} && {!("ItemRadio" in items player)}) then { + [player] joinSilent grpNull; + if (!isNull findDisplay 80000) then {findDisplay 80000 closeDisplay 2;}; + terminate dayz_groupTags; + 80000 cutText ["","PLAIN"]; + localize "STR_EPOCH_LOST_RADIO_CONTACT" call dayz_rollingMessages; + } else { + if (_inGroup && scriptDone dayz_groupTags) then { + dayz_groupTags = execVM "DZE_Hotfix_1.0.6.1A\groups\groupTags.sqf"; + }; + + if (visibleMap or !isNull (uiNamespace getVariable["BIS_RscMiniMap",displayNull])) then { + _hasGPS = "ItemGPS" in items player; + _markBody = (dayz_markBody == 1 or (dayz_markBody == 2 && _hasGPS)); + _markGroup = (dayz_markGroup == 1 or (dayz_markGroup == 2 && _hasGPS)); + _markSelf = (dayz_markSelf == 1 or (dayz_markSelf == 2 && _hasGPS)); + + _index = 0; + { + _self = _x == player; + _vehicle = vehicle _x; + if ((_self or _markGroup) && (!_self or _markSelf) && (effectiveCommander _vehicle == _x)) then { + _pos = [_x] call FNC_GetPos; + deleteMarkerLocal format["groupMember%1",_index]; + _marker = createMarkerLocal [format["groupMember%1",_index],_pos]; + _marker setMarkerTypeLocal "DestroyedVehicle"; + _marker setMarkerTextLocal format ["%1",if (_vehicle == _x) then {name _x} else {_vehicle call dayz_getCrew}]; + _marker setMarkerColorLocal "ColorGreen"; + } else { + deleteMarkerLocal format["groupMember%1",_index]; + }; + _index = _index + 1; + } count _group; + + // Remove markers for group members that left + _count = count _group; + if (dayz_oldMemberCount > _count) then { + for "_i" from _count to dayz_oldMemberCount do {deleteMarkerLocal format["groupMember%1",_i];}; + }; + dayz_oldMemberCount = _count; + + if (_markBody) then { + _bodyCount = 0; + _name = name player; + { + if (_x getVariable["bodyName",""] == _name) then { + _bodyCount = _bodyCount + 1; + _pos = [_x] call FNC_GetPos; + deleteMarkerLocal format["MyBody%1",_bodyCount]; + _marker = createMarkerLocal [format["MyBody%1",_bodyCount],_pos]; + _marker setMarkerTypeLocal "DestroyedVehicle"; + _marker setMarkerTextLocal localize "STR_EPOCH_RIP"; + _marker setMarkerColorLocal "ColorRed"; + }; + } count allDead; + + // Remove markers for bodies that were deleted + if (dayz_oldBodyCount > _bodyCount) then { + for "_i" from _bodyCount to dayz_oldBodyCount do {deleteMarkerLocal format["MyBody%1",_i];}; + }; + dayz_oldBodyCount = _bodyCount; + } else { + for "_i" from 1 to dayz_oldBodyCount do {deleteMarkerLocal format["MyBody%1",_i];}; + }; + }; + }; + + uiSleep 1; +}; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_23.cmr_ovaron/DZE_Hotfix_1.0.6.1A/groups/groupTags.sqf b/Server Files/MPMissions/DayZ_Epoch_23.cmr_ovaron/DZE_Hotfix_1.0.6.1A/groups/groupTags.sqf new file mode 100644 index 000000000..0e9d72539 --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_23.cmr_ovaron/DZE_Hotfix_1.0.6.1A/groups/groupTags.sqf @@ -0,0 +1,52 @@ +#define DRAW_TAGS (!visibleMap && count units group player > 1) //Use && cameraView != "GROUP" if tactical view is allowed (blocked by default) +private ["_display","_distance","_group","_icon","_index","_pos","_scale","_screen","_text"]; +disableSerialization; + +_refresh = { + _group = player call dayz_filterGroup; + + _display = uiNamespace getVariable "DZ_GroupTags"; + _index = 0; + { + _pos = [_x] call FNC_GetPos; + _distance = _pos distance player; + _icon = _display displayCtrl (100 + _index); + if (_distance > 1 && _distance < 2500 && vehicle _x != vehicle player) then { + _pos set [2,(_pos select 2) + 1.5]; + _screen = worldToScreen _pos; + _text = composeText [image "\ca\ui\data\igui_side_unknown_ca.paa"," ",if (dayz_groupNameTags) then {name _x} else {""}]; + if (count _screen > 1) then { + _scale = if (_distance < 200) then {.3} else {1 min ((1 - (_distance - 3) / 15) max .3)}; + _icon ctrlSetStructuredText _text; + _icon ctrlSetPosition [(_screen select 0),(_screen select 1),.99,.65]; + _icon ctrlSetScale _scale; + _icon ctrlSetFade ((1 - _scale) / 2); + _icon ctrlCommit 0; + _icon ctrlShow true; + } else { + _icon ctrlShow false; + }; + } else { + _icon ctrlShow false; + }; + _index = _index + 1; + } count _group; + + if (dayz_oldGroupCount > count _group) then { + _display displayCtrl (100 + _index) ctrlShow false; + }; + + dayz_oldGroupCount = count _group; +}; + +while {true} do { + waitUntil {uiSleep 1; DRAW_TAGS}; + 80000 cutRsc ["DZ_GroupTags","PLAIN"]; + + while {DRAW_TAGS} do { + call _refresh; //Must be called to finish in current frame + uiSleep 0.01; + }; + + 80000 cutText ["","PLAIN"]; +}; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_23.cmr_ovaron/DZE_Hotfix_1.0.6.1A/groups/init.sqf b/Server Files/MPMissions/DayZ_Epoch_23.cmr_ovaron/DZE_Hotfix_1.0.6.1A/groups/init.sqf new file mode 100644 index 000000000..6a61f5db4 --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_23.cmr_ovaron/DZE_Hotfix_1.0.6.1A/groups/init.sqf @@ -0,0 +1,51 @@ +private ["_leader","_oldGroup","_savedGroup"]; + +uiSleep 1; +if (count (units group player) > 1) then { + [player] joinSilent grpNull; + diag_log "Clearing group"; +}; + +_savedGroup = (PVCDZ_plr_Login select 10) - [getPlayerUID player]; + +if (count _savedGroup > 0 && {!dayz_requireRadio or {dayz_requireRadio && "ItemRadio" in items player}}) then { + { + //Only auto join player into group if leader is in their savedGroup + _leader = leader _x; + if (getPlayerUID _leader in _savedGroup) exitWith { + _oldGroup = group player; + [player] joinSilent _x; + if (count (units _oldGroup) == 0) then {deleteGroup _oldGroup;}; + format[localize "STR_EPOCH_REJOINED_GROUP",name _leader] call dayz_rollingMessages; + + // Update saved group in DB + PVDZ_Server_UpdateGroup = [1,player]; + publicVariableServer "PVDZ_Server_UpdateGroup"; + }; + } count allGroups; +}; + +dayz_oldBodyCount = 0; +dayz_oldGroupCount = 0; +dayz_oldMemberCount = 0; +dayz_disbandGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\disband.sqf"; +dayz_filterGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\filter.sqf"; +dayz_getCrew = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\getCrew.sqf"; +dayz_getPlayer = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\getPlayer.sqf"; +dayz_inviteToGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\invite.sqf"; +dayz_joinGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\join.sqf"; +dayz_kickFromGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\kick.sqf"; +dayz_leaveGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\leave.sqf"; +dayz_openGroupDialog = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\open.sqf"; +dayz_pickGroupMember = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\pickGroupMember.sqf"; +dayz_pickPlayer = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\pickPlayer.sqf"; +dayz_promotePlayer = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\promote.sqf"; +dayz_rejectGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\reject.sqf"; +dayz_groupInit = true; + +//Initialize as script data type, no scriptNull in A2 +dayz_groupDisbandThread = 0 spawn {}; +dayz_groupLeaveThread = 0 spawn {}; +dayz_groupTags = 0 spawn {}; + +execVM "DZE_Hotfix_1.0.6.1A\groups\groupMarkers.sqf"; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_23.cmr_ovaron/DZE_Hotfix_1.0.6.1A/init/compiles.sqf b/Server Files/MPMissions/DayZ_Epoch_23.cmr_ovaron/DZE_Hotfix_1.0.6.1A/init/compiles.sqf new file mode 100644 index 000000000..e0a4a3c84 --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_23.cmr_ovaron/DZE_Hotfix_1.0.6.1A/init/compiles.sqf @@ -0,0 +1,47 @@ +if (!isDedicated) then { + dayz_NutritionSystem = { + private ["_type","_baseRegen","_nutrition","_calorieCount","_hungerCount","_thirstCount","_tempCount","_Thirst","_Hunger","_bloodregen","_golbalNutrition"]; + _type = _this select 0; + _baseRegen = _this select 1; + _nutrition = _this select 2; + _calorieCount = ((_this select 2) select 0); + _hungerCount = ((_this select 2) select 1); + _thirstCount = ((_this select 2) select 2); + _tempCount = ((_this select 2) select 3); + if (_calorieCount > 0) then { + _hungerCount = _hungerCount + (SleepFood * (((ln ((_calorieCount / 3610) * 100)) * (1 - (dayz_hunger / SleepFood))) / 100)); + _thirstCount = _thirstCount + (SleepWater * (((ln ((_calorieCount / 3610) * 100)) * (1 - (dayz_thirst / SleepWater))) / 100)); + }; + switch (_type) do { + case "FoodDrink": { + if (_hungerCount > 0) then { + if (dayz_hunger > _hungerCount) then { + dayz_hunger = dayz_hunger - (_hungerCount); + } else { + dayz_hunger = 0; + }; + }; + if (_thirstCount > 0) then { + if (dayz_thirst > _thirstCount) then { + dayz_thirst = dayz_thirst - _thirstCount; + } else { + dayz_thirst = 0; + }; + }; + if (_tempCount > 0) then { dayz_temperatur = dayz_temperatur + _tempCount; }; + if (_calorieCount > 0) then { dayz_nutrition = dayz_nutrition + _calorieCount; }; + if (_baseRegen > 0) then { r_player_bloodregen = r_player_bloodregen + _baseRegen; }; + }; + case "Working": { + if (_calorieCount > 0) then { dayz_nutrition = dayz_nutrition - (_calorieCount / ((DZE_NutritionDivisor select 0) max 0.1)); }; + if (_thirstCount > 0) then { dayz_thirst = dayz_thirst + (_thirstCount / ((DZE_NutritionDivisor select 1) max 0.1)); }; + if (_hungerCount > 0) then { dayz_hunger = dayz_hunger + (_hungerCount / ((DZE_NutritionDivisor select 2) max 0.1)); }; + if (_tempCount > 0) then { dayz_temperatur = dayz_temperatur + (_tempCount / ((DZE_NutritionDivisor select 3) max 0.1)); }; + }; + }; + dayz_thirst = (dayz_thirst min SleepWater) max 0; + dayz_hunger = (dayz_hunger min SleepFood) max 0; + dayz_temperatur = (dayz_temperatur min dayz_temperaturmax) max dayz_temperaturmin; + }; + Diag_Log "DZE_Hotfix_1.0.6.1A: dayz_NutritionSystem patched"; +}; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_23.cmr_ovaron/DZE_Hotfix_1.0.6.1A/system/progress_monitor.sqf b/Server Files/MPMissions/DayZ_Epoch_23.cmr_ovaron/DZE_Hotfix_1.0.6.1A/system/progress_monitor.sqf new file mode 100644 index 000000000..5660c9e1b --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_23.cmr_ovaron/DZE_Hotfix_1.0.6.1A/system/progress_monitor.sqf @@ -0,0 +1,43 @@ +private["_display","_control1","_control2","_watermark"]; +disableSerialization; +//diag_log "DEBUG: loadscreen guard started."; + +_timeoutStart=diag_ticktime; +while {true} do { + if (diag_ticktime - _timeoutStart >= 120) exitWith { + 1 cutText [localize "str_player_login_timeout", "PLAIN DOWN"]; + uiSleep 5; + endMission "END1"; + }; + if ((!isNil "Dayz_loginCompleted") and {(Dayz_loginCompleted)}) exitWith { + //diag_log [ __FILE__, __LINE__, "End loop"]; + + // Logo watermark: adding a logo in the bottom left corner of the screen with the server name + if (!isNil "dayZ_serverName") then { + 5 cutRsc ["wm_disp","PLAIN"]; + _watermark = (uiNamespace getVariable "wm_disp") displayCtrl 1; + _watermark ctrlSetText dayZ_serverName; + if (profileNamespace getVariable ["streamerMode",0] == 1) then {_watermark ctrlShow false;}; + }; + + if (dayz_enableRules && (profileNamespace getVariable ["streamerMode",0] == 0)) then { + dayz_rulesHandle = execVM "rules.sqf"; + }; + + if (dayz_groupSystem) then {execVM "DZE_Hotfix_1.0.6.1A\groups\init.sqf";}; + Diag_Log "DZE_Hotfix_1.0.6.1A: dayz_groupSystem patched"; + }; + _display = uiNameSpace getVariable "BIS_loadingScreen"; + if (!isNil "_display") then { + if (dayz_loadScreenMsg != "" ) then { + _control1 = _display displayctrl 8400; + _control1 ctrlSetText dayz_loadScreenMsg; + }; + _control2 = _display displayctrl 102; + _control2 ctrlSetText format["%1",floor(diag_ticktime - _timeoutStart)]; + }; + + uiSleep 0.2; + //diag_log [ __FILE__, __LINE__, "Looping..."]; +}; + diff --git a/Server Files/MPMissions/DayZ_Epoch_23.cmr_ovaron/init.sqf b/Server Files/MPMissions/DayZ_Epoch_23.cmr_ovaron/init.sqf index 944de6fda..a103f0eb6 100644 --- a/Server Files/MPMissions/DayZ_Epoch_23.cmr_ovaron/init.sqf +++ b/Server Files/MPMissions/DayZ_Epoch_23.cmr_ovaron/init.sqf @@ -79,12 +79,16 @@ onPreloadStarted "diag_log [diag_tickTime,'onPreloadStarted']; dayz_preloadFinis onPreloadFinished "diag_log [diag_tickTime,'onPreloadFinished']; dayz_preloadFinished = true;"; with uiNameSpace do {RscDMSLoad=nil;}; // autologon at next logon +_verCheck = (getText (configFile >> "CfgMods" >> "DayZ" >> "version") == "DayZ Epoch 1.0.6.1"); if (!isDedicated) then { - enableSaving [false, false]; - startLoadingScreen ["","RscDisplayLoadCustom"]; + enableSaving [false, false]; startLoadingScreen ["","RscDisplayLoadCustom"]; progressLoadingScreen 0; dayz_loadScreenMsg = localize 'str_login_missionFile'; - progress_monitor = [] execVM "\z\addons\dayz_code\system\progress_monitor.sqf"; + if (_verCheck) then { + progress_monitor = [] execVM "DZE_Hotfix_1.0.6.1A\system\progress_monitor.sqf"; + } else { + progress_monitor = [] execVM "\z\addons\dayz_code\system\progress_monitor.sqf"; + }; 0 cutText ['','BLACK',0]; 0 fadeSound 0; 0 fadeMusic 0; @@ -98,6 +102,9 @@ progressLoadingScreen 0.1; call compile preprocessFileLineNumbers "\z\addons\dayz_code\medical\setup_functions_med.sqf"; progressLoadingScreen 0.15; call compile preprocessFileLineNumbers "\z\addons\dayz_code\init\compiles.sqf"; +if (_verCheck) then { + #include "DZE_Hotfix_1.0.6.1A\init\compiles.sqf" +}; progressLoadingScreen 0.25; call compile preprocessFileLineNumbers "server_traders.sqf"; call compile preprocessFileLineNumbers "\z\addons\dayz_code\system\mission\cmr_ovaron.sqf"; //Add trader city objects locally on every machine early diff --git a/Server Files/MPMissions/DayZ_Epoch_24.Napf/DZE_Hotfix_1.0.6.1A/groups/groupMarkers.sqf b/Server Files/MPMissions/DayZ_Epoch_24.Napf/DZE_Hotfix_1.0.6.1A/groups/groupMarkers.sqf new file mode 100644 index 000000000..e43cffbac --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_24.Napf/DZE_Hotfix_1.0.6.1A/groups/groupMarkers.sqf @@ -0,0 +1,75 @@ +private ["_bodyCount","_count","_group","_hasGPS","_index","_inGroup","_marker","_markBody","_markGroup","_markSelf","_name","_pos","_self","_vehicle"]; + +while {true} do { + _group = player call dayz_filterGroup; + _inGroup = count _group > 1; + + if (dayz_requireRadio && {_inGroup} && {!("ItemRadio" in items player)}) then { + [player] joinSilent grpNull; + if (!isNull findDisplay 80000) then {findDisplay 80000 closeDisplay 2;}; + terminate dayz_groupTags; + 80000 cutText ["","PLAIN"]; + localize "STR_EPOCH_LOST_RADIO_CONTACT" call dayz_rollingMessages; + } else { + if (_inGroup && scriptDone dayz_groupTags) then { + dayz_groupTags = execVM "DZE_Hotfix_1.0.6.1A\groups\groupTags.sqf"; + }; + + if (visibleMap or !isNull (uiNamespace getVariable["BIS_RscMiniMap",displayNull])) then { + _hasGPS = "ItemGPS" in items player; + _markBody = (dayz_markBody == 1 or (dayz_markBody == 2 && _hasGPS)); + _markGroup = (dayz_markGroup == 1 or (dayz_markGroup == 2 && _hasGPS)); + _markSelf = (dayz_markSelf == 1 or (dayz_markSelf == 2 && _hasGPS)); + + _index = 0; + { + _self = _x == player; + _vehicle = vehicle _x; + if ((_self or _markGroup) && (!_self or _markSelf) && (effectiveCommander _vehicle == _x)) then { + _pos = [_x] call FNC_GetPos; + deleteMarkerLocal format["groupMember%1",_index]; + _marker = createMarkerLocal [format["groupMember%1",_index],_pos]; + _marker setMarkerTypeLocal "DestroyedVehicle"; + _marker setMarkerTextLocal format ["%1",if (_vehicle == _x) then {name _x} else {_vehicle call dayz_getCrew}]; + _marker setMarkerColorLocal "ColorGreen"; + } else { + deleteMarkerLocal format["groupMember%1",_index]; + }; + _index = _index + 1; + } count _group; + + // Remove markers for group members that left + _count = count _group; + if (dayz_oldMemberCount > _count) then { + for "_i" from _count to dayz_oldMemberCount do {deleteMarkerLocal format["groupMember%1",_i];}; + }; + dayz_oldMemberCount = _count; + + if (_markBody) then { + _bodyCount = 0; + _name = name player; + { + if (_x getVariable["bodyName",""] == _name) then { + _bodyCount = _bodyCount + 1; + _pos = [_x] call FNC_GetPos; + deleteMarkerLocal format["MyBody%1",_bodyCount]; + _marker = createMarkerLocal [format["MyBody%1",_bodyCount],_pos]; + _marker setMarkerTypeLocal "DestroyedVehicle"; + _marker setMarkerTextLocal localize "STR_EPOCH_RIP"; + _marker setMarkerColorLocal "ColorRed"; + }; + } count allDead; + + // Remove markers for bodies that were deleted + if (dayz_oldBodyCount > _bodyCount) then { + for "_i" from _bodyCount to dayz_oldBodyCount do {deleteMarkerLocal format["MyBody%1",_i];}; + }; + dayz_oldBodyCount = _bodyCount; + } else { + for "_i" from 1 to dayz_oldBodyCount do {deleteMarkerLocal format["MyBody%1",_i];}; + }; + }; + }; + + uiSleep 1; +}; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_24.Napf/DZE_Hotfix_1.0.6.1A/groups/groupTags.sqf b/Server Files/MPMissions/DayZ_Epoch_24.Napf/DZE_Hotfix_1.0.6.1A/groups/groupTags.sqf new file mode 100644 index 000000000..0e9d72539 --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_24.Napf/DZE_Hotfix_1.0.6.1A/groups/groupTags.sqf @@ -0,0 +1,52 @@ +#define DRAW_TAGS (!visibleMap && count units group player > 1) //Use && cameraView != "GROUP" if tactical view is allowed (blocked by default) +private ["_display","_distance","_group","_icon","_index","_pos","_scale","_screen","_text"]; +disableSerialization; + +_refresh = { + _group = player call dayz_filterGroup; + + _display = uiNamespace getVariable "DZ_GroupTags"; + _index = 0; + { + _pos = [_x] call FNC_GetPos; + _distance = _pos distance player; + _icon = _display displayCtrl (100 + _index); + if (_distance > 1 && _distance < 2500 && vehicle _x != vehicle player) then { + _pos set [2,(_pos select 2) + 1.5]; + _screen = worldToScreen _pos; + _text = composeText [image "\ca\ui\data\igui_side_unknown_ca.paa"," ",if (dayz_groupNameTags) then {name _x} else {""}]; + if (count _screen > 1) then { + _scale = if (_distance < 200) then {.3} else {1 min ((1 - (_distance - 3) / 15) max .3)}; + _icon ctrlSetStructuredText _text; + _icon ctrlSetPosition [(_screen select 0),(_screen select 1),.99,.65]; + _icon ctrlSetScale _scale; + _icon ctrlSetFade ((1 - _scale) / 2); + _icon ctrlCommit 0; + _icon ctrlShow true; + } else { + _icon ctrlShow false; + }; + } else { + _icon ctrlShow false; + }; + _index = _index + 1; + } count _group; + + if (dayz_oldGroupCount > count _group) then { + _display displayCtrl (100 + _index) ctrlShow false; + }; + + dayz_oldGroupCount = count _group; +}; + +while {true} do { + waitUntil {uiSleep 1; DRAW_TAGS}; + 80000 cutRsc ["DZ_GroupTags","PLAIN"]; + + while {DRAW_TAGS} do { + call _refresh; //Must be called to finish in current frame + uiSleep 0.01; + }; + + 80000 cutText ["","PLAIN"]; +}; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_24.Napf/DZE_Hotfix_1.0.6.1A/groups/init.sqf b/Server Files/MPMissions/DayZ_Epoch_24.Napf/DZE_Hotfix_1.0.6.1A/groups/init.sqf new file mode 100644 index 000000000..6a61f5db4 --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_24.Napf/DZE_Hotfix_1.0.6.1A/groups/init.sqf @@ -0,0 +1,51 @@ +private ["_leader","_oldGroup","_savedGroup"]; + +uiSleep 1; +if (count (units group player) > 1) then { + [player] joinSilent grpNull; + diag_log "Clearing group"; +}; + +_savedGroup = (PVCDZ_plr_Login select 10) - [getPlayerUID player]; + +if (count _savedGroup > 0 && {!dayz_requireRadio or {dayz_requireRadio && "ItemRadio" in items player}}) then { + { + //Only auto join player into group if leader is in their savedGroup + _leader = leader _x; + if (getPlayerUID _leader in _savedGroup) exitWith { + _oldGroup = group player; + [player] joinSilent _x; + if (count (units _oldGroup) == 0) then {deleteGroup _oldGroup;}; + format[localize "STR_EPOCH_REJOINED_GROUP",name _leader] call dayz_rollingMessages; + + // Update saved group in DB + PVDZ_Server_UpdateGroup = [1,player]; + publicVariableServer "PVDZ_Server_UpdateGroup"; + }; + } count allGroups; +}; + +dayz_oldBodyCount = 0; +dayz_oldGroupCount = 0; +dayz_oldMemberCount = 0; +dayz_disbandGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\disband.sqf"; +dayz_filterGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\filter.sqf"; +dayz_getCrew = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\getCrew.sqf"; +dayz_getPlayer = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\getPlayer.sqf"; +dayz_inviteToGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\invite.sqf"; +dayz_joinGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\join.sqf"; +dayz_kickFromGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\kick.sqf"; +dayz_leaveGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\leave.sqf"; +dayz_openGroupDialog = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\open.sqf"; +dayz_pickGroupMember = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\pickGroupMember.sqf"; +dayz_pickPlayer = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\pickPlayer.sqf"; +dayz_promotePlayer = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\promote.sqf"; +dayz_rejectGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\reject.sqf"; +dayz_groupInit = true; + +//Initialize as script data type, no scriptNull in A2 +dayz_groupDisbandThread = 0 spawn {}; +dayz_groupLeaveThread = 0 spawn {}; +dayz_groupTags = 0 spawn {}; + +execVM "DZE_Hotfix_1.0.6.1A\groups\groupMarkers.sqf"; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_24.Napf/DZE_Hotfix_1.0.6.1A/init/compiles.sqf b/Server Files/MPMissions/DayZ_Epoch_24.Napf/DZE_Hotfix_1.0.6.1A/init/compiles.sqf new file mode 100644 index 000000000..e0a4a3c84 --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_24.Napf/DZE_Hotfix_1.0.6.1A/init/compiles.sqf @@ -0,0 +1,47 @@ +if (!isDedicated) then { + dayz_NutritionSystem = { + private ["_type","_baseRegen","_nutrition","_calorieCount","_hungerCount","_thirstCount","_tempCount","_Thirst","_Hunger","_bloodregen","_golbalNutrition"]; + _type = _this select 0; + _baseRegen = _this select 1; + _nutrition = _this select 2; + _calorieCount = ((_this select 2) select 0); + _hungerCount = ((_this select 2) select 1); + _thirstCount = ((_this select 2) select 2); + _tempCount = ((_this select 2) select 3); + if (_calorieCount > 0) then { + _hungerCount = _hungerCount + (SleepFood * (((ln ((_calorieCount / 3610) * 100)) * (1 - (dayz_hunger / SleepFood))) / 100)); + _thirstCount = _thirstCount + (SleepWater * (((ln ((_calorieCount / 3610) * 100)) * (1 - (dayz_thirst / SleepWater))) / 100)); + }; + switch (_type) do { + case "FoodDrink": { + if (_hungerCount > 0) then { + if (dayz_hunger > _hungerCount) then { + dayz_hunger = dayz_hunger - (_hungerCount); + } else { + dayz_hunger = 0; + }; + }; + if (_thirstCount > 0) then { + if (dayz_thirst > _thirstCount) then { + dayz_thirst = dayz_thirst - _thirstCount; + } else { + dayz_thirst = 0; + }; + }; + if (_tempCount > 0) then { dayz_temperatur = dayz_temperatur + _tempCount; }; + if (_calorieCount > 0) then { dayz_nutrition = dayz_nutrition + _calorieCount; }; + if (_baseRegen > 0) then { r_player_bloodregen = r_player_bloodregen + _baseRegen; }; + }; + case "Working": { + if (_calorieCount > 0) then { dayz_nutrition = dayz_nutrition - (_calorieCount / ((DZE_NutritionDivisor select 0) max 0.1)); }; + if (_thirstCount > 0) then { dayz_thirst = dayz_thirst + (_thirstCount / ((DZE_NutritionDivisor select 1) max 0.1)); }; + if (_hungerCount > 0) then { dayz_hunger = dayz_hunger + (_hungerCount / ((DZE_NutritionDivisor select 2) max 0.1)); }; + if (_tempCount > 0) then { dayz_temperatur = dayz_temperatur + (_tempCount / ((DZE_NutritionDivisor select 3) max 0.1)); }; + }; + }; + dayz_thirst = (dayz_thirst min SleepWater) max 0; + dayz_hunger = (dayz_hunger min SleepFood) max 0; + dayz_temperatur = (dayz_temperatur min dayz_temperaturmax) max dayz_temperaturmin; + }; + Diag_Log "DZE_Hotfix_1.0.6.1A: dayz_NutritionSystem patched"; +}; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_24.Napf/DZE_Hotfix_1.0.6.1A/system/progress_monitor.sqf b/Server Files/MPMissions/DayZ_Epoch_24.Napf/DZE_Hotfix_1.0.6.1A/system/progress_monitor.sqf new file mode 100644 index 000000000..5660c9e1b --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_24.Napf/DZE_Hotfix_1.0.6.1A/system/progress_monitor.sqf @@ -0,0 +1,43 @@ +private["_display","_control1","_control2","_watermark"]; +disableSerialization; +//diag_log "DEBUG: loadscreen guard started."; + +_timeoutStart=diag_ticktime; +while {true} do { + if (diag_ticktime - _timeoutStart >= 120) exitWith { + 1 cutText [localize "str_player_login_timeout", "PLAIN DOWN"]; + uiSleep 5; + endMission "END1"; + }; + if ((!isNil "Dayz_loginCompleted") and {(Dayz_loginCompleted)}) exitWith { + //diag_log [ __FILE__, __LINE__, "End loop"]; + + // Logo watermark: adding a logo in the bottom left corner of the screen with the server name + if (!isNil "dayZ_serverName") then { + 5 cutRsc ["wm_disp","PLAIN"]; + _watermark = (uiNamespace getVariable "wm_disp") displayCtrl 1; + _watermark ctrlSetText dayZ_serverName; + if (profileNamespace getVariable ["streamerMode",0] == 1) then {_watermark ctrlShow false;}; + }; + + if (dayz_enableRules && (profileNamespace getVariable ["streamerMode",0] == 0)) then { + dayz_rulesHandle = execVM "rules.sqf"; + }; + + if (dayz_groupSystem) then {execVM "DZE_Hotfix_1.0.6.1A\groups\init.sqf";}; + Diag_Log "DZE_Hotfix_1.0.6.1A: dayz_groupSystem patched"; + }; + _display = uiNameSpace getVariable "BIS_loadingScreen"; + if (!isNil "_display") then { + if (dayz_loadScreenMsg != "" ) then { + _control1 = _display displayctrl 8400; + _control1 ctrlSetText dayz_loadScreenMsg; + }; + _control2 = _display displayctrl 102; + _control2 ctrlSetText format["%1",floor(diag_ticktime - _timeoutStart)]; + }; + + uiSleep 0.2; + //diag_log [ __FILE__, __LINE__, "Looping..."]; +}; + diff --git a/Server Files/MPMissions/DayZ_Epoch_24.Napf/init.sqf b/Server Files/MPMissions/DayZ_Epoch_24.Napf/init.sqf index 50c78d342..88d678ba5 100644 --- a/Server Files/MPMissions/DayZ_Epoch_24.Napf/init.sqf +++ b/Server Files/MPMissions/DayZ_Epoch_24.Napf/init.sqf @@ -79,12 +79,16 @@ onPreloadStarted "diag_log [diag_tickTime,'onPreloadStarted']; dayz_preloadFinis onPreloadFinished "diag_log [diag_tickTime,'onPreloadFinished']; dayz_preloadFinished = true;"; with uiNameSpace do {RscDMSLoad=nil;}; // autologon at next logon +_verCheck = (getText (configFile >> "CfgMods" >> "DayZ" >> "version") == "DayZ Epoch 1.0.6.1"); if (!isDedicated) then { - enableSaving [false, false]; - startLoadingScreen ["","RscDisplayLoadCustom"]; + enableSaving [false, false]; startLoadingScreen ["","RscDisplayLoadCustom"]; progressLoadingScreen 0; dayz_loadScreenMsg = localize 'str_login_missionFile'; - progress_monitor = [] execVM "\z\addons\dayz_code\system\progress_monitor.sqf"; + if (_verCheck) then { + progress_monitor = [] execVM "DZE_Hotfix_1.0.6.1A\system\progress_monitor.sqf"; + } else { + progress_monitor = [] execVM "\z\addons\dayz_code\system\progress_monitor.sqf"; + }; 0 cutText ['','BLACK',0]; 0 fadeSound 0; 0 fadeMusic 0; @@ -98,6 +102,9 @@ progressLoadingScreen 0.1; call compile preprocessFileLineNumbers "\z\addons\dayz_code\medical\setup_functions_med.sqf"; progressLoadingScreen 0.15; call compile preprocessFileLineNumbers "\z\addons\dayz_code\init\compiles.sqf"; +if (_verCheck) then { + #include "DZE_Hotfix_1.0.6.1A\init\compiles.sqf" +}; progressLoadingScreen 0.25; call compile preprocessFileLineNumbers "server_traders.sqf"; call compile preprocessFileLineNumbers "\z\addons\dayz_code\system\mission\napf.sqf"; //Add trader city objects locally on every machine early diff --git a/Server Files/MPMissions/DayZ_Epoch_25.sauerland/DZE_Hotfix_1.0.6.1A/groups/groupMarkers.sqf b/Server Files/MPMissions/DayZ_Epoch_25.sauerland/DZE_Hotfix_1.0.6.1A/groups/groupMarkers.sqf new file mode 100644 index 000000000..e43cffbac --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_25.sauerland/DZE_Hotfix_1.0.6.1A/groups/groupMarkers.sqf @@ -0,0 +1,75 @@ +private ["_bodyCount","_count","_group","_hasGPS","_index","_inGroup","_marker","_markBody","_markGroup","_markSelf","_name","_pos","_self","_vehicle"]; + +while {true} do { + _group = player call dayz_filterGroup; + _inGroup = count _group > 1; + + if (dayz_requireRadio && {_inGroup} && {!("ItemRadio" in items player)}) then { + [player] joinSilent grpNull; + if (!isNull findDisplay 80000) then {findDisplay 80000 closeDisplay 2;}; + terminate dayz_groupTags; + 80000 cutText ["","PLAIN"]; + localize "STR_EPOCH_LOST_RADIO_CONTACT" call dayz_rollingMessages; + } else { + if (_inGroup && scriptDone dayz_groupTags) then { + dayz_groupTags = execVM "DZE_Hotfix_1.0.6.1A\groups\groupTags.sqf"; + }; + + if (visibleMap or !isNull (uiNamespace getVariable["BIS_RscMiniMap",displayNull])) then { + _hasGPS = "ItemGPS" in items player; + _markBody = (dayz_markBody == 1 or (dayz_markBody == 2 && _hasGPS)); + _markGroup = (dayz_markGroup == 1 or (dayz_markGroup == 2 && _hasGPS)); + _markSelf = (dayz_markSelf == 1 or (dayz_markSelf == 2 && _hasGPS)); + + _index = 0; + { + _self = _x == player; + _vehicle = vehicle _x; + if ((_self or _markGroup) && (!_self or _markSelf) && (effectiveCommander _vehicle == _x)) then { + _pos = [_x] call FNC_GetPos; + deleteMarkerLocal format["groupMember%1",_index]; + _marker = createMarkerLocal [format["groupMember%1",_index],_pos]; + _marker setMarkerTypeLocal "DestroyedVehicle"; + _marker setMarkerTextLocal format ["%1",if (_vehicle == _x) then {name _x} else {_vehicle call dayz_getCrew}]; + _marker setMarkerColorLocal "ColorGreen"; + } else { + deleteMarkerLocal format["groupMember%1",_index]; + }; + _index = _index + 1; + } count _group; + + // Remove markers for group members that left + _count = count _group; + if (dayz_oldMemberCount > _count) then { + for "_i" from _count to dayz_oldMemberCount do {deleteMarkerLocal format["groupMember%1",_i];}; + }; + dayz_oldMemberCount = _count; + + if (_markBody) then { + _bodyCount = 0; + _name = name player; + { + if (_x getVariable["bodyName",""] == _name) then { + _bodyCount = _bodyCount + 1; + _pos = [_x] call FNC_GetPos; + deleteMarkerLocal format["MyBody%1",_bodyCount]; + _marker = createMarkerLocal [format["MyBody%1",_bodyCount],_pos]; + _marker setMarkerTypeLocal "DestroyedVehicle"; + _marker setMarkerTextLocal localize "STR_EPOCH_RIP"; + _marker setMarkerColorLocal "ColorRed"; + }; + } count allDead; + + // Remove markers for bodies that were deleted + if (dayz_oldBodyCount > _bodyCount) then { + for "_i" from _bodyCount to dayz_oldBodyCount do {deleteMarkerLocal format["MyBody%1",_i];}; + }; + dayz_oldBodyCount = _bodyCount; + } else { + for "_i" from 1 to dayz_oldBodyCount do {deleteMarkerLocal format["MyBody%1",_i];}; + }; + }; + }; + + uiSleep 1; +}; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_25.sauerland/DZE_Hotfix_1.0.6.1A/groups/groupTags.sqf b/Server Files/MPMissions/DayZ_Epoch_25.sauerland/DZE_Hotfix_1.0.6.1A/groups/groupTags.sqf new file mode 100644 index 000000000..0e9d72539 --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_25.sauerland/DZE_Hotfix_1.0.6.1A/groups/groupTags.sqf @@ -0,0 +1,52 @@ +#define DRAW_TAGS (!visibleMap && count units group player > 1) //Use && cameraView != "GROUP" if tactical view is allowed (blocked by default) +private ["_display","_distance","_group","_icon","_index","_pos","_scale","_screen","_text"]; +disableSerialization; + +_refresh = { + _group = player call dayz_filterGroup; + + _display = uiNamespace getVariable "DZ_GroupTags"; + _index = 0; + { + _pos = [_x] call FNC_GetPos; + _distance = _pos distance player; + _icon = _display displayCtrl (100 + _index); + if (_distance > 1 && _distance < 2500 && vehicle _x != vehicle player) then { + _pos set [2,(_pos select 2) + 1.5]; + _screen = worldToScreen _pos; + _text = composeText [image "\ca\ui\data\igui_side_unknown_ca.paa"," ",if (dayz_groupNameTags) then {name _x} else {""}]; + if (count _screen > 1) then { + _scale = if (_distance < 200) then {.3} else {1 min ((1 - (_distance - 3) / 15) max .3)}; + _icon ctrlSetStructuredText _text; + _icon ctrlSetPosition [(_screen select 0),(_screen select 1),.99,.65]; + _icon ctrlSetScale _scale; + _icon ctrlSetFade ((1 - _scale) / 2); + _icon ctrlCommit 0; + _icon ctrlShow true; + } else { + _icon ctrlShow false; + }; + } else { + _icon ctrlShow false; + }; + _index = _index + 1; + } count _group; + + if (dayz_oldGroupCount > count _group) then { + _display displayCtrl (100 + _index) ctrlShow false; + }; + + dayz_oldGroupCount = count _group; +}; + +while {true} do { + waitUntil {uiSleep 1; DRAW_TAGS}; + 80000 cutRsc ["DZ_GroupTags","PLAIN"]; + + while {DRAW_TAGS} do { + call _refresh; //Must be called to finish in current frame + uiSleep 0.01; + }; + + 80000 cutText ["","PLAIN"]; +}; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_25.sauerland/DZE_Hotfix_1.0.6.1A/groups/init.sqf b/Server Files/MPMissions/DayZ_Epoch_25.sauerland/DZE_Hotfix_1.0.6.1A/groups/init.sqf new file mode 100644 index 000000000..6a61f5db4 --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_25.sauerland/DZE_Hotfix_1.0.6.1A/groups/init.sqf @@ -0,0 +1,51 @@ +private ["_leader","_oldGroup","_savedGroup"]; + +uiSleep 1; +if (count (units group player) > 1) then { + [player] joinSilent grpNull; + diag_log "Clearing group"; +}; + +_savedGroup = (PVCDZ_plr_Login select 10) - [getPlayerUID player]; + +if (count _savedGroup > 0 && {!dayz_requireRadio or {dayz_requireRadio && "ItemRadio" in items player}}) then { + { + //Only auto join player into group if leader is in their savedGroup + _leader = leader _x; + if (getPlayerUID _leader in _savedGroup) exitWith { + _oldGroup = group player; + [player] joinSilent _x; + if (count (units _oldGroup) == 0) then {deleteGroup _oldGroup;}; + format[localize "STR_EPOCH_REJOINED_GROUP",name _leader] call dayz_rollingMessages; + + // Update saved group in DB + PVDZ_Server_UpdateGroup = [1,player]; + publicVariableServer "PVDZ_Server_UpdateGroup"; + }; + } count allGroups; +}; + +dayz_oldBodyCount = 0; +dayz_oldGroupCount = 0; +dayz_oldMemberCount = 0; +dayz_disbandGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\disband.sqf"; +dayz_filterGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\filter.sqf"; +dayz_getCrew = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\getCrew.sqf"; +dayz_getPlayer = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\getPlayer.sqf"; +dayz_inviteToGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\invite.sqf"; +dayz_joinGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\join.sqf"; +dayz_kickFromGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\kick.sqf"; +dayz_leaveGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\leave.sqf"; +dayz_openGroupDialog = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\open.sqf"; +dayz_pickGroupMember = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\pickGroupMember.sqf"; +dayz_pickPlayer = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\pickPlayer.sqf"; +dayz_promotePlayer = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\promote.sqf"; +dayz_rejectGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\reject.sqf"; +dayz_groupInit = true; + +//Initialize as script data type, no scriptNull in A2 +dayz_groupDisbandThread = 0 spawn {}; +dayz_groupLeaveThread = 0 spawn {}; +dayz_groupTags = 0 spawn {}; + +execVM "DZE_Hotfix_1.0.6.1A\groups\groupMarkers.sqf"; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_25.sauerland/DZE_Hotfix_1.0.6.1A/init/compiles.sqf b/Server Files/MPMissions/DayZ_Epoch_25.sauerland/DZE_Hotfix_1.0.6.1A/init/compiles.sqf new file mode 100644 index 000000000..e0a4a3c84 --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_25.sauerland/DZE_Hotfix_1.0.6.1A/init/compiles.sqf @@ -0,0 +1,47 @@ +if (!isDedicated) then { + dayz_NutritionSystem = { + private ["_type","_baseRegen","_nutrition","_calorieCount","_hungerCount","_thirstCount","_tempCount","_Thirst","_Hunger","_bloodregen","_golbalNutrition"]; + _type = _this select 0; + _baseRegen = _this select 1; + _nutrition = _this select 2; + _calorieCount = ((_this select 2) select 0); + _hungerCount = ((_this select 2) select 1); + _thirstCount = ((_this select 2) select 2); + _tempCount = ((_this select 2) select 3); + if (_calorieCount > 0) then { + _hungerCount = _hungerCount + (SleepFood * (((ln ((_calorieCount / 3610) * 100)) * (1 - (dayz_hunger / SleepFood))) / 100)); + _thirstCount = _thirstCount + (SleepWater * (((ln ((_calorieCount / 3610) * 100)) * (1 - (dayz_thirst / SleepWater))) / 100)); + }; + switch (_type) do { + case "FoodDrink": { + if (_hungerCount > 0) then { + if (dayz_hunger > _hungerCount) then { + dayz_hunger = dayz_hunger - (_hungerCount); + } else { + dayz_hunger = 0; + }; + }; + if (_thirstCount > 0) then { + if (dayz_thirst > _thirstCount) then { + dayz_thirst = dayz_thirst - _thirstCount; + } else { + dayz_thirst = 0; + }; + }; + if (_tempCount > 0) then { dayz_temperatur = dayz_temperatur + _tempCount; }; + if (_calorieCount > 0) then { dayz_nutrition = dayz_nutrition + _calorieCount; }; + if (_baseRegen > 0) then { r_player_bloodregen = r_player_bloodregen + _baseRegen; }; + }; + case "Working": { + if (_calorieCount > 0) then { dayz_nutrition = dayz_nutrition - (_calorieCount / ((DZE_NutritionDivisor select 0) max 0.1)); }; + if (_thirstCount > 0) then { dayz_thirst = dayz_thirst + (_thirstCount / ((DZE_NutritionDivisor select 1) max 0.1)); }; + if (_hungerCount > 0) then { dayz_hunger = dayz_hunger + (_hungerCount / ((DZE_NutritionDivisor select 2) max 0.1)); }; + if (_tempCount > 0) then { dayz_temperatur = dayz_temperatur + (_tempCount / ((DZE_NutritionDivisor select 3) max 0.1)); }; + }; + }; + dayz_thirst = (dayz_thirst min SleepWater) max 0; + dayz_hunger = (dayz_hunger min SleepFood) max 0; + dayz_temperatur = (dayz_temperatur min dayz_temperaturmax) max dayz_temperaturmin; + }; + Diag_Log "DZE_Hotfix_1.0.6.1A: dayz_NutritionSystem patched"; +}; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_25.sauerland/DZE_Hotfix_1.0.6.1A/system/progress_monitor.sqf b/Server Files/MPMissions/DayZ_Epoch_25.sauerland/DZE_Hotfix_1.0.6.1A/system/progress_monitor.sqf new file mode 100644 index 000000000..5660c9e1b --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_25.sauerland/DZE_Hotfix_1.0.6.1A/system/progress_monitor.sqf @@ -0,0 +1,43 @@ +private["_display","_control1","_control2","_watermark"]; +disableSerialization; +//diag_log "DEBUG: loadscreen guard started."; + +_timeoutStart=diag_ticktime; +while {true} do { + if (diag_ticktime - _timeoutStart >= 120) exitWith { + 1 cutText [localize "str_player_login_timeout", "PLAIN DOWN"]; + uiSleep 5; + endMission "END1"; + }; + if ((!isNil "Dayz_loginCompleted") and {(Dayz_loginCompleted)}) exitWith { + //diag_log [ __FILE__, __LINE__, "End loop"]; + + // Logo watermark: adding a logo in the bottom left corner of the screen with the server name + if (!isNil "dayZ_serverName") then { + 5 cutRsc ["wm_disp","PLAIN"]; + _watermark = (uiNamespace getVariable "wm_disp") displayCtrl 1; + _watermark ctrlSetText dayZ_serverName; + if (profileNamespace getVariable ["streamerMode",0] == 1) then {_watermark ctrlShow false;}; + }; + + if (dayz_enableRules && (profileNamespace getVariable ["streamerMode",0] == 0)) then { + dayz_rulesHandle = execVM "rules.sqf"; + }; + + if (dayz_groupSystem) then {execVM "DZE_Hotfix_1.0.6.1A\groups\init.sqf";}; + Diag_Log "DZE_Hotfix_1.0.6.1A: dayz_groupSystem patched"; + }; + _display = uiNameSpace getVariable "BIS_loadingScreen"; + if (!isNil "_display") then { + if (dayz_loadScreenMsg != "" ) then { + _control1 = _display displayctrl 8400; + _control1 ctrlSetText dayz_loadScreenMsg; + }; + _control2 = _display displayctrl 102; + _control2 ctrlSetText format["%1",floor(diag_ticktime - _timeoutStart)]; + }; + + uiSleep 0.2; + //diag_log [ __FILE__, __LINE__, "Looping..."]; +}; + diff --git a/Server Files/MPMissions/DayZ_Epoch_25.sauerland/init.sqf b/Server Files/MPMissions/DayZ_Epoch_25.sauerland/init.sqf index 7a9aaeebc..f5c2cc328 100644 --- a/Server Files/MPMissions/DayZ_Epoch_25.sauerland/init.sqf +++ b/Server Files/MPMissions/DayZ_Epoch_25.sauerland/init.sqf @@ -79,12 +79,16 @@ onPreloadStarted "diag_log [diag_tickTime,'onPreloadStarted']; dayz_preloadFinis onPreloadFinished "diag_log [diag_tickTime,'onPreloadFinished']; dayz_preloadFinished = true;"; with uiNameSpace do {RscDMSLoad=nil;}; // autologon at next logon +_verCheck = (getText (configFile >> "CfgMods" >> "DayZ" >> "version") == "DayZ Epoch 1.0.6.1"); if (!isDedicated) then { - enableSaving [false, false]; - startLoadingScreen ["","RscDisplayLoadCustom"]; + enableSaving [false, false]; startLoadingScreen ["","RscDisplayLoadCustom"]; progressLoadingScreen 0; dayz_loadScreenMsg = localize 'str_login_missionFile'; - progress_monitor = [] execVM "\z\addons\dayz_code\system\progress_monitor.sqf"; + if (_verCheck) then { + progress_monitor = [] execVM "DZE_Hotfix_1.0.6.1A\system\progress_monitor.sqf"; + } else { + progress_monitor = [] execVM "\z\addons\dayz_code\system\progress_monitor.sqf"; + }; 0 cutText ['','BLACK',0]; 0 fadeSound 0; 0 fadeMusic 0; @@ -98,6 +102,9 @@ progressLoadingScreen 0.1; call compile preprocessFileLineNumbers "\z\addons\dayz_code\medical\setup_functions_med.sqf"; progressLoadingScreen 0.15; call compile preprocessFileLineNumbers "\z\addons\dayz_code\init\compiles.sqf"; +if (_verCheck) then { + #include "DZE_Hotfix_1.0.6.1A\init\compiles.sqf" +}; progressLoadingScreen 0.25; call compile preprocessFileLineNumbers "server_traders.sqf"; call compile preprocessFileLineNumbers "\z\addons\dayz_code\system\mission\sauerland.sqf"; //Add trader city objects locally on every machine early diff --git a/Server Files/MPMissions/DayZ_Epoch_26.sauerland_winter/DZE_Hotfix_1.0.6.1A/groups/groupMarkers.sqf b/Server Files/MPMissions/DayZ_Epoch_26.sauerland_winter/DZE_Hotfix_1.0.6.1A/groups/groupMarkers.sqf new file mode 100644 index 000000000..e43cffbac --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_26.sauerland_winter/DZE_Hotfix_1.0.6.1A/groups/groupMarkers.sqf @@ -0,0 +1,75 @@ +private ["_bodyCount","_count","_group","_hasGPS","_index","_inGroup","_marker","_markBody","_markGroup","_markSelf","_name","_pos","_self","_vehicle"]; + +while {true} do { + _group = player call dayz_filterGroup; + _inGroup = count _group > 1; + + if (dayz_requireRadio && {_inGroup} && {!("ItemRadio" in items player)}) then { + [player] joinSilent grpNull; + if (!isNull findDisplay 80000) then {findDisplay 80000 closeDisplay 2;}; + terminate dayz_groupTags; + 80000 cutText ["","PLAIN"]; + localize "STR_EPOCH_LOST_RADIO_CONTACT" call dayz_rollingMessages; + } else { + if (_inGroup && scriptDone dayz_groupTags) then { + dayz_groupTags = execVM "DZE_Hotfix_1.0.6.1A\groups\groupTags.sqf"; + }; + + if (visibleMap or !isNull (uiNamespace getVariable["BIS_RscMiniMap",displayNull])) then { + _hasGPS = "ItemGPS" in items player; + _markBody = (dayz_markBody == 1 or (dayz_markBody == 2 && _hasGPS)); + _markGroup = (dayz_markGroup == 1 or (dayz_markGroup == 2 && _hasGPS)); + _markSelf = (dayz_markSelf == 1 or (dayz_markSelf == 2 && _hasGPS)); + + _index = 0; + { + _self = _x == player; + _vehicle = vehicle _x; + if ((_self or _markGroup) && (!_self or _markSelf) && (effectiveCommander _vehicle == _x)) then { + _pos = [_x] call FNC_GetPos; + deleteMarkerLocal format["groupMember%1",_index]; + _marker = createMarkerLocal [format["groupMember%1",_index],_pos]; + _marker setMarkerTypeLocal "DestroyedVehicle"; + _marker setMarkerTextLocal format ["%1",if (_vehicle == _x) then {name _x} else {_vehicle call dayz_getCrew}]; + _marker setMarkerColorLocal "ColorGreen"; + } else { + deleteMarkerLocal format["groupMember%1",_index]; + }; + _index = _index + 1; + } count _group; + + // Remove markers for group members that left + _count = count _group; + if (dayz_oldMemberCount > _count) then { + for "_i" from _count to dayz_oldMemberCount do {deleteMarkerLocal format["groupMember%1",_i];}; + }; + dayz_oldMemberCount = _count; + + if (_markBody) then { + _bodyCount = 0; + _name = name player; + { + if (_x getVariable["bodyName",""] == _name) then { + _bodyCount = _bodyCount + 1; + _pos = [_x] call FNC_GetPos; + deleteMarkerLocal format["MyBody%1",_bodyCount]; + _marker = createMarkerLocal [format["MyBody%1",_bodyCount],_pos]; + _marker setMarkerTypeLocal "DestroyedVehicle"; + _marker setMarkerTextLocal localize "STR_EPOCH_RIP"; + _marker setMarkerColorLocal "ColorRed"; + }; + } count allDead; + + // Remove markers for bodies that were deleted + if (dayz_oldBodyCount > _bodyCount) then { + for "_i" from _bodyCount to dayz_oldBodyCount do {deleteMarkerLocal format["MyBody%1",_i];}; + }; + dayz_oldBodyCount = _bodyCount; + } else { + for "_i" from 1 to dayz_oldBodyCount do {deleteMarkerLocal format["MyBody%1",_i];}; + }; + }; + }; + + uiSleep 1; +}; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_26.sauerland_winter/DZE_Hotfix_1.0.6.1A/groups/groupTags.sqf b/Server Files/MPMissions/DayZ_Epoch_26.sauerland_winter/DZE_Hotfix_1.0.6.1A/groups/groupTags.sqf new file mode 100644 index 000000000..0e9d72539 --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_26.sauerland_winter/DZE_Hotfix_1.0.6.1A/groups/groupTags.sqf @@ -0,0 +1,52 @@ +#define DRAW_TAGS (!visibleMap && count units group player > 1) //Use && cameraView != "GROUP" if tactical view is allowed (blocked by default) +private ["_display","_distance","_group","_icon","_index","_pos","_scale","_screen","_text"]; +disableSerialization; + +_refresh = { + _group = player call dayz_filterGroup; + + _display = uiNamespace getVariable "DZ_GroupTags"; + _index = 0; + { + _pos = [_x] call FNC_GetPos; + _distance = _pos distance player; + _icon = _display displayCtrl (100 + _index); + if (_distance > 1 && _distance < 2500 && vehicle _x != vehicle player) then { + _pos set [2,(_pos select 2) + 1.5]; + _screen = worldToScreen _pos; + _text = composeText [image "\ca\ui\data\igui_side_unknown_ca.paa"," ",if (dayz_groupNameTags) then {name _x} else {""}]; + if (count _screen > 1) then { + _scale = if (_distance < 200) then {.3} else {1 min ((1 - (_distance - 3) / 15) max .3)}; + _icon ctrlSetStructuredText _text; + _icon ctrlSetPosition [(_screen select 0),(_screen select 1),.99,.65]; + _icon ctrlSetScale _scale; + _icon ctrlSetFade ((1 - _scale) / 2); + _icon ctrlCommit 0; + _icon ctrlShow true; + } else { + _icon ctrlShow false; + }; + } else { + _icon ctrlShow false; + }; + _index = _index + 1; + } count _group; + + if (dayz_oldGroupCount > count _group) then { + _display displayCtrl (100 + _index) ctrlShow false; + }; + + dayz_oldGroupCount = count _group; +}; + +while {true} do { + waitUntil {uiSleep 1; DRAW_TAGS}; + 80000 cutRsc ["DZ_GroupTags","PLAIN"]; + + while {DRAW_TAGS} do { + call _refresh; //Must be called to finish in current frame + uiSleep 0.01; + }; + + 80000 cutText ["","PLAIN"]; +}; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_26.sauerland_winter/DZE_Hotfix_1.0.6.1A/groups/init.sqf b/Server Files/MPMissions/DayZ_Epoch_26.sauerland_winter/DZE_Hotfix_1.0.6.1A/groups/init.sqf new file mode 100644 index 000000000..6a61f5db4 --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_26.sauerland_winter/DZE_Hotfix_1.0.6.1A/groups/init.sqf @@ -0,0 +1,51 @@ +private ["_leader","_oldGroup","_savedGroup"]; + +uiSleep 1; +if (count (units group player) > 1) then { + [player] joinSilent grpNull; + diag_log "Clearing group"; +}; + +_savedGroup = (PVCDZ_plr_Login select 10) - [getPlayerUID player]; + +if (count _savedGroup > 0 && {!dayz_requireRadio or {dayz_requireRadio && "ItemRadio" in items player}}) then { + { + //Only auto join player into group if leader is in their savedGroup + _leader = leader _x; + if (getPlayerUID _leader in _savedGroup) exitWith { + _oldGroup = group player; + [player] joinSilent _x; + if (count (units _oldGroup) == 0) then {deleteGroup _oldGroup;}; + format[localize "STR_EPOCH_REJOINED_GROUP",name _leader] call dayz_rollingMessages; + + // Update saved group in DB + PVDZ_Server_UpdateGroup = [1,player]; + publicVariableServer "PVDZ_Server_UpdateGroup"; + }; + } count allGroups; +}; + +dayz_oldBodyCount = 0; +dayz_oldGroupCount = 0; +dayz_oldMemberCount = 0; +dayz_disbandGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\disband.sqf"; +dayz_filterGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\filter.sqf"; +dayz_getCrew = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\getCrew.sqf"; +dayz_getPlayer = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\getPlayer.sqf"; +dayz_inviteToGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\invite.sqf"; +dayz_joinGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\join.sqf"; +dayz_kickFromGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\kick.sqf"; +dayz_leaveGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\leave.sqf"; +dayz_openGroupDialog = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\open.sqf"; +dayz_pickGroupMember = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\pickGroupMember.sqf"; +dayz_pickPlayer = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\pickPlayer.sqf"; +dayz_promotePlayer = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\promote.sqf"; +dayz_rejectGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\reject.sqf"; +dayz_groupInit = true; + +//Initialize as script data type, no scriptNull in A2 +dayz_groupDisbandThread = 0 spawn {}; +dayz_groupLeaveThread = 0 spawn {}; +dayz_groupTags = 0 spawn {}; + +execVM "DZE_Hotfix_1.0.6.1A\groups\groupMarkers.sqf"; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_26.sauerland_winter/DZE_Hotfix_1.0.6.1A/init/compiles.sqf b/Server Files/MPMissions/DayZ_Epoch_26.sauerland_winter/DZE_Hotfix_1.0.6.1A/init/compiles.sqf new file mode 100644 index 000000000..e0a4a3c84 --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_26.sauerland_winter/DZE_Hotfix_1.0.6.1A/init/compiles.sqf @@ -0,0 +1,47 @@ +if (!isDedicated) then { + dayz_NutritionSystem = { + private ["_type","_baseRegen","_nutrition","_calorieCount","_hungerCount","_thirstCount","_tempCount","_Thirst","_Hunger","_bloodregen","_golbalNutrition"]; + _type = _this select 0; + _baseRegen = _this select 1; + _nutrition = _this select 2; + _calorieCount = ((_this select 2) select 0); + _hungerCount = ((_this select 2) select 1); + _thirstCount = ((_this select 2) select 2); + _tempCount = ((_this select 2) select 3); + if (_calorieCount > 0) then { + _hungerCount = _hungerCount + (SleepFood * (((ln ((_calorieCount / 3610) * 100)) * (1 - (dayz_hunger / SleepFood))) / 100)); + _thirstCount = _thirstCount + (SleepWater * (((ln ((_calorieCount / 3610) * 100)) * (1 - (dayz_thirst / SleepWater))) / 100)); + }; + switch (_type) do { + case "FoodDrink": { + if (_hungerCount > 0) then { + if (dayz_hunger > _hungerCount) then { + dayz_hunger = dayz_hunger - (_hungerCount); + } else { + dayz_hunger = 0; + }; + }; + if (_thirstCount > 0) then { + if (dayz_thirst > _thirstCount) then { + dayz_thirst = dayz_thirst - _thirstCount; + } else { + dayz_thirst = 0; + }; + }; + if (_tempCount > 0) then { dayz_temperatur = dayz_temperatur + _tempCount; }; + if (_calorieCount > 0) then { dayz_nutrition = dayz_nutrition + _calorieCount; }; + if (_baseRegen > 0) then { r_player_bloodregen = r_player_bloodregen + _baseRegen; }; + }; + case "Working": { + if (_calorieCount > 0) then { dayz_nutrition = dayz_nutrition - (_calorieCount / ((DZE_NutritionDivisor select 0) max 0.1)); }; + if (_thirstCount > 0) then { dayz_thirst = dayz_thirst + (_thirstCount / ((DZE_NutritionDivisor select 1) max 0.1)); }; + if (_hungerCount > 0) then { dayz_hunger = dayz_hunger + (_hungerCount / ((DZE_NutritionDivisor select 2) max 0.1)); }; + if (_tempCount > 0) then { dayz_temperatur = dayz_temperatur + (_tempCount / ((DZE_NutritionDivisor select 3) max 0.1)); }; + }; + }; + dayz_thirst = (dayz_thirst min SleepWater) max 0; + dayz_hunger = (dayz_hunger min SleepFood) max 0; + dayz_temperatur = (dayz_temperatur min dayz_temperaturmax) max dayz_temperaturmin; + }; + Diag_Log "DZE_Hotfix_1.0.6.1A: dayz_NutritionSystem patched"; +}; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_26.sauerland_winter/DZE_Hotfix_1.0.6.1A/system/progress_monitor.sqf b/Server Files/MPMissions/DayZ_Epoch_26.sauerland_winter/DZE_Hotfix_1.0.6.1A/system/progress_monitor.sqf new file mode 100644 index 000000000..5660c9e1b --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_26.sauerland_winter/DZE_Hotfix_1.0.6.1A/system/progress_monitor.sqf @@ -0,0 +1,43 @@ +private["_display","_control1","_control2","_watermark"]; +disableSerialization; +//diag_log "DEBUG: loadscreen guard started."; + +_timeoutStart=diag_ticktime; +while {true} do { + if (diag_ticktime - _timeoutStart >= 120) exitWith { + 1 cutText [localize "str_player_login_timeout", "PLAIN DOWN"]; + uiSleep 5; + endMission "END1"; + }; + if ((!isNil "Dayz_loginCompleted") and {(Dayz_loginCompleted)}) exitWith { + //diag_log [ __FILE__, __LINE__, "End loop"]; + + // Logo watermark: adding a logo in the bottom left corner of the screen with the server name + if (!isNil "dayZ_serverName") then { + 5 cutRsc ["wm_disp","PLAIN"]; + _watermark = (uiNamespace getVariable "wm_disp") displayCtrl 1; + _watermark ctrlSetText dayZ_serverName; + if (profileNamespace getVariable ["streamerMode",0] == 1) then {_watermark ctrlShow false;}; + }; + + if (dayz_enableRules && (profileNamespace getVariable ["streamerMode",0] == 0)) then { + dayz_rulesHandle = execVM "rules.sqf"; + }; + + if (dayz_groupSystem) then {execVM "DZE_Hotfix_1.0.6.1A\groups\init.sqf";}; + Diag_Log "DZE_Hotfix_1.0.6.1A: dayz_groupSystem patched"; + }; + _display = uiNameSpace getVariable "BIS_loadingScreen"; + if (!isNil "_display") then { + if (dayz_loadScreenMsg != "" ) then { + _control1 = _display displayctrl 8400; + _control1 ctrlSetText dayz_loadScreenMsg; + }; + _control2 = _display displayctrl 102; + _control2 ctrlSetText format["%1",floor(diag_ticktime - _timeoutStart)]; + }; + + uiSleep 0.2; + //diag_log [ __FILE__, __LINE__, "Looping..."]; +}; + diff --git a/Server Files/MPMissions/DayZ_Epoch_26.sauerland_winter/init.sqf b/Server Files/MPMissions/DayZ_Epoch_26.sauerland_winter/init.sqf index 54d2be0e7..cacafb364 100644 --- a/Server Files/MPMissions/DayZ_Epoch_26.sauerland_winter/init.sqf +++ b/Server Files/MPMissions/DayZ_Epoch_26.sauerland_winter/init.sqf @@ -79,12 +79,16 @@ onPreloadStarted "diag_log [diag_tickTime,'onPreloadStarted']; dayz_preloadFinis onPreloadFinished "diag_log [diag_tickTime,'onPreloadFinished']; dayz_preloadFinished = true;"; with uiNameSpace do {RscDMSLoad=nil;}; // autologon at next logon +_verCheck = (getText (configFile >> "CfgMods" >> "DayZ" >> "version") == "DayZ Epoch 1.0.6.1"); if (!isDedicated) then { - enableSaving [false, false]; - startLoadingScreen ["","RscDisplayLoadCustom"]; + enableSaving [false, false]; startLoadingScreen ["","RscDisplayLoadCustom"]; progressLoadingScreen 0; dayz_loadScreenMsg = localize 'str_login_missionFile'; - progress_monitor = [] execVM "\z\addons\dayz_code\system\progress_monitor.sqf"; + if (_verCheck) then { + progress_monitor = [] execVM "DZE_Hotfix_1.0.6.1A\system\progress_monitor.sqf"; + } else { + progress_monitor = [] execVM "\z\addons\dayz_code\system\progress_monitor.sqf"; + }; 0 cutText ['','BLACK',0]; 0 fadeSound 0; 0 fadeMusic 0; @@ -98,6 +102,9 @@ progressLoadingScreen 0.1; call compile preprocessFileLineNumbers "\z\addons\dayz_code\medical\setup_functions_med.sqf"; progressLoadingScreen 0.15; call compile preprocessFileLineNumbers "\z\addons\dayz_code\init\compiles.sqf"; +if (_verCheck) then { + #include "DZE_Hotfix_1.0.6.1A\init\compiles.sqf" +}; progressLoadingScreen 0.25; call compile preprocessFileLineNumbers "server_traders.sqf"; call compile preprocessFileLineNumbers "custom\compiles.sqf"; //Compile custom compiles diff --git a/Server Files/MPMissions/DayZ_Epoch_3.Shapur_BAF/DZE_Hotfix_1.0.6.1A/groups/groupMarkers.sqf b/Server Files/MPMissions/DayZ_Epoch_3.Shapur_BAF/DZE_Hotfix_1.0.6.1A/groups/groupMarkers.sqf new file mode 100644 index 000000000..e43cffbac --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_3.Shapur_BAF/DZE_Hotfix_1.0.6.1A/groups/groupMarkers.sqf @@ -0,0 +1,75 @@ +private ["_bodyCount","_count","_group","_hasGPS","_index","_inGroup","_marker","_markBody","_markGroup","_markSelf","_name","_pos","_self","_vehicle"]; + +while {true} do { + _group = player call dayz_filterGroup; + _inGroup = count _group > 1; + + if (dayz_requireRadio && {_inGroup} && {!("ItemRadio" in items player)}) then { + [player] joinSilent grpNull; + if (!isNull findDisplay 80000) then {findDisplay 80000 closeDisplay 2;}; + terminate dayz_groupTags; + 80000 cutText ["","PLAIN"]; + localize "STR_EPOCH_LOST_RADIO_CONTACT" call dayz_rollingMessages; + } else { + if (_inGroup && scriptDone dayz_groupTags) then { + dayz_groupTags = execVM "DZE_Hotfix_1.0.6.1A\groups\groupTags.sqf"; + }; + + if (visibleMap or !isNull (uiNamespace getVariable["BIS_RscMiniMap",displayNull])) then { + _hasGPS = "ItemGPS" in items player; + _markBody = (dayz_markBody == 1 or (dayz_markBody == 2 && _hasGPS)); + _markGroup = (dayz_markGroup == 1 or (dayz_markGroup == 2 && _hasGPS)); + _markSelf = (dayz_markSelf == 1 or (dayz_markSelf == 2 && _hasGPS)); + + _index = 0; + { + _self = _x == player; + _vehicle = vehicle _x; + if ((_self or _markGroup) && (!_self or _markSelf) && (effectiveCommander _vehicle == _x)) then { + _pos = [_x] call FNC_GetPos; + deleteMarkerLocal format["groupMember%1",_index]; + _marker = createMarkerLocal [format["groupMember%1",_index],_pos]; + _marker setMarkerTypeLocal "DestroyedVehicle"; + _marker setMarkerTextLocal format ["%1",if (_vehicle == _x) then {name _x} else {_vehicle call dayz_getCrew}]; + _marker setMarkerColorLocal "ColorGreen"; + } else { + deleteMarkerLocal format["groupMember%1",_index]; + }; + _index = _index + 1; + } count _group; + + // Remove markers for group members that left + _count = count _group; + if (dayz_oldMemberCount > _count) then { + for "_i" from _count to dayz_oldMemberCount do {deleteMarkerLocal format["groupMember%1",_i];}; + }; + dayz_oldMemberCount = _count; + + if (_markBody) then { + _bodyCount = 0; + _name = name player; + { + if (_x getVariable["bodyName",""] == _name) then { + _bodyCount = _bodyCount + 1; + _pos = [_x] call FNC_GetPos; + deleteMarkerLocal format["MyBody%1",_bodyCount]; + _marker = createMarkerLocal [format["MyBody%1",_bodyCount],_pos]; + _marker setMarkerTypeLocal "DestroyedVehicle"; + _marker setMarkerTextLocal localize "STR_EPOCH_RIP"; + _marker setMarkerColorLocal "ColorRed"; + }; + } count allDead; + + // Remove markers for bodies that were deleted + if (dayz_oldBodyCount > _bodyCount) then { + for "_i" from _bodyCount to dayz_oldBodyCount do {deleteMarkerLocal format["MyBody%1",_i];}; + }; + dayz_oldBodyCount = _bodyCount; + } else { + for "_i" from 1 to dayz_oldBodyCount do {deleteMarkerLocal format["MyBody%1",_i];}; + }; + }; + }; + + uiSleep 1; +}; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_3.Shapur_BAF/DZE_Hotfix_1.0.6.1A/groups/groupTags.sqf b/Server Files/MPMissions/DayZ_Epoch_3.Shapur_BAF/DZE_Hotfix_1.0.6.1A/groups/groupTags.sqf new file mode 100644 index 000000000..0e9d72539 --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_3.Shapur_BAF/DZE_Hotfix_1.0.6.1A/groups/groupTags.sqf @@ -0,0 +1,52 @@ +#define DRAW_TAGS (!visibleMap && count units group player > 1) //Use && cameraView != "GROUP" if tactical view is allowed (blocked by default) +private ["_display","_distance","_group","_icon","_index","_pos","_scale","_screen","_text"]; +disableSerialization; + +_refresh = { + _group = player call dayz_filterGroup; + + _display = uiNamespace getVariable "DZ_GroupTags"; + _index = 0; + { + _pos = [_x] call FNC_GetPos; + _distance = _pos distance player; + _icon = _display displayCtrl (100 + _index); + if (_distance > 1 && _distance < 2500 && vehicle _x != vehicle player) then { + _pos set [2,(_pos select 2) + 1.5]; + _screen = worldToScreen _pos; + _text = composeText [image "\ca\ui\data\igui_side_unknown_ca.paa"," ",if (dayz_groupNameTags) then {name _x} else {""}]; + if (count _screen > 1) then { + _scale = if (_distance < 200) then {.3} else {1 min ((1 - (_distance - 3) / 15) max .3)}; + _icon ctrlSetStructuredText _text; + _icon ctrlSetPosition [(_screen select 0),(_screen select 1),.99,.65]; + _icon ctrlSetScale _scale; + _icon ctrlSetFade ((1 - _scale) / 2); + _icon ctrlCommit 0; + _icon ctrlShow true; + } else { + _icon ctrlShow false; + }; + } else { + _icon ctrlShow false; + }; + _index = _index + 1; + } count _group; + + if (dayz_oldGroupCount > count _group) then { + _display displayCtrl (100 + _index) ctrlShow false; + }; + + dayz_oldGroupCount = count _group; +}; + +while {true} do { + waitUntil {uiSleep 1; DRAW_TAGS}; + 80000 cutRsc ["DZ_GroupTags","PLAIN"]; + + while {DRAW_TAGS} do { + call _refresh; //Must be called to finish in current frame + uiSleep 0.01; + }; + + 80000 cutText ["","PLAIN"]; +}; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_3.Shapur_BAF/DZE_Hotfix_1.0.6.1A/groups/init.sqf b/Server Files/MPMissions/DayZ_Epoch_3.Shapur_BAF/DZE_Hotfix_1.0.6.1A/groups/init.sqf new file mode 100644 index 000000000..6a61f5db4 --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_3.Shapur_BAF/DZE_Hotfix_1.0.6.1A/groups/init.sqf @@ -0,0 +1,51 @@ +private ["_leader","_oldGroup","_savedGroup"]; + +uiSleep 1; +if (count (units group player) > 1) then { + [player] joinSilent grpNull; + diag_log "Clearing group"; +}; + +_savedGroup = (PVCDZ_plr_Login select 10) - [getPlayerUID player]; + +if (count _savedGroup > 0 && {!dayz_requireRadio or {dayz_requireRadio && "ItemRadio" in items player}}) then { + { + //Only auto join player into group if leader is in their savedGroup + _leader = leader _x; + if (getPlayerUID _leader in _savedGroup) exitWith { + _oldGroup = group player; + [player] joinSilent _x; + if (count (units _oldGroup) == 0) then {deleteGroup _oldGroup;}; + format[localize "STR_EPOCH_REJOINED_GROUP",name _leader] call dayz_rollingMessages; + + // Update saved group in DB + PVDZ_Server_UpdateGroup = [1,player]; + publicVariableServer "PVDZ_Server_UpdateGroup"; + }; + } count allGroups; +}; + +dayz_oldBodyCount = 0; +dayz_oldGroupCount = 0; +dayz_oldMemberCount = 0; +dayz_disbandGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\disband.sqf"; +dayz_filterGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\filter.sqf"; +dayz_getCrew = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\getCrew.sqf"; +dayz_getPlayer = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\getPlayer.sqf"; +dayz_inviteToGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\invite.sqf"; +dayz_joinGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\join.sqf"; +dayz_kickFromGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\kick.sqf"; +dayz_leaveGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\leave.sqf"; +dayz_openGroupDialog = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\open.sqf"; +dayz_pickGroupMember = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\pickGroupMember.sqf"; +dayz_pickPlayer = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\pickPlayer.sqf"; +dayz_promotePlayer = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\promote.sqf"; +dayz_rejectGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\reject.sqf"; +dayz_groupInit = true; + +//Initialize as script data type, no scriptNull in A2 +dayz_groupDisbandThread = 0 spawn {}; +dayz_groupLeaveThread = 0 spawn {}; +dayz_groupTags = 0 spawn {}; + +execVM "DZE_Hotfix_1.0.6.1A\groups\groupMarkers.sqf"; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_3.Shapur_BAF/DZE_Hotfix_1.0.6.1A/init/compiles.sqf b/Server Files/MPMissions/DayZ_Epoch_3.Shapur_BAF/DZE_Hotfix_1.0.6.1A/init/compiles.sqf new file mode 100644 index 000000000..e0a4a3c84 --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_3.Shapur_BAF/DZE_Hotfix_1.0.6.1A/init/compiles.sqf @@ -0,0 +1,47 @@ +if (!isDedicated) then { + dayz_NutritionSystem = { + private ["_type","_baseRegen","_nutrition","_calorieCount","_hungerCount","_thirstCount","_tempCount","_Thirst","_Hunger","_bloodregen","_golbalNutrition"]; + _type = _this select 0; + _baseRegen = _this select 1; + _nutrition = _this select 2; + _calorieCount = ((_this select 2) select 0); + _hungerCount = ((_this select 2) select 1); + _thirstCount = ((_this select 2) select 2); + _tempCount = ((_this select 2) select 3); + if (_calorieCount > 0) then { + _hungerCount = _hungerCount + (SleepFood * (((ln ((_calorieCount / 3610) * 100)) * (1 - (dayz_hunger / SleepFood))) / 100)); + _thirstCount = _thirstCount + (SleepWater * (((ln ((_calorieCount / 3610) * 100)) * (1 - (dayz_thirst / SleepWater))) / 100)); + }; + switch (_type) do { + case "FoodDrink": { + if (_hungerCount > 0) then { + if (dayz_hunger > _hungerCount) then { + dayz_hunger = dayz_hunger - (_hungerCount); + } else { + dayz_hunger = 0; + }; + }; + if (_thirstCount > 0) then { + if (dayz_thirst > _thirstCount) then { + dayz_thirst = dayz_thirst - _thirstCount; + } else { + dayz_thirst = 0; + }; + }; + if (_tempCount > 0) then { dayz_temperatur = dayz_temperatur + _tempCount; }; + if (_calorieCount > 0) then { dayz_nutrition = dayz_nutrition + _calorieCount; }; + if (_baseRegen > 0) then { r_player_bloodregen = r_player_bloodregen + _baseRegen; }; + }; + case "Working": { + if (_calorieCount > 0) then { dayz_nutrition = dayz_nutrition - (_calorieCount / ((DZE_NutritionDivisor select 0) max 0.1)); }; + if (_thirstCount > 0) then { dayz_thirst = dayz_thirst + (_thirstCount / ((DZE_NutritionDivisor select 1) max 0.1)); }; + if (_hungerCount > 0) then { dayz_hunger = dayz_hunger + (_hungerCount / ((DZE_NutritionDivisor select 2) max 0.1)); }; + if (_tempCount > 0) then { dayz_temperatur = dayz_temperatur + (_tempCount / ((DZE_NutritionDivisor select 3) max 0.1)); }; + }; + }; + dayz_thirst = (dayz_thirst min SleepWater) max 0; + dayz_hunger = (dayz_hunger min SleepFood) max 0; + dayz_temperatur = (dayz_temperatur min dayz_temperaturmax) max dayz_temperaturmin; + }; + Diag_Log "DZE_Hotfix_1.0.6.1A: dayz_NutritionSystem patched"; +}; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_3.Shapur_BAF/DZE_Hotfix_1.0.6.1A/system/progress_monitor.sqf b/Server Files/MPMissions/DayZ_Epoch_3.Shapur_BAF/DZE_Hotfix_1.0.6.1A/system/progress_monitor.sqf new file mode 100644 index 000000000..5660c9e1b --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_3.Shapur_BAF/DZE_Hotfix_1.0.6.1A/system/progress_monitor.sqf @@ -0,0 +1,43 @@ +private["_display","_control1","_control2","_watermark"]; +disableSerialization; +//diag_log "DEBUG: loadscreen guard started."; + +_timeoutStart=diag_ticktime; +while {true} do { + if (diag_ticktime - _timeoutStart >= 120) exitWith { + 1 cutText [localize "str_player_login_timeout", "PLAIN DOWN"]; + uiSleep 5; + endMission "END1"; + }; + if ((!isNil "Dayz_loginCompleted") and {(Dayz_loginCompleted)}) exitWith { + //diag_log [ __FILE__, __LINE__, "End loop"]; + + // Logo watermark: adding a logo in the bottom left corner of the screen with the server name + if (!isNil "dayZ_serverName") then { + 5 cutRsc ["wm_disp","PLAIN"]; + _watermark = (uiNamespace getVariable "wm_disp") displayCtrl 1; + _watermark ctrlSetText dayZ_serverName; + if (profileNamespace getVariable ["streamerMode",0] == 1) then {_watermark ctrlShow false;}; + }; + + if (dayz_enableRules && (profileNamespace getVariable ["streamerMode",0] == 0)) then { + dayz_rulesHandle = execVM "rules.sqf"; + }; + + if (dayz_groupSystem) then {execVM "DZE_Hotfix_1.0.6.1A\groups\init.sqf";}; + Diag_Log "DZE_Hotfix_1.0.6.1A: dayz_groupSystem patched"; + }; + _display = uiNameSpace getVariable "BIS_loadingScreen"; + if (!isNil "_display") then { + if (dayz_loadScreenMsg != "" ) then { + _control1 = _display displayctrl 8400; + _control1 ctrlSetText dayz_loadScreenMsg; + }; + _control2 = _display displayctrl 102; + _control2 ctrlSetText format["%1",floor(diag_ticktime - _timeoutStart)]; + }; + + uiSleep 0.2; + //diag_log [ __FILE__, __LINE__, "Looping..."]; +}; + diff --git a/Server Files/MPMissions/DayZ_Epoch_3.Shapur_BAF/init.sqf b/Server Files/MPMissions/DayZ_Epoch_3.Shapur_BAF/init.sqf index 5e3f708d3..108035f68 100644 --- a/Server Files/MPMissions/DayZ_Epoch_3.Shapur_BAF/init.sqf +++ b/Server Files/MPMissions/DayZ_Epoch_3.Shapur_BAF/init.sqf @@ -79,12 +79,16 @@ onPreloadStarted "diag_log [diag_tickTime,'onPreloadStarted']; dayz_preloadFinis onPreloadFinished "diag_log [diag_tickTime,'onPreloadFinished']; dayz_preloadFinished = true;"; with uiNameSpace do {RscDMSLoad=nil;}; // autologon at next logon +_verCheck = (getText (configFile >> "CfgMods" >> "DayZ" >> "version") == "DayZ Epoch 1.0.6.1"); if (!isDedicated) then { - enableSaving [false, false]; - startLoadingScreen ["","RscDisplayLoadCustom"]; + enableSaving [false, false]; startLoadingScreen ["","RscDisplayLoadCustom"]; progressLoadingScreen 0; dayz_loadScreenMsg = localize 'str_login_missionFile'; - progress_monitor = [] execVM "\z\addons\dayz_code\system\progress_monitor.sqf"; + if (_verCheck) then { + progress_monitor = [] execVM "DZE_Hotfix_1.0.6.1A\system\progress_monitor.sqf"; + } else { + progress_monitor = [] execVM "\z\addons\dayz_code\system\progress_monitor.sqf"; + }; 0 cutText ['','BLACK',0]; 0 fadeSound 0; 0 fadeMusic 0; @@ -98,6 +102,9 @@ progressLoadingScreen 0.1; call compile preprocessFileLineNumbers "\z\addons\dayz_code\medical\setup_functions_med.sqf"; progressLoadingScreen 0.15; call compile preprocessFileLineNumbers "\z\addons\dayz_code\init\compiles.sqf"; +if (_verCheck) then { + #include "DZE_Hotfix_1.0.6.1A\init\compiles.sqf" +}; progressLoadingScreen 0.25; call compile preprocessFileLineNumbers "server_traders.sqf"; call compile preprocessFileLineNumbers "\z\addons\dayz_code\system\mission\shapur_baf.sqf"; //Add trader city objects locally on every machine early diff --git a/Server Files/MPMissions/DayZ_Epoch_4.Zargabad/DZE_Hotfix_1.0.6.1A/groups/groupMarkers.sqf b/Server Files/MPMissions/DayZ_Epoch_4.Zargabad/DZE_Hotfix_1.0.6.1A/groups/groupMarkers.sqf new file mode 100644 index 000000000..e43cffbac --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_4.Zargabad/DZE_Hotfix_1.0.6.1A/groups/groupMarkers.sqf @@ -0,0 +1,75 @@ +private ["_bodyCount","_count","_group","_hasGPS","_index","_inGroup","_marker","_markBody","_markGroup","_markSelf","_name","_pos","_self","_vehicle"]; + +while {true} do { + _group = player call dayz_filterGroup; + _inGroup = count _group > 1; + + if (dayz_requireRadio && {_inGroup} && {!("ItemRadio" in items player)}) then { + [player] joinSilent grpNull; + if (!isNull findDisplay 80000) then {findDisplay 80000 closeDisplay 2;}; + terminate dayz_groupTags; + 80000 cutText ["","PLAIN"]; + localize "STR_EPOCH_LOST_RADIO_CONTACT" call dayz_rollingMessages; + } else { + if (_inGroup && scriptDone dayz_groupTags) then { + dayz_groupTags = execVM "DZE_Hotfix_1.0.6.1A\groups\groupTags.sqf"; + }; + + if (visibleMap or !isNull (uiNamespace getVariable["BIS_RscMiniMap",displayNull])) then { + _hasGPS = "ItemGPS" in items player; + _markBody = (dayz_markBody == 1 or (dayz_markBody == 2 && _hasGPS)); + _markGroup = (dayz_markGroup == 1 or (dayz_markGroup == 2 && _hasGPS)); + _markSelf = (dayz_markSelf == 1 or (dayz_markSelf == 2 && _hasGPS)); + + _index = 0; + { + _self = _x == player; + _vehicle = vehicle _x; + if ((_self or _markGroup) && (!_self or _markSelf) && (effectiveCommander _vehicle == _x)) then { + _pos = [_x] call FNC_GetPos; + deleteMarkerLocal format["groupMember%1",_index]; + _marker = createMarkerLocal [format["groupMember%1",_index],_pos]; + _marker setMarkerTypeLocal "DestroyedVehicle"; + _marker setMarkerTextLocal format ["%1",if (_vehicle == _x) then {name _x} else {_vehicle call dayz_getCrew}]; + _marker setMarkerColorLocal "ColorGreen"; + } else { + deleteMarkerLocal format["groupMember%1",_index]; + }; + _index = _index + 1; + } count _group; + + // Remove markers for group members that left + _count = count _group; + if (dayz_oldMemberCount > _count) then { + for "_i" from _count to dayz_oldMemberCount do {deleteMarkerLocal format["groupMember%1",_i];}; + }; + dayz_oldMemberCount = _count; + + if (_markBody) then { + _bodyCount = 0; + _name = name player; + { + if (_x getVariable["bodyName",""] == _name) then { + _bodyCount = _bodyCount + 1; + _pos = [_x] call FNC_GetPos; + deleteMarkerLocal format["MyBody%1",_bodyCount]; + _marker = createMarkerLocal [format["MyBody%1",_bodyCount],_pos]; + _marker setMarkerTypeLocal "DestroyedVehicle"; + _marker setMarkerTextLocal localize "STR_EPOCH_RIP"; + _marker setMarkerColorLocal "ColorRed"; + }; + } count allDead; + + // Remove markers for bodies that were deleted + if (dayz_oldBodyCount > _bodyCount) then { + for "_i" from _bodyCount to dayz_oldBodyCount do {deleteMarkerLocal format["MyBody%1",_i];}; + }; + dayz_oldBodyCount = _bodyCount; + } else { + for "_i" from 1 to dayz_oldBodyCount do {deleteMarkerLocal format["MyBody%1",_i];}; + }; + }; + }; + + uiSleep 1; +}; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_4.Zargabad/DZE_Hotfix_1.0.6.1A/groups/groupTags.sqf b/Server Files/MPMissions/DayZ_Epoch_4.Zargabad/DZE_Hotfix_1.0.6.1A/groups/groupTags.sqf new file mode 100644 index 000000000..0e9d72539 --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_4.Zargabad/DZE_Hotfix_1.0.6.1A/groups/groupTags.sqf @@ -0,0 +1,52 @@ +#define DRAW_TAGS (!visibleMap && count units group player > 1) //Use && cameraView != "GROUP" if tactical view is allowed (blocked by default) +private ["_display","_distance","_group","_icon","_index","_pos","_scale","_screen","_text"]; +disableSerialization; + +_refresh = { + _group = player call dayz_filterGroup; + + _display = uiNamespace getVariable "DZ_GroupTags"; + _index = 0; + { + _pos = [_x] call FNC_GetPos; + _distance = _pos distance player; + _icon = _display displayCtrl (100 + _index); + if (_distance > 1 && _distance < 2500 && vehicle _x != vehicle player) then { + _pos set [2,(_pos select 2) + 1.5]; + _screen = worldToScreen _pos; + _text = composeText [image "\ca\ui\data\igui_side_unknown_ca.paa"," ",if (dayz_groupNameTags) then {name _x} else {""}]; + if (count _screen > 1) then { + _scale = if (_distance < 200) then {.3} else {1 min ((1 - (_distance - 3) / 15) max .3)}; + _icon ctrlSetStructuredText _text; + _icon ctrlSetPosition [(_screen select 0),(_screen select 1),.99,.65]; + _icon ctrlSetScale _scale; + _icon ctrlSetFade ((1 - _scale) / 2); + _icon ctrlCommit 0; + _icon ctrlShow true; + } else { + _icon ctrlShow false; + }; + } else { + _icon ctrlShow false; + }; + _index = _index + 1; + } count _group; + + if (dayz_oldGroupCount > count _group) then { + _display displayCtrl (100 + _index) ctrlShow false; + }; + + dayz_oldGroupCount = count _group; +}; + +while {true} do { + waitUntil {uiSleep 1; DRAW_TAGS}; + 80000 cutRsc ["DZ_GroupTags","PLAIN"]; + + while {DRAW_TAGS} do { + call _refresh; //Must be called to finish in current frame + uiSleep 0.01; + }; + + 80000 cutText ["","PLAIN"]; +}; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_4.Zargabad/DZE_Hotfix_1.0.6.1A/groups/init.sqf b/Server Files/MPMissions/DayZ_Epoch_4.Zargabad/DZE_Hotfix_1.0.6.1A/groups/init.sqf new file mode 100644 index 000000000..6a61f5db4 --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_4.Zargabad/DZE_Hotfix_1.0.6.1A/groups/init.sqf @@ -0,0 +1,51 @@ +private ["_leader","_oldGroup","_savedGroup"]; + +uiSleep 1; +if (count (units group player) > 1) then { + [player] joinSilent grpNull; + diag_log "Clearing group"; +}; + +_savedGroup = (PVCDZ_plr_Login select 10) - [getPlayerUID player]; + +if (count _savedGroup > 0 && {!dayz_requireRadio or {dayz_requireRadio && "ItemRadio" in items player}}) then { + { + //Only auto join player into group if leader is in their savedGroup + _leader = leader _x; + if (getPlayerUID _leader in _savedGroup) exitWith { + _oldGroup = group player; + [player] joinSilent _x; + if (count (units _oldGroup) == 0) then {deleteGroup _oldGroup;}; + format[localize "STR_EPOCH_REJOINED_GROUP",name _leader] call dayz_rollingMessages; + + // Update saved group in DB + PVDZ_Server_UpdateGroup = [1,player]; + publicVariableServer "PVDZ_Server_UpdateGroup"; + }; + } count allGroups; +}; + +dayz_oldBodyCount = 0; +dayz_oldGroupCount = 0; +dayz_oldMemberCount = 0; +dayz_disbandGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\disband.sqf"; +dayz_filterGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\filter.sqf"; +dayz_getCrew = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\getCrew.sqf"; +dayz_getPlayer = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\getPlayer.sqf"; +dayz_inviteToGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\invite.sqf"; +dayz_joinGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\join.sqf"; +dayz_kickFromGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\kick.sqf"; +dayz_leaveGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\leave.sqf"; +dayz_openGroupDialog = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\open.sqf"; +dayz_pickGroupMember = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\pickGroupMember.sqf"; +dayz_pickPlayer = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\pickPlayer.sqf"; +dayz_promotePlayer = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\promote.sqf"; +dayz_rejectGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\reject.sqf"; +dayz_groupInit = true; + +//Initialize as script data type, no scriptNull in A2 +dayz_groupDisbandThread = 0 spawn {}; +dayz_groupLeaveThread = 0 spawn {}; +dayz_groupTags = 0 spawn {}; + +execVM "DZE_Hotfix_1.0.6.1A\groups\groupMarkers.sqf"; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_4.Zargabad/DZE_Hotfix_1.0.6.1A/init/compiles.sqf b/Server Files/MPMissions/DayZ_Epoch_4.Zargabad/DZE_Hotfix_1.0.6.1A/init/compiles.sqf new file mode 100644 index 000000000..e0a4a3c84 --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_4.Zargabad/DZE_Hotfix_1.0.6.1A/init/compiles.sqf @@ -0,0 +1,47 @@ +if (!isDedicated) then { + dayz_NutritionSystem = { + private ["_type","_baseRegen","_nutrition","_calorieCount","_hungerCount","_thirstCount","_tempCount","_Thirst","_Hunger","_bloodregen","_golbalNutrition"]; + _type = _this select 0; + _baseRegen = _this select 1; + _nutrition = _this select 2; + _calorieCount = ((_this select 2) select 0); + _hungerCount = ((_this select 2) select 1); + _thirstCount = ((_this select 2) select 2); + _tempCount = ((_this select 2) select 3); + if (_calorieCount > 0) then { + _hungerCount = _hungerCount + (SleepFood * (((ln ((_calorieCount / 3610) * 100)) * (1 - (dayz_hunger / SleepFood))) / 100)); + _thirstCount = _thirstCount + (SleepWater * (((ln ((_calorieCount / 3610) * 100)) * (1 - (dayz_thirst / SleepWater))) / 100)); + }; + switch (_type) do { + case "FoodDrink": { + if (_hungerCount > 0) then { + if (dayz_hunger > _hungerCount) then { + dayz_hunger = dayz_hunger - (_hungerCount); + } else { + dayz_hunger = 0; + }; + }; + if (_thirstCount > 0) then { + if (dayz_thirst > _thirstCount) then { + dayz_thirst = dayz_thirst - _thirstCount; + } else { + dayz_thirst = 0; + }; + }; + if (_tempCount > 0) then { dayz_temperatur = dayz_temperatur + _tempCount; }; + if (_calorieCount > 0) then { dayz_nutrition = dayz_nutrition + _calorieCount; }; + if (_baseRegen > 0) then { r_player_bloodregen = r_player_bloodregen + _baseRegen; }; + }; + case "Working": { + if (_calorieCount > 0) then { dayz_nutrition = dayz_nutrition - (_calorieCount / ((DZE_NutritionDivisor select 0) max 0.1)); }; + if (_thirstCount > 0) then { dayz_thirst = dayz_thirst + (_thirstCount / ((DZE_NutritionDivisor select 1) max 0.1)); }; + if (_hungerCount > 0) then { dayz_hunger = dayz_hunger + (_hungerCount / ((DZE_NutritionDivisor select 2) max 0.1)); }; + if (_tempCount > 0) then { dayz_temperatur = dayz_temperatur + (_tempCount / ((DZE_NutritionDivisor select 3) max 0.1)); }; + }; + }; + dayz_thirst = (dayz_thirst min SleepWater) max 0; + dayz_hunger = (dayz_hunger min SleepFood) max 0; + dayz_temperatur = (dayz_temperatur min dayz_temperaturmax) max dayz_temperaturmin; + }; + Diag_Log "DZE_Hotfix_1.0.6.1A: dayz_NutritionSystem patched"; +}; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_4.Zargabad/DZE_Hotfix_1.0.6.1A/system/progress_monitor.sqf b/Server Files/MPMissions/DayZ_Epoch_4.Zargabad/DZE_Hotfix_1.0.6.1A/system/progress_monitor.sqf new file mode 100644 index 000000000..5660c9e1b --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_4.Zargabad/DZE_Hotfix_1.0.6.1A/system/progress_monitor.sqf @@ -0,0 +1,43 @@ +private["_display","_control1","_control2","_watermark"]; +disableSerialization; +//diag_log "DEBUG: loadscreen guard started."; + +_timeoutStart=diag_ticktime; +while {true} do { + if (diag_ticktime - _timeoutStart >= 120) exitWith { + 1 cutText [localize "str_player_login_timeout", "PLAIN DOWN"]; + uiSleep 5; + endMission "END1"; + }; + if ((!isNil "Dayz_loginCompleted") and {(Dayz_loginCompleted)}) exitWith { + //diag_log [ __FILE__, __LINE__, "End loop"]; + + // Logo watermark: adding a logo in the bottom left corner of the screen with the server name + if (!isNil "dayZ_serverName") then { + 5 cutRsc ["wm_disp","PLAIN"]; + _watermark = (uiNamespace getVariable "wm_disp") displayCtrl 1; + _watermark ctrlSetText dayZ_serverName; + if (profileNamespace getVariable ["streamerMode",0] == 1) then {_watermark ctrlShow false;}; + }; + + if (dayz_enableRules && (profileNamespace getVariable ["streamerMode",0] == 0)) then { + dayz_rulesHandle = execVM "rules.sqf"; + }; + + if (dayz_groupSystem) then {execVM "DZE_Hotfix_1.0.6.1A\groups\init.sqf";}; + Diag_Log "DZE_Hotfix_1.0.6.1A: dayz_groupSystem patched"; + }; + _display = uiNameSpace getVariable "BIS_loadingScreen"; + if (!isNil "_display") then { + if (dayz_loadScreenMsg != "" ) then { + _control1 = _display displayctrl 8400; + _control1 ctrlSetText dayz_loadScreenMsg; + }; + _control2 = _display displayctrl 102; + _control2 ctrlSetText format["%1",floor(diag_ticktime - _timeoutStart)]; + }; + + uiSleep 0.2; + //diag_log [ __FILE__, __LINE__, "Looping..."]; +}; + diff --git a/Server Files/MPMissions/DayZ_Epoch_4.Zargabad/init.sqf b/Server Files/MPMissions/DayZ_Epoch_4.Zargabad/init.sqf index 6ec5f16b9..b04792bb9 100644 --- a/Server Files/MPMissions/DayZ_Epoch_4.Zargabad/init.sqf +++ b/Server Files/MPMissions/DayZ_Epoch_4.Zargabad/init.sqf @@ -79,12 +79,16 @@ onPreloadStarted "diag_log [diag_tickTime,'onPreloadStarted']; dayz_preloadFinis onPreloadFinished "diag_log [diag_tickTime,'onPreloadFinished']; dayz_preloadFinished = true;"; with uiNameSpace do {RscDMSLoad=nil;}; // autologon at next logon +_verCheck = (getText (configFile >> "CfgMods" >> "DayZ" >> "version") == "DayZ Epoch 1.0.6.1"); if (!isDedicated) then { - enableSaving [false, false]; - startLoadingScreen ["","RscDisplayLoadCustom"]; + enableSaving [false, false]; startLoadingScreen ["","RscDisplayLoadCustom"]; progressLoadingScreen 0; dayz_loadScreenMsg = localize 'str_login_missionFile'; - progress_monitor = [] execVM "\z\addons\dayz_code\system\progress_monitor.sqf"; + if (_verCheck) then { + progress_monitor = [] execVM "DZE_Hotfix_1.0.6.1A\system\progress_monitor.sqf"; + } else { + progress_monitor = [] execVM "\z\addons\dayz_code\system\progress_monitor.sqf"; + }; 0 cutText ['','BLACK',0]; 0 fadeSound 0; 0 fadeMusic 0; @@ -98,6 +102,9 @@ progressLoadingScreen 0.1; call compile preprocessFileLineNumbers "\z\addons\dayz_code\medical\setup_functions_med.sqf"; progressLoadingScreen 0.15; call compile preprocessFileLineNumbers "\z\addons\dayz_code\init\compiles.sqf"; +if (_verCheck) then { + #include "DZE_Hotfix_1.0.6.1A\init\compiles.sqf" +}; progressLoadingScreen 0.25; call compile preprocessFileLineNumbers "server_traders.sqf"; call compile preprocessFileLineNumbers "\z\addons\dayz_code\system\mission\zargabad.sqf"; //Add trader city objects locally on every machine early diff --git a/Server Files/MPMissions/DayZ_Epoch_5.Bootcamp_ACR/DZE_Hotfix_1.0.6.1A/groups/groupMarkers.sqf b/Server Files/MPMissions/DayZ_Epoch_5.Bootcamp_ACR/DZE_Hotfix_1.0.6.1A/groups/groupMarkers.sqf new file mode 100644 index 000000000..e43cffbac --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_5.Bootcamp_ACR/DZE_Hotfix_1.0.6.1A/groups/groupMarkers.sqf @@ -0,0 +1,75 @@ +private ["_bodyCount","_count","_group","_hasGPS","_index","_inGroup","_marker","_markBody","_markGroup","_markSelf","_name","_pos","_self","_vehicle"]; + +while {true} do { + _group = player call dayz_filterGroup; + _inGroup = count _group > 1; + + if (dayz_requireRadio && {_inGroup} && {!("ItemRadio" in items player)}) then { + [player] joinSilent grpNull; + if (!isNull findDisplay 80000) then {findDisplay 80000 closeDisplay 2;}; + terminate dayz_groupTags; + 80000 cutText ["","PLAIN"]; + localize "STR_EPOCH_LOST_RADIO_CONTACT" call dayz_rollingMessages; + } else { + if (_inGroup && scriptDone dayz_groupTags) then { + dayz_groupTags = execVM "DZE_Hotfix_1.0.6.1A\groups\groupTags.sqf"; + }; + + if (visibleMap or !isNull (uiNamespace getVariable["BIS_RscMiniMap",displayNull])) then { + _hasGPS = "ItemGPS" in items player; + _markBody = (dayz_markBody == 1 or (dayz_markBody == 2 && _hasGPS)); + _markGroup = (dayz_markGroup == 1 or (dayz_markGroup == 2 && _hasGPS)); + _markSelf = (dayz_markSelf == 1 or (dayz_markSelf == 2 && _hasGPS)); + + _index = 0; + { + _self = _x == player; + _vehicle = vehicle _x; + if ((_self or _markGroup) && (!_self or _markSelf) && (effectiveCommander _vehicle == _x)) then { + _pos = [_x] call FNC_GetPos; + deleteMarkerLocal format["groupMember%1",_index]; + _marker = createMarkerLocal [format["groupMember%1",_index],_pos]; + _marker setMarkerTypeLocal "DestroyedVehicle"; + _marker setMarkerTextLocal format ["%1",if (_vehicle == _x) then {name _x} else {_vehicle call dayz_getCrew}]; + _marker setMarkerColorLocal "ColorGreen"; + } else { + deleteMarkerLocal format["groupMember%1",_index]; + }; + _index = _index + 1; + } count _group; + + // Remove markers for group members that left + _count = count _group; + if (dayz_oldMemberCount > _count) then { + for "_i" from _count to dayz_oldMemberCount do {deleteMarkerLocal format["groupMember%1",_i];}; + }; + dayz_oldMemberCount = _count; + + if (_markBody) then { + _bodyCount = 0; + _name = name player; + { + if (_x getVariable["bodyName",""] == _name) then { + _bodyCount = _bodyCount + 1; + _pos = [_x] call FNC_GetPos; + deleteMarkerLocal format["MyBody%1",_bodyCount]; + _marker = createMarkerLocal [format["MyBody%1",_bodyCount],_pos]; + _marker setMarkerTypeLocal "DestroyedVehicle"; + _marker setMarkerTextLocal localize "STR_EPOCH_RIP"; + _marker setMarkerColorLocal "ColorRed"; + }; + } count allDead; + + // Remove markers for bodies that were deleted + if (dayz_oldBodyCount > _bodyCount) then { + for "_i" from _bodyCount to dayz_oldBodyCount do {deleteMarkerLocal format["MyBody%1",_i];}; + }; + dayz_oldBodyCount = _bodyCount; + } else { + for "_i" from 1 to dayz_oldBodyCount do {deleteMarkerLocal format["MyBody%1",_i];}; + }; + }; + }; + + uiSleep 1; +}; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_5.Bootcamp_ACR/DZE_Hotfix_1.0.6.1A/groups/groupTags.sqf b/Server Files/MPMissions/DayZ_Epoch_5.Bootcamp_ACR/DZE_Hotfix_1.0.6.1A/groups/groupTags.sqf new file mode 100644 index 000000000..0e9d72539 --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_5.Bootcamp_ACR/DZE_Hotfix_1.0.6.1A/groups/groupTags.sqf @@ -0,0 +1,52 @@ +#define DRAW_TAGS (!visibleMap && count units group player > 1) //Use && cameraView != "GROUP" if tactical view is allowed (blocked by default) +private ["_display","_distance","_group","_icon","_index","_pos","_scale","_screen","_text"]; +disableSerialization; + +_refresh = { + _group = player call dayz_filterGroup; + + _display = uiNamespace getVariable "DZ_GroupTags"; + _index = 0; + { + _pos = [_x] call FNC_GetPos; + _distance = _pos distance player; + _icon = _display displayCtrl (100 + _index); + if (_distance > 1 && _distance < 2500 && vehicle _x != vehicle player) then { + _pos set [2,(_pos select 2) + 1.5]; + _screen = worldToScreen _pos; + _text = composeText [image "\ca\ui\data\igui_side_unknown_ca.paa"," ",if (dayz_groupNameTags) then {name _x} else {""}]; + if (count _screen > 1) then { + _scale = if (_distance < 200) then {.3} else {1 min ((1 - (_distance - 3) / 15) max .3)}; + _icon ctrlSetStructuredText _text; + _icon ctrlSetPosition [(_screen select 0),(_screen select 1),.99,.65]; + _icon ctrlSetScale _scale; + _icon ctrlSetFade ((1 - _scale) / 2); + _icon ctrlCommit 0; + _icon ctrlShow true; + } else { + _icon ctrlShow false; + }; + } else { + _icon ctrlShow false; + }; + _index = _index + 1; + } count _group; + + if (dayz_oldGroupCount > count _group) then { + _display displayCtrl (100 + _index) ctrlShow false; + }; + + dayz_oldGroupCount = count _group; +}; + +while {true} do { + waitUntil {uiSleep 1; DRAW_TAGS}; + 80000 cutRsc ["DZ_GroupTags","PLAIN"]; + + while {DRAW_TAGS} do { + call _refresh; //Must be called to finish in current frame + uiSleep 0.01; + }; + + 80000 cutText ["","PLAIN"]; +}; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_5.Bootcamp_ACR/DZE_Hotfix_1.0.6.1A/groups/init.sqf b/Server Files/MPMissions/DayZ_Epoch_5.Bootcamp_ACR/DZE_Hotfix_1.0.6.1A/groups/init.sqf new file mode 100644 index 000000000..6a61f5db4 --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_5.Bootcamp_ACR/DZE_Hotfix_1.0.6.1A/groups/init.sqf @@ -0,0 +1,51 @@ +private ["_leader","_oldGroup","_savedGroup"]; + +uiSleep 1; +if (count (units group player) > 1) then { + [player] joinSilent grpNull; + diag_log "Clearing group"; +}; + +_savedGroup = (PVCDZ_plr_Login select 10) - [getPlayerUID player]; + +if (count _savedGroup > 0 && {!dayz_requireRadio or {dayz_requireRadio && "ItemRadio" in items player}}) then { + { + //Only auto join player into group if leader is in their savedGroup + _leader = leader _x; + if (getPlayerUID _leader in _savedGroup) exitWith { + _oldGroup = group player; + [player] joinSilent _x; + if (count (units _oldGroup) == 0) then {deleteGroup _oldGroup;}; + format[localize "STR_EPOCH_REJOINED_GROUP",name _leader] call dayz_rollingMessages; + + // Update saved group in DB + PVDZ_Server_UpdateGroup = [1,player]; + publicVariableServer "PVDZ_Server_UpdateGroup"; + }; + } count allGroups; +}; + +dayz_oldBodyCount = 0; +dayz_oldGroupCount = 0; +dayz_oldMemberCount = 0; +dayz_disbandGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\disband.sqf"; +dayz_filterGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\filter.sqf"; +dayz_getCrew = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\getCrew.sqf"; +dayz_getPlayer = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\getPlayer.sqf"; +dayz_inviteToGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\invite.sqf"; +dayz_joinGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\join.sqf"; +dayz_kickFromGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\kick.sqf"; +dayz_leaveGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\leave.sqf"; +dayz_openGroupDialog = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\open.sqf"; +dayz_pickGroupMember = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\pickGroupMember.sqf"; +dayz_pickPlayer = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\pickPlayer.sqf"; +dayz_promotePlayer = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\promote.sqf"; +dayz_rejectGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\reject.sqf"; +dayz_groupInit = true; + +//Initialize as script data type, no scriptNull in A2 +dayz_groupDisbandThread = 0 spawn {}; +dayz_groupLeaveThread = 0 spawn {}; +dayz_groupTags = 0 spawn {}; + +execVM "DZE_Hotfix_1.0.6.1A\groups\groupMarkers.sqf"; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_5.Bootcamp_ACR/DZE_Hotfix_1.0.6.1A/init/compiles.sqf b/Server Files/MPMissions/DayZ_Epoch_5.Bootcamp_ACR/DZE_Hotfix_1.0.6.1A/init/compiles.sqf new file mode 100644 index 000000000..e0a4a3c84 --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_5.Bootcamp_ACR/DZE_Hotfix_1.0.6.1A/init/compiles.sqf @@ -0,0 +1,47 @@ +if (!isDedicated) then { + dayz_NutritionSystem = { + private ["_type","_baseRegen","_nutrition","_calorieCount","_hungerCount","_thirstCount","_tempCount","_Thirst","_Hunger","_bloodregen","_golbalNutrition"]; + _type = _this select 0; + _baseRegen = _this select 1; + _nutrition = _this select 2; + _calorieCount = ((_this select 2) select 0); + _hungerCount = ((_this select 2) select 1); + _thirstCount = ((_this select 2) select 2); + _tempCount = ((_this select 2) select 3); + if (_calorieCount > 0) then { + _hungerCount = _hungerCount + (SleepFood * (((ln ((_calorieCount / 3610) * 100)) * (1 - (dayz_hunger / SleepFood))) / 100)); + _thirstCount = _thirstCount + (SleepWater * (((ln ((_calorieCount / 3610) * 100)) * (1 - (dayz_thirst / SleepWater))) / 100)); + }; + switch (_type) do { + case "FoodDrink": { + if (_hungerCount > 0) then { + if (dayz_hunger > _hungerCount) then { + dayz_hunger = dayz_hunger - (_hungerCount); + } else { + dayz_hunger = 0; + }; + }; + if (_thirstCount > 0) then { + if (dayz_thirst > _thirstCount) then { + dayz_thirst = dayz_thirst - _thirstCount; + } else { + dayz_thirst = 0; + }; + }; + if (_tempCount > 0) then { dayz_temperatur = dayz_temperatur + _tempCount; }; + if (_calorieCount > 0) then { dayz_nutrition = dayz_nutrition + _calorieCount; }; + if (_baseRegen > 0) then { r_player_bloodregen = r_player_bloodregen + _baseRegen; }; + }; + case "Working": { + if (_calorieCount > 0) then { dayz_nutrition = dayz_nutrition - (_calorieCount / ((DZE_NutritionDivisor select 0) max 0.1)); }; + if (_thirstCount > 0) then { dayz_thirst = dayz_thirst + (_thirstCount / ((DZE_NutritionDivisor select 1) max 0.1)); }; + if (_hungerCount > 0) then { dayz_hunger = dayz_hunger + (_hungerCount / ((DZE_NutritionDivisor select 2) max 0.1)); }; + if (_tempCount > 0) then { dayz_temperatur = dayz_temperatur + (_tempCount / ((DZE_NutritionDivisor select 3) max 0.1)); }; + }; + }; + dayz_thirst = (dayz_thirst min SleepWater) max 0; + dayz_hunger = (dayz_hunger min SleepFood) max 0; + dayz_temperatur = (dayz_temperatur min dayz_temperaturmax) max dayz_temperaturmin; + }; + Diag_Log "DZE_Hotfix_1.0.6.1A: dayz_NutritionSystem patched"; +}; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_5.Bootcamp_ACR/DZE_Hotfix_1.0.6.1A/system/progress_monitor.sqf b/Server Files/MPMissions/DayZ_Epoch_5.Bootcamp_ACR/DZE_Hotfix_1.0.6.1A/system/progress_monitor.sqf new file mode 100644 index 000000000..5660c9e1b --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_5.Bootcamp_ACR/DZE_Hotfix_1.0.6.1A/system/progress_monitor.sqf @@ -0,0 +1,43 @@ +private["_display","_control1","_control2","_watermark"]; +disableSerialization; +//diag_log "DEBUG: loadscreen guard started."; + +_timeoutStart=diag_ticktime; +while {true} do { + if (diag_ticktime - _timeoutStart >= 120) exitWith { + 1 cutText [localize "str_player_login_timeout", "PLAIN DOWN"]; + uiSleep 5; + endMission "END1"; + }; + if ((!isNil "Dayz_loginCompleted") and {(Dayz_loginCompleted)}) exitWith { + //diag_log [ __FILE__, __LINE__, "End loop"]; + + // Logo watermark: adding a logo in the bottom left corner of the screen with the server name + if (!isNil "dayZ_serverName") then { + 5 cutRsc ["wm_disp","PLAIN"]; + _watermark = (uiNamespace getVariable "wm_disp") displayCtrl 1; + _watermark ctrlSetText dayZ_serverName; + if (profileNamespace getVariable ["streamerMode",0] == 1) then {_watermark ctrlShow false;}; + }; + + if (dayz_enableRules && (profileNamespace getVariable ["streamerMode",0] == 0)) then { + dayz_rulesHandle = execVM "rules.sqf"; + }; + + if (dayz_groupSystem) then {execVM "DZE_Hotfix_1.0.6.1A\groups\init.sqf";}; + Diag_Log "DZE_Hotfix_1.0.6.1A: dayz_groupSystem patched"; + }; + _display = uiNameSpace getVariable "BIS_loadingScreen"; + if (!isNil "_display") then { + if (dayz_loadScreenMsg != "" ) then { + _control1 = _display displayctrl 8400; + _control1 ctrlSetText dayz_loadScreenMsg; + }; + _control2 = _display displayctrl 102; + _control2 ctrlSetText format["%1",floor(diag_ticktime - _timeoutStart)]; + }; + + uiSleep 0.2; + //diag_log [ __FILE__, __LINE__, "Looping..."]; +}; + diff --git a/Server Files/MPMissions/DayZ_Epoch_5.Bootcamp_ACR/init.sqf b/Server Files/MPMissions/DayZ_Epoch_5.Bootcamp_ACR/init.sqf index f69418842..44525acf4 100644 --- a/Server Files/MPMissions/DayZ_Epoch_5.Bootcamp_ACR/init.sqf +++ b/Server Files/MPMissions/DayZ_Epoch_5.Bootcamp_ACR/init.sqf @@ -79,12 +79,16 @@ onPreloadStarted "diag_log [diag_tickTime,'onPreloadStarted']; dayz_preloadFinis onPreloadFinished "diag_log [diag_tickTime,'onPreloadFinished']; dayz_preloadFinished = true;"; with uiNameSpace do {RscDMSLoad=nil;}; // autologon at next logon +_verCheck = (getText (configFile >> "CfgMods" >> "DayZ" >> "version") == "DayZ Epoch 1.0.6.1"); if (!isDedicated) then { - enableSaving [false, false]; - startLoadingScreen ["","RscDisplayLoadCustom"]; + enableSaving [false, false]; startLoadingScreen ["","RscDisplayLoadCustom"]; progressLoadingScreen 0; dayz_loadScreenMsg = localize 'str_login_missionFile'; - progress_monitor = [] execVM "\z\addons\dayz_code\system\progress_monitor.sqf"; + if (_verCheck) then { + progress_monitor = [] execVM "DZE_Hotfix_1.0.6.1A\system\progress_monitor.sqf"; + } else { + progress_monitor = [] execVM "\z\addons\dayz_code\system\progress_monitor.sqf"; + }; 0 cutText ['','BLACK',0]; 0 fadeSound 0; 0 fadeMusic 0; @@ -98,6 +102,9 @@ progressLoadingScreen 0.1; call compile preprocessFileLineNumbers "\z\addons\dayz_code\medical\setup_functions_med.sqf"; progressLoadingScreen 0.15; call compile preprocessFileLineNumbers "\z\addons\dayz_code\init\compiles.sqf"; +if (_verCheck) then { + #include "DZE_Hotfix_1.0.6.1A\init\compiles.sqf" +}; progressLoadingScreen 0.25; call compile preprocessFileLineNumbers "server_traders.sqf"; call compile preprocessFileLineNumbers "\z\addons\dayz_code\system\mission\bootcamp_acr.sqf"; //Add trader city objects locally on every machine early diff --git a/Server Files/MPMissions/DayZ_Epoch_7.Lingor/DZE_Hotfix_1.0.6.1A/groups/groupMarkers.sqf b/Server Files/MPMissions/DayZ_Epoch_7.Lingor/DZE_Hotfix_1.0.6.1A/groups/groupMarkers.sqf new file mode 100644 index 000000000..e43cffbac --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_7.Lingor/DZE_Hotfix_1.0.6.1A/groups/groupMarkers.sqf @@ -0,0 +1,75 @@ +private ["_bodyCount","_count","_group","_hasGPS","_index","_inGroup","_marker","_markBody","_markGroup","_markSelf","_name","_pos","_self","_vehicle"]; + +while {true} do { + _group = player call dayz_filterGroup; + _inGroup = count _group > 1; + + if (dayz_requireRadio && {_inGroup} && {!("ItemRadio" in items player)}) then { + [player] joinSilent grpNull; + if (!isNull findDisplay 80000) then {findDisplay 80000 closeDisplay 2;}; + terminate dayz_groupTags; + 80000 cutText ["","PLAIN"]; + localize "STR_EPOCH_LOST_RADIO_CONTACT" call dayz_rollingMessages; + } else { + if (_inGroup && scriptDone dayz_groupTags) then { + dayz_groupTags = execVM "DZE_Hotfix_1.0.6.1A\groups\groupTags.sqf"; + }; + + if (visibleMap or !isNull (uiNamespace getVariable["BIS_RscMiniMap",displayNull])) then { + _hasGPS = "ItemGPS" in items player; + _markBody = (dayz_markBody == 1 or (dayz_markBody == 2 && _hasGPS)); + _markGroup = (dayz_markGroup == 1 or (dayz_markGroup == 2 && _hasGPS)); + _markSelf = (dayz_markSelf == 1 or (dayz_markSelf == 2 && _hasGPS)); + + _index = 0; + { + _self = _x == player; + _vehicle = vehicle _x; + if ((_self or _markGroup) && (!_self or _markSelf) && (effectiveCommander _vehicle == _x)) then { + _pos = [_x] call FNC_GetPos; + deleteMarkerLocal format["groupMember%1",_index]; + _marker = createMarkerLocal [format["groupMember%1",_index],_pos]; + _marker setMarkerTypeLocal "DestroyedVehicle"; + _marker setMarkerTextLocal format ["%1",if (_vehicle == _x) then {name _x} else {_vehicle call dayz_getCrew}]; + _marker setMarkerColorLocal "ColorGreen"; + } else { + deleteMarkerLocal format["groupMember%1",_index]; + }; + _index = _index + 1; + } count _group; + + // Remove markers for group members that left + _count = count _group; + if (dayz_oldMemberCount > _count) then { + for "_i" from _count to dayz_oldMemberCount do {deleteMarkerLocal format["groupMember%1",_i];}; + }; + dayz_oldMemberCount = _count; + + if (_markBody) then { + _bodyCount = 0; + _name = name player; + { + if (_x getVariable["bodyName",""] == _name) then { + _bodyCount = _bodyCount + 1; + _pos = [_x] call FNC_GetPos; + deleteMarkerLocal format["MyBody%1",_bodyCount]; + _marker = createMarkerLocal [format["MyBody%1",_bodyCount],_pos]; + _marker setMarkerTypeLocal "DestroyedVehicle"; + _marker setMarkerTextLocal localize "STR_EPOCH_RIP"; + _marker setMarkerColorLocal "ColorRed"; + }; + } count allDead; + + // Remove markers for bodies that were deleted + if (dayz_oldBodyCount > _bodyCount) then { + for "_i" from _bodyCount to dayz_oldBodyCount do {deleteMarkerLocal format["MyBody%1",_i];}; + }; + dayz_oldBodyCount = _bodyCount; + } else { + for "_i" from 1 to dayz_oldBodyCount do {deleteMarkerLocal format["MyBody%1",_i];}; + }; + }; + }; + + uiSleep 1; +}; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_7.Lingor/DZE_Hotfix_1.0.6.1A/groups/groupTags.sqf b/Server Files/MPMissions/DayZ_Epoch_7.Lingor/DZE_Hotfix_1.0.6.1A/groups/groupTags.sqf new file mode 100644 index 000000000..0e9d72539 --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_7.Lingor/DZE_Hotfix_1.0.6.1A/groups/groupTags.sqf @@ -0,0 +1,52 @@ +#define DRAW_TAGS (!visibleMap && count units group player > 1) //Use && cameraView != "GROUP" if tactical view is allowed (blocked by default) +private ["_display","_distance","_group","_icon","_index","_pos","_scale","_screen","_text"]; +disableSerialization; + +_refresh = { + _group = player call dayz_filterGroup; + + _display = uiNamespace getVariable "DZ_GroupTags"; + _index = 0; + { + _pos = [_x] call FNC_GetPos; + _distance = _pos distance player; + _icon = _display displayCtrl (100 + _index); + if (_distance > 1 && _distance < 2500 && vehicle _x != vehicle player) then { + _pos set [2,(_pos select 2) + 1.5]; + _screen = worldToScreen _pos; + _text = composeText [image "\ca\ui\data\igui_side_unknown_ca.paa"," ",if (dayz_groupNameTags) then {name _x} else {""}]; + if (count _screen > 1) then { + _scale = if (_distance < 200) then {.3} else {1 min ((1 - (_distance - 3) / 15) max .3)}; + _icon ctrlSetStructuredText _text; + _icon ctrlSetPosition [(_screen select 0),(_screen select 1),.99,.65]; + _icon ctrlSetScale _scale; + _icon ctrlSetFade ((1 - _scale) / 2); + _icon ctrlCommit 0; + _icon ctrlShow true; + } else { + _icon ctrlShow false; + }; + } else { + _icon ctrlShow false; + }; + _index = _index + 1; + } count _group; + + if (dayz_oldGroupCount > count _group) then { + _display displayCtrl (100 + _index) ctrlShow false; + }; + + dayz_oldGroupCount = count _group; +}; + +while {true} do { + waitUntil {uiSleep 1; DRAW_TAGS}; + 80000 cutRsc ["DZ_GroupTags","PLAIN"]; + + while {DRAW_TAGS} do { + call _refresh; //Must be called to finish in current frame + uiSleep 0.01; + }; + + 80000 cutText ["","PLAIN"]; +}; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_7.Lingor/DZE_Hotfix_1.0.6.1A/groups/init.sqf b/Server Files/MPMissions/DayZ_Epoch_7.Lingor/DZE_Hotfix_1.0.6.1A/groups/init.sqf new file mode 100644 index 000000000..6a61f5db4 --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_7.Lingor/DZE_Hotfix_1.0.6.1A/groups/init.sqf @@ -0,0 +1,51 @@ +private ["_leader","_oldGroup","_savedGroup"]; + +uiSleep 1; +if (count (units group player) > 1) then { + [player] joinSilent grpNull; + diag_log "Clearing group"; +}; + +_savedGroup = (PVCDZ_plr_Login select 10) - [getPlayerUID player]; + +if (count _savedGroup > 0 && {!dayz_requireRadio or {dayz_requireRadio && "ItemRadio" in items player}}) then { + { + //Only auto join player into group if leader is in their savedGroup + _leader = leader _x; + if (getPlayerUID _leader in _savedGroup) exitWith { + _oldGroup = group player; + [player] joinSilent _x; + if (count (units _oldGroup) == 0) then {deleteGroup _oldGroup;}; + format[localize "STR_EPOCH_REJOINED_GROUP",name _leader] call dayz_rollingMessages; + + // Update saved group in DB + PVDZ_Server_UpdateGroup = [1,player]; + publicVariableServer "PVDZ_Server_UpdateGroup"; + }; + } count allGroups; +}; + +dayz_oldBodyCount = 0; +dayz_oldGroupCount = 0; +dayz_oldMemberCount = 0; +dayz_disbandGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\disband.sqf"; +dayz_filterGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\filter.sqf"; +dayz_getCrew = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\getCrew.sqf"; +dayz_getPlayer = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\getPlayer.sqf"; +dayz_inviteToGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\invite.sqf"; +dayz_joinGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\join.sqf"; +dayz_kickFromGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\kick.sqf"; +dayz_leaveGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\leave.sqf"; +dayz_openGroupDialog = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\open.sqf"; +dayz_pickGroupMember = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\pickGroupMember.sqf"; +dayz_pickPlayer = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\pickPlayer.sqf"; +dayz_promotePlayer = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\promote.sqf"; +dayz_rejectGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\reject.sqf"; +dayz_groupInit = true; + +//Initialize as script data type, no scriptNull in A2 +dayz_groupDisbandThread = 0 spawn {}; +dayz_groupLeaveThread = 0 spawn {}; +dayz_groupTags = 0 spawn {}; + +execVM "DZE_Hotfix_1.0.6.1A\groups\groupMarkers.sqf"; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_7.Lingor/DZE_Hotfix_1.0.6.1A/init/compiles.sqf b/Server Files/MPMissions/DayZ_Epoch_7.Lingor/DZE_Hotfix_1.0.6.1A/init/compiles.sqf new file mode 100644 index 000000000..e0a4a3c84 --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_7.Lingor/DZE_Hotfix_1.0.6.1A/init/compiles.sqf @@ -0,0 +1,47 @@ +if (!isDedicated) then { + dayz_NutritionSystem = { + private ["_type","_baseRegen","_nutrition","_calorieCount","_hungerCount","_thirstCount","_tempCount","_Thirst","_Hunger","_bloodregen","_golbalNutrition"]; + _type = _this select 0; + _baseRegen = _this select 1; + _nutrition = _this select 2; + _calorieCount = ((_this select 2) select 0); + _hungerCount = ((_this select 2) select 1); + _thirstCount = ((_this select 2) select 2); + _tempCount = ((_this select 2) select 3); + if (_calorieCount > 0) then { + _hungerCount = _hungerCount + (SleepFood * (((ln ((_calorieCount / 3610) * 100)) * (1 - (dayz_hunger / SleepFood))) / 100)); + _thirstCount = _thirstCount + (SleepWater * (((ln ((_calorieCount / 3610) * 100)) * (1 - (dayz_thirst / SleepWater))) / 100)); + }; + switch (_type) do { + case "FoodDrink": { + if (_hungerCount > 0) then { + if (dayz_hunger > _hungerCount) then { + dayz_hunger = dayz_hunger - (_hungerCount); + } else { + dayz_hunger = 0; + }; + }; + if (_thirstCount > 0) then { + if (dayz_thirst > _thirstCount) then { + dayz_thirst = dayz_thirst - _thirstCount; + } else { + dayz_thirst = 0; + }; + }; + if (_tempCount > 0) then { dayz_temperatur = dayz_temperatur + _tempCount; }; + if (_calorieCount > 0) then { dayz_nutrition = dayz_nutrition + _calorieCount; }; + if (_baseRegen > 0) then { r_player_bloodregen = r_player_bloodregen + _baseRegen; }; + }; + case "Working": { + if (_calorieCount > 0) then { dayz_nutrition = dayz_nutrition - (_calorieCount / ((DZE_NutritionDivisor select 0) max 0.1)); }; + if (_thirstCount > 0) then { dayz_thirst = dayz_thirst + (_thirstCount / ((DZE_NutritionDivisor select 1) max 0.1)); }; + if (_hungerCount > 0) then { dayz_hunger = dayz_hunger + (_hungerCount / ((DZE_NutritionDivisor select 2) max 0.1)); }; + if (_tempCount > 0) then { dayz_temperatur = dayz_temperatur + (_tempCount / ((DZE_NutritionDivisor select 3) max 0.1)); }; + }; + }; + dayz_thirst = (dayz_thirst min SleepWater) max 0; + dayz_hunger = (dayz_hunger min SleepFood) max 0; + dayz_temperatur = (dayz_temperatur min dayz_temperaturmax) max dayz_temperaturmin; + }; + Diag_Log "DZE_Hotfix_1.0.6.1A: dayz_NutritionSystem patched"; +}; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_7.Lingor/DZE_Hotfix_1.0.6.1A/system/progress_monitor.sqf b/Server Files/MPMissions/DayZ_Epoch_7.Lingor/DZE_Hotfix_1.0.6.1A/system/progress_monitor.sqf new file mode 100644 index 000000000..5660c9e1b --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_7.Lingor/DZE_Hotfix_1.0.6.1A/system/progress_monitor.sqf @@ -0,0 +1,43 @@ +private["_display","_control1","_control2","_watermark"]; +disableSerialization; +//diag_log "DEBUG: loadscreen guard started."; + +_timeoutStart=diag_ticktime; +while {true} do { + if (diag_ticktime - _timeoutStart >= 120) exitWith { + 1 cutText [localize "str_player_login_timeout", "PLAIN DOWN"]; + uiSleep 5; + endMission "END1"; + }; + if ((!isNil "Dayz_loginCompleted") and {(Dayz_loginCompleted)}) exitWith { + //diag_log [ __FILE__, __LINE__, "End loop"]; + + // Logo watermark: adding a logo in the bottom left corner of the screen with the server name + if (!isNil "dayZ_serverName") then { + 5 cutRsc ["wm_disp","PLAIN"]; + _watermark = (uiNamespace getVariable "wm_disp") displayCtrl 1; + _watermark ctrlSetText dayZ_serverName; + if (profileNamespace getVariable ["streamerMode",0] == 1) then {_watermark ctrlShow false;}; + }; + + if (dayz_enableRules && (profileNamespace getVariable ["streamerMode",0] == 0)) then { + dayz_rulesHandle = execVM "rules.sqf"; + }; + + if (dayz_groupSystem) then {execVM "DZE_Hotfix_1.0.6.1A\groups\init.sqf";}; + Diag_Log "DZE_Hotfix_1.0.6.1A: dayz_groupSystem patched"; + }; + _display = uiNameSpace getVariable "BIS_loadingScreen"; + if (!isNil "_display") then { + if (dayz_loadScreenMsg != "" ) then { + _control1 = _display displayctrl 8400; + _control1 ctrlSetText dayz_loadScreenMsg; + }; + _control2 = _display displayctrl 102; + _control2 ctrlSetText format["%1",floor(diag_ticktime - _timeoutStart)]; + }; + + uiSleep 0.2; + //diag_log [ __FILE__, __LINE__, "Looping..."]; +}; + diff --git a/Server Files/MPMissions/DayZ_Epoch_7.Lingor/init.sqf b/Server Files/MPMissions/DayZ_Epoch_7.Lingor/init.sqf index dee32e347..d4bbcd0dd 100644 --- a/Server Files/MPMissions/DayZ_Epoch_7.Lingor/init.sqf +++ b/Server Files/MPMissions/DayZ_Epoch_7.Lingor/init.sqf @@ -79,12 +79,16 @@ onPreloadStarted "diag_log [diag_tickTime,'onPreloadStarted']; dayz_preloadFinis onPreloadFinished "diag_log [diag_tickTime,'onPreloadFinished']; dayz_preloadFinished = true;"; with uiNameSpace do {RscDMSLoad=nil;}; // autologon at next logon +_verCheck = (getText (configFile >> "CfgMods" >> "DayZ" >> "version") == "DayZ Epoch 1.0.6.1"); if (!isDedicated) then { - enableSaving [false, false]; - startLoadingScreen ["","RscDisplayLoadCustom"]; + enableSaving [false, false]; startLoadingScreen ["","RscDisplayLoadCustom"]; progressLoadingScreen 0; dayz_loadScreenMsg = localize 'str_login_missionFile'; - progress_monitor = [] execVM "\z\addons\dayz_code\system\progress_monitor.sqf"; + if (_verCheck) then { + progress_monitor = [] execVM "DZE_Hotfix_1.0.6.1A\system\progress_monitor.sqf"; + } else { + progress_monitor = [] execVM "\z\addons\dayz_code\system\progress_monitor.sqf"; + }; 0 cutText ['','BLACK',0]; 0 fadeSound 0; 0 fadeMusic 0; @@ -98,6 +102,9 @@ progressLoadingScreen 0.1; call compile preprocessFileLineNumbers "\z\addons\dayz_code\medical\setup_functions_med.sqf"; progressLoadingScreen 0.15; call compile preprocessFileLineNumbers "\z\addons\dayz_code\init\compiles.sqf"; +if (_verCheck) then { + #include "DZE_Hotfix_1.0.6.1A\init\compiles.sqf" +}; progressLoadingScreen 0.25; call compile preprocessFileLineNumbers "server_traders.sqf"; call compile preprocessFileLineNumbers "\z\addons\dayz_code\system\mission\lingor.sqf"; //Add trader city objects locally on every machine early diff --git a/Server Files/MPMissions/DayZ_Epoch_8.ProvingGrounds_PMC/DZE_Hotfix_1.0.6.1A/groups/groupMarkers.sqf b/Server Files/MPMissions/DayZ_Epoch_8.ProvingGrounds_PMC/DZE_Hotfix_1.0.6.1A/groups/groupMarkers.sqf new file mode 100644 index 000000000..e43cffbac --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_8.ProvingGrounds_PMC/DZE_Hotfix_1.0.6.1A/groups/groupMarkers.sqf @@ -0,0 +1,75 @@ +private ["_bodyCount","_count","_group","_hasGPS","_index","_inGroup","_marker","_markBody","_markGroup","_markSelf","_name","_pos","_self","_vehicle"]; + +while {true} do { + _group = player call dayz_filterGroup; + _inGroup = count _group > 1; + + if (dayz_requireRadio && {_inGroup} && {!("ItemRadio" in items player)}) then { + [player] joinSilent grpNull; + if (!isNull findDisplay 80000) then {findDisplay 80000 closeDisplay 2;}; + terminate dayz_groupTags; + 80000 cutText ["","PLAIN"]; + localize "STR_EPOCH_LOST_RADIO_CONTACT" call dayz_rollingMessages; + } else { + if (_inGroup && scriptDone dayz_groupTags) then { + dayz_groupTags = execVM "DZE_Hotfix_1.0.6.1A\groups\groupTags.sqf"; + }; + + if (visibleMap or !isNull (uiNamespace getVariable["BIS_RscMiniMap",displayNull])) then { + _hasGPS = "ItemGPS" in items player; + _markBody = (dayz_markBody == 1 or (dayz_markBody == 2 && _hasGPS)); + _markGroup = (dayz_markGroup == 1 or (dayz_markGroup == 2 && _hasGPS)); + _markSelf = (dayz_markSelf == 1 or (dayz_markSelf == 2 && _hasGPS)); + + _index = 0; + { + _self = _x == player; + _vehicle = vehicle _x; + if ((_self or _markGroup) && (!_self or _markSelf) && (effectiveCommander _vehicle == _x)) then { + _pos = [_x] call FNC_GetPos; + deleteMarkerLocal format["groupMember%1",_index]; + _marker = createMarkerLocal [format["groupMember%1",_index],_pos]; + _marker setMarkerTypeLocal "DestroyedVehicle"; + _marker setMarkerTextLocal format ["%1",if (_vehicle == _x) then {name _x} else {_vehicle call dayz_getCrew}]; + _marker setMarkerColorLocal "ColorGreen"; + } else { + deleteMarkerLocal format["groupMember%1",_index]; + }; + _index = _index + 1; + } count _group; + + // Remove markers for group members that left + _count = count _group; + if (dayz_oldMemberCount > _count) then { + for "_i" from _count to dayz_oldMemberCount do {deleteMarkerLocal format["groupMember%1",_i];}; + }; + dayz_oldMemberCount = _count; + + if (_markBody) then { + _bodyCount = 0; + _name = name player; + { + if (_x getVariable["bodyName",""] == _name) then { + _bodyCount = _bodyCount + 1; + _pos = [_x] call FNC_GetPos; + deleteMarkerLocal format["MyBody%1",_bodyCount]; + _marker = createMarkerLocal [format["MyBody%1",_bodyCount],_pos]; + _marker setMarkerTypeLocal "DestroyedVehicle"; + _marker setMarkerTextLocal localize "STR_EPOCH_RIP"; + _marker setMarkerColorLocal "ColorRed"; + }; + } count allDead; + + // Remove markers for bodies that were deleted + if (dayz_oldBodyCount > _bodyCount) then { + for "_i" from _bodyCount to dayz_oldBodyCount do {deleteMarkerLocal format["MyBody%1",_i];}; + }; + dayz_oldBodyCount = _bodyCount; + } else { + for "_i" from 1 to dayz_oldBodyCount do {deleteMarkerLocal format["MyBody%1",_i];}; + }; + }; + }; + + uiSleep 1; +}; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_8.ProvingGrounds_PMC/DZE_Hotfix_1.0.6.1A/groups/groupTags.sqf b/Server Files/MPMissions/DayZ_Epoch_8.ProvingGrounds_PMC/DZE_Hotfix_1.0.6.1A/groups/groupTags.sqf new file mode 100644 index 000000000..0e9d72539 --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_8.ProvingGrounds_PMC/DZE_Hotfix_1.0.6.1A/groups/groupTags.sqf @@ -0,0 +1,52 @@ +#define DRAW_TAGS (!visibleMap && count units group player > 1) //Use && cameraView != "GROUP" if tactical view is allowed (blocked by default) +private ["_display","_distance","_group","_icon","_index","_pos","_scale","_screen","_text"]; +disableSerialization; + +_refresh = { + _group = player call dayz_filterGroup; + + _display = uiNamespace getVariable "DZ_GroupTags"; + _index = 0; + { + _pos = [_x] call FNC_GetPos; + _distance = _pos distance player; + _icon = _display displayCtrl (100 + _index); + if (_distance > 1 && _distance < 2500 && vehicle _x != vehicle player) then { + _pos set [2,(_pos select 2) + 1.5]; + _screen = worldToScreen _pos; + _text = composeText [image "\ca\ui\data\igui_side_unknown_ca.paa"," ",if (dayz_groupNameTags) then {name _x} else {""}]; + if (count _screen > 1) then { + _scale = if (_distance < 200) then {.3} else {1 min ((1 - (_distance - 3) / 15) max .3)}; + _icon ctrlSetStructuredText _text; + _icon ctrlSetPosition [(_screen select 0),(_screen select 1),.99,.65]; + _icon ctrlSetScale _scale; + _icon ctrlSetFade ((1 - _scale) / 2); + _icon ctrlCommit 0; + _icon ctrlShow true; + } else { + _icon ctrlShow false; + }; + } else { + _icon ctrlShow false; + }; + _index = _index + 1; + } count _group; + + if (dayz_oldGroupCount > count _group) then { + _display displayCtrl (100 + _index) ctrlShow false; + }; + + dayz_oldGroupCount = count _group; +}; + +while {true} do { + waitUntil {uiSleep 1; DRAW_TAGS}; + 80000 cutRsc ["DZ_GroupTags","PLAIN"]; + + while {DRAW_TAGS} do { + call _refresh; //Must be called to finish in current frame + uiSleep 0.01; + }; + + 80000 cutText ["","PLAIN"]; +}; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_8.ProvingGrounds_PMC/DZE_Hotfix_1.0.6.1A/groups/init.sqf b/Server Files/MPMissions/DayZ_Epoch_8.ProvingGrounds_PMC/DZE_Hotfix_1.0.6.1A/groups/init.sqf new file mode 100644 index 000000000..6a61f5db4 --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_8.ProvingGrounds_PMC/DZE_Hotfix_1.0.6.1A/groups/init.sqf @@ -0,0 +1,51 @@ +private ["_leader","_oldGroup","_savedGroup"]; + +uiSleep 1; +if (count (units group player) > 1) then { + [player] joinSilent grpNull; + diag_log "Clearing group"; +}; + +_savedGroup = (PVCDZ_plr_Login select 10) - [getPlayerUID player]; + +if (count _savedGroup > 0 && {!dayz_requireRadio or {dayz_requireRadio && "ItemRadio" in items player}}) then { + { + //Only auto join player into group if leader is in their savedGroup + _leader = leader _x; + if (getPlayerUID _leader in _savedGroup) exitWith { + _oldGroup = group player; + [player] joinSilent _x; + if (count (units _oldGroup) == 0) then {deleteGroup _oldGroup;}; + format[localize "STR_EPOCH_REJOINED_GROUP",name _leader] call dayz_rollingMessages; + + // Update saved group in DB + PVDZ_Server_UpdateGroup = [1,player]; + publicVariableServer "PVDZ_Server_UpdateGroup"; + }; + } count allGroups; +}; + +dayz_oldBodyCount = 0; +dayz_oldGroupCount = 0; +dayz_oldMemberCount = 0; +dayz_disbandGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\disband.sqf"; +dayz_filterGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\filter.sqf"; +dayz_getCrew = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\getCrew.sqf"; +dayz_getPlayer = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\getPlayer.sqf"; +dayz_inviteToGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\invite.sqf"; +dayz_joinGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\join.sqf"; +dayz_kickFromGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\kick.sqf"; +dayz_leaveGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\leave.sqf"; +dayz_openGroupDialog = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\open.sqf"; +dayz_pickGroupMember = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\pickGroupMember.sqf"; +dayz_pickPlayer = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\pickPlayer.sqf"; +dayz_promotePlayer = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\promote.sqf"; +dayz_rejectGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\reject.sqf"; +dayz_groupInit = true; + +//Initialize as script data type, no scriptNull in A2 +dayz_groupDisbandThread = 0 spawn {}; +dayz_groupLeaveThread = 0 spawn {}; +dayz_groupTags = 0 spawn {}; + +execVM "DZE_Hotfix_1.0.6.1A\groups\groupMarkers.sqf"; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_8.ProvingGrounds_PMC/DZE_Hotfix_1.0.6.1A/init/compiles.sqf b/Server Files/MPMissions/DayZ_Epoch_8.ProvingGrounds_PMC/DZE_Hotfix_1.0.6.1A/init/compiles.sqf new file mode 100644 index 000000000..e0a4a3c84 --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_8.ProvingGrounds_PMC/DZE_Hotfix_1.0.6.1A/init/compiles.sqf @@ -0,0 +1,47 @@ +if (!isDedicated) then { + dayz_NutritionSystem = { + private ["_type","_baseRegen","_nutrition","_calorieCount","_hungerCount","_thirstCount","_tempCount","_Thirst","_Hunger","_bloodregen","_golbalNutrition"]; + _type = _this select 0; + _baseRegen = _this select 1; + _nutrition = _this select 2; + _calorieCount = ((_this select 2) select 0); + _hungerCount = ((_this select 2) select 1); + _thirstCount = ((_this select 2) select 2); + _tempCount = ((_this select 2) select 3); + if (_calorieCount > 0) then { + _hungerCount = _hungerCount + (SleepFood * (((ln ((_calorieCount / 3610) * 100)) * (1 - (dayz_hunger / SleepFood))) / 100)); + _thirstCount = _thirstCount + (SleepWater * (((ln ((_calorieCount / 3610) * 100)) * (1 - (dayz_thirst / SleepWater))) / 100)); + }; + switch (_type) do { + case "FoodDrink": { + if (_hungerCount > 0) then { + if (dayz_hunger > _hungerCount) then { + dayz_hunger = dayz_hunger - (_hungerCount); + } else { + dayz_hunger = 0; + }; + }; + if (_thirstCount > 0) then { + if (dayz_thirst > _thirstCount) then { + dayz_thirst = dayz_thirst - _thirstCount; + } else { + dayz_thirst = 0; + }; + }; + if (_tempCount > 0) then { dayz_temperatur = dayz_temperatur + _tempCount; }; + if (_calorieCount > 0) then { dayz_nutrition = dayz_nutrition + _calorieCount; }; + if (_baseRegen > 0) then { r_player_bloodregen = r_player_bloodregen + _baseRegen; }; + }; + case "Working": { + if (_calorieCount > 0) then { dayz_nutrition = dayz_nutrition - (_calorieCount / ((DZE_NutritionDivisor select 0) max 0.1)); }; + if (_thirstCount > 0) then { dayz_thirst = dayz_thirst + (_thirstCount / ((DZE_NutritionDivisor select 1) max 0.1)); }; + if (_hungerCount > 0) then { dayz_hunger = dayz_hunger + (_hungerCount / ((DZE_NutritionDivisor select 2) max 0.1)); }; + if (_tempCount > 0) then { dayz_temperatur = dayz_temperatur + (_tempCount / ((DZE_NutritionDivisor select 3) max 0.1)); }; + }; + }; + dayz_thirst = (dayz_thirst min SleepWater) max 0; + dayz_hunger = (dayz_hunger min SleepFood) max 0; + dayz_temperatur = (dayz_temperatur min dayz_temperaturmax) max dayz_temperaturmin; + }; + Diag_Log "DZE_Hotfix_1.0.6.1A: dayz_NutritionSystem patched"; +}; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_8.ProvingGrounds_PMC/DZE_Hotfix_1.0.6.1A/system/progress_monitor.sqf b/Server Files/MPMissions/DayZ_Epoch_8.ProvingGrounds_PMC/DZE_Hotfix_1.0.6.1A/system/progress_monitor.sqf new file mode 100644 index 000000000..5660c9e1b --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_8.ProvingGrounds_PMC/DZE_Hotfix_1.0.6.1A/system/progress_monitor.sqf @@ -0,0 +1,43 @@ +private["_display","_control1","_control2","_watermark"]; +disableSerialization; +//diag_log "DEBUG: loadscreen guard started."; + +_timeoutStart=diag_ticktime; +while {true} do { + if (diag_ticktime - _timeoutStart >= 120) exitWith { + 1 cutText [localize "str_player_login_timeout", "PLAIN DOWN"]; + uiSleep 5; + endMission "END1"; + }; + if ((!isNil "Dayz_loginCompleted") and {(Dayz_loginCompleted)}) exitWith { + //diag_log [ __FILE__, __LINE__, "End loop"]; + + // Logo watermark: adding a logo in the bottom left corner of the screen with the server name + if (!isNil "dayZ_serverName") then { + 5 cutRsc ["wm_disp","PLAIN"]; + _watermark = (uiNamespace getVariable "wm_disp") displayCtrl 1; + _watermark ctrlSetText dayZ_serverName; + if (profileNamespace getVariable ["streamerMode",0] == 1) then {_watermark ctrlShow false;}; + }; + + if (dayz_enableRules && (profileNamespace getVariable ["streamerMode",0] == 0)) then { + dayz_rulesHandle = execVM "rules.sqf"; + }; + + if (dayz_groupSystem) then {execVM "DZE_Hotfix_1.0.6.1A\groups\init.sqf";}; + Diag_Log "DZE_Hotfix_1.0.6.1A: dayz_groupSystem patched"; + }; + _display = uiNameSpace getVariable "BIS_loadingScreen"; + if (!isNil "_display") then { + if (dayz_loadScreenMsg != "" ) then { + _control1 = _display displayctrl 8400; + _control1 ctrlSetText dayz_loadScreenMsg; + }; + _control2 = _display displayctrl 102; + _control2 ctrlSetText format["%1",floor(diag_ticktime - _timeoutStart)]; + }; + + uiSleep 0.2; + //diag_log [ __FILE__, __LINE__, "Looping..."]; +}; + diff --git a/Server Files/MPMissions/DayZ_Epoch_8.ProvingGrounds_PMC/init.sqf b/Server Files/MPMissions/DayZ_Epoch_8.ProvingGrounds_PMC/init.sqf index d6b517613..7d0e67fc3 100644 --- a/Server Files/MPMissions/DayZ_Epoch_8.ProvingGrounds_PMC/init.sqf +++ b/Server Files/MPMissions/DayZ_Epoch_8.ProvingGrounds_PMC/init.sqf @@ -79,12 +79,16 @@ onPreloadStarted "diag_log [diag_tickTime,'onPreloadStarted']; dayz_preloadFinis onPreloadFinished "diag_log [diag_tickTime,'onPreloadFinished']; dayz_preloadFinished = true;"; with uiNameSpace do {RscDMSLoad=nil;}; // autologon at next logon +_verCheck = (getText (configFile >> "CfgMods" >> "DayZ" >> "version") == "DayZ Epoch 1.0.6.1"); if (!isDedicated) then { - enableSaving [false, false]; - startLoadingScreen ["","RscDisplayLoadCustom"]; + enableSaving [false, false]; startLoadingScreen ["","RscDisplayLoadCustom"]; progressLoadingScreen 0; dayz_loadScreenMsg = localize 'str_login_missionFile'; - progress_monitor = [] execVM "\z\addons\dayz_code\system\progress_monitor.sqf"; + if (_verCheck) then { + progress_monitor = [] execVM "DZE_Hotfix_1.0.6.1A\system\progress_monitor.sqf"; + } else { + progress_monitor = [] execVM "\z\addons\dayz_code\system\progress_monitor.sqf"; + }; 0 cutText ['','BLACK',0]; 0 fadeSound 0; 0 fadeMusic 0; @@ -98,6 +102,9 @@ progressLoadingScreen 0.1; call compile preprocessFileLineNumbers "\z\addons\dayz_code\medical\setup_functions_med.sqf"; progressLoadingScreen 0.15; call compile preprocessFileLineNumbers "\z\addons\dayz_code\init\compiles.sqf"; +if (_verCheck) then { + #include "DZE_Hotfix_1.0.6.1A\init\compiles.sqf" +}; progressLoadingScreen 0.25; call compile preprocessFileLineNumbers "server_traders.sqf"; call compile preprocessFileLineNumbers "\z\addons\dayz_code\system\mission\provinggrounds_pmc.sqf"; //Add trader city objects locally on every machine early diff --git a/Server Files/MPMissions/DayZ_Epoch_9.Woodland_ACR/DZE_Hotfix_1.0.6.1A/groups/groupMarkers.sqf b/Server Files/MPMissions/DayZ_Epoch_9.Woodland_ACR/DZE_Hotfix_1.0.6.1A/groups/groupMarkers.sqf new file mode 100644 index 000000000..e43cffbac --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_9.Woodland_ACR/DZE_Hotfix_1.0.6.1A/groups/groupMarkers.sqf @@ -0,0 +1,75 @@ +private ["_bodyCount","_count","_group","_hasGPS","_index","_inGroup","_marker","_markBody","_markGroup","_markSelf","_name","_pos","_self","_vehicle"]; + +while {true} do { + _group = player call dayz_filterGroup; + _inGroup = count _group > 1; + + if (dayz_requireRadio && {_inGroup} && {!("ItemRadio" in items player)}) then { + [player] joinSilent grpNull; + if (!isNull findDisplay 80000) then {findDisplay 80000 closeDisplay 2;}; + terminate dayz_groupTags; + 80000 cutText ["","PLAIN"]; + localize "STR_EPOCH_LOST_RADIO_CONTACT" call dayz_rollingMessages; + } else { + if (_inGroup && scriptDone dayz_groupTags) then { + dayz_groupTags = execVM "DZE_Hotfix_1.0.6.1A\groups\groupTags.sqf"; + }; + + if (visibleMap or !isNull (uiNamespace getVariable["BIS_RscMiniMap",displayNull])) then { + _hasGPS = "ItemGPS" in items player; + _markBody = (dayz_markBody == 1 or (dayz_markBody == 2 && _hasGPS)); + _markGroup = (dayz_markGroup == 1 or (dayz_markGroup == 2 && _hasGPS)); + _markSelf = (dayz_markSelf == 1 or (dayz_markSelf == 2 && _hasGPS)); + + _index = 0; + { + _self = _x == player; + _vehicle = vehicle _x; + if ((_self or _markGroup) && (!_self or _markSelf) && (effectiveCommander _vehicle == _x)) then { + _pos = [_x] call FNC_GetPos; + deleteMarkerLocal format["groupMember%1",_index]; + _marker = createMarkerLocal [format["groupMember%1",_index],_pos]; + _marker setMarkerTypeLocal "DestroyedVehicle"; + _marker setMarkerTextLocal format ["%1",if (_vehicle == _x) then {name _x} else {_vehicle call dayz_getCrew}]; + _marker setMarkerColorLocal "ColorGreen"; + } else { + deleteMarkerLocal format["groupMember%1",_index]; + }; + _index = _index + 1; + } count _group; + + // Remove markers for group members that left + _count = count _group; + if (dayz_oldMemberCount > _count) then { + for "_i" from _count to dayz_oldMemberCount do {deleteMarkerLocal format["groupMember%1",_i];}; + }; + dayz_oldMemberCount = _count; + + if (_markBody) then { + _bodyCount = 0; + _name = name player; + { + if (_x getVariable["bodyName",""] == _name) then { + _bodyCount = _bodyCount + 1; + _pos = [_x] call FNC_GetPos; + deleteMarkerLocal format["MyBody%1",_bodyCount]; + _marker = createMarkerLocal [format["MyBody%1",_bodyCount],_pos]; + _marker setMarkerTypeLocal "DestroyedVehicle"; + _marker setMarkerTextLocal localize "STR_EPOCH_RIP"; + _marker setMarkerColorLocal "ColorRed"; + }; + } count allDead; + + // Remove markers for bodies that were deleted + if (dayz_oldBodyCount > _bodyCount) then { + for "_i" from _bodyCount to dayz_oldBodyCount do {deleteMarkerLocal format["MyBody%1",_i];}; + }; + dayz_oldBodyCount = _bodyCount; + } else { + for "_i" from 1 to dayz_oldBodyCount do {deleteMarkerLocal format["MyBody%1",_i];}; + }; + }; + }; + + uiSleep 1; +}; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_9.Woodland_ACR/DZE_Hotfix_1.0.6.1A/groups/groupTags.sqf b/Server Files/MPMissions/DayZ_Epoch_9.Woodland_ACR/DZE_Hotfix_1.0.6.1A/groups/groupTags.sqf new file mode 100644 index 000000000..0e9d72539 --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_9.Woodland_ACR/DZE_Hotfix_1.0.6.1A/groups/groupTags.sqf @@ -0,0 +1,52 @@ +#define DRAW_TAGS (!visibleMap && count units group player > 1) //Use && cameraView != "GROUP" if tactical view is allowed (blocked by default) +private ["_display","_distance","_group","_icon","_index","_pos","_scale","_screen","_text"]; +disableSerialization; + +_refresh = { + _group = player call dayz_filterGroup; + + _display = uiNamespace getVariable "DZ_GroupTags"; + _index = 0; + { + _pos = [_x] call FNC_GetPos; + _distance = _pos distance player; + _icon = _display displayCtrl (100 + _index); + if (_distance > 1 && _distance < 2500 && vehicle _x != vehicle player) then { + _pos set [2,(_pos select 2) + 1.5]; + _screen = worldToScreen _pos; + _text = composeText [image "\ca\ui\data\igui_side_unknown_ca.paa"," ",if (dayz_groupNameTags) then {name _x} else {""}]; + if (count _screen > 1) then { + _scale = if (_distance < 200) then {.3} else {1 min ((1 - (_distance - 3) / 15) max .3)}; + _icon ctrlSetStructuredText _text; + _icon ctrlSetPosition [(_screen select 0),(_screen select 1),.99,.65]; + _icon ctrlSetScale _scale; + _icon ctrlSetFade ((1 - _scale) / 2); + _icon ctrlCommit 0; + _icon ctrlShow true; + } else { + _icon ctrlShow false; + }; + } else { + _icon ctrlShow false; + }; + _index = _index + 1; + } count _group; + + if (dayz_oldGroupCount > count _group) then { + _display displayCtrl (100 + _index) ctrlShow false; + }; + + dayz_oldGroupCount = count _group; +}; + +while {true} do { + waitUntil {uiSleep 1; DRAW_TAGS}; + 80000 cutRsc ["DZ_GroupTags","PLAIN"]; + + while {DRAW_TAGS} do { + call _refresh; //Must be called to finish in current frame + uiSleep 0.01; + }; + + 80000 cutText ["","PLAIN"]; +}; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_9.Woodland_ACR/DZE_Hotfix_1.0.6.1A/groups/init.sqf b/Server Files/MPMissions/DayZ_Epoch_9.Woodland_ACR/DZE_Hotfix_1.0.6.1A/groups/init.sqf new file mode 100644 index 000000000..6a61f5db4 --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_9.Woodland_ACR/DZE_Hotfix_1.0.6.1A/groups/init.sqf @@ -0,0 +1,51 @@ +private ["_leader","_oldGroup","_savedGroup"]; + +uiSleep 1; +if (count (units group player) > 1) then { + [player] joinSilent grpNull; + diag_log "Clearing group"; +}; + +_savedGroup = (PVCDZ_plr_Login select 10) - [getPlayerUID player]; + +if (count _savedGroup > 0 && {!dayz_requireRadio or {dayz_requireRadio && "ItemRadio" in items player}}) then { + { + //Only auto join player into group if leader is in their savedGroup + _leader = leader _x; + if (getPlayerUID _leader in _savedGroup) exitWith { + _oldGroup = group player; + [player] joinSilent _x; + if (count (units _oldGroup) == 0) then {deleteGroup _oldGroup;}; + format[localize "STR_EPOCH_REJOINED_GROUP",name _leader] call dayz_rollingMessages; + + // Update saved group in DB + PVDZ_Server_UpdateGroup = [1,player]; + publicVariableServer "PVDZ_Server_UpdateGroup"; + }; + } count allGroups; +}; + +dayz_oldBodyCount = 0; +dayz_oldGroupCount = 0; +dayz_oldMemberCount = 0; +dayz_disbandGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\disband.sqf"; +dayz_filterGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\filter.sqf"; +dayz_getCrew = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\getCrew.sqf"; +dayz_getPlayer = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\getPlayer.sqf"; +dayz_inviteToGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\invite.sqf"; +dayz_joinGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\join.sqf"; +dayz_kickFromGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\kick.sqf"; +dayz_leaveGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\leave.sqf"; +dayz_openGroupDialog = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\open.sqf"; +dayz_pickGroupMember = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\pickGroupMember.sqf"; +dayz_pickPlayer = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\pickPlayer.sqf"; +dayz_promotePlayer = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\promote.sqf"; +dayz_rejectGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\reject.sqf"; +dayz_groupInit = true; + +//Initialize as script data type, no scriptNull in A2 +dayz_groupDisbandThread = 0 spawn {}; +dayz_groupLeaveThread = 0 spawn {}; +dayz_groupTags = 0 spawn {}; + +execVM "DZE_Hotfix_1.0.6.1A\groups\groupMarkers.sqf"; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_9.Woodland_ACR/DZE_Hotfix_1.0.6.1A/init/compiles.sqf b/Server Files/MPMissions/DayZ_Epoch_9.Woodland_ACR/DZE_Hotfix_1.0.6.1A/init/compiles.sqf new file mode 100644 index 000000000..e0a4a3c84 --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_9.Woodland_ACR/DZE_Hotfix_1.0.6.1A/init/compiles.sqf @@ -0,0 +1,47 @@ +if (!isDedicated) then { + dayz_NutritionSystem = { + private ["_type","_baseRegen","_nutrition","_calorieCount","_hungerCount","_thirstCount","_tempCount","_Thirst","_Hunger","_bloodregen","_golbalNutrition"]; + _type = _this select 0; + _baseRegen = _this select 1; + _nutrition = _this select 2; + _calorieCount = ((_this select 2) select 0); + _hungerCount = ((_this select 2) select 1); + _thirstCount = ((_this select 2) select 2); + _tempCount = ((_this select 2) select 3); + if (_calorieCount > 0) then { + _hungerCount = _hungerCount + (SleepFood * (((ln ((_calorieCount / 3610) * 100)) * (1 - (dayz_hunger / SleepFood))) / 100)); + _thirstCount = _thirstCount + (SleepWater * (((ln ((_calorieCount / 3610) * 100)) * (1 - (dayz_thirst / SleepWater))) / 100)); + }; + switch (_type) do { + case "FoodDrink": { + if (_hungerCount > 0) then { + if (dayz_hunger > _hungerCount) then { + dayz_hunger = dayz_hunger - (_hungerCount); + } else { + dayz_hunger = 0; + }; + }; + if (_thirstCount > 0) then { + if (dayz_thirst > _thirstCount) then { + dayz_thirst = dayz_thirst - _thirstCount; + } else { + dayz_thirst = 0; + }; + }; + if (_tempCount > 0) then { dayz_temperatur = dayz_temperatur + _tempCount; }; + if (_calorieCount > 0) then { dayz_nutrition = dayz_nutrition + _calorieCount; }; + if (_baseRegen > 0) then { r_player_bloodregen = r_player_bloodregen + _baseRegen; }; + }; + case "Working": { + if (_calorieCount > 0) then { dayz_nutrition = dayz_nutrition - (_calorieCount / ((DZE_NutritionDivisor select 0) max 0.1)); }; + if (_thirstCount > 0) then { dayz_thirst = dayz_thirst + (_thirstCount / ((DZE_NutritionDivisor select 1) max 0.1)); }; + if (_hungerCount > 0) then { dayz_hunger = dayz_hunger + (_hungerCount / ((DZE_NutritionDivisor select 2) max 0.1)); }; + if (_tempCount > 0) then { dayz_temperatur = dayz_temperatur + (_tempCount / ((DZE_NutritionDivisor select 3) max 0.1)); }; + }; + }; + dayz_thirst = (dayz_thirst min SleepWater) max 0; + dayz_hunger = (dayz_hunger min SleepFood) max 0; + dayz_temperatur = (dayz_temperatur min dayz_temperaturmax) max dayz_temperaturmin; + }; + Diag_Log "DZE_Hotfix_1.0.6.1A: dayz_NutritionSystem patched"; +}; \ No newline at end of file diff --git a/Server Files/MPMissions/DayZ_Epoch_9.Woodland_ACR/DZE_Hotfix_1.0.6.1A/system/progress_monitor.sqf b/Server Files/MPMissions/DayZ_Epoch_9.Woodland_ACR/DZE_Hotfix_1.0.6.1A/system/progress_monitor.sqf new file mode 100644 index 000000000..5660c9e1b --- /dev/null +++ b/Server Files/MPMissions/DayZ_Epoch_9.Woodland_ACR/DZE_Hotfix_1.0.6.1A/system/progress_monitor.sqf @@ -0,0 +1,43 @@ +private["_display","_control1","_control2","_watermark"]; +disableSerialization; +//diag_log "DEBUG: loadscreen guard started."; + +_timeoutStart=diag_ticktime; +while {true} do { + if (diag_ticktime - _timeoutStart >= 120) exitWith { + 1 cutText [localize "str_player_login_timeout", "PLAIN DOWN"]; + uiSleep 5; + endMission "END1"; + }; + if ((!isNil "Dayz_loginCompleted") and {(Dayz_loginCompleted)}) exitWith { + //diag_log [ __FILE__, __LINE__, "End loop"]; + + // Logo watermark: adding a logo in the bottom left corner of the screen with the server name + if (!isNil "dayZ_serverName") then { + 5 cutRsc ["wm_disp","PLAIN"]; + _watermark = (uiNamespace getVariable "wm_disp") displayCtrl 1; + _watermark ctrlSetText dayZ_serverName; + if (profileNamespace getVariable ["streamerMode",0] == 1) then {_watermark ctrlShow false;}; + }; + + if (dayz_enableRules && (profileNamespace getVariable ["streamerMode",0] == 0)) then { + dayz_rulesHandle = execVM "rules.sqf"; + }; + + if (dayz_groupSystem) then {execVM "DZE_Hotfix_1.0.6.1A\groups\init.sqf";}; + Diag_Log "DZE_Hotfix_1.0.6.1A: dayz_groupSystem patched"; + }; + _display = uiNameSpace getVariable "BIS_loadingScreen"; + if (!isNil "_display") then { + if (dayz_loadScreenMsg != "" ) then { + _control1 = _display displayctrl 8400; + _control1 ctrlSetText dayz_loadScreenMsg; + }; + _control2 = _display displayctrl 102; + _control2 ctrlSetText format["%1",floor(diag_ticktime - _timeoutStart)]; + }; + + uiSleep 0.2; + //diag_log [ __FILE__, __LINE__, "Looping..."]; +}; + diff --git a/Server Files/MPMissions/DayZ_Epoch_9.Woodland_ACR/init.sqf b/Server Files/MPMissions/DayZ_Epoch_9.Woodland_ACR/init.sqf index a6525e5b7..b1855eaca 100644 --- a/Server Files/MPMissions/DayZ_Epoch_9.Woodland_ACR/init.sqf +++ b/Server Files/MPMissions/DayZ_Epoch_9.Woodland_ACR/init.sqf @@ -79,12 +79,16 @@ onPreloadStarted "diag_log [diag_tickTime,'onPreloadStarted']; dayz_preloadFinis onPreloadFinished "diag_log [diag_tickTime,'onPreloadFinished']; dayz_preloadFinished = true;"; with uiNameSpace do {RscDMSLoad=nil;}; // autologon at next logon +_verCheck = (getText (configFile >> "CfgMods" >> "DayZ" >> "version") == "DayZ Epoch 1.0.6.1"); if (!isDedicated) then { - enableSaving [false, false]; - startLoadingScreen ["","RscDisplayLoadCustom"]; + enableSaving [false, false]; startLoadingScreen ["","RscDisplayLoadCustom"]; progressLoadingScreen 0; dayz_loadScreenMsg = localize 'str_login_missionFile'; - progress_monitor = [] execVM "\z\addons\dayz_code\system\progress_monitor.sqf"; + if (_verCheck) then { + progress_monitor = [] execVM "DZE_Hotfix_1.0.6.1A\system\progress_monitor.sqf"; + } else { + progress_monitor = [] execVM "\z\addons\dayz_code\system\progress_monitor.sqf"; + }; 0 cutText ['','BLACK',0]; 0 fadeSound 0; 0 fadeMusic 0; @@ -98,6 +102,9 @@ progressLoadingScreen 0.1; call compile preprocessFileLineNumbers "\z\addons\dayz_code\medical\setup_functions_med.sqf"; progressLoadingScreen 0.15; call compile preprocessFileLineNumbers "\z\addons\dayz_code\init\compiles.sqf"; +if (_verCheck) then { + #include "DZE_Hotfix_1.0.6.1A\init\compiles.sqf" +}; progressLoadingScreen 0.25; call compile preprocessFileLineNumbers "server_traders.sqf"; call compile preprocessFileLineNumbers "\z\addons\dayz_code\system\mission\woodland_acr.sqf"; //Add trader city objects locally on every machine early