From 17cc619d065982938128063b44ec49b516859bde Mon Sep 17 00:00:00 2001 From: looter809 Date: Fri, 30 Jul 2021 22:44:47 -0700 Subject: [PATCH 01/40] Update fn_selfActions.sqf Fix players not being able to lock a safe that they do not have the combination for. --- SQF/dayz_code/compile/fn_selfActions.sqf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/SQF/dayz_code/compile/fn_selfActions.sqf b/SQF/dayz_code/compile/fn_selfActions.sqf index 43de6709b..d8f4912ed 100644 --- a/SQF/dayz_code/compile/fn_selfActions.sqf +++ b/SQF/dayz_code/compile/fn_selfActions.sqf @@ -616,7 +616,7 @@ if (!isNull _cursorTarget && {!_inVehicle && !_isPZombie && _canDo && player dis }; //Allow owner to unlock vault - if (_isClose && !keypadCancel && {(_typeOfCursorTarget in DZE_LockedStorage) && {_characterID != "0"}}) then { + if (_isClose && !keypadCancel && {_characterID != "0"}) then { if (s_player_unlockvault < 0) then { local _combi = []; if (_typeOfCursorTarget in DZE_LockedStorage) then { @@ -1110,4 +1110,4 @@ if (_dogHandle > 0) then { }; //Monitor -player setVariable ["selfActions", diag_ticktime, false]; \ No newline at end of file +player setVariable ["selfActions", diag_ticktime, false]; From 831ad4b006a700eece130dac128f88bd026bcfdf Mon Sep 17 00:00:00 2001 From: looter809 Date: Mon, 2 Aug 2021 09:39:16 -0700 Subject: [PATCH 02/40] Update fn_selfActions.sqf --- SQF/dayz_code/compile/fn_selfActions.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SQF/dayz_code/compile/fn_selfActions.sqf b/SQF/dayz_code/compile/fn_selfActions.sqf index d8f4912ed..878098c88 100644 --- a/SQF/dayz_code/compile/fn_selfActions.sqf +++ b/SQF/dayz_code/compile/fn_selfActions.sqf @@ -616,7 +616,7 @@ if (!isNull _cursorTarget && {!_inVehicle && !_isPZombie && _canDo && player dis }; //Allow owner to unlock vault - if (_isClose && !keypadCancel && {_characterID != "0"}) then { + if (_isClose && !keypadCancel && {(_typeOfCursorTarget in (DZE_LockedStorage + DZE_UnLockedStorage)) && {_characterID != "0"}}) then { if (s_player_unlockvault < 0) then { local _combi = []; if (_typeOfCursorTarget in DZE_LockedStorage) then { From 6348294ac5a270be981e6c7f72ccdb5f091001eb Mon Sep 17 00:00:00 2001 From: A Man Date: Tue, 17 Aug 2021 16:47:45 +0200 Subject: [PATCH 03/40] Switch to correct function --- SQF/dayz_code/actions/player_goFishing.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SQF/dayz_code/actions/player_goFishing.sqf b/SQF/dayz_code/actions/player_goFishing.sqf index b22ed64d4..1eb20ba55 100644 --- a/SQF/dayz_code/actions/player_goFishing.sqf +++ b/SQF/dayz_code/actions/player_goFishing.sqf @@ -110,7 +110,7 @@ while {_isOk} do { } else { call gear_ui_init; //Remove melee magazines (BIS_fnc_invAdd fix) - {player removeMagazines _x} forEach MeleeMagazines; + false call dz_fn_meleeMagazines; _result = [player,_itemOut] call BIS_fnc_invAdd; if (_result) then { //Let the player know what he caught From 87127d5969306299fc15e442a9a72b82d91402de Mon Sep 17 00:00:00 2001 From: A Man Date: Tue, 17 Aug 2021 17:16:01 +0200 Subject: [PATCH 04/40] Remove unused dead_bodyCleanup variable --- SQF/dayz_code/init/variables.sqf | 1 - 1 file changed, 1 deletion(-) diff --git a/SQF/dayz_code/init/variables.sqf b/SQF/dayz_code/init/variables.sqf index f10291c80..1501cc2b3 100644 --- a/SQF/dayz_code/init/variables.sqf +++ b/SQF/dayz_code/init/variables.sqf @@ -41,7 +41,6 @@ if (isServer) then { dayz_serverPUIDArray = []; dayz_serverClientKeys = []; dayz_traps = []; - dead_bodyCleanup = []; needUpdate_objects = []; dayz_choppedTrees = []; dayz_ghostPlayers = []; From ad3c38e4037fc17716656540d10e70ede8f3a2ba Mon Sep 17 00:00:00 2001 From: A Man Date: Tue, 17 Aug 2021 17:48:40 +0200 Subject: [PATCH 05/40] Remove not working Iron Sight optics of SUV and SVD Gold --- .../Configs/CfgWeapons/Rifles/SVD.hpp | 20 +++++++++++++++++++ .../Configs/CfgWeapons/Rifles/SVU.hpp | 20 +++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/SQF/dayz_code/Configs/CfgWeapons/Rifles/SVD.hpp b/SQF/dayz_code/Configs/CfgWeapons/Rifles/SVD.hpp index 46a9fc579..ebdb10ab0 100644 --- a/SQF/dayz_code/Configs/CfgWeapons/Rifles/SVD.hpp +++ b/SQF/dayz_code/Configs/CfgWeapons/Rifles/SVD.hpp @@ -172,6 +172,26 @@ class SVD_Gold_DZ : SVD_PSO1_DZ { model = "\RH_aks\RH_svdg.p3d"; picture = "\RH_aks\inv\svdg.paa"; + class OpticsModes { + class Scope { + discreteDistance[] = {100, 200, 300, 400, 500, 600, 700, 800, 900, 1000}; + discreteDistanceInitIndex = 2; + cameraDir = ""; + distanceZoomMax = 300; + distanceZoomMin = 300; + memoryPointCamera = "opticView"; + opticsDisablePeripherialVision = 1; + opticsFlare = 1; + opticsID = 1; + opticsPPEffects[] = {"OpticsCHAbera3", "OpticsBlur3"}; + opticsZoomInit = 0.0623; + opticsZoomMax = 0.0623; + opticsZoomMin = 0.0623; + useModelOptics = 1; + visionMode[] = {"Normal"}; + }; + }; + class ItemActions {}; class Attachments {}; }; \ No newline at end of file diff --git a/SQF/dayz_code/Configs/CfgWeapons/Rifles/SVU.hpp b/SQF/dayz_code/Configs/CfgWeapons/Rifles/SVU.hpp index 955c28107..6c7fa13d0 100644 --- a/SQF/dayz_code/Configs/CfgWeapons/Rifles/SVU.hpp +++ b/SQF/dayz_code/Configs/CfgWeapons/Rifles/SVU.hpp @@ -8,4 +8,24 @@ class SVU_PSO1_DZ: SVD_PSO1_DZ { magazines[] = {"10Rnd_762x54_SVD"}; class ItemActions {}; class Attachments {}; + + class OpticsModes { + class Scope { + discreteDistance[] = {100, 200, 300, 400, 500, 600, 700, 800, 900, 1000}; + discreteDistanceInitIndex = 2; + cameraDir = ""; + distanceZoomMax = 300; + distanceZoomMin = 300; + memoryPointCamera = "opticView"; + opticsDisablePeripherialVision = 1; + opticsFlare = 1; + opticsID = 1; + opticsPPEffects[] = {"OpticsCHAbera3", "OpticsBlur3"}; + opticsZoomInit = 0.0623; + opticsZoomMax = 0.0623; + opticsZoomMin = 0.0623; + useModelOptics = 1; + visionMode[] = {"Normal"}; + }; + }; }; \ No newline at end of file From c4919d65e501140ccf2b1f2e7f29b9e9ff79ad20 Mon Sep 17 00:00:00 2001 From: A Man Date: Tue, 17 Aug 2021 19:20:33 +0200 Subject: [PATCH 06/40] Add epoch right click actions to Epoch Core The right click menu made by Mudzereli and updated by Salival is part of epoch now. It gets only loaded if the DZE_CLICK_ACTIONS is not empty. --- .../Rightclicks/ui_selectSlot_addon.sqf | 105 ++++++++++++++++++ .../ui_selectSlot_vanilla.sqf} | 52 +++++---- SQF/dayz_code/configVariables.sqf | 19 ++++ SQF/dayz_code/init/compiles.sqf | 7 +- 4 files changed, 155 insertions(+), 28 deletions(-) create mode 100644 SQF/dayz_code/compile/Rightclicks/ui_selectSlot_addon.sqf rename SQF/dayz_code/compile/{ui_selectSlot.sqf => Rightclicks/ui_selectSlot_vanilla.sqf} (62%) diff --git a/SQF/dayz_code/compile/Rightclicks/ui_selectSlot_addon.sqf b/SQF/dayz_code/compile/Rightclicks/ui_selectSlot_addon.sqf new file mode 100644 index 000000000..8cbbd93c7 --- /dev/null +++ b/SQF/dayz_code/compile/Rightclicks/ui_selectSlot_addon.sqf @@ -0,0 +1,105 @@ +disableSerialization; +local _control = _this select 0; +local _button = _this select 1; +local _parent = findDisplay 106; + +if (carryClick) then {carryClick = false;}; + +if (_button == 1) then { + if (animationState player in ["ainjppnemstpsnonwnondnon_rolltofront","amovppnemstpsnonwnondnon_healed"]) exitWith { + //Prevent bypassing unconscious wake up animation with bandage or other right click actions + localize "str_player_actionslimit" call dayz_rollingMessages; + }; + + local _group = _parent displayCtrl 6902; + local _pos = ctrlPosition _group; + local _item = gearSlotData _control; + + if ( //No right click action + (!DZE_SelfTransfuse && {_item in ["ItemBloodbag","wholeBloodBagANEG","wholeBloodBagAPOS","wholeBloodBagBNEG","wholeBloodBagBPOS","wholeBloodBagABNEG","wholeBloodBagABPOS","wholeBloodBagONEG","wholeBloodBagOPOS"]}) + ) exitWith {}; + + if (mouseOverCarry) then { + _item = DayZ_onBack; + carryClick = true; + }; + + _pos set [0,((_this select 2) + 0.46)]; + _pos set [1,((_this select 3) + 0.07)]; + + local _conf = configFile >> "cfgMagazines" >> _item; + if (!isClass _conf) then { + _conf = configFile >> "cfgWeapons" >> _item; + }; + local _name = getText(_conf >> "displayName"); + + local _cfgActions = _conf >> "ItemActions"; + local _numActions = (count _cfgActions); + local _height = 0; + if (!dayz_groupSystem && {_item == "ItemRadio"}) then {_numActions = 1;}; // Used to bypass the group action when not enabled. + + local _i = 0; + //Populate Menu + while {_i <= (_numActions - 1)} do { + local _menu = _parent displayCtrl (1600 + _i); + _menu ctrlShow true; + local _config = (_cfgActions select _i); + local _type = getText (_config >> "text"); + local _script = getText (_config >> "script"); + local _outputOriented = getNumber (_config >> "outputOriented") == 1; + _height = _height + (0.025 * safezoneH); + local _compile = format["_id = '%2' %1;",_script,_item]; + uiNamespace setVariable ['uiControl', _control]; + if (_outputOriented) then { + /* + This flag means that the action is output oriented + the output class will then be transferred to the script + and the type used for the name + */ + local _array = getArray (_config >> "output"); + local _outputClass = _array select 0; + local _outputType = _array select 1; + _name = getText (configFile >> _outputType >> _outputClass >> "displayName"); + _compile = format["_id = ['%2',%3] %1;",_script,_item,_array]; + }; + + _menu ctrlSetText format[_type,_name]; + _menu ctrlSetEventHandler ["ButtonClick",_compile]; + _i = _i + 1; + }; + + local _isKey = ((["ItemKey",_item] call fnc_inString) && (_item != "ItemKeyKit")); + + { + local _classname = _x select 0; + local _text = _x select 1; + local _execute = _x select 2; + local _condition = _x select 3; + + if ((_item == _classname || (_isKey && (_className == "ItemKey"))) && (call compile _condition)) then { + local _menu = _parent displayCtrl (1600 + _numActions); + _menu ctrlShow true; + _height = _height + (0.025 * safezoneH); + uiNamespace setVariable ['uiControl', _control]; + _menu ctrlSetText _text; + if (_isKey && (_className == "ItemKey")) then { + if (count _this > 4) then { + local _option = _x select 4; + _menu ctrlSetEventHandler ["ButtonClick",format ["[%1,%2] %3",str _item,_option,_execute]]; + }; + } else { + _menu ctrlSetEventHandler ["ButtonClick",_execute]; + }; + _numActions = _numActions + 1; + }; + } forEach DZE_CLICK_ACTIONS; + + _pos set [3,_height]; + + //hint format["Obj: %1 \nHeight: %2\nPos: %3",_item,_height,_grpPos]; + + _group ctrlShow true; + ctrlSetFocus _group; + _group ctrlSetPosition _pos; + _group ctrlCommit 0; +}; \ No newline at end of file diff --git a/SQF/dayz_code/compile/ui_selectSlot.sqf b/SQF/dayz_code/compile/Rightclicks/ui_selectSlot_vanilla.sqf similarity index 62% rename from SQF/dayz_code/compile/ui_selectSlot.sqf rename to SQF/dayz_code/compile/Rightclicks/ui_selectSlot_vanilla.sqf index 04740e5bf..e33d457e2 100644 --- a/SQF/dayz_code/compile/ui_selectSlot.sqf +++ b/SQF/dayz_code/compile/Rightclicks/ui_selectSlot_vanilla.sqf @@ -1,8 +1,7 @@ -//private ["_control","_button","_parent","_group","_pos","_item","_conf","_name","_cfgActions","_numActions","_height","_menu","_config","_type","_script","_outputOriented","_compile","_array","_outputClass","_outputType"]; disableSerialization; -_control = _this select 0; -_button = _this select 1; -_parent = findDisplay 106; +local _control = _this select 0; +local _button = _this select 1; +local _parent = findDisplay 106; if (carryClick) then {carryClick = false;}; @@ -12,12 +11,10 @@ if (_button == 1) then { localize "str_player_actionslimit" call dayz_rollingMessages; }; - private ["_conf","_name","_compile","_height","_item"]; - _group = _parent displayCtrl 6902; - - _pos = ctrlPosition _group; - - _item = gearSlotData _control; + local _group = _parent displayCtrl 6902; + local _pos = ctrlPosition _group; + local _item = gearSlotData _control; + if ( //No right click action (!DZE_SelfTransfuse && {_item in ["ItemBloodbag","wholeBloodBagANEG","wholeBloodBagAPOS","wholeBloodBagBNEG","wholeBloodBagBPOS","wholeBloodBagABNEG","wholeBloodBagABPOS","wholeBloodBagONEG","wholeBloodBagOPOS"]}) ) exitWith {}; @@ -30,28 +27,28 @@ if (_button == 1) then { _pos set [0,((_this select 2) + 0.46)]; _pos set [1,((_this select 3) + 0.07)]; - _conf = configFile >> "cfgMagazines" >> _item; + local _conf = configFile >> "cfgMagazines" >> _item; if (!isClass _conf) then { _conf = configFile >> "cfgWeapons" >> _item; }; - _name = getText(_conf >> "displayName"); + local _name = getText(_conf >> "displayName"); - _cfgActions = _conf >> "ItemActions"; - _numActions = (count _cfgActions); - _height = 0; + local _cfgActions = _conf >> "ItemActions"; + local _numActions = (count _cfgActions); + local _height = 0; if (!dayz_groupSystem && {_item == "ItemRadio"}) then {_numActions = 1;}; // Used to bypass the group action when not enabled. + local _i = 0; //Populate Menu - for "_i" from 0 to (_numActions - 1) do - { - _menu = _parent displayCtrl (1600 + _i); + while {_i <= (_numActions - 1)} do { + local _menu = _parent displayCtrl (1600 + _i); _menu ctrlShow true; - _config = (_cfgActions select _i); - _type = getText (_config >> "text"); - _script = getText (_config >> "script"); - _outputOriented = getNumber (_config >> "outputOriented") == 1; + local _config = (_cfgActions select _i); + local _type = getText (_config >> "text"); + local _script = getText (_config >> "script"); + local _outputOriented = getNumber (_config >> "outputOriented") == 1; _height = _height + (0.025 * safezoneH); - _compile = format["_id = '%2' %1;",_script,_item]; + local _compile = format["_id = '%2' %1;",_script,_item]; uiNamespace setVariable ['uiControl', _control]; if (_outputOriented) then { /* @@ -59,15 +56,16 @@ if (_button == 1) then { the output class will then be transferred to the script and the type used for the name */ - _array = getArray (_config >> "output"); - _outputClass = _array select 0; - _outputType = _array select 1; + local _array = getArray (_config >> "output"); + local _outputClass = _array select 0; + local _outputType = _array select 1; _name = getText (configFile >> _outputType >> _outputClass >> "displayName"); _compile = format["_id = ['%2',%3] %1;",_script,_item,_array]; }; _menu ctrlSetText format[_type,_name]; _menu ctrlSetEventHandler ["ButtonClick",_compile]; + _i = _i + 1; }; _pos set [3,_height]; @@ -77,4 +75,4 @@ if (_button == 1) then { ctrlSetFocus _group; _group ctrlSetPosition _pos; _group ctrlCommit 0; -}; +}; \ No newline at end of file diff --git a/SQF/dayz_code/configVariables.sqf b/SQF/dayz_code/configVariables.sqf index bba4f3b6d..553cdbf90 100644 --- a/SQF/dayz_code/configVariables.sqf +++ b/SQF/dayz_code/configVariables.sqf @@ -160,6 +160,25 @@ if (!isDedicated) then { dayz_knifeDulling = false; // Enable knife dulling. Knives need to be sharpened after so many uses. dayz_matchboxCount = false; // Enable match stick count. After five uses matches run out and must be replaced. dayz_waterBottleBreaking = false; // Water bottles have a chance to break when boiling and require duct tape to fix + + /* + DZE_CLICK_ACTIONS + This is where you register your right-click actions + FORMAT -- (no comma after last array entry) + [_classname,_text,_execute,_condition], + PARAMETERS + _classname : the name of the class to click on (example = "ItemBloodbag") + _text : the text for the option that is displayed when right clicking on the item (example = "Self Transfuse") + _execute : compiled code to execute when the option is selected (example = "execVM 'my\scripts\self_transfuse.sqf';") + _condition : compiled code evaluated to determine whether or not the option is displayed (example = {true}) + */ + + DZE_CLICK_ACTIONS = [ + /* ["ItemGPS",localize "STR_CL_CA_SCAN_NEARBY","if(isNil 'CA_GPS_RANGE') then {CA_GPS_RANGE = 1500;};CA_ZOMBIE_COUNT = count ((position player) nearEntities ['zZombie_Base',CA_GPS_RANGE]); CA_MAN_COUNT = count ((position player) nearEntities ['CAManBase',CA_GPS_RANGE]); format[localize 'STR_CL_CA_SCAN',CA_GPS_RANGE,CA_MAN_COUNT - CA_ZOMBIE_COUNT,count ((position player) nearEntities ['zZombie_Base',CA_GPS_RANGE]),count ((position player) nearEntities ['allVehicles',CA_GPS_RANGE]) - CA_MAN_COUNT] call dayz_rollingMessages;","true"], + ["ItemGPS",localize "STR_CL_CA_RANGE_UP","if(isNil 'CA_GPS_RANGE') then {CA_GPS_RANGE = 1500;};CA_GPS_RANGE = (CA_GPS_RANGE + 100) min 2500; format[localize 'STR_CL_CA_RANGE_GPS',CA_GPS_RANGE] call dayz_rollingMessages;","true"], + ["ItemGPS",localize "STR_CL_CA_RANGE_DOWN","if(isNil 'CA_GPS_RANGE') then {CA_GPS_RANGE = 1500;};CA_GPS_RANGE = (CA_GPS_RANGE - 100) max 1000; format[localize 'STR_CL_CA_RANGE_GPS',CA_GPS_RANGE] call dayz_rollingMessages;","true"] + */ + ]; }; // Both diff --git a/SQF/dayz_code/init/compiles.sqf b/SQF/dayz_code/init/compiles.sqf index cb0135c07..ad0589cd6 100644 --- a/SQF/dayz_code/init/compiles.sqf +++ b/SQF/dayz_code/init/compiles.sqf @@ -112,7 +112,12 @@ if (!isDedicated) then { //ui player_toggleSoundMute = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_toggleSoundMute.sqf"; player_toggleStreamerMode = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_toggleStreamerMode.sqf"; - player_selectSlot = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\ui_selectSlot.sqf"; + if (!isNil "DZE_CLICK_ACTIONS" && {count DZE_CLICK_ACTIONS > 0}) then { + player_selectSlot = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\Rightclicks\ui_selectSlot_addon.sqf"; + } else { + player_selectSlot = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\Rightclicks\ui_selectSlot_vanilla.sqf"; + DZE_CLICK_ACTIONS = nil; + }; player_selectWeapon = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_selectWeapon.sqf"; player_markMap = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_markMap.sqf"; player_gearSet = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_gearSet.sqf"; From a9500b4e6ea908cdf975379637f1ec487670c8f7 Mon Sep 17 00:00:00 2001 From: A Man Date: Tue, 17 Aug 2021 21:53:54 +0200 Subject: [PATCH 07/40] Add Salivals Remote Vehicle to Epoch Core Functions getting only loaded if DZE_Remote_Vehicle is true. --- .../Configs/RscDisplay/remoteVehicle.hpp | 304 ++++++++++++++++++ .../actions/remoteVehicle/remoteVehicle.sqf | 152 +++++++++ .../actions/remoteVehicle/vehicleInfo.sqf | 54 ++++ SQF/dayz_code/config.cpp | 1 + SQF/dayz_code/configVariables.sqf | 12 + SQF/dayz_code/init/compiles.sqf | 5 + 6 files changed, 528 insertions(+) create mode 100644 SQF/dayz_code/Configs/RscDisplay/remoteVehicle.hpp create mode 100644 SQF/dayz_code/actions/remoteVehicle/remoteVehicle.sqf create mode 100644 SQF/dayz_code/actions/remoteVehicle/vehicleInfo.sqf diff --git a/SQF/dayz_code/Configs/RscDisplay/remoteVehicle.hpp b/SQF/dayz_code/Configs/RscDisplay/remoteVehicle.hpp new file mode 100644 index 000000000..4a73600fe --- /dev/null +++ b/SQF/dayz_code/Configs/RscDisplay/remoteVehicle.hpp @@ -0,0 +1,304 @@ +class rv_RscText { + idc = -1; + x = 0; + y = 0; + h = 0.037; + w = 0.3; + type = 0; + style = 0; + shadow = 2; + colorShadow[] = {0, 0, 0, 0.5}; + font = "Zeppelin32"; + SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + text = ""; + colorText[] = {1, 1, 1, 1.0}; + colorBackground[] = {0, 0, 0, 0}; + linespacing = 1; + tooltipColorText[] = {1,1,1,1}; + tooltipColorBox[] = {1,1,1,1}; + tooltipColorShade[] = {0,0,0,0.65}; +}; + +class rv_RscTitle : rv_RscText { + idc = -1; + style = 0; + sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + colorText[] = {0.95, 0.95, 0.95, 1}; +}; + +class rv_RscShortcutButton { + idc = -1; + style = 0; + default = 0; + shadow = 2; + w = 0.183825; + h = "((((safezoneW / safezoneH) min 1.2) / 1.2) / 20)"; + color[] = {1,1,1,1.0}; + colorFocused[] = {1,1,1,1.0}; + color2[] = {0.95,0.95,0.95,1}; + colorDisabled[] = {1,1,1,0.25}; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.69])","(profilenamespace getvariable ['GUI_BCG_RGB_G',0.75])","(profilenamespace getvariable ['GUI_BCG_RGB_B',0.5])",1}; + colorBackgroundFocused[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.69])","(profilenamespace getvariable ['GUI_BCG_RGB_G',0.75])","(profilenamespace getvariable ['GUI_BCG_RGB_B',0.5])",1}; + colorBackground2[] = {1,1,1,1}; + animTextureDefault = "gza\scripts\gold\gui\normal_ca.paa"; + animTextureNormal = "gza\scripts\gold\gui\normal_ca.paa"; + animTextureDisabled = "gza\scripts\gold\gui\normal_ca.paa"; + animTextureOver = "gza\scripts\gold\gui\over_ca.paa"; + animTextureFocused = "gza\scripts\gold\gui\focus_ca.paa"; + animTexturePressed = "gza\scripts\gold\gui\down_ca.paa"; + periodFocus = 1.2; + periodOver = 0.8; + class HitZone { + left = 0.0; + top = 0.0; + right = 0.0; + bottom = 0.0; + }; + class ShortcutPos { + left = 0; + top = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 20) - (((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)) / 2"; + w = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1) * (3/4)"; + h = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + }; + class TextPos { + left = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1) * (3/4)"; + top = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 20) - (((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)) / 2"; + right = 0.005; + bottom = 0.0; + }; + period = 0.4; + font = "Zeppelin32"; + size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + text = ""; + action = ""; + class Attributes { + font = "Zeppelin32"; + color = "#E5E5E5"; + align = "left"; + shadow = 1; + }; + class AttributesImage { + font = "Zeppelin32"; + color = "#E5E5E5"; + align = "left"; + }; + soundPush[] = { "", 0, 1 }; + soundEnter[] ={ "", 0, 1 }; + soundClick[] ={ "", 0, 1 }; + soundEscape[] ={ "", 0, 1 }; + sound[] ={ "", 0, 1 }; +}; + +class rv_RscButtonMenu : rv_RscShortcutButton { + idc = -1; + type = 16; + style = "0x02 + 0xC0"; + default = 0; + shadow = 0; + x = 0; + y = 0; + w = 0.095589; + h = 0.039216; + animTextureNormal = "#(argb,8,8,3)color(1,1,1,1)"; + animTextureDisabled = "#(argb,8,8,3)color(1,1,1,1)"; + animTextureOver = "#(argb,8,8,3)color(1,1,1,1)"; + animTextureFocused = "#(argb,8,8,3)color(1,1,1,1)"; + animTexturePressed = "#(argb,8,8,3)color(1,1,1,1)"; + animTextureDefault = "#(argb,8,8,3)color(1,1,1,1)"; + colorBackground[] = {0,0,0,0.8}; + colorBackgroundFocused[] = {1,1,1,1}; + colorBackground2[] = {0.75,0.75,0.75,1}; + color[] = {1,1,1,1}; + colorFocused[] = {0,0,0,1}; + color2[] = {0,0,0,1}; + colorText[] = {1,1,1,1}; + colorDisabled[] = {1,1,1,0.25}; + period = 1.2; + periodFocus = 1.2; + periodOver = 1.2; + size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + tooltipColorText[] = {1,1,1,1}; + tooltipColorBox[] = {1,1,1,1}; + tooltipColorShade[] = {0,0,0,0.65}; + class TextPos { + left = "0.25 * (((safezoneW / safezoneH) min 1.2) / 40)"; + top = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) - (((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)) / 2"; + right = 0.005; + bottom = 0.0; + }; + class Attributes { + font = "Zeppelin32"; + color = "#E5E5E5"; + align = "center"; + shadow = 0; + }; + class ShortcutPos { + left = "(6.25 * (((safezoneW / safezoneH) min 1.2) / 40)) - 0.0225 - 0.005"; + top = 0.005; + w = 0.0225; + h = 0.03; + }; + textureNoShortcut = ""; +}; + +class rv_RscListBox { + style = 16; + idc = -1; + type = 5; + w = 0.275; + h = 0.04; + font = "Zeppelin32"; + colorSelect[] = {0.11,0.686,0.831,1}; + colorText[] = {1, 1, 1, 1}; + colorBackground[] = {0.28,0.28,0.28,0.28}; + colorSelect2[] = {1, 1, 1, 1}; + colorSelectBackground[] = {0.95, 0.95, 0.95, 0.5}; + colorSelectBackground2[] = {1, 1, 1, 0.5}; + colorScrollbar[] = {0.2, 0.2, 0.2, 1}; + arrowFull = "\ca\ui\data\igui_arrow_top_active_ca.paa"; + arrowEmpty = "\ca\ui\data\igui_arrow_top_ca.paa"; + wholeHeight = 0.45; + rowHeight = 0.04; + color[] = {0.7, 0.7, 0.7, 1}; + colorActive[] = {0,0,0,1}; + colorDisabled[] = {0,0,0,0.3}; + sizeEx = 0.023; + maxHistoryDelay = 1; + autoScrollSpeed = -1; + autoScrollDelay = 5; + autoScrollRewind = 0; + tooltipColorText[] = {1,1,1,1}; + tooltipColorBox[] = {1,1,1,1}; + tooltipColorShade[] = {0,0,0,0.65}; + class ScrollBar { + color[] = {1, 1, 1, 0.6}; + colorActive[] = {1, 1, 1, 1}; + colorDisabled[] = {1, 1, 1, 0.3}; + thumb = "\ca\ui\data\igui_scrollbar_thumb_ca.paa"; + arrowFull = "\ca\ui\data\igui_arrow_top_active_ca.paa"; + arrowEmpty = "\ca\ui\data\igui_arrow_top_ca.paa"; + border = "\ca\ui\data\igui_border_scroll_ca.paa"; + }; + soundPush[] = { "", 0, 1 }; + soundEnter[] ={ "", 0, 1 }; + soundClick[] ={ "", 0, 1 }; + soundEscape[] ={ "", 0, 1 }; + sound[] ={ "", 0, 1 }; + soundSelect[] = { "", 0, 1 }; +}; + +class rv_RscStructuredText { + type = 13; + style = 0; + x = 0; + y = 0; + h = 0.035; + w = 0.1; + text = ""; + size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + colorText[] = {1, 1, 1, 1.0}; + shadow = 1; + class Attributes { + font = "Zeppelin32"; + color = "#ffffff"; + align = "left"; + shadow = 1; + }; +}; + +class remoteVehicle { + idd = 8800; + name="remoteVehicle"; + onLoad = "uiNamespace setVariable ['rv_dialog', _this select 0]"; + movingEnabled = 0; + enableSimulation = 1; + + class controlsBackground { + class rv_RscTitleBackground : rv_RscText { + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"}; + idc = -1; + x = 0.1; + y = 0.2; + w = 0.8; + h = (1 / 25); + }; + + class MainBackground : rv_RscText { + colorBackground[] = {0,0,0,0.7}; + idc = -1; + x = 0.1; + y = 0.2 + (11 / 250); + w = 0.8; + h = 0.7 - (22 / 250); + }; + + class VehicleInfoHeader : rv_RscText { + idc = 8830; + text = $STR_CL_RV_VEHICLE_INFO; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"}; + x = 0.47; y = 0.26; + w = 0.42; + h = (1 / 25); + }; + + class CloseBtn : rv_RscButtonMenu { + idc = -1; + text = $STR_UI_CLOSE; + onButtonClick = "closeDialog 2;"; + x = -0.06 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); + y = 0.9 - (1 / 25); + w = (6.25 / 40); + h = (1 / 25); + }; + }; + + class controls { + class Title : rv_RscTitle { + idc = 8801; + text = ""; + x = 0.1; + y = 0.2; + w = 0.8; + h = (1 / 25); + }; + + class VehicleList : rv_RscListBox { + idc = 8802; + text = ""; + sizeEx = 0.04; + colorBackground[] = {0.1,0.1,0.1,0.9}; + onLBSelChanged = "[_this] call rv_vehicleInfo;"; + x = 0.11; y = 0.302; + w = 0.35; h = 0.49; + }; + + class VehicleTitleBox : rv_RscText { + idc = 8804; + text = $STR_CL_RV_VEHICLE_LIST; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"}; + x = 0.11; y = 0.26; + w = 0.35; + h = (1 / 25); + }; + + class selectVehicle : rv_RscButtonMenu { + idc = 8850; + text = $STR_CL_RV_SELECT_VEHICLE; + onButtonClick = "rv_isOk = true;closeDialog 0;"; + x = 0.1 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); + y = 0.9 - (1 / 25); + w = (6.25 / 20); + h = (1 / 25); + }; + + class vehicleInfomationList : rv_RscStructuredText { + idc = 8803; + text = ""; + sizeEx = 0.035; + x = 0.47; y = 0.3; + w = 0.41; h = 0.5; + }; + }; +}; diff --git a/SQF/dayz_code/actions/remoteVehicle/remoteVehicle.sqf b/SQF/dayz_code/actions/remoteVehicle/remoteVehicle.sqf new file mode 100644 index 000000000..8b51bf3ae --- /dev/null +++ b/SQF/dayz_code/actions/remoteVehicle/remoteVehicle.sqf @@ -0,0 +1,152 @@ +/* + Remote vehicle script by salival (https://github.com/oiad) +*/ + +if (dayz_actionInProgress) exitWith {localize "str_player_actionslimit" call dayz_rollingMessages;}; +dayz_actionInProgress = true; + +private ["_characterID","_checkDistance","_display","_distance","_fuel","_group","_vehicleFound","_keyID","_keyName","_option","_time","_vehicle","_vehicleType","_index","_control","_keyDisplay","_exit"]; + +_keyName = _this select 0; +_option = _this select 1; + +_checkDistance = true; // Check to see if the player is too far away from the remote +_distance = 300; // Maximum distance the player can be away from the vehicle to be able to use the remote. + +disableSerialization; + +_exit = { + dayz_actionInProgress = false; + rv_vehicleList = nil; + rv_selected = nil; +}; + +_display = findDisplay 106; +_display closeDisplay 0; + +_keyList = call epoch_tempKeys; +_keyID = 0; + +_keyID = (_keyList select 0) select ((_keyList select 2) find _keyName); +_foundPos = (_keyList select 0) find _keyID; + +if (_foundPos >= 0) then { + _keyDisplay = (_keyList select 1) select _foundPos; +}; + +if (_foundPos == -1) exitWith {systemChat localize "STR_CL_RV_NO_KEYS"; call _exit;}; + +rv_vehicleList = []; +_vehicleFound = false; +{ + _vehicleType = typeOf _x; + _characterID = _x getVariable ["CharacterID","0"]; + if ((_characterID == _keyID) && {_vehicleType isKindOf "Air" || _vehicleType isKindOf "LandVehicle" || _vehicleType isKindOf "Ship"}) then { + _vehicleFound = true; + rv_vehicleList set [count rv_vehicleList,_x]; + }; +} count vehicles; + +if (count rv_vehicleList > 1) then { + rv_isOk = false; + + createDialog "remoteVehicle"; + + _display = uiNamespace getVariable["rv_dialog", displayNull]; + _display displayCtrl 8801 ctrlSetText(format[localize "STR_CL_RV_TITLE",_keyDisplay]); + + _control = ((findDisplay 8800) displayCtrl 8802); + lbClear _control; + { + _control lbAdd getText(configFile >> "CfgVehicles" >> typeOf _x >> "displayName"); + if (!isNull DZE_myVehicle && {local DZE_myVehicle} && {alive DZE_myVehicle} && {DZE_myVehicle == _x}) then { + _control lbSetColor [(lbSize _control)-1,[0, 1, 0, 1]]; + }; + } count rv_vehicleList; + _control lbSetCurSel 0; + + waitUntil {!dialog}; + +} else { + rv_selected = rv_vehicleList select 0; + rv_isOk = true; +}; + +if (!rv_isOk) exitWith {call _exit;}; + +if (!_vehicleFound) exitWith {systemChat localize "STR_CL_RV_NO_VEHICLES"; call _exit;}; + +_vehicleType = typeOf rv_selected; +_displayName = getText(configFile >> "CfgVehicles" >> _vehicleType >> "displayName"); + +if (!alive rv_selected) exitWith {systemChat localize "STR_CL_RV_DESTROYED"; call _exit;}; +if (_checkDistance && {(player distance rv_selected) >= _distance}) exitWith {format[localize "STR_CL_RV_RANGE_FAIL",_displayName] call dayz_rollingMessages; call _exit;}; + +if (_option == 1) then { + _group = units group player; + + systemChat format[localize "STR_CL_RV_EJECT",_displayName]; + { + if !(_x in _group) then { + _x action ["eject",rv_selected]; + systemChat format[localize "STR_CL_RV_EJECT_PLAYER",name _x]; + }; + } forEach (crew rv_selected); +}; + +if (_option == 2) then { + systemChat format[localize "STR_CL_RV_ENGINE",if (isEngineOn rv_selected) then {localize "strwfoff"} else {localize "strwfon"},_displayName]; + if (isEngineOn rv_selected) then { + if (rv_selected isKindOf "Helicopter") then { // This is needed because dayz_engineSwitch won't turn off the engine for a helicopter. + _fuel = fuel rv_selected; + rv_selected setFuel 0; + player action ["engineOff",rv_selected]; + uiSleep 4.5; + rv_selected setFuel _fuel; + } else { + [rv_selected,false] call dayz_engineSwitch; + }; + } else { + [rv_selected,true] call dayz_engineSwitch; + }; +}; + +if (_option == 3) then { + systemChat format[localize "STR_BLD_UNLOCKED",_displayName]; + PVDZE_veh_Lock = [rv_selected,false]; + _time = diag_tickTime; + + if (local rv_selected) then { + PVDZE_veh_Lock call local_lockUnlock; + } else { + publicVariable "PVDZE_veh_Lock"; + waitUntil {uiSleep 0.1;(!locked rv_selected or (diag_tickTime - _time > 4))}; + }; +}; + +if (_option == 4) then { + systemChat format[localize "STR_EPOCH_PLAYER_117",_displayName]; + PVDZE_veh_Lock = [rv_selected,true]; + _time = diag_tickTime; + + if (local rv_selected) then { + PVDZE_veh_Lock call local_lockUnlock; + } else { + publicVariable "PVDZE_veh_Lock"; + waitUntil {uiSleep 0.1;(locked rv_selected or (diag_tickTime - _time > 4))}; + }; +}; + +if (_option == 5) then { + if !(rv_selected getVariable["vehicleLights",false]) then { + player action ["lightOn", rv_selected]; + systemChat format[localize "STR_CL_RV_LIGHTS",localize "strwfon",_vehicleType]; + rv_selected setVariable ["vehicleLights",true,true]; + } else { + player action ["lightOff", rv_selected]; + systemChat format[localize "STR_CL_RV_LIGHTS",localize "strwfoff",_vehicleType]; + rv_selected setVariable ["vehicleLights",false,true]; + }; +}; + +call _exit; \ No newline at end of file diff --git a/SQF/dayz_code/actions/remoteVehicle/vehicleInfo.sqf b/SQF/dayz_code/actions/remoteVehicle/vehicleInfo.sqf new file mode 100644 index 000000000..8fc6a2390 --- /dev/null +++ b/SQF/dayz_code/actions/remoteVehicle/vehicleInfo.sqf @@ -0,0 +1,54 @@ +private ["_backPackCount","_backPackCount_raw","_backPackSlots","_formattedText","_gearCount","_magazineCount","_magazineCount_raw","_magazineSlots","_name","_picture","_price","_text","_typeOf","_weaponSlots","_weaponsCount","_weaponsCount_raw","_control","_index"]; + +_gearCount = { + private ["_counter"]; + _counter = 0; + {_counter = _counter + _x;} count _this; + _counter +}; + +_control = (_this select 0) select 0; +_index = (_this select 0) select 1; + +rv_selected = rv_vehicleList select _index; +_typeOf = typeOf rv_selected; + +_weaponsCount_raw = getWeaponCargo rv_selected; +_magazineCount_raw = getMagazineCargo rv_selected; +_backPackCount_raw = getBackpackCargo rv_selected; + +_weaponSlots = getNumber(configFile >> "CfgVehicles" >> _typeOf >> "transportMaxWeapons"); +_magazineSlots = getNumber(configFile >> "CfgVehicles" >> _typeOf >> "transportMaxMagazines"); +_backPackSlots = getNumber(configFile >> "CfgVehicles" >> _typeOf >> "transportmaxbackpacks"); +_name = getText(configFile >> "CfgVehicles" >> _typeOf >> "displayName"); +_picture = getText(configFile >> 'CfgVehicles' >> _typeOf >> 'picture'); + +_weaponsCount = (_weaponsCount_raw select 1) call _gearCount; +_magazineCount = (_magazineCount_raw select 1) call _gearCount; +_backPackCount = (_backPackCount_raw select 1) call _gearCount; + +_formattedText = format [ + "
" + + "%2: %3
" + + "%4: %5
" + + "%6: %13/%10 %14/%11 %15/%12
", + _picture, + localize "STR_EPOCH_NAME", + _name, + localize "STR_EPOCH_CLASS", + _typeOf, + localize "STR_EPOCH_CARGO_SPACE", + "\z\addons\dayz_code\gui\gear\gear_ui_slots_weapons_white.paa", + "\z\addons\dayz_code\gui\gear\gear_ui_slots_items_white.paa", + "\z\addons\dayz_code\gui\gear\gear_ui_slots_backPacks_white.paa", + _weaponSlots, + _magazineSlots, + _backPackSlots, + _weaponsCount, + _magazineCount, + _backPackCount, + _text +]; + +((findDisplay 8800) displayCtrl 8803) ctrlSetStructuredText parseText _formattedText; +ctrlShow [8803,true]; \ No newline at end of file diff --git a/SQF/dayz_code/config.cpp b/SQF/dayz_code/config.cpp index 50a6ab9f5..ad7d12120 100644 --- a/SQF/dayz_code/config.cpp +++ b/SQF/dayz_code/config.cpp @@ -129,6 +129,7 @@ class DefaultEventhandlers { #include "Configs\RscDisplay\doorManagement\doorManagement.hpp" #include "Configs\RscDisplay\doorManagement\doorAccess.hpp" #include "Configs\RscDisplay\zscDialogs.hpp" +#include "Configs\RscDisplay\remoteVehicle.hpp" //#include "Configs\RscDisplay\tradermenu.hpp" class CfgTasks diff --git a/SQF/dayz_code/configVariables.sqf b/SQF/dayz_code/configVariables.sqf index 553cdbf90..277a4ea41 100644 --- a/SQF/dayz_code/configVariables.sqf +++ b/SQF/dayz_code/configVariables.sqf @@ -179,6 +179,18 @@ if (!isDedicated) then { ["ItemGPS",localize "STR_CL_CA_RANGE_DOWN","if(isNil 'CA_GPS_RANGE') then {CA_GPS_RANGE = 1500;};CA_GPS_RANGE = (CA_GPS_RANGE - 100) max 1000; format[localize 'STR_CL_CA_RANGE_GPS',CA_GPS_RANGE] call dayz_rollingMessages;","true"] */ ]; + + DZE_Remote_Vehicle = false; // Enable/Disable the Remote Vehicle options like ejecting players from a vehicle or lock/unlock the vehicle from the distance just by the key. + + if (DZE_Remote_Vehicle) then { + DZE_CLICK_ACTIONS = DZE_CLICK_ACTIONS + [ + ["ItemKey",localize "STR_CL_RV_CA_EJECT","spawn remoteVehicle;","true",1], + ["ItemKey",localize "STR_CL_RV_CA_ENGINE","spawn remoteVehicle;","true",2], + ["ItemKey",localize "STR_CL_RV_CA_UNLOCK","spawn remoteVehicle;","true",3], + ["ItemKey",localize "STR_CL_RV_CA_LOCK","spawn remoteVehicle;","true",4], + ["ItemKey",localize "STR_CL_RV_CA_LIGHTS","spawn remoteVehicle;","true",5] + ]; + }; }; // Both diff --git a/SQF/dayz_code/init/compiles.sqf b/SQF/dayz_code/init/compiles.sqf index ad0589cd6..da871e734 100644 --- a/SQF/dayz_code/init/compiles.sqf +++ b/SQF/dayz_code/init/compiles.sqf @@ -198,6 +198,11 @@ if (!isDedicated) then { fnc_radioState = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\radioState.sqf"; // Toggle radio on and off fnc_localizeMessage = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\fn_localizeMessage.sqf"; fnc_remoteMessage = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\fn_remoteMessage.sqf"; + + if (DZE_Remote_Vehicle) then { + remoteVehicle = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\remoteVehicle\remoteVehicle.sqf"; + rv_vehicleInfo = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\remoteVehicle\vehicleInfo.sqf"; + }; // Weather if (DZE_Weather in [3,4]) then { From d3f0427d4c166972fc2c9aebd29fb79a9f8851e5 Mon Sep 17 00:00:00 2001 From: A Man Date: Tue, 17 Aug 2021 21:54:13 +0200 Subject: [PATCH 08/40] Update scripts.txt Still work in progress --- .../DZE_Server_Config/BattlEye/scripts.txt | 154 +++++++++--------- 1 file changed, 77 insertions(+), 77 deletions(-) diff --git a/Server Files/DZE_Server_Config/BattlEye/scripts.txt b/Server Files/DZE_Server_Config/BattlEye/scripts.txt index fd094b5af..1ea66bb6b 100644 --- a/Server Files/DZE_Server_Config/BattlEye/scripts.txt +++ b/Server Files/DZE_Server_Config/BattlEye/scripts.txt @@ -1,90 +1,90 @@ //new2 -5 addAction !", \"\\z\\addons\\dayz_code\\" !=" = -1;\n};\nif (_s1 > 0) then {\ns_player_toggleSnap = player addaction [format[\"\" + \"Snap: %1\" +\"\",snapAc" !="-1;\n};\n\nif (_s1 > 0) then {\ns_player_toggleVector = player addaction [format[\"\" + localize \"STR_EPOCH_ACTIO" !"\"addAction\", " !"raddAction" -5 addBackpack !"addBackpackCargoGlobal [_x,(_objWpnQty select _counter)];\n_counter = _counter + 1;\n} count _objWpnTypes;" !"addBackpack _item;\n};\n};\nformat[localize \"str_c" !"case 3: {_holder addBackpackCargoGlobal [_item,_amount];};\n};\n\n\n" !"}) then {\n_newUnit addBackpack _newBackpackType;\n\nd" !"addBackpack _backpackType; \ndayz_myBackpack = unitBackpack player;\n\n\n\n_backpackWpnT" !"};\n} count _wpns;\n\nif (_bcpk != \"\") then {\nplayer addBackpack" !"1 == \"trade_backpacks\") then {\nDZE_myVehicle addBackpack" !"7 addBackpackCargoGlobal [_create,_qty];\n};\nif (surfaceIsWater" !"case 5: {_item addBackpackCargoGlobal [_itemOut,_countOut]}; \n};\n} else" !="m (2 + 1)];\n};\n};\n\nif (_type == 5) exitWith {\n_container addBackpackCargoGlobal [_item, 1];\n};\n};\n} count ([_group, _count] cal" !="5) exitWith {\nif (isNull unitBackpack _unit) then {\n_unit addBackpack _item;\n};\n};\n};\n} foreach ([_group, _count] call dz_fn_loo" !="al [_itemOut,_countOut]};\nif (_type == 5) exitwith {_item addBackpackCargoGlobal [_itemOut,_countOut]}; \n};\n} else {\n_item addMa" -5 addMagazine !raddMagazine !"\"addMagazine\", " !"if (isClass (configfile >> \"cfgmagazines\" >> (_item))) then {_unit addMagazine _item;};\n};\n};\n};\n};" !"_vehicle addMagazineTurret [_ammo,_turret];\nplayer removeMagazine" !"if (dayz_actionInProgress) exitWith {" !"addMagazine _x;\n};\n} foreach _items;\nformat[loc" !"addMagazine \"ItemAntibiotic\" + str(_remain" !"sumeDrop\") == 0) then\n{\nplayer addMagazine" !"ion) do {\ncase \"CfgWeapons\":\n{\nplayer addWeapon _item;\n};\ncase \"CfgMagazines\":\n{\nplayer addMagazine" !"addMagazine [\"12Rnd_Quiver_Wood\",_qty_quiv" !" >> \"containerEmpty\")" !"plant) select 1;\n{\n_item addMagazine" !"addMagazineCargoGlobal [_itemtodrop,1];\n\nformat[localize \"str_f" !"addMagazine _attachment;\n\n\n(findDisplay 10" !"addMagazine getText (configFile >> \"CfgMagazines\" >> _x >> _water" !"};\n};\n\n\nswitch _type do {\ncase 1: {_holder addMagazine" !"do {\n_animalbody addMagazine _rawfoodtype" !"addMagazine _item;\n};\n};\n_idc = _idc" !"_newUnit addMagazine [_x select 0,_x select 1]" !"addMagazine _x } count MeleeMagazines;\n} e" !"_meleeNum < 1) then {\nplayer addMagazine" !"addMagazine _qtyRemaining;\n};\n};\ntrue" !"bag\";\n};\n};\n(_this select 0) addMagazine" !"addMagazine \"wholeBloodBagBNEG\";\n};\n};" !"_qty > 0) then {\n_firePlace addMagazine" !"ONEG\" }; \n};\ndayz_myBackpack addMagazine" !"addMagazine _x;\n_countmags = _countmags +1;\n};\n} count _gmag" !"E\"];\n_lootpile addMagazineCargoGlobal [\"TrapBear\", 1]" !"With\n{\nplayer addMagazine (_this select 1" !"lder addMagazineCargoGlobal [_x,(_objWpnQty select _counter)];\n_counter = _counter + 1;\n};\n} co" !"soldItem\"];\n{\n_object addMagazine" !"systemChat localize \"STR_EPOCH_TRADE_" !"if (_silver_1oz > 0) then {\nif (_silver_1oz == 1) then {\nplayer addMagazine" !="Random;\n} else {\n_item = \"ItemBloodbag\";\n};\n};\n_container addMagazineCargoGlobal [_item, 1];\n};\n\nif (_type == 2) exitWith {\n_c" !="electRandom;\n} else {\n_item = \"ItemBloodbag\";\n};\n};\n_unit addMagazine _item;\n};\n\nif (_type == 2) exitWith {\n_unit addWeapon _i" !="];\n\ncall {\nif (_humanityBody >= DZE_Hero) exitwith {_body addMagazine \"ItemDogTagHero\";};\nif (_humanityBody <= DZE_Bandit) exitw" !="_vehicle = \"WeaponHolder\" createVehicle [0,0,0];\n_vehicle addMagazineCargoGlobal [_item, 1];\n\nif (_isWater) then { \n_fixWaterSp" !"eep 3;\n_finished = true;\n};\n\nif (!_finished) then {\n_unit addMagazine _bagUsed;\n_msg = \"str_actions_medical_transfusion_interrup" -5 addWeapon !raddWeapon !"\"addWeapon\", " !"if (isClass (configfile >> \"cfgweapons\" >> (_item))) then {_unit addWeapon _item;}\nelse" !",0]] call dayz_NutritionSystem;\n" !"Remove) == 1}) then {\nplayer addWeapon _create;" !"Display 0;\n\n\nif (_weaponInUse) then\n{\n_muz" !"failChance) then {\nswitch (_selection) do {\ncase \"CfgWeapons\":\n{\nplayer addWeapon" !"addWeapon _fixedItem;\nformat[localize \"str_f" !"_wepcounts = (getWeaponCargo _plant) select 1;\n{\n_item addWeapon" !"addWeapon _repair;\n} else {\n\n[_repair" !"player addWeapon dayz_onBack] select 0;\n};\n\n" !"player addWeapon _addWeapon;\n\nif (vehicle player != player) then {\n_display = find" !"};\n};\n\n\nswitch _type do {\ncase 1: {_holder addMagazineCargoGlobal [_item,_amount];};\ncase 2: {_holder addWeapon" !"l fn_chance) then {\nplayer removeWeapon _x;\nplayer addWeapon _rem" !"else {\n_body addWeapon dayz_onBack;\n};\n};\n\n\n_infect" !"\" >> _x)) then {\nplayer addWeapon _x;\n};\n} count _wpns;\n};" !"lder addWeaponCargoGlobal [_x,(_objWpnQty select _counter)];\n_counter = _counter + 1;\n} co" !"WpnQtys = [];\nif (count _backpackWpn > 0) then {\n_backpackWpnTypes = _backpackWpn sel" !"addWeapon (\"Item\"+str(_remain)+\"Matchbox" !"{\nswitch (_x select 0) do\n{\ncase 2:\n{\n(_this select 0) addWeapon" !"addWeaponCargoGlobal [_bcpkWpn, 1];\n};\n};\n};\n};" !"s;\n};\n\n\nplayer addWeapon \"Loot" !"With\n{\nplayer addWeapon (_this select 1" !"\") then {\n_newUnit addWeapon _secweapon;\n};\n\n" !"soldItem\"];\n{\n_object addWeapon" !"then {\nsystemChat format[localize \"STR_EPOCH_" !"DuplicateTool;\n} else {\nplayer addWeapon" !="al [_item, 1];\n};\n\nif (_type == 2) exitWith {\n_container addWeaponCargoGlobal [_item, 1];\n\n_magazines = getArray (configFile >" !=" addMagazine _item;\n};\n\nif (_type == 2) exitWith {\n_unit addWeapon _item;\n};\n\nif (_type == 5) exitWith {\nif (isNull unitBackp" !="ile >> \"CfgWeapons\" >> _x >> \"type\") == 256) then {\nplayer addWeapon _x;\n} else {\n_x call player_addDuplicateTool;\n};\n};\n} count" !="\n_vehicle = \"WeaponHolder\" createVehicle [0,0,0];\n_vehicle addWeaponCargoGlobal [_item, 1];\n\nif (_isWater) then { \n_fixWaterSpa" -5 allDead !"} count allDead;\n\n\nif (dayz_oldBodyCount > _bodyCount) then {" -5 allGroups !"publicVariableServer \"PVDZ_Server_UpdateGroup\";\n};\n} count allGroups;" -5 allMissionObjects !"[_x,2,0,false,false] spawn BIS_Effects_Burn;\n};\n} count allMissionObjects \"SpawnableWreck\";" -5 allowDammage -5 allUnits !"} count allUnits;\nlbSort _playerList;" !"if (getPlayerUID _x == _this) exitWith {\n_player = _x;\n};\n} count allUnits;" !"owner _x publicVariableClient \"PVDZ_groupInvite\";\n};\n} count allUnits;" !=" select 1 != 0}) exitWith {\n_targeted = true;\n};\n};\n} count allUnits;\nif (_targeted) exitWith {localize \"str_player_fail_wear4\" " -5 attachTo !"(_variation * 2)) - _variation)];\n_bolt attachTo [_hitObject,_val,_hitMemoryPt];" !"player playActionNow \"PutDown\";\nuiSleep 2;\n_flare attachTo [player,[0,0,0],\"granat2\"];" !"tchmove \"ainjpfalmstpsnonwrfldnon_carried_still\";\n_dragee attachto [_unit,[-0.2, 0.2, 0]];" !"_source setDropInterval 0.02;\n_point attachTo [_unit,_modelPos,_wound];" !" attachto [_v,[0,0,0],\"destructionEffect" !"publicVariable \"PVDZ_drg_RaDrag\";\n\n_dragee attachto [_unit,[0.1, 1.01, 0]];" !="_l1 attachTo [_lh,[0,0,0],\"light\"];" !"_objectHelper attachTo [player,_offset];" !"_object attachTo [player,_offset];\n\n_position = getPosATL _object;" !="_vehicle attachTo [_liftHeli,[0,0,-7]];" !="_obj attachTo [_axis];" !"_objectSnapGizmo attachTo [_object,[_x select 0,_x select 1,_x select 2]];" !="_vehicle attachTo [_towTruck,[1.3,-2,2.3]];" !"localize \"STR_EPOCH_ACTIONS_ATTACHTOHELI\"," !=" (getDir _object);\n_objectHelper setPosATL _newPos;\n_object attachTo [_objectHelper];\n_x setobjecttexture [0,\"#(argb,8,8,3)color" !"rInput false; disableUserInput false;\nuiSleep .5;\n\n\n_dragee attachto [_medic,[0.1, 1.01, 0]];\n\n\nPVDZ_send = [_dragee,\"DragPlayer" !="cts, 3];\nif (count _dropObjects > 0) exitWith {};\n\n\n_dragee attachto [_medic,[0.1, 1.01, 0]];\n\n\nPVDZ_send = [_dragee,\"CarryPlaye" -5 bankMoney !=" [\"globalMoney\", _globalCoins, true];\nplayer setVariable [\"bankMoney\", _bankCoins, true];\n};\ndayz_musicH = [] spawn player_music" !="]];\nctrlSetText [23002,format[\"%1 %2\",player getVariable [\"bankMoney\",0] call BIS_fnc_numberText,CurrencyName]];\n};\n\nATMDialogWi" !="ariable [\"cashMoney\",0];\n_bankCoins = player getVariable [\"bankMoney\",0];\n_globalCoins = player getVariable [\"globalMoney\",0];\n}" !=" \nZSC_limitOnBank = true; \nZSC_bankObjects = [\"\"]; \nZSC_maxBankMoney = 500000; \nZSC_defaultStorageMultiplier = 200; \nZSC_MaxMone" !="Z_showBankUI) then {\nlocal _bankAmt = player getVariable [\"bankMoney\",0];\n_string = _string + format [\"%1 > \"" !="wCurrencyUI) then {\nlocal _cashAmt = player getVariable[([\"cashMoney\",\"globalMoney\"] select Z_persistentMoney),0];\n_string = for" !=" = [false, [], [], [], 0];\n_wealth = player getVariable[([\"cashMoney\",\"globalMoney\"] select Z_persistentMoney),0];\n\nif (Z_Single" -5 clearMagazineCargo !="ddWeaponCargo\", \n\"addMagazine\", \n\"addMagazineCargo\", \n\"clearMagazineCargo\",\n\"clearWeaponCargo\",\n\"endMission\",\n\"failMission\",\n\"ti" !="rclearMagazineCargo = 'clearMagazineCargo'" !="rclearMagazineCargocode = compile preprocessFileLineNumbers (BIS_PathMPscriptCommands + 'clearMagazineCargo.sqf')" !=", \"addWeaponCargo\", \"addWPCur\", \"animate\", \"callVar\", \"clearMagazineCargo\", \"clearWeaponCargo\", \"createDiaryRecord\", \"createMark" !="rclearMagazineCargocode={diag_log(\"WARNING illegal RE rclearMagazineCargocode with args:\"+str(_this));};" !="eeSpace select 5;\n_normalWeaps = _freeSpace select 6;\n\nclearMagazineCargoGlobal _object;\nclearWeaponCargoGlobal _object;\n\n_retur" !=" {\n_bpMags = (getMagazineCargo (unitbackpack player));\nclearMagazineCargoGlobal (unitbackpack player);\n\n{\n_count = ((_bpMags sel" !="o {\n\n_ok = false;\n_mags = getMagazineCargo _firePlace;\nclearMagazineCargoGlobal _firePlace;\n\n_fuel = [\"PartWoodPile\",\"ItemLog\",\"" -5 clearWeaponCargo !="Magazine\", \n\"addMagazineCargo\", \n\"clearMagazineCargo\",\n\"clearWeaponCargo\",\n\"endMission\",\n\"failMission\",\n\"titleCut\", \n\"titleText\"" !="rclearWeaponCargo = 'clearWeaponCargo'" !="rclearWeaponCargocode = compile preprocessFileLineNumbers (BIS_PathMPscriptCommands + 'clearWeaponCargo.sqf')" !="addWPCur\", \"animate\", \"callVar\", \"clearMagazineCargo\", \"clearWeaponCargo\", \"createDiaryRecord\", \"createMarkerLocal\", \"createSimp" !="rclearWeaponCargocode={diag_log(\"WARNING illegal RE rclearWeaponCargocode with args:\"+str(_this));};" !="_freeSpace select 6;\n\nclearMagazineCargoGlobal _object;\nclearWeaponCargoGlobal _object;\n\n_returnVar = [];\n_returnMag = [];\n_retu" -5 clearBackpackCargo -5 closeDisplay !"'closeDisplay'" !"closeDisplay 0" !"closeDisplay 2" !"if (!isNil \"closeDisplay\") then {" +1 addAction !", \"\\z\\addons\\dayz_code\\" !=" = -1;\n};\nif (_s1 > 0) then {\ns_player_toggleSnap = player addaction [format[\"\" + \"Snap: %1\" +\"\",snapAc" !="-1;\n};\n\nif (_s1 > 0) then {\ns_player_toggleVector = player addaction [format[\"\" + localize \"STR_EPOCH_ACTIO" !"\"addAction\", " !"raddAction" +1 addBackpack !"addBackpackCargoGlobal [_x,(_objWpnQty select _counter)];\n_counter = _counter + 1;\n} count _objWpnTypes;" !"addBackpack _item;\n};\n};\nformat[localize \"str_c" !"case 3: {_holder addBackpackCargoGlobal [_item,_amount];};\n};\n\n\n" !"}) then {\n_newUnit addBackpack _newBackpackType;\n\nd" !"addBackpack _backpackType; \ndayz_myBackpack = unitBackpack player;\n\n\n\n_backpackWpnT" !"};\n} count _wpns;\n\nif (_bcpk != \"\") then {\nplayer addBackpack" !"1 == \"trade_backpacks\") then {\nDZE_myVehicle addBackpack" !"7 addBackpackCargoGlobal [_create,_qty];\n};\nif (surfaceIsWater" !"case 5: {_item addBackpackCargoGlobal [_itemOut,_countOut]}; \n};\n} else" !="m (2 + 1)];\n};\n};\n\nif (_type == 5) exitWith {\n_container addBackpackCargoGlobal [_item, 1];\n};\n};\n} count ([_group, _count] cal" !="5) exitWith {\nif (isNull unitBackpack _unit) then {\n_unit addBackpack _item;\n};\n};\n};\n} foreach ([_group, _count] call dz_fn_loo" !="al [_itemOut,_countOut]};\nif (_type == 5) exitwith {_item addBackpackCargoGlobal [_itemOut,_countOut]}; \n};\n} else {\n_item addMa" +1 addMagazine !raddMagazine !"\"addMagazine\", " !"if (isClass (configfile >> \"cfgmagazines\" >> (_item))) then {_unit addMagazine _item;};\n};\n};\n};\n};" !"_vehicle addMagazineTurret [_ammo,_turret];\nplayer removeMagazine" !"if (dayz_actionInProgress) exitWith {" !"addMagazine _x;\n};\n} foreach _items;\nformat[loc" !"addMagazine \"ItemAntibiotic\" + str(_remain" !"sumeDrop\") == 0) then\n{\nplayer addMagazine" !"ion) do {\ncase \"CfgWeapons\":\n{\nplayer addWeapon _item;\n};\ncase \"CfgMagazines\":\n{\nplayer addMagazine" !"addMagazine [\"12Rnd_Quiver_Wood\",_qty_quiv" !" >> \"containerEmpty\")" !"plant) select 1;\n{\n_item addMagazine" !"addMagazineCargoGlobal [_itemtodrop,1];\n\nformat[localize \"str_f" !"addMagazine _attachment;\n\n\n(findDisplay 10" !"addMagazine getText (configFile >> \"CfgMagazines\" >> _x >> _water" !"};\n};\n\n\nswitch _type do {\ncase 1: {_holder addMagazine" !"do {\n_animalbody addMagazine _rawfoodtype" !"addMagazine _item;\n};\n};\n_idc = _idc" !"_newUnit addMagazine [_x select 0,_x select 1]" !"addMagazine _x } count MeleeMagazines;\n} e" !"_meleeNum < 1) then {\nplayer addMagazine" !"addMagazine _qtyRemaining;\n};\n};\ntrue" !"bag\";\n};\n};\n(_this select 0) addMagazine" !"addMagazine \"wholeBloodBagBNEG\";\n};\n};" !"_qty > 0) then {\n_firePlace addMagazine" !"ONEG\" }; \n};\ndayz_myBackpack addMagazine" !"addMagazine _x;\n_countmags = _countmags +1;\n};\n} count _gmag" !"E\"];\n_lootpile addMagazineCargoGlobal [\"TrapBear\", 1]" !"With\n{\nplayer addMagazine (_this select 1" !"lder addMagazineCargoGlobal [_x,(_objWpnQty select _counter)];\n_counter = _counter + 1;\n};\n} co" !"soldItem\"];\n{\n_object addMagazine" !"systemChat localize \"STR_EPOCH_TRADE_" !"if (_silver_1oz > 0) then {\nif (_silver_1oz == 1) then {\nplayer addMagazine" !="Random;\n} else {\n_item = \"ItemBloodbag\";\n};\n};\n_container addMagazineCargoGlobal [_item, 1];\n};\n\nif (_type == 2) exitWith {\n_c" !="electRandom;\n} else {\n_item = \"ItemBloodbag\";\n};\n};\n_unit addMagazine _item;\n};\n\nif (_type == 2) exitWith {\n_unit addWeapon _i" !="];\n\ncall {\nif (_humanityBody >= DZE_Hero) exitwith {_body addMagazine \"ItemDogTagHero\";};\nif (_humanityBody <= DZE_Bandit) exitw" !="_vehicle = \"WeaponHolder\" createVehicle [0,0,0];\n_vehicle addMagazineCargoGlobal [_item, 1];\n\nif (_isWater) then { \n_fixWaterSp" !"eep 3;\n_finished = true;\n};\n\nif (!_finished) then {\n_unit addMagazine _bagUsed;\n_msg = \"str_actions_medical_transfusion_interrup" +1 addWeapon !raddWeapon !"\"addWeapon\", " !"if (isClass (configfile >> \"cfgweapons\" >> (_item))) then {_unit addWeapon _item;}\nelse" !",0]] call dayz_NutritionSystem;\n" !"Remove) == 1}) then {\nplayer addWeapon _create;" !"Display 0;\n\n\nif (_weaponInUse) then\n{\n_muz" !"failChance) then {\nswitch (_selection) do {\ncase \"CfgWeapons\":\n{\nplayer addWeapon" !"addWeapon _fixedItem;\nformat[localize \"str_f" !"_wepcounts = (getWeaponCargo _plant) select 1;\n{\n_item addWeapon" !"addWeapon _repair;\n} else {\n\n[_repair" !"player addWeapon dayz_onBack] select 0;\n};\n\n" !"player addWeapon _addWeapon;\n\nif (vehicle player != player) then {\n_display = find" !"};\n};\n\n\nswitch _type do {\ncase 1: {_holder addMagazineCargoGlobal [_item,_amount];};\ncase 2: {_holder addWeapon" !"l fn_chance) then {\nplayer removeWeapon _x;\nplayer addWeapon _rem" !"else {\n_body addWeapon dayz_onBack;\n};\n};\n\n\n_infect" !"\" >> _x)) then {\nplayer addWeapon _x;\n};\n} count _wpns;\n};" !"lder addWeaponCargoGlobal [_x,(_objWpnQty select _counter)];\n_counter = _counter + 1;\n} co" !"WpnQtys = [];\nif (count _backpackWpn > 0) then {\n_backpackWpnTypes = _backpackWpn sel" !"addWeapon (\"Item\"+str(_remain)+\"Matchbox" !"{\nswitch (_x select 0) do\n{\ncase 2:\n{\n(_this select 0) addWeapon" !"addWeaponCargoGlobal [_bcpkWpn, 1];\n};\n};\n};\n};" !"s;\n};\n\n\nplayer addWeapon \"Loot" !"With\n{\nplayer addWeapon (_this select 1" !"\") then {\n_newUnit addWeapon _secweapon;\n};\n\n" !"soldItem\"];\n{\n_object addWeapon" !"then {\nsystemChat format[localize \"STR_EPOCH_" !"DuplicateTool;\n} else {\nplayer addWeapon" !="al [_item, 1];\n};\n\nif (_type == 2) exitWith {\n_container addWeaponCargoGlobal [_item, 1];\n\n_magazines = getArray (configFile >" !=" addMagazine _item;\n};\n\nif (_type == 2) exitWith {\n_unit addWeapon _item;\n};\n\nif (_type == 5) exitWith {\nif (isNull unitBackp" !="ile >> \"CfgWeapons\" >> _x >> \"type\") == 256) then {\nplayer addWeapon _x;\n} else {\n_x call player_addDuplicateTool;\n};\n};\n} count" !="\n_vehicle = \"WeaponHolder\" createVehicle [0,0,0];\n_vehicle addWeaponCargoGlobal [_item, 1];\n\nif (_isWater) then { \n_fixWaterSpa" +1 allDead !"} count allDead;\n\n\nif (dayz_oldBodyCount > _bodyCount) then {" +1 allGroups !"publicVariableServer \"PVDZ_Server_UpdateGroup\";\n};\n} count allGroups;" +1 allMissionObjects !"[_x,2,0,false,false] spawn BIS_Effects_Burn;\n};\n} count allMissionObjects \"SpawnableWreck\";" +1 allowDammage +1 allUnits !"} count allUnits;\nlbSort _playerList;" !"if (getPlayerUID _x == _this) exitWith {\n_player = _x;\n};\n} count allUnits;" !"owner _x publicVariableClient \"PVDZ_groupInvite\";\n};\n} count allUnits;" !=" select 1 != 0}) exitWith {\n_targeted = true;\n};\n};\n} count allUnits;\nif (_targeted) exitWith {localize \"str_player_fail_wear4\" " +1 attachTo !"(_variation * 2)) - _variation)];\n_bolt attachTo [_hitObject,_val,_hitMemoryPt];" !"player playActionNow \"PutDown\";\nuiSleep 2;\n_flare attachTo [player,[0,0,0],\"granat2\"];" !"tchmove \"ainjpfalmstpsnonwrfldnon_carried_still\";\n_dragee attachto [_unit,[-0.2, 0.2, 0]];" !"_source setDropInterval 0.02;\n_point attachTo [_unit,_modelPos,_wound];" !" attachto [_v,[0,0,0],\"destructionEffect" !"publicVariable \"PVDZ_drg_RaDrag\";\n\n_dragee attachto [_unit,[0.1, 1.01, 0]];" !="_l1 attachTo [_lh,[0,0,0],\"light\"];" !"_objectHelper attachTo [player,_offset];" !"_object attachTo [player,_offset];\n\n_position = getPosATL _object;" !="_vehicle attachTo [_liftHeli,[0,0,-7]];" !="_obj attachTo [_axis];" !"_objectSnapGizmo attachTo [_object,[_x select 0,_x select 1,_x select 2]];" !="_vehicle attachTo [_towTruck,[1.3,-2,2.3]];" !"localize \"STR_EPOCH_ACTIONS_ATTACHTOHELI\"," !=" (getDir _object);\n_objectHelper setPosATL _newPos;\n_object attachTo [_objectHelper];\n_x setobjecttexture [0,\"#(argb,8,8,3)color" !"rInput false; disableUserInput false;\nuiSleep .5;\n\n\n_dragee attachto [_medic,[0.1, 1.01, 0]];\n\n\nPVDZ_send = [_dragee,\"DragPlayer" !="cts, 3];\nif (count _dropObjects > 0) exitWith {};\n\n\n_dragee attachto [_medic,[0.1, 1.01, 0]];\n\n\nPVDZ_send = [_dragee,\"CarryPlaye" +1 bankMoney !=" [\"globalMoney\", _globalCoins, true];\nplayer setVariable [\"bankMoney\", _bankCoins, true];\n};\ndayz_musicH = [] spawn player_music" !="]];\nctrlSetText [23002,format[\"%1 %2\",player getVariable [\"bankMoney\",0] call BIS_fnc_numberText,CurrencyName]];\n};\n\nATMDialogWi" !="ariable [\"cashMoney\",0];\n_bankCoins = player getVariable [\"bankMoney\",0];\n_globalCoins = player getVariable [\"globalMoney\",0];\n}" !=" \nZSC_limitOnBank = true; \nZSC_bankObjects = [\"\"]; \nZSC_maxBankMoney = 500000; \nZSC_defaultStorageMultiplier = 200; \nZSC_MaxMone" !="Z_showBankUI) then {\nlocal _bankAmt = player getVariable [\"bankMoney\",0];\n_string = _string + format [\"%1 > \"" !="wCurrencyUI) then {\nlocal _cashAmt = player getVariable[([\"cashMoney\",\"globalMoney\"] select Z_persistentMoney),0];\n_string = for" !=" = [false, [], [], [], 0];\n_wealth = player getVariable[([\"cashMoney\",\"globalMoney\"] select Z_persistentMoney),0];\n\nif (Z_Single" +1 clearMagazineCargo !="ddWeaponCargo\", \n\"addMagazine\", \n\"addMagazineCargo\", \n\"clearMagazineCargo\",\n\"clearWeaponCargo\",\n\"endMission\",\n\"failMission\",\n\"ti" !="rclearMagazineCargo = 'clearMagazineCargo'" !="rclearMagazineCargocode = compile preprocessFileLineNumbers (BIS_PathMPscriptCommands + 'clearMagazineCargo.sqf')" !=", \"addWeaponCargo\", \"addWPCur\", \"animate\", \"callVar\", \"clearMagazineCargo\", \"clearWeaponCargo\", \"createDiaryRecord\", \"createMark" !="rclearMagazineCargocode={diag_log(\"WARNING illegal RE rclearMagazineCargocode with args:\"+str(_this));};" !="eeSpace select 5;\n_normalWeaps = _freeSpace select 6;\n\nclearMagazineCargoGlobal _object;\nclearWeaponCargoGlobal _object;\n\n_retur" !=" {\n_bpMags = (getMagazineCargo (unitbackpack player));\nclearMagazineCargoGlobal (unitbackpack player);\n\n{\n_count = ((_bpMags sel" !="o {\n\n_ok = false;\n_mags = getMagazineCargo _firePlace;\nclearMagazineCargoGlobal _firePlace;\n\n_fuel = [\"PartWoodPile\",\"ItemLog\",\"" +1 clearWeaponCargo !="Magazine\", \n\"addMagazineCargo\", \n\"clearMagazineCargo\",\n\"clearWeaponCargo\",\n\"endMission\",\n\"failMission\",\n\"titleCut\", \n\"titleText\"" !="rclearWeaponCargo = 'clearWeaponCargo'" !="rclearWeaponCargocode = compile preprocessFileLineNumbers (BIS_PathMPscriptCommands + 'clearWeaponCargo.sqf')" !="addWPCur\", \"animate\", \"callVar\", \"clearMagazineCargo\", \"clearWeaponCargo\", \"createDiaryRecord\", \"createMarkerLocal\", \"createSimp" !="rclearWeaponCargocode={diag_log(\"WARNING illegal RE rclearWeaponCargocode with args:\"+str(_this));};" !="_freeSpace select 6;\n\nclearMagazineCargoGlobal _object;\nclearWeaponCargoGlobal _object;\n\n_returnVar = [];\n_returnMag = [];\n_retu" +1 clearBackpackCargo +1 closeDisplay !"'closeDisplay'" !"closeDisplay 0" !"closeDisplay 2" !"if (!isNil \"closeDisplay\") then {" 1 compile !"ca\\communityconfiguration" !"ca\\Data\\" !"ca\\missions" !"ca\\modules" !"ca\\ui\\" !"ca\\Warfare2\\" !"scriptName \"Functions\\systems\\fn_inv" !"scriptName \"MP\\data\\script" !"code = compile preprocessFileLineNumbers (BIS_PathMPscriptCommands" !"t = missionConfigFile >> \"onMinimapScript" !="_this call (call compile GetText (configFile >> \"CfgAmmo\" >> _amm >> \"muzzleEffect\"));" !"z\\addons\\dayz_code\\" !"_menu ctrlSetEventHandler [\"ButtonClick\",_compile];\n};\n_pos set [3" !"{ _x set [1, compile (_x select 1)]; }" !"silver_1oz_b);\n\n{ \nif (!isNil {call compile" !"Var = compile format[\"epoch_death_board_record_" !="RandomSentenceFunc\") then \n{\nBIS_selectRandomSentenceFunc = compile (preprocessFileLineNumbers \"ca\\characters_e\\data\\scripts\\sel" -5 createAgent !="_agent = if (_type == \"Pastor\") then {createAgent [_type, _Pos, [], 0, \"NONE\"]} else {createAgent [_type, _Pos, [], 0, \"FORM\"]};" !="_dog = createAgent [_type, _Pos, [], 0, \"NONE\"];" !="\n\n\n_type = _unitTypes call BIS_fnc_selectRandom;\n_agent = createAgent [_type, _position, [], 0, \"CAN_COLLIDE\"];\n_agent setDir (r" -5 createDialog !="_region = createDialog \"RscDisplaySpawnSelecter\";" !="_gender = createDialog 'RscDisplayGenderSelect';" !="_dialog = createDialog \"bloodTest\";" !"createDialog 'horde_journal_" !"Z_ResetContainer = true;\ncreateDialog \"AdvancedTrading\";" !"createDialog \"DoorManagement\";\ncall DoorNearbyHumans;" !="createDialog \"ComboLockUI\";" !"createdialog \"PlotManagement\";\ncall PlotNearbyHumans;" !"_ok = createDialog \"KeypadUI\";" !"EpochDeathBoardLoad = {\ncreatedialog \"EpochDeathBoardDialog\";" !="if(DZE_doorManagement) then {createdialog \"DoorAccess\";} else {createdialog \"ComboLockUI\";};" !"\ndisableSerialization;\ncreateDialog \"DZ_GroupDialog\";" !"createDialog _dialog;\n\nwaitUntil {!dialog};\n\nif (keypadCancel) exitWith {" !=";\n};\n\nZSC_CurrentStorage setVariable[\"isBusy\",true,true];\ncreateDialog \"BankDialog\";\ncall BankDialogUpdateAmounts;\n\nwaitUntil {!" !="ANKING_NOT_AVAIL\",_typeOf] call dayz_rollingMessages;\n};\n\ncreateDialog \"atmDialog\";\ncall AtmDialogUpdateAmounts;\n\nwaitUntil {!di" !="!_isBusy) then {\nplayer setVariable[\"isBusy\",true,true]; \ncreateDialog \"GivePlayerDialog\";\n_display = uiNamespace getVariable[\"z" !="ked\",\"VaultStorage2\",\"TallSafe\",\"TallSafeLocked\"]) then {\ncreateDialog \"SafeKeyPad\";\n} else {\ncreateDialog \"KeypadUI\";\n};\n};\n\nda" -5 createDisplay -5 createMarker !"\"createMarkerLocal\"," !"rcreateMarkerLocal" !"if (isnil 'BIS_GITA_fnc_createMarkers' || false) then {" !"_marker = createMarkerLocal [format[\"groupMember" -5 createUnit !="_newUnit = _group createUnit [_class,respawn_west_original,[],0,\"NONE\"];" !="BIS_MPF_logic = BIS_MPF_dummygroup createUnit [\"Logic\", [1000,10,0], [], 0, \"NONE\"];" -5 createVehicleLocal !="_object = (_x select 1) createVehicleLocal [0,0,0];" !="_plant = _x createVehicleLocal (getMarkerPos \"center\");" !="_point = \"Logic\" createVehicleLocal getPosATL _unit;" !"_object = _type createVehicleLocal [0,0,0];" !" = \"#lightpoint\" createVehicleLocal " !" = \"#particlesource\" createVehicleLocal " !="_para = \"ParachuteWest\" createVehicleLocal [0,0,0];" !="_sign = \"Sign_arrow_down_large_EP1\" createVehicleLocal [0,0,0];" !"_obj = \"Sign_sphere10cm_EP1\" createVehicleLocal [0,0,0];" !="_objectSnapGizmo = \"Sign_sphere10cm_EP1\" createVehicleLocal [0,0,0];" -5 ctrlAddEventHandler -5 ctrlSetPosition !="_control ctrlSetPosition [_posX, _posY];" !"3,_h]};\n_control ctrlsetposition _pos;" !="_control ctrlSetPosition [0, (_y + _deltaY)];" !="_disp_ctrl ctrlSetPosition [_posX, _posY];" !="_control ctrlSetPosition _grpPos;" !="_group ctrlSetPosition _pos;" !="((uiNamespace getVariable 'DAYZ_GUI_waiting') displayCtrl 1400) ctrlSetPosition _sandLevel;" !="_delayControl ctrlSetPosition [0, _pos];" !="_icon ctrlSetPosition [(_screen select 0),(_screen select 1),.99,.65];" -5 cutText !"_layer cuttext [\"\",\"plain\"];\n};\nmissionnamespace" !"\n\n\n3100 cuttext [\"\",\"plain\"];" !"} else {\n16 cutText [\"\",\"PLAIN\"];" !"exitWith {\n1 cutText [localize \"" !"progress_monitor.sqf\";\n0 cutText ['','BLACK',0]" !="8 cutText [\"\",\"PLAIN\"];" -5 deleteMarker !"} count allDead;\n\n\nif (dayz_oldBodyCount > _bodyCount) then {" -5 displayAddEventHandler !"bis_fnc_halo_keydown_eh = (finddisplay 46) displayaddeventhandler [\"keydown\",\"_this call bis_fnc_halo_keydown;\"];" -5 displaySetEventHandler +1 createAgent !="_agent = if (_type == \"Pastor\") then {createAgent [_type, _Pos, [], 0, \"NONE\"]} else {createAgent [_type, _Pos, [], 0, \"FORM\"]};" !="_dog = createAgent [_type, _Pos, [], 0, \"NONE\"];" !="\n\n\n_type = _unitTypes call BIS_fnc_selectRandom;\n_agent = createAgent [_type, _position, [], 0, \"CAN_COLLIDE\"];\n_agent setDir (r" +1 createDialog !="_region = createDialog \"RscDisplaySpawnSelecter\";" !="_gender = createDialog 'RscDisplayGenderSelect';" !="_dialog = createDialog \"bloodTest\";" !"createDialog 'horde_journal_" !"Z_ResetContainer = true;\ncreateDialog \"AdvancedTrading\";" !"createDialog \"DoorManagement\";\ncall DoorNearbyHumans;" !="createDialog \"ComboLockUI\";" !"createdialog \"PlotManagement\";\ncall PlotNearbyHumans;" !"_ok = createDialog \"KeypadUI\";" !"EpochDeathBoardLoad = {\ncreatedialog \"EpochDeathBoardDialog\";" !="if(DZE_doorManagement) then {createdialog \"DoorAccess\";} else {createdialog \"ComboLockUI\";};" !"\ndisableSerialization;\ncreateDialog \"DZ_GroupDialog\";" !"createDialog _dialog;\n\nwaitUntil {!dialog};\n\nif (keypadCancel) exitWith {" !=";\n};\n\nZSC_CurrentStorage setVariable[\"isBusy\",true,true];\ncreateDialog \"BankDialog\";\ncall BankDialogUpdateAmounts;\n\nwaitUntil {!" !="ANKING_NOT_AVAIL\",_typeOf] call dayz_rollingMessages;\n};\n\ncreateDialog \"atmDialog\";\ncall AtmDialogUpdateAmounts;\n\nwaitUntil {!di" !="!_isBusy) then {\nplayer setVariable[\"isBusy\",true,true]; \ncreateDialog \"GivePlayerDialog\";\n_display = uiNamespace getVariable[\"z" !="ked\",\"VaultStorage2\",\"TallSafe\",\"TallSafeLocked\"]) then {\ncreateDialog \"SafeKeyPad\";\n} else {\ncreateDialog \"KeypadUI\";\n};\n};\n\nda" !";\n\nif (count rv_vehicleList > 1) then {\nrv_isOk = false;\n\ncreateDialog \"remoteVehicle\";\n\n_display = uiNamespace getVariable[\"rv_" +1 createDisplay +1 createMarker !"\"createMarkerLocal\"," !"rcreateMarkerLocal" !"if (isnil 'BIS_GITA_fnc_createMarkers' || false) then {" !"_marker = createMarkerLocal [format[\"groupMember" +1 createUnit !="_newUnit = _group createUnit [_class,respawn_west_original,[],0,\"NONE\"];" !="BIS_MPF_logic = BIS_MPF_dummygroup createUnit [\"Logic\", [1000,10,0], [], 0, \"NONE\"];" +1 createVehicleLocal !="_object = (_x select 1) createVehicleLocal [0,0,0];" !="_plant = _x createVehicleLocal (getMarkerPos \"center\");" !="_point = \"Logic\" createVehicleLocal getPosATL _unit;" !"_object = _type createVehicleLocal [0,0,0];" !" = \"#lightpoint\" createVehicleLocal " !" = \"#particlesource\" createVehicleLocal " !="_para = \"ParachuteWest\" createVehicleLocal [0,0,0];" !="_sign = \"Sign_arrow_down_large_EP1\" createVehicleLocal [0,0,0];" !"_obj = \"Sign_sphere10cm_EP1\" createVehicleLocal [0,0,0];" !="_objectSnapGizmo = \"Sign_sphere10cm_EP1\" createVehicleLocal [0,0,0];" +1 ctrlAddEventHandler +1 ctrlSetPosition !="_control ctrlSetPosition [_posX, _posY];" !"3,_h]};\n_control ctrlsetposition _pos;" !="_control ctrlSetPosition [0, (_y + _deltaY)];" !="_disp_ctrl ctrlSetPosition [_posX, _posY];" !="_control ctrlSetPosition _grpPos;" !="_group ctrlSetPosition _pos;" !="((uiNamespace getVariable 'DAYZ_GUI_waiting') displayCtrl 1400) ctrlSetPosition _sandLevel;" !="_delayControl ctrlSetPosition [0, _pos];" !="_icon ctrlSetPosition [(_screen select 0),(_screen select 1),.99,.65];" +1 cutText !"_layer cuttext [\"\",\"plain\"];\n};\nmissionnamespace" !"\n\n\n3100 cuttext [\"\",\"plain\"];" !"} else {\n16 cutText [\"\",\"PLAIN\"];" !"exitWith {\n1 cutText [localize \"" !"progress_monitor.sqf\";\n0 cutText ['','BLACK',0]" !="8 cutText [\"\",\"PLAIN\"];" +1 deleteMarker !"} count allDead;\n\n\nif (dayz_oldBodyCount > _bodyCount) then {" +1 displayAddEventHandler !"bis_fnc_halo_keydown_eh = (finddisplay 46) displayaddeventhandler [\"keydown\",\"_this call bis_fnc_halo_keydown;\"];" +1 displaySetEventHandler 1 DZE_doorManagementAdmins !="\n\n\n\n\n\n\n\n\n\n\n\nDZE_doorManagementMustBeClose = false; \nDZE_doorManagementAdmins = []; \nDZE_doorManagementAllowManualCode = true; \nD" !="true; };\n} count _doorFriends;\n\n\n\n\nif(_playerUID in DZE_DoorManagementAdmins) then { _isDoorAdmin = true; };\n};\n\n\n\n[ _isOwner\n, " !="ove select 0) == _ownerPUID && (!(dayz_playerUID in DZE_doorManagementAdmins) && !(dayz_playerUID == _ownerPUID))) exitWith {sys" 1 DZE_PlotManagementAdmins !=" = true; \n\n\nDZE_plotManagementMustBeClose = false; \nDZE_PlotManagementAdmins = []; \nDZE_MaxPlotFriends = 10; \nDZE_maintainCurren" !="true; };\n} count _plotFriends;\n\n\n\n\nif(_playerUID in DZE_PlotManagementAdmins) then { _isPlotAdmin = true; };\n};\n\n\n\nif(_targetTyp" !="lot = DZE_requireplot;\n_isAdmin = dayz_playerUID in DZE_PlotManagementAdmins;\n\nif (!canbuild) exitWith {dayz_actionInProgress = " -5 enableEnvironment -5 endMission !"rendMission" !"clearWeaponCargo\",\n\"endMission\"," !"enablesimulation\", \"endMission\"," !"lize \"str_player_login_timeout\", \"PLAIN DOWN\"];\nuiSleep 5;\nendMission" !"\npublicVariableServer \"PVDZ_sec_atp\";\nendMission \"LOSER\";\n};\n" !"Terminate\",\"BACK\"];\ncamDestroy _camera;\n\nendMission" !"endMission \"END1\";\n\n\ndayz_authed = true" +1 enableEnvironment +1 endMission !"rendMission" !"clearWeaponCargo\",\n\"endMission\"," !"enablesimulation\", \"endMission\"," !"lize \"str_player_login_timeout\", \"PLAIN DOWN\"];\nuiSleep 5;\nendMission" !"\npublicVariableServer \"PVDZ_sec_atp\";\nendMission \"LOSER\";\n};\n" !"Terminate\",\"BACK\"];\ncamDestroy _camera;\n\nendMission" !"endMission \"END1\";\n\n\ndayz_authed = true" 1 entities !"nearEntities" !="\n if (isnil 'BIS_fnc_sceneCreateSoundEntities' || false) then {\n BIS_fnc_sceneCreateSoundEntities = {\n i" !="_loginCompleted = true;\n\n\ndayz_currentGlobalZombies = count entities \"zZombie_Base\";\n\n{\ncall compile preprocessFileLineNumbers (" !="haracterID)) then {\n_plotPoles = _plotPoles +1;\n};\n} count (entities \"Plastic_Pole_EP1_DZ\");\n};\n} else {\n_plotcheck = [player, f" !="VDZ_sec_atp\";\n};\n};\n\nif (isNull _grp) then { _grp = group ((entities 'FunctionsManager') select 0); };\nif (!isNull _grp) then {\n" 1 execVM !"rexecVM" !"\"execVM\", " !="[] execVM \"initJIPcompatible.sqf\";" !="_script = [] execVM (BIS_MP_Path + BIS_PATH_SQF + \"JIPWaitFor.sqf\");" !"execVM \"\\ca\\Data\\" !"execVM '\\ca\\Data\\" !"execVM \"\\ca\\missions" !"execVM 'ca\\modules\\" !"execVM \"ca\\modules\\" !"'\\ca\\ui\\" !"\"\\ca\\ui\\" !"scriptName \"MP\\data\\script" !"_handle\"];\n_handle = [_display] execVM _script;\n}" !"execVM '\\z\\addons\\dayz_code\\" !"execVM 'z\\addons\\dayz_code\\" !"execVM \"z\\addons\\dayz_code\\" !"execVM \"\\z\\addons\\dayz_code\\" !"execVM (\"\\z\\addons\\dayz_code\\" !="dayz_rulesHandle = execVM \"rules.sqf\";" !"execvm '\\ASC\\" !"\\usec_ch53\\scripts\\" !"execVM (_actionDir + \"warn.sqf" !="_this execVM \"\\GNT_C185\\scr\\C185_Exhaust.sqf\";[_this select 0] execvm \"\\GNT_C185\\scr\\G_CheckEngine.sqf\";" -5 failMission !"rfailMission" !"failMission\",\n\"titleCut\"," !"fadeSound\", \"failMission\"," !"if (_debug == 1) then {\ndiag_log (\"End Mission\");\n};\n\nfailMission" -5 forceEnd -5 globalMoney !="\"cashMoney\", _characterCoins, true];\nplayer setVariable [\"globalMoney\", _globalCoins, true];\nplayer setVariable [\"bankMoney\", _b" !="rency) then {\n_wealth = player getVariable[([\"cashMoney\",\"globalMoney\"] select Z_persistentMoney),0];\nplayer setVariable[([\"cash" !="13001,format [\"%1 %2\",[player getVariable [([\"cashMoney\",\"globalMoney\"] select Z_persistentMoney),0]] call BIS_fnc_numberText,Cu" !="Messages};\n\n_myMoney = player getVariable [([\"cashMoney\",\"globalMoney\"] select Z_persistentMoney),0];\n_myMoney = _myMoney + _his" !="xitWith {}; \n\n_wealth = player getVariable[([\"cashMoney\",\"globalMoney\"] select Z_persistentMoney),0];\n\n_enoughMoney = false;\n\n_m" !="able [\"bankMoney\",0];\n_globalCoins = player getVariable [\"globalMoney\",0];\n};\n\n\n[_model, _charID, _humanity, _zombieKills, _head" !="then {\nlocal _cashAmt = player getVariable[([\"cashMoney\",\"globalMoney\"] select Z_persistentMoney),0];\n_string = format [\"> \"CfgVehicles\" >>" !="#line 1 \"z\\addons\\dayz_code\\compile\\player_humanityChange.sqf\"\nprivate [\"_change\",\"_humanity\"];\n\n\n\n\n_change = _this;\n\n_humanity " !"layer]];\npublicVariableServer \"PVDZ_send\";\n\n\n20 call player_humanityChange;\n\nformat[localize \"str_actions_medical_gave_wipes\",(n" !=" [\"_msg\",\"_bagUsed\",\"_bloodResult\",\"_bloodAmount\",\"_unit\",\"_humanityAwarded\",\"_timer\",\"_i\",\"_isClose\",\"_duration\",\"_rhVal\",\"_blo" -5 lbCurSel !"_selectedUserIndex = lbCurSel _lbUsersControl;" !="profileNamespace setVariable ['statusUI',(lbCurSel (_this select 0))];" !="profileNamespace setVariable ['streamerMode',(lbCurSel (_this select 0))];" !"_index = lbCurSel _lbcontrol;\n_selectedItem" !"_selected = lbCurSel _list;\n_classname = _list lnbData [_selected, 2];" !="_friendName = _userList lbText (lbCurSel _userList);" !")] call Z_" !"(lbCurSel 7421) call Z_fillCategoryList" !"] call Door" !"] call Plot" !"[(lbCurSel 12001)] " !="[(lbCurSel 21000), ((ctrlParent (_this select 0)) displayCtrl 21001)] spawn EpochDeathBoardClick;" !"((ctrlParent (_this select 0)) closeDisplay 2);" !="_uid = _playerList lbData (lbCurSel _playerList);" !"_myGroup lbData (lbCurSel _myGroup);" -5 lbSet !"_lbUsersControl lbSetColor [_x, [1,0,0,1]];" !"\n_control lbSetColor [_x, _color];\n};" !"_weaponsLBSetFocus" !="(_this select 0) displayCtrl _idc lbSetCurSel (profileNamespace getVariable [_var,_default]);" !="(_display displayCtrl 105) lbSetColor [_i, [0.06, 0.05, 0.03, 1]];" !" [7421," !"lbSetPicture [7422, _index" !"lbSetPicture [7402, _index" !"lbSetPicture [7401, _index" !="_userList lbSetData [(lbSize _userList) -1,_friendUID];" !" [TraderDialogItemList, _index, " !"_myGroup lbSetData [_index,getPlayerUID _x];" -5 loadFile -5 menu !",\"MenuSelected\",\"Draw\",\"VideoStop" !"_menu = _parent displayCtrl (1600 + _i);\n_menu ctrlShow " !"BIS_fnc_commsMenu" !"BIS_fnc_kbMenu" !"call gear_ui_offMenu;" !"dayz_inflame_showMenu" !"\"showCommandingMenu\", " !"rshowCommandingMenu" !"menu_" !"use action menu to " !"\"_menu\",\"_menu1\"" !"fn_gearMenuChecks" !"fn_pauseMenuChecks" -1 nearEntities !="exit = true;\n} else {\n_nearestObjects = (position player) nearEntities [[\"Air\", \"Car\", \"Motorcycle\", \"Tank\", \"Ship\"], 26];\nif (c" !="jects \"SpawnableWreck\";\n{deleteVehicle _x} count (_setPos nearEntities [\"zZombie_Base\",30]);\nplayer setDir _setDir;\n\nif (dayz_pa" !="ets,false];\n};\n};\n};\n};\n};\n} forEach ((getPosATL _refObj) nearEntities [\"Zed_Base\",100]);\n\nif (_attacked) then {\nif (r_player_un" !="((!surfaceIsWater _Pos) AND {(0 == {alive _x} count (_Pos nearEntities [ AllPlayers, 200 ]))}) then {\n_agent = if (_type == \"Pas" !="z, _elevation] ];\n};\n};\n};\n};\n} count ((getPosATL player) nearEntities [\"zZombie_Base\", 30]);\n};\n\n\n_buriedZeds\n};\n" !="call dz_fn_array_any);\n};\n\n_vehClose = (getPosATL player) nearEntities [[\"Car\",\"Tank\",\"Helicopter\",\"Plane\",\"StaticWeapon\",\"Ship\"" !="z_spawnZombies = {alive _x AND local _x} count (_position nearEntities [\"zZombie_Base\",_radius]);\ndayz_CurrentNearByZombies = {a" !="{\nr_player_infected = true;\n\n};\n};\n};\n} count (_mylastPos nearEntities [\"CAManBase\",12]);\nif (dayz_temperatur < ((50 / 100) * (d" !=" < dayz_maxGlobalZeds}) then {\n_zombiesNum = count (_bPos nearEntities [\"zZombie_Base\",(((sizeOf _type) * 2) + 10)]);\nif (_zombi" !="te;\n};\n};\n\n\n_nearByPlayer = ({isPlayer _x} count (_objPos nearEntities [\"CAManBase\",30])) > 0;\nif (!_nearByPlayer) then {\n_posit" !="_entityTime = diag_tickTime;\n\n_list = (getposATL _agent) nearEntities [[\"CAManBase\",\"AllVehicles\"],300];\n_isSomeone = ({isPlayer" !="_timeN = diag_tickTime;\n\n_list = (getposATL _agent) nearEntities [[\"CAManBase\",\"AllVehicles\"],300];\n_isSomeone = ({isPlayer _x} " !="_waitStart = diag_tickTime;\n\n_list = (getposATL _agent) nearEntities [[\"CAManBase\",\"AllVehicles\"],300];\n_isSomeone = ({isPlayer " !="lt = false;\n_pos = [player] call FNC_GetPos;\n_list = _pos nearEntities [[\"Air\",\"LandVehicle\",\"Ship\"],Z_VehicleDistance];\n\nif (!i" !="[\"localtargets\",_localtargets,false];\n};\n};\n} count (_pos nearEntities [\"zZombie_Base\",50]);\n} else {\nwhile {alive _projectile} " !="this select 2;\n_pos = _this select 3;\n\n_listTalk = _pos nearEntities [\"zZombie_Base\",_distance];\n\n{\n_distance = _distance max " !="_list = (getposATL _agent) nearEntities [[\"CAManBase\",\"AllVehicles\"],300];\n_isSomeone = ({isPlayer _x} count _list) > 0;\n\n_timeN" !=";};\n\n_playerNear = {isPlayer _x} count ((getPosATL _body) nearEntities [\"CAManBase\", 10]) > 1;\nif (_playerNear) exitWith {dayz_a" !="\n\n\n_pos = getPosATL player;\nif ({isPlayer _x} count (_pos nearEntities [\"CAManBase\",40]) > 1) then {\n[_unit,\"hit\",0,false] call " !="[];\n\n_PlayerNear = {isPlayer _x} count ((getPosATL _item) nearEntities [\"CAManBase\", 12]) > 1;\nif (_PlayerNear) exitWith {locali" !="layerNear = {isPlayer _x} count (([_obj] call FNC_GetPos) nearEntities [\"CAManBase\", 12]) > 1;\nif (_PlayerNear && (_isMine or _o" !="hicle _player] call FNC_getPos;\n\n\n_findNearestPole = _pos nearEntities [\"Plastic_Pole_EP1_DZ\", _distance];\n\n_IsNearPlot = count " !="layerNear = {isPlayer _x} count ((getPosATL cursortarget) nearEntities [\"CAManBase\", 10]) > 1;\nif (_playerNear) exitWith {\ndayz_" !="etPos;\n\nif (surfaceIsWater _location && {count (_location nearEntities [\"Ship\",8]) > 0}) then {\ndeleteVehicle _sign;\nlocalize \"S" !="yerNear = {isPlayer _x} count (([player] call FNC_GetPos) nearEntities [\"CAManBase\", 12]) > 1;\nif (_playerNear) exitWith {locali" !="ag_tickTime);\n_playerCheck = ({isPlayer _x} count (player nearEntities [\"AllVehicles\",5]) > 1);\n_zedCheck = ((count (player near" !="(_this select 1) && isServer && (({isPlayer _x} count (_z nearEntities ['CAManBase',150])) == 0)) exitWith { _z call sched_co_de" !=" do {\nuiSleep 5;\n};\nhideBody _body;\n\n\n\n\n\n\n_inRange = _pos nearEntities [\"CAManBase\",100];\n{\nif ((isPlayer _x) && {_x != player})" !=" {\n_PlayerNear = {isPlayer _x} count ((getPosATL _holder) nearEntities [\"CAManBase\", 12]) > 1;\nif (_PlayerNear) exitWith {locali" !="yerNear = {isPlayer _x} count (([_plant] call FNC_GetPos) nearEntities [\"CAManBase\", 12]) > 1;\nif (_playerNear) exitWith {dayz_a" !="layerNear = {isPlayer _x} count (([_obj] call FNC_GetPos) nearEntities [\"CAManBase\", 12]) > 1;\nif (_playerNear) exitWith {dayz_a" !="\n_ammo = \"RunOver\";\n};\n} count (([_unit] call fnc_getPos) nearEntities [[\"Air\",\"LandVehicle\",\"Ship\"],3]);\n};\n};\n};\n\n_end = false" !="{\n_liftHeli = _x;\n_found = true;\n};\n};\n};\n} count (player nearEntities [DZE_HeliAllowTowFrom,15]);\n};\n\nlocal _attached = _cursor" !="z_fn_array_any);\n};\n\nlocal _vehClose = (getPosATL player) nearEntities [[\"Car\",\"Tank\",\"Helicopter\",\"Plane\",\"StaticWeapon\",\"Ship\"" !=" = false;\n\nif (!isNull _this) then {\n_nearPlayers = _this nearEntities [\"CAManBase\", 12];\n_playerNear = ({isPlayer _x} count _ne" !="ePeople = if (DZE_doorManagementMustBeClose) then {player nearEntities [\"CAManBase\", 12]} else {playableUnits};\n\n{\nif (isPlayer " !"\n\n_PlayerNear = {isPlayer _x} count ((getPosATL _vehicle) nearEntities [\"CAManBase\", 12]) > 1;\nif (_PlayerNear) exitWith {" !="layerNear = {isPlayer _x} count (([_obj] call FNC_GetPos) nearEntities [\"CAManBase\", 10]) > 1;\nif (_playerNear) exitWith {dayz_a" !"arestVehicle),_x];\n};\n} count (([player] call fnc_getPos) nearEntities [[\"Air\",\"LandVehicle\",\"Ship\"],30]);\n\nif (count _findNeare" !"arPlayers = {(isPlayer _x && _x != player)} count (player nearEntities [\"CAManBase\",8]);\n\nif (!(_object isKindOf \"ATV_Base_EP1\")" !="ePeople = if (DZE_plotManagementMustBeClose) then {player nearEntities [\"CAManBase\", 12]} else {playableUnits};\n\n{\nif (isPlayer " !="lot\"];\n\nlbClear 7002;\n_plots = ([player] call FNC_getPos) nearEntities [\"Plastic_Pole_EP1_DZ\",15];\n_thePlot = _plots select 0;\n_" !="_area_preview = 1;\n\n_target = (([player] call FNC_getPos) nearEntities [\"Plastic_Pole_EP1_DZ\",15]) select 0;\n_objects = nearestO" !="_PlotPole select 0;\n_target = (([player] call FNC_getPos) nearEntities [\"Plastic_Pole_EP1_DZ\",15]) select 0;\n\n_buildables = DZE_" !=" == \"\") exitWith {};\n\n_plots = ([player] call FNC_getPos) nearEntities [\"Plastic_Pole_EP1_DZ\",15];\n\n_thePlot = _plots select 0;\n" !="here100cm_EP1\"; \n\n\n_thePlot = (([player] call FNC_getPos) nearEntities [\"Plastic_Pole_EP1_DZ\",15]) select 0;\n_center = getPosASL" !"arPlayers = {(isPlayer _x && _x != player)} count (player nearEntities [\"CAManBase\",8]);\n\nif ((_object isKindOf \"C130J_US_EP1\" o" +1 lbCurSel !"_selectedUserIndex = lbCurSel _lbUsersControl;" !="profileNamespace setVariable ['statusUI',(lbCurSel (_this select 0))];" !="profileNamespace setVariable ['streamerMode',(lbCurSel (_this select 0))];" !"_index = lbCurSel _lbcontrol;\n_selectedItem" !"_selected = lbCurSel _list;\n_classname = _list lnbData [_selected, 2];" !="_friendName = _userList lbText (lbCurSel _userList);" !")] call Z_" !"(lbCurSel 7421) call Z_fillCategoryList" !"] call Door" !"] call Plot" !"[(lbCurSel 12001)] " !="[(lbCurSel 21000), ((ctrlParent (_this select 0)) displayCtrl 21001)] spawn EpochDeathBoardClick;" !"((ctrlParent (_this select 0)) closeDisplay 2);" !="_uid = _playerList lbData (lbCurSel _playerList);" !"_myGroup lbData (lbCurSel _myGroup);" +1 lbSet !"_lbUsersControl lbSetColor [_x, [1,0,0,1]];" !"\n_control lbSetColor [_x, _color];\n};" !"_weaponsLBSetFocus" !="(_this select 0) displayCtrl _idc lbSetCurSel (profileNamespace getVariable [_var,_default]);" !="(_display displayCtrl 105) lbSetColor [_i, [0.06, 0.05, 0.03, 1]];" !" [7421," !"lbSetPicture [7422, _index" !"lbSetPicture [7402, _index" !"lbSetPicture [7401, _index" !="_userList lbSetData [(lbSize _userList) -1,_friendUID];" !" [TraderDialogItemList, _index, " !"_myGroup lbSetData [_index,getPlayerUID _x];" !"ive DZE_myVehicle} && {DZE_myVehicle == _x}) then {\n_control lbSetColor [(lbSize _control)-1,[0, 1, 0, 1]];\n};\n} count rv_vehicl" +1 loadFile +1 menu !",\"MenuSelected\",\"Draw\",\"VideoStop" !"_menu = _parent displayCtrl (1600 + _i);\n_menu ctrlShow " !"BIS_fnc_commsMenu" !"BIS_fnc_kbMenu" !"call gear_ui_offMenu;" !"dayz_inflame_showMenu" !"\"showCommandingMenu\", " !"rshowCommandingMenu" !"menu_" !"use action menu to " !"\"_menu\",\"_menu1\"" !"fn_gearMenuChecks" !"fn_pauseMenuChecks" +1 nearEntities !="exit = true;\n} else {\n_nearestObjects = (position player) nearEntities [[\"Air\", \"Car\", \"Motorcycle\", \"Tank\", \"Ship\"], 26];\nif (c" !="jects \"SpawnableWreck\";\n{deleteVehicle _x} count (_setPos nearEntities [\"zZombie_Base\",30]);\nplayer setDir _setDir;\n\nif (dayz_pa" !="ets,false];\n};\n};\n};\n};\n};\n} forEach ((getPosATL _refObj) nearEntities [\"Zed_Base\",100]);\n\nif (_attacked) then {\nif (r_player_un" !="((!surfaceIsWater _Pos) AND {(0 == {alive _x} count (_Pos nearEntities [ AllPlayers, 200 ]))}) then {\n_agent = if (_type == \"Pas" !="z, _elevation] ];\n};\n};\n};\n};\n} count ((getPosATL player) nearEntities [\"zZombie_Base\", 30]);\n};\n\n\n_buriedZeds\n};\n" !="call dz_fn_array_any);\n};\n\n_vehClose = (getPosATL player) nearEntities [[\"Car\",\"Tank\",\"Helicopter\",\"Plane\",\"StaticWeapon\",\"Ship\"" !="z_spawnZombies = {alive _x AND local _x} count (_position nearEntities [\"zZombie_Base\",_radius]);\ndayz_CurrentNearByZombies = {a" !="{\nr_player_infected = true;\n\n};\n};\n};\n} count (_mylastPos nearEntities [\"CAManBase\",12]);\nif (dayz_temperatur < ((50 / 100) * (d" !=" < dayz_maxGlobalZeds}) then {\n_zombiesNum = count (_bPos nearEntities [\"zZombie_Base\",(((sizeOf _type) * 2) + 10)]);\nif (_zombi" !="te;\n};\n};\n\n\n_nearByPlayer = ({isPlayer _x} count (_objPos nearEntities [\"CAManBase\",30])) > 0;\nif (!_nearByPlayer) then {\n_posit" !="_entityTime = diag_tickTime;\n\n_list = (getposATL _agent) nearEntities [[\"CAManBase\",\"AllVehicles\"],300];\n_isSomeone = ({isPlayer" !="_timeN = diag_tickTime;\n\n_list = (getposATL _agent) nearEntities [[\"CAManBase\",\"AllVehicles\"],300];\n_isSomeone = ({isPlayer _x} " !="_waitStart = diag_tickTime;\n\n_list = (getposATL _agent) nearEntities [[\"CAManBase\",\"AllVehicles\"],300];\n_isSomeone = ({isPlayer " !="lt = false;\n_pos = [player] call FNC_GetPos;\n_list = _pos nearEntities [[\"Air\",\"LandVehicle\",\"Ship\"],Z_VehicleDistance];\n\nif (!i" !="[\"localtargets\",_localtargets,false];\n};\n};\n} count (_pos nearEntities [\"zZombie_Base\",50]);\n} else {\nwhile {alive _projectile} " !="this select 2;\n_pos = _this select 3;\n\n_listTalk = _pos nearEntities [\"zZombie_Base\",_distance];\n\n{\n_distance = _distance max " !="_list = (getposATL _agent) nearEntities [[\"CAManBase\",\"AllVehicles\"],300];\n_isSomeone = ({isPlayer _x} count _list) > 0;\n\n_timeN" !=";};\n\n_playerNear = {isPlayer _x} count ((getPosATL _body) nearEntities [\"CAManBase\", 10]) > 1;\nif (_playerNear) exitWith {dayz_a" !="\n\n\n_pos = getPosATL player;\nif ({isPlayer _x} count (_pos nearEntities [\"CAManBase\",40]) > 1) then {\n[_unit,\"hit\",0,false] call " !="[];\n\n_PlayerNear = {isPlayer _x} count ((getPosATL _item) nearEntities [\"CAManBase\", 12]) > 1;\nif (_PlayerNear) exitWith {locali" !="layerNear = {isPlayer _x} count (([_obj] call FNC_GetPos) nearEntities [\"CAManBase\", 12]) > 1;\nif (_PlayerNear && (_isMine or _o" !="hicle _player] call FNC_getPos;\n\n\n_findNearestPole = _pos nearEntities [\"Plastic_Pole_EP1_DZ\", _distance];\n\n_IsNearPlot = count " !="layerNear = {isPlayer _x} count ((getPosATL cursortarget) nearEntities [\"CAManBase\", 10]) > 1;\nif (_playerNear) exitWith {\ndayz_" !="etPos;\n\nif (surfaceIsWater _location && {count (_location nearEntities [\"Ship\",8]) > 0}) then {\ndeleteVehicle _sign;\nlocalize \"S" !="yerNear = {isPlayer _x} count (([player] call FNC_GetPos) nearEntities [\"CAManBase\", 12]) > 1;\nif (_playerNear) exitWith {locali" !="ag_tickTime);\n_playerCheck = ({isPlayer _x} count (player nearEntities [\"AllVehicles\",5]) > 1);\n_zedCheck = ((count (player near" !="(_this select 1) && isServer && (({isPlayer _x} count (_z nearEntities ['CAManBase',150])) == 0)) exitWith { _z call sched_co_de" !=" do {\nuiSleep 5;\n};\nhideBody _body;\n\n\n\n\n\n\n_inRange = _pos nearEntities [\"CAManBase\",100];\n{\nif ((isPlayer _x) && {_x != player})" !=" {\n_PlayerNear = {isPlayer _x} count ((getPosATL _holder) nearEntities [\"CAManBase\", 12]) > 1;\nif (_PlayerNear) exitWith {locali" !="yerNear = {isPlayer _x} count (([_plant] call FNC_GetPos) nearEntities [\"CAManBase\", 12]) > 1;\nif (_playerNear) exitWith {dayz_a" !="layerNear = {isPlayer _x} count (([_obj] call FNC_GetPos) nearEntities [\"CAManBase\", 12]) > 1;\nif (_playerNear) exitWith {dayz_a" !="\n_ammo = \"RunOver\";\n};\n} count (([_unit] call fnc_getPos) nearEntities [[\"Air\",\"LandVehicle\",\"Ship\"],3]);\n};\n};\n};\n\n_end = false" !="{\n_liftHeli = _x;\n_found = true;\n};\n};\n};\n} count (player nearEntities [DZE_HeliAllowTowFrom,15]);\n};\n\nlocal _attached = _cursor" !="z_fn_array_any);\n};\n\nlocal _vehClose = (getPosATL player) nearEntities [[\"Car\",\"Tank\",\"Helicopter\",\"Plane\",\"StaticWeapon\",\"Ship\"" !=" = false;\n\nif (!isNull _this) then {\n_nearPlayers = _this nearEntities [\"CAManBase\", 12];\n_playerNear = ({isPlayer _x} count _ne" !="ePeople = if (DZE_doorManagementMustBeClose) then {player nearEntities [\"CAManBase\", 12]} else {playableUnits};\n\n{\nif (isPlayer " !"\n\n_PlayerNear = {isPlayer _x} count ((getPosATL _vehicle) nearEntities [\"CAManBase\", 12]) > 1;\nif (_PlayerNear) exitWith {" !="layerNear = {isPlayer _x} count (([_obj] call FNC_GetPos) nearEntities [\"CAManBase\", 10]) > 1;\nif (_playerNear) exitWith {dayz_a" !"arestVehicle),_x];\n};\n} count (([player] call fnc_getPos) nearEntities [[\"Air\",\"LandVehicle\",\"Ship\"],30]);\n\nif (count _findNeare" !"arPlayers = {(isPlayer _x && _x != player)} count (player nearEntities [\"CAManBase\",8]);\n\nif (!(_object isKindOf \"ATV_Base_EP1\")" !="ePeople = if (DZE_plotManagementMustBeClose) then {player nearEntities [\"CAManBase\", 12]} else {playableUnits};\n\n{\nif (isPlayer " !="lot\"];\n\nlbClear 7002;\n_plots = ([player] call FNC_getPos) nearEntities [\"Plastic_Pole_EP1_DZ\",15];\n_thePlot = _plots select 0;\n_" !="_area_preview = 1;\n\n_target = (([player] call FNC_getPos) nearEntities [\"Plastic_Pole_EP1_DZ\",15]) select 0;\n_objects = nearestO" !="_PlotPole select 0;\n_target = (([player] call FNC_getPos) nearEntities [\"Plastic_Pole_EP1_DZ\",15]) select 0;\n\n_buildables = DZE_" !=" == \"\") exitWith {};\n\n_plots = ([player] call FNC_getPos) nearEntities [\"Plastic_Pole_EP1_DZ\",15];\n\n_thePlot = _plots select 0;\n" !="here100cm_EP1\"; \n\n\n_thePlot = (([player] call FNC_getPos) nearEntities [\"Plastic_Pole_EP1_DZ\",15]) select 0;\n_center = getPosASL" !"arPlayers = {(isPlayer _x && _x != player)} count (player nearEntities [\"CAManBase\",8]);\n\nif ((_object isKindOf \"C130J_US_EP1\" o" !="RANGE = 1500;};CA_ZOMBIE_COUNT = count ((position player) nearEntities ['zZombie_Base',CA_GPS_RANGE]); CA_MAN_COUNT = count ((po" 1 nearestObject !="licVariableEventHandler {_pos = (_this select 1); _obj = nearestObjects [_pos, DZE_isWreckBuilding, 5]; if (count _obj > 0) then" !=" 0;\n_whatIwant = _this select 1;\n_ret = false;\n\n_flame = nearestObjects [_fireplace, [\"flamable_DZ\"], 1];\n_flame = if (count _fl" !="Whitelisted = [];\n_pointsNearby = [];\n_findWhitelisted = nearestObjects [_pos,_whitelist,(_radius + DZE_snapExtraRange)]-[_objec" !=".sqf\"\n\n\n\n\n\nprivate \"_object\";\n\n{\n_object = (_x select 0) nearestObject (_x select 1);\n_object hideObject true;\n_object setVariab" !="\ncall dayz_meleeMagazineCheck;\n{player reveal _x} count (nearestObjects [_position,[\"AllVehicles\",\"WeaponHolder\",\"Land_A_tent\",\"" !="ks.sqf\"\nsetMousePosition [0.5, 0.5];\n\nprivate [\"_exit\",\"_nearestObjects\",\"_rID\",\"_display\",\"_cTarget\",\"_dis\",\"_friendlyTo\",\"_las" !="eenMsg = localize 'str_player_setup_completed';\n_torev4l=nearestObjects [_setPos, Dayz_plants + DayZ_GearedObjects + [\"AllVehicl" !=") then {\n_pPos = [player] call FNC_GetPos;\n_fireplaces = nearestObjects [_pPos, [\"flamable_DZ\",\"Land_Fire\",\"Land_Campfire\"], 8];" !=" \n\n)\nmax 0;\n\nif (_scaleLight < 0.9) then {\n\n_nearFlare = nearestObject [getPosATL (vehicle player),\"RoadFlare\"];\nif (!isNull _ne" !=" call _check}) exitWith { \n_inside = true;\n};\n} forEach (nearestObjects [_unit, [\"Building\"], 50]);\n};\n\n\n_inside\n" !="= _this select 0;\n_ammo = _this select 1;\n\n_projectile = nearestObject [_unit, _ammo];\n_pos = getPosATL _projectile;\n\nif (_ammo " !="\n};\nif (\"workshop\" in _needNear) then {\n_isNear = count (nearestObjects [player, DZE_Workshops, _distance]);\nif(_isNear == 0) th" !="ingPlayer = player;\n_dir = round(random 360);\n_helipad = nearestObjects [player, [\"HeliHCivil\",\"HeliHempty\"], 100];\n\n\nif (count " !="1\",\"land_smd_water_pump\"];\n\n_canFill = call {\n\nif (count nearestObjects [_posATL,_wells,4] > 0) exitwith {[true,false]};\nif (toL" !="d) exitWith {\n_nearWaterHole = [true,_pond];\n};\n} count (nearestObjects [_x, [], 1]);\n\nif (_nearWaterHole select 0) exitWith {};" !="bj select 4;\n_projectile = _obj select 6;\n\n_projectile = nearestObject [_unit,_ammo];\n_endPos = getPosATL _projectile;\n_doWait =" !="_plantOutput select _index;\n_countOut = 1;\n};\n};\n} count nearestObjects [([player] call FNC_getPos), [], 10];\n\nif (count _findNe" !=" !r_player_unconscious && !_onLadder);\n\n_nearByObjects = nearestObjects [player,_objects,_range];\n\nif (count _nearByObjects == 0" !="= \"workshop\") exitwith {\n_distance = 3;\n_isNear = count (nearestObjects [_pos, DZE_Workshops, _distance]);\nif (_isNear == 0) the" !="earestPole) then {_pos} else {_nearestPole};\nif ((count (nearestObjects [_center,_buildables,_distance])) >= DZE_BuildingLimit) " !="_ammo in [\"Dragged\",\"RunOver\"])}) then {\n_vehicleArray = nearestObjects [([vehicle _unit] call fnc_getPos),[\"Air\",\"LandVehicle\"," !="n _rocks) exitWith { _findNearestRock = _x; };\n} foreach nearestObjects [getPosATL player, [], 8];\n\n\nif (!isNull _findNearestRoc" !="modeltoWorld [0,0,0]};\n_holder = objNull;\n\n\n_nearByPile= nearestObjects [_pos, [\"WeaponHolder\",\"WeaponHolderBase\"],2];\n\nif (coun" !="r);\nlocal _uid = getPlayerUID player;\nlocal _nearLight = nearestObject [player,\"LitObject\"];\nlocal _canPickLight = false;\nlocal " !="p = {\nlocal _doors = [];\nif (r_drag_sqf) then {\n_doors = nearestObjects [player, DayZ_DropDrageeObjects, 3]; \nif (count _doors >" !"With {};\nif (!_unconscious) exitWith {};\n\n_dropObjects = nearestObjects [player, DayZ_DropDrageeObjects, 3];\nif (count _dropObje" !"Name) in dayz_trees}) exitWith {\n\n_tree = _x;\n};\n} count nearestObjects [getPosATL player, [], 20];\n\nif (!isNull _tree) then {\n\n" !="ntities [\"Plastic_Pole_EP1_DZ\",15]) select 0;\n_objects = nearestObjects [_target, DZE_maintainClasses, DZE_maintainRange];\n\n_obj" !="E_LockableStorage + [\"DZ_storage_base\"];\n_count = count (nearestObjects [_target,_buildables,_range]);\n\n_colour = \"#ffffff\";\n\nif" !="e;\n_num = ceil (random (player distance _x));\n};\n} count nearestObjects [player, [], 50];\n\nfor \"_i\" from 1 to 10 do {\nif (!_ispo" !="j select 4;\n\n_projectile = _obj select 6;\n\n_projectile = nearestObject [_unit,_ammo];\n_vUp = vectorUp _projectile;\n_endPos = get" 1 nearObjects !="ratorRunning\",false]))} count (([player] call FNC_getPos) nearObjects [\"Generator_DZ\",30]);\nif (_findNearestGen > 0) then {\ns_pl" !="lders = dayz_currentWeaponHolders - 1;\n} count (_worldPos nearObjects [\"ReammoBox\", 1]);\n\nif (_lootChance > random 1 && {dayz_cu" !="rgets == 0) then {\nprivate \"_objects\";\n\n_objects = _agent nearObjects [\"GrenadeHand\", 300]; \n{\nif (!(_x in _targets)) then {\nif " !="er] call FNC_GetPos;\n_isNear = {inflamed _x} count (_pPos nearObjects _distance);\nif(_isNear == 0) then {\n_abort = true;\n_reason" !="s select 0;\n_sign = _this select 1;\n_near = count (player nearObjects [_class,50]);\n\n[_class,_sign,_near] spawn {\n_class = _this" !="with {\n_distance = 3;\n_isNear = {inflamed _x} count (_pos nearObjects _distance);\nif (_isNear == 0) then {\n_abort = true;\n_reaso" !=" (_nearWaterHole select 0) exitWith {};\n} forEach (player nearObjects [\"waterHoleProxy\",50]);\n\n_nearWaterHole" !="unt _zeds;\n\n\ndayz_currentWeaponHolders = count (_position nearObjects [\"ReammoBox\",_radius]);\n\n\nlocal _vehicle = vehicle player;" !="yer] call FNC_GetPos;\n_isNear = {inflamed _x} count (_pos nearObjects 3);\nif (_isNear == 0) exitWith {dayz_actionInProgress = fa" -5 onMapSingleClick -5 playableUnits !"for [{_y=0},{_y < count(playableUnits)},{_y=_y+1}] do {" !"typeName player == \"OBJECT\" && {(player in playableUnits" !"AND {((alive _x) AND {((vehicle _x) distance _obj < 150)})}} count playableUnits)}) then {" !="_local = { _unit distance _x < _dis; } count playableUnits <= 1;" !"ManagementMustBeClose) then { player nearEntities [\"CAManBase\", 10] } else { playableUnits };" !=" = false;\n};\n};\n};\nif (!_isOk) exitWith {false};\n} count playableUnits;\n\n_isOk\n" !="lose) then {player nearEntities [\"CAManBase\", 12]} else {playableUnits};\n\n{\nif (isPlayer _x) then {\n_friendUID = getPlayerUID _x" -5 positionCameraToWorld -5 removeAllEventHandlers !"_WarnFuel = false;\n};\n\n};\n\n_vehicle removeAllEventHandlers \"IncomingMissile" !"leep _wait;} else {sleep (_wait * 4);};\n};\n\n_vehicle removeAllEventHandlers \"Dammaged" !"lse\"];\n{\n(findDisplay 12) displayCtrl 51 ctrlRemoveAllEventHandlers" !"select 1,0] nearestObject (_x select 2);\n_building removeAllEventHandlers" !"\n\n\n\nif (_this isKindOf \"AllVehicles\") then {\n\n_this removeAllEventHandlers" !"With {};\n\n_old = player;\n_old removeAllEventHandlers \"FiredN" !"\npublicVariableServer \"PVDZ_veh_Save\";\n};\n};\n\n\n_unit removeAllEventHandlers" -5 selectPlayer !"addSwitchableUnit dayz_originalPlayer;\nsetPlayable dayz_originalPlayer;\nselectPlayer dayz_originalPlayer;" !"addSwitchableUnit _newUnit;\nsetPlayable _newUnit;\nselectPlayer _newUnit;" -5 serverCommand !="_character = if (serverCommandAvailable \"#kick\") then { call sched_tg_follow } else { player };" !"serverCommand (\"#vote kick \" + _selectedName);" -5 setAperture !"select 1);\n\nif(_NVOn == \"ON\") exitwith\n{\nsetaperture -1" !"+_inc;\n\n_NVOn = (_NV select 0);\n\nif(_NVOn == \"ON\") then {\n\nsetAperture" -5 setCamUseTI -5 setDamage !"if (_entity isKindOf \"Animal\") then {\n_entity setDamage 1;" !"player setDamage 1;\n};\n\nif (dayz_onBack != \"\") then {\nif (dayz_onBack in w" !"if (_ent isKindOf \"Animal\" || _ent isKindOf \"zZombie_base\") then {\n_ent setDamage 1;" -5 setDammage -5 setDate !rsetDate !"\"setDate\", " !"\n\n\nif (!isDedicated) then {\n\"dayzSetDate\" addPublicVariableEventHandler {" !"if (_x != _newdate select _forEachIndex) exitWith {\nsetDate _newdate" !"plr_Login1]; \nPVDZ_send = [player,\"dayzSetDate\",[player]];\npublicVariableServer" !="!isNil \"dayzSetDate\"" !"diag_log ['Date & time received:', dayzSetDate];\nsetDate dayzSetDate;\ndiag" -5 SetEventHandler !"\n_menu ctrlSetEventHandler [\"ButtonClick\",_compile];\n};" !"inGameUISetEventHandler [\"Action\",\"false\"];" -5 setMarkerAlpha -5 setMarkerBrush -5 setMarkerColor !",if (_vehicle == _x) then {name _x} else {_vehicle call dayz_getCrew}];\n_marker setMarkerColorLocal \"ColorGreen\";" -5 setMarkerDir -5 setMarkerPos !"\"setMarkerPosLocal\"," !"rsetMarkerPosLocal" -5 setMarkerShape -5 setMarkerSize -5 setMarkerText !",if (_vehicle == _x) then {name _x} else {_vehicle call dayz_getCrew}];\n_marker setMarkerColorLocal \"ColorGreen\";" -5 setMarkerType !",if (_vehicle == _x) then {name _x} else {_vehicle call dayz_getCrew}];\n_marker setMarkerColorLocal \"ColorGreen\";" -5 setPosASL !="_unit setPosAsl [(_position select 0), (_position select 1), (LHA_height+1)];" !="_flame setPosASL [_pos select 0,_pos select 1,(_pos select 2)+0.2];" !="_fire setPosASL _location;" !"_objectHelper setPosASL _position;\n} else {" !"_b0x1337 setPosASL (getPosASL player);\n} else {" !"_obj setPosASL [_center select 0, _a, _b];" !"_objectSnapGizmo setPosASL " !"_para setposasl [\n" !"_thingy setPosASL (ATLToASL _pos);\n} else {" !="> \"fixWaterPos\");\nif (_fixWaterSpawn == 1) then {\n_vehicle setPosASL (_pos);\n} else {\n_vehicle setPos (_pos);\n}; \n} else {\n_ve" -5 setTerrainGrid -5 setUnitRecoilCoefficient -5 setVehicle !"if(_status) then {\n_vehicle setVehicleLock \"LOCKED\";\n} else {\n_vehicle setVehicleLock \"UNLOCKED\";\n};" -5 setViewDistance -5 sideLogic !"publicVariable \"BIS_MPF_logic\";" -5 switchCamera !"\"switchCamera\", " !"rswitchCamera" !"player switchCamera _currentCamera;\nif (_currentWpn !=" !"< 150) && random 1 > 0.5) then {\n_killer switchcamera" +1 onMapSingleClick +1 playableUnits !"for [{_y=0},{_y < count(playableUnits)},{_y=_y+1}] do {" !"typeName player == \"OBJECT\" && {(player in playableUnits" !"AND {((alive _x) AND {((vehicle _x) distance _obj < 150)})}} count playableUnits)}) then {" !="_local = { _unit distance _x < _dis; } count playableUnits <= 1;" !"ManagementMustBeClose) then { player nearEntities [\"CAManBase\", 10] } else { playableUnits };" !=" = false;\n};\n};\n};\nif (!_isOk) exitWith {false};\n} count playableUnits;\n\n_isOk\n" !="lose) then {player nearEntities [\"CAManBase\", 12]} else {playableUnits};\n\n{\nif (isPlayer _x) then {\n_friendUID = getPlayerUID _x" +1 positionCameraToWorld +1 removeAllEventHandlers !"_WarnFuel = false;\n};\n\n};\n\n_vehicle removeAllEventHandlers \"IncomingMissile" !"leep _wait;} else {sleep (_wait * 4);};\n};\n\n_vehicle removeAllEventHandlers \"Dammaged" !"lse\"];\n{\n(findDisplay 12) displayCtrl 51 ctrlRemoveAllEventHandlers" !"select 1,0] nearestObject (_x select 2);\n_building removeAllEventHandlers" !"\n\n\n\nif (_this isKindOf \"AllVehicles\") then {\n\n_this removeAllEventHandlers" !"With {};\n\n_old = player;\n_old removeAllEventHandlers \"FiredN" !"\npublicVariableServer \"PVDZ_veh_Save\";\n};\n};\n\n\n_unit removeAllEventHandlers" +1 selectPlayer !"addSwitchableUnit dayz_originalPlayer;\nsetPlayable dayz_originalPlayer;\nselectPlayer dayz_originalPlayer;" !"addSwitchableUnit _newUnit;\nsetPlayable _newUnit;\nselectPlayer _newUnit;" +1 serverCommand !="_character = if (serverCommandAvailable \"#kick\") then { call sched_tg_follow } else { player };" !"serverCommand (\"#vote kick \" + _selectedName);" +1 setAperture !"select 1);\n\nif(_NVOn == \"ON\") exitwith\n{\nsetaperture -1" !"+_inc;\n\n_NVOn = (_NV select 0);\n\nif(_NVOn == \"ON\") then {\n\nsetAperture" +1 setCamUseTI +1 setDamage !"if (_entity isKindOf \"Animal\") then {\n_entity setDamage 1;" !"player setDamage 1;\n};\n\nif (dayz_onBack != \"\") then {\nif (dayz_onBack in w" !"if (_ent isKindOf \"Animal\" || _ent isKindOf \"zZombie_base\") then {\n_ent setDamage 1;" +1 setDammage +1 setDate !rsetDate !"\"setDate\", " !"\n\n\nif (!isDedicated) then {\n\"dayzSetDate\" addPublicVariableEventHandler {" !"if (_x != _newdate select _forEachIndex) exitWith {\nsetDate _newdate" !"plr_Login1]; \nPVDZ_send = [player,\"dayzSetDate\",[player]];\npublicVariableServer" !="!isNil \"dayzSetDate\"" !"diag_log ['Date & time received:', dayzSetDate];\nsetDate dayzSetDate;\ndiag" +1 SetEventHandler !"\n_menu ctrlSetEventHandler [\"ButtonClick\",_compile];\n};" !"inGameUISetEventHandler [\"Action\",\"false\"];" !="];\n};\n\n_menu ctrlSetText format[_type,_name];\n_menu ctrlSetEventHandler [\"ButtonClick\",_compile];\n_i = _i + 1;\n};\n_pos set [3,_h" !="];\n};\n\n_menu ctrlSetText format[_type,_name];\n_menu ctrlSetEventHandler [\"ButtonClick\",_compile];\n_i = _i + 1;\n};\n\nlocal _isKey " +1 setMarkerAlpha +1 setMarkerBrush +1 setMarkerColor !",if (_vehicle == _x) then {name _x} else {_vehicle call dayz_getCrew}];\n_marker setMarkerColorLocal \"ColorGreen\";" +1 setMarkerDir +1 setMarkerPos !"\"setMarkerPosLocal\"," !"rsetMarkerPosLocal" +1 setMarkerShape +1 setMarkerSize +1 setMarkerText !",if (_vehicle == _x) then {name _x} else {_vehicle call dayz_getCrew}];\n_marker setMarkerColorLocal \"ColorGreen\";" +1 setMarkerType !",if (_vehicle == _x) then {name _x} else {_vehicle call dayz_getCrew}];\n_marker setMarkerColorLocal \"ColorGreen\";" +1 setPosASL !="_unit setPosAsl [(_position select 0), (_position select 1), (LHA_height+1)];" !="_flame setPosASL [_pos select 0,_pos select 1,(_pos select 2)+0.2];" !="_fire setPosASL _location;" !"_objectHelper setPosASL _position;\n} else {" !"_b0x1337 setPosASL (getPosASL player);\n} else {" !"_obj setPosASL [_center select 0, _a, _b];" !"_objectSnapGizmo setPosASL " !"_para setposasl [\n" !"_thingy setPosASL (ATLToASL _pos);\n} else {" !="> \"fixWaterPos\");\nif (_fixWaterSpawn == 1) then {\n_vehicle setPosASL (_pos);\n} else {\n_vehicle setPos (_pos);\n}; \n} else {\n_ve" +1 setTerrainGrid +1 setUnitRecoilCoefficient +1 setVehicle !"if(_status) then {\n_vehicle setVehicleLock \"LOCKED\";\n} else {\n_vehicle setVehicleLock \"UNLOCKED\";\n};" +1 setViewDistance +1 sideLogic !"publicVariable \"BIS_MPF_logic\";" +1 switchCamera !"\"switchCamera\", " !"rswitchCamera" !"player switchCamera _currentCamera;\nif (_currentWpn !=" !"< 150) && random 1 > 0.5) then {\n_killer switchcamera" 1 systemChat !="systemChat format[localize \"str_missing_to_do_this\", _x];" !"systemChat (localize " !"systemChat format[localize \"STR_EPOCH_" !"systemChat localize \"STR_EPOCH_" !"case \"system\": {systemChat _message;};" !"systemchat localize \"STR_CRAFTING_NEEDED_ITEMS\";" !"systemChat format[localize \"STR_CL_" !"systemChat localize \"STR_CL_" !=") then {\nif (player getVariable[\"radiostate\",true]) then {\nsystemChat (\"[RADIO] \" + _message);\nplaySound \"Radio_Message_Sound\";\n" !"systemChat localize \"str_cursorTargetNotFound\"" -5 title !"titleCut [\"\", \"BLACK " !"\"titleCut\", " !"\"titleText\"" !="rtitleCut = 'titleCut'" !"rtitleCutc" !="rtitleText = 'titleText'" !"rtitleTextc" !"(_missionTextListPath >> \"titles\")" !"(_display displayCtrl _titleIDC) ctrlShow false;" !"titleText [format[localize \"str_return_lobby\", _x" !",\"_titleText\"" !"localize 'STR_UI_GENDER_TITLE';\n_timeNem" !="scriptName \"MP\\data\\scriptCommands\\titleText.sqf\";" !_fillTradeTitle !_bldTxtStringTitle !"localize \"str_halo_altitude_speed" -5 toString !"_animCheck = toString ([(_animStateArray select 0),(_animStateArray select 1)" !="_skinToModel = toString (_finalArray);" !="{_textArrayTemp = _textArrayTemp + [tostring [_x]]} foreach _line;" !="_cmpt = toString _cmpt;" !="_objName = toLower(toString(_objName));" !"if (toString _hayArr != _needle) then {" !="_type = toString _typeA;" !="_anim4 = toString _anim4;" !"{(count _stance>17)}) then {toString [_stance select 17]}" !"BIS_fnc_timeToString" !"02, if (typeName _name == \"ARRAY\") then {toString _name} else {_name}];" !="s = true;\n\n_array = toArray (animationState player);\n_str = toString [_array select 5,_array select 6,_array select 7];\n_anim = " !=" _input - [_x];\n} forEach _badChars;\n\n_input = parseNumber (toString (_input));\n_input\n};\n\nBankDialogUpdateAmounts = {\nprivate [" -5 worldTo !="_relPos = _building worldToModel _point;" !"_w2m = _x worldToModel (getPosATL player);\n_bb = (boundingbox _x) select 1;" !="_h = _offset + ((_o worldToModel (getPosATL _o)) select 2);" !"_pos set [2,(_pos select 2) + 1.5];\n_screen = worldToScreen _pos;\n_text = composeText [image" !="\n_pos = _this select 1; \n_offset = 1; \n\n_relPos = _building worldToModel _pos;\n_boundingBox = boundingBox _building;\n\n_min = _bo" +1 title !"titleCut [\"\", \"BLACK " !"\"titleCut\", " !"\"titleText\"" !="rtitleCut = 'titleCut'" !"rtitleCutc" !="rtitleText = 'titleText'" !"rtitleTextc" !"(_missionTextListPath >> \"titles\")" !"(_display displayCtrl _titleIDC) ctrlShow false;" !"titleText [format[localize \"str_return_lobby\", _x" !",\"_titleText\"" !"localize 'STR_UI_GENDER_TITLE';\n_timeNem" !="scriptName \"MP\\data\\scriptCommands\\titleText.sqf\";" !_fillTradeTitle !_bldTxtStringTitle !"localize \"str_halo_altitude_speed" !"play displayCtrl 8801 ctrlSetText(format[localize \"STR_CL_RV_TITLE\",_keyDisplay]);\n\n_control = ((findDisplay 8800) displayCtrl 8" +1 toString !"_animCheck = toString ([(_animStateArray select 0),(_animStateArray select 1)" !="_skinToModel = toString (_finalArray);" !="{_textArrayTemp = _textArrayTemp + [tostring [_x]]} foreach _line;" !="_cmpt = toString _cmpt;" !="_objName = toLower(toString(_objName));" !"if (toString _hayArr != _needle) then {" !="_type = toString _typeA;" !="_anim4 = toString _anim4;" !"{(count _stance>17)}) then {toString [_stance select 17]}" !"BIS_fnc_timeToString" !"02, if (typeName _name == \"ARRAY\") then {toString _name} else {_name}];" !="s = true;\n\n_array = toArray (animationState player);\n_str = toString [_array select 5,_array select 6,_array select 7];\n_anim = " !=" _input - [_x];\n} forEach _badChars;\n\n_input = parseNumber (toString (_input));\n_input\n};\n\nBankDialogUpdateAmounts = {\nprivate [" +1 worldTo !="_relPos = _building worldToModel _point;" !"_w2m = _x worldToModel (getPosATL player);\n_bb = (boundingbox _x) select 1;" !="_h = _offset + ((_o worldToModel (getPosATL _o)) select 2);" !"_pos set [2,(_pos select 2) + 1.5];\n_screen = worldToScreen _pos;\n_text = composeText [image" !="\n_pos = _this select 1; \n_offset = 1; \n\n_relPos = _building worldToModel _pos;\n_boundingBox = boundingBox _building;\n\n_min = _bo" //The best use of this file is filtering commonly used scripting commands, because they are always the same when compiled and executed. See: https://community.bistudio.com/wiki/Category:Scripting_Commands_ArmA2 From 858f418a3db1b6e287602164517cd4ff944b458d Mon Sep 17 00:00:00 2001 From: A Man Date: Tue, 17 Aug 2021 21:55:55 +0200 Subject: [PATCH 09/40] Add missing combine action for the Desert Eagle, 20Rnd stanag mag --- SQF/dayz_code/Configs/CfgMagazines/Magazines/50AE.hpp | 5 +++++ SQF/dayz_code/Configs/CfgMagazines/Magazines/556x45.hpp | 9 ++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/SQF/dayz_code/Configs/CfgMagazines/Magazines/50AE.hpp b/SQF/dayz_code/Configs/CfgMagazines/Magazines/50AE.hpp index 48427dd55..4a164e38b 100644 --- a/SQF/dayz_code/Configs/CfgMagazines/Magazines/50AE.hpp +++ b/SQF/dayz_code/Configs/CfgMagazines/Magazines/50AE.hpp @@ -9,4 +9,9 @@ class 7Rnd_50AE_Deagle: CA_Magazine ammo = "B_357mag_Ball"; count = 7; initSpeed = 400; + + class ItemActions + { + COMBINE_MAG + }; }; \ No newline at end of file diff --git a/SQF/dayz_code/Configs/CfgMagazines/Magazines/556x45.hpp b/SQF/dayz_code/Configs/CfgMagazines/Magazines/556x45.hpp index 6f9af29d1..faf5b509b 100644 --- a/SQF/dayz_code/Configs/CfgMagazines/Magazines/556x45.hpp +++ b/SQF/dayz_code/Configs/CfgMagazines/Magazines/556x45.hpp @@ -50,7 +50,14 @@ class 100Rnd_556x45_BetaCMagSD: 100Rnd_556x45_BetaCMag { }; /* STANAG <-> G36 */ -class 20Rnd_556x45_Stanag; +class 20Rnd_556x45_Stanag : CA_Magazine +{ + class ItemActions + { + COMBINE_MAG + }; +}; + class 30Rnd_556x45_Stanag : 20Rnd_556x45_Stanag { displayName = $STR_DZ_MAG_30RND_556x45_STANAG_NAME; From 37bab14685ff6fd512bf24f0134fd86d9054394c Mon Sep 17 00:00:00 2001 From: A Man Date: Tue, 17 Aug 2021 22:04:32 +0200 Subject: [PATCH 10/40] Remove not existing MeleeBaseball from MeleeWeapons array --- SQF/dayz_code/init/variables.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SQF/dayz_code/init/variables.sqf b/SQF/dayz_code/init/variables.sqf index 1501cc2b3..8014d7ec7 100644 --- a/SQF/dayz_code/init/variables.sqf +++ b/SQF/dayz_code/init/variables.sqf @@ -263,7 +263,7 @@ if (!isDedicated) then { Dayz_meatraw = ["FoodBeefRaw","FoodMuttonRaw","FoodChickenRaw","FoodRabbitRaw","FoodBaconRaw","FoodGoatRaw","FoodDogRaw","FishRawTrout","FishRawSeaBass","FishRawTuna","FoodPotatoRaw"]; Dayz_meatcooked = ["FoodBeefCooked","FoodMuttonCooked","FoodChickenCooked","FoodRabbitCooked","FoodBaconCooked","FoodGoatCooked","FoodDogCooked","FishCookedTrout","FishCookedSeaBass","FishCookedTuna","FoodPotatoBaked"]; boil_tin_cans = ["TrashTinCan","FoodCanGriffEmpty","FoodCanBadguyEmpty","FoodCanBoneboyEmpty","FoodCanCornEmpty","FoodCanCurgonEmpty","FoodCanDemonEmpty","FoodCanFraggleosEmpty","FoodCanHerpyEmpty","FoodCanDerpyEmpty","FoodCanOrlokEmpty","FoodCanPowellEmpty","FoodCanTylersEmpty","FoodCanUnlabeledEmpty","FoodCanRusUnlabeledEmpty","FoodCanRusStewEmpty","FoodCanRusPorkEmpty","FoodCanRusPeasEmpty","FoodCanRusMilkEmpty","FoodCanRusCornEmpty","ItemSodaEmpty","ItemSodaClaysEmpty","ItemSodaDrwasteEmpty","ItemSodaFrankaEmpty","ItemSodaGrapeDrinkEmpty","ItemSodaLemonadeEmpty","ItemSodaLirikEmpty","ItemSodaLvgEmpty","ItemSodaMtngreenEmpty","ItemSodaMzlyEmpty","ItemSodaPeppsyEmpty","ItemSodaR4z0rEmpty","ItemSodaRabbitEmpty","ItemSodaRocketFuelEmpty","ItemSodaSacriteEmpty","ItemSodaSherbetEmpty","ItemSodaSmashtEmpty","FoodCanPotatoesEmpty","FoodCanBeefEmpty"]; - MeleeWeapons = ["MeleeHatchet","MeleeCrowbar","MeleeMachete","MeleeBaseball","MeleeBaseBallBat","MeleeBaseBallBatBarbed","MeleeBaseBallBatNails","MeleeFishingPole","MeleeSledge"]; + MeleeWeapons = ["MeleeHatchet","MeleeCrowbar","MeleeMachete","MeleeBaseBallBat","MeleeBaseBallBatBarbed","MeleeBaseBallBatNails","MeleeFishingPole","MeleeSledge"]; MeleeMagazines = ["Hatchet_Swing","Crowbar_Swing","Machete_Swing","Bat_Swing","BatBarbed_Swing","BatNails_Swing","Fishing_Swing","Sledge_Swing"]; MeleeAmmo = ["Hatchet_Swing_Ammo","Crowbar_Swing_Ammo","Machete_Swing_Ammo","Bat_Swing_Ammo","BatBarbed_Swing_Ammo","BatNailed_Swing_Ammo","Fishing_Swing_Ammo","Sledge_Swing_Ammo","Chainsaw_Swing_Ammo"]; Dayz_Gutting = ["ItemKnife","ItemKnife5","ItemKnife4","ItemKnife3","ItemKnife2","ItemKnife1","ItemKnifeBlunt"]; From 152ec42daedc9b02aee22ce7ea6201e7dd7c96ea Mon Sep 17 00:00:00 2001 From: A Man Date: Wed, 18 Aug 2021 09:56:24 +0200 Subject: [PATCH 11/40] Add toggleable Locate Vehicle by salival to Epoch Core --- SQF/dayz_code/actions/locateVehicle.sqf | 57 +++++++++++++++++++ SQF/dayz_code/configVariables.sqf | 8 +++ SQF/dayz_code/init/compiles.sqf | 4 ++ .../DZE_Server_Config/BattlEye/scripts.txt | 14 ++--- 4 files changed, 76 insertions(+), 7 deletions(-) create mode 100644 SQF/dayz_code/actions/locateVehicle.sqf diff --git a/SQF/dayz_code/actions/locateVehicle.sqf b/SQF/dayz_code/actions/locateVehicle.sqf new file mode 100644 index 000000000..c689aa43d --- /dev/null +++ b/SQF/dayz_code/actions/locateVehicle.sqf @@ -0,0 +1,57 @@ +/* + locateVehicle by salival (https://github.com/oiad) +*/ + +if (dayz_actionInProgress) exitWith {localize "str_player_actionslimit" call dayz_rollingMessages;}; +dayz_actionInProgress = true; + +private ["_characterID","_found","_i","_keyID","_keyIDS","_keyList","_keyName","_keyNames","_locateMarkerDelete","_locateMarkerTime","_marker","_name","_position","_vehicle"]; + +_keyList = call epoch_tempKeys; +_keyIDS = _keyList select 0; +_keyNames = _keyList select 1; + +_locateMarkerDelete = true; // Delete markers after a certain amount of time to avoid cluttering the map? +_locateMarkerTime = 60; // Time in seconds before markers are deleted if enabled above. + +_i = 0; +for "_i" from 0 to 60 do {deleteMarkerLocal ("vehicleMarker"+ (str _i));}; + +if (count _keyIDS < 1) exitWith {dayz_actionInProgress = false; systemChat localize "STR_CL_LV_NO_KEYS";}; + +_i = 0; +{ + _keyID = parseNumber (_keyIDS select _forEachIndex); + _keyName = _keyNames select _forEachIndex; + _found = 0; + { + _vehicle = typeOf _x; + _characterID = parseNumber (_x getVariable ["CharacterID","0"]); + if ((_characterID == _keyID) && {_vehicle isKindOf "Air" || {_vehicle isKindOf "LandVehicle"} || {_vehicle isKindOf "Ship"}}) then { + _found = _found +1; + _i = _i +1; + _position = getPos _x; + _name = getText (configFile >> "CfgVehicles" >> _vehicle >> "displayName"); + _marker = createMarkerLocal ["vehicleMarker" + (str _i),[_position select 0,_position select 1]]; + _marker setMarkerShapeLocal "ICON"; + _marker setMarkerTypeLocal "DOT"; + _marker setMarkerColorLocal "ColorOrange"; + _marker setMarkerSizeLocal [1.0, 1.0]; + _marker setMarkerTextLocal format ["%1",_name]; + systemChat format[localize "STR_CL_LV_BELONGS",_keyName,_name,if (!alive _x) then {toLower (format [" (%1)",localize "str_artdlg_destroyed"])} else {""}]; + }; + } forEach vehicles; + if (_found == 0) then {systemChat format[localize "STR_CL_LV_NO_VEHICLES",_keyName]}; +} forEach _keyIDS; + +if (_i > 0) then { + systemChat format[localize "STR_CL_LV_FOUND",_i]; + if (_locateMarkerDelete) then { + _locateMarkerTime spawn { + uiSleep _this; + for "_i" from 0 to 60 do {deleteMarkerLocal ("vehicleMarker"+ (str _i));}; + }; + }; +}; + +dayz_actionInProgress = false; diff --git a/SQF/dayz_code/configVariables.sqf b/SQF/dayz_code/configVariables.sqf index 277a4ea41..03213d851 100644 --- a/SQF/dayz_code/configVariables.sqf +++ b/SQF/dayz_code/configVariables.sqf @@ -191,6 +191,14 @@ if (!isDedicated) then { ["ItemKey",localize "STR_CL_RV_CA_LIGHTS","spawn remoteVehicle;","true",5] ]; }; + + DZE_LocateVehicle = true; // Enable/Disable the option to locate a vehicle from a key in the inventory with a rightclick on the GPS. + + if (DZE_LocateVehicle) then { + DZE_CLICK_ACTIONS = DZE_CLICK_ACTIONS + [ + ["ItemGPS",localize "STR_CL_LV_LOCATE_VEHICLES","[] spawn locateVehicle;","true"] + ]; + }; }; // Both diff --git a/SQF/dayz_code/init/compiles.sqf b/SQF/dayz_code/init/compiles.sqf index da871e734..f1260455d 100644 --- a/SQF/dayz_code/init/compiles.sqf +++ b/SQF/dayz_code/init/compiles.sqf @@ -202,6 +202,10 @@ if (!isDedicated) then { if (DZE_Remote_Vehicle) then { remoteVehicle = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\remoteVehicle\remoteVehicle.sqf"; rv_vehicleInfo = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\remoteVehicle\vehicleInfo.sqf"; + }; + + if (DZE_LocateVehicle) then { + locateVehicle = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\locateVehicle.sqf"; }; // Weather diff --git a/Server Files/DZE_Server_Config/BattlEye/scripts.txt b/Server Files/DZE_Server_Config/BattlEye/scripts.txt index 1ea66bb6b..7351f5116 100644 --- a/Server Files/DZE_Server_Config/BattlEye/scripts.txt +++ b/Server Files/DZE_Server_Config/BattlEye/scripts.txt @@ -23,13 +23,13 @@ 1 createAgent !="_agent = if (_type == \"Pastor\") then {createAgent [_type, _Pos, [], 0, \"NONE\"]} else {createAgent [_type, _Pos, [], 0, \"FORM\"]};" !="_dog = createAgent [_type, _Pos, [], 0, \"NONE\"];" !="\n\n\n_type = _unitTypes call BIS_fnc_selectRandom;\n_agent = createAgent [_type, _position, [], 0, \"CAN_COLLIDE\"];\n_agent setDir (r" 1 createDialog !="_region = createDialog \"RscDisplaySpawnSelecter\";" !="_gender = createDialog 'RscDisplayGenderSelect';" !="_dialog = createDialog \"bloodTest\";" !"createDialog 'horde_journal_" !"Z_ResetContainer = true;\ncreateDialog \"AdvancedTrading\";" !"createDialog \"DoorManagement\";\ncall DoorNearbyHumans;" !="createDialog \"ComboLockUI\";" !"createdialog \"PlotManagement\";\ncall PlotNearbyHumans;" !"_ok = createDialog \"KeypadUI\";" !"EpochDeathBoardLoad = {\ncreatedialog \"EpochDeathBoardDialog\";" !="if(DZE_doorManagement) then {createdialog \"DoorAccess\";} else {createdialog \"ComboLockUI\";};" !"\ndisableSerialization;\ncreateDialog \"DZ_GroupDialog\";" !"createDialog _dialog;\n\nwaitUntil {!dialog};\n\nif (keypadCancel) exitWith {" !=";\n};\n\nZSC_CurrentStorage setVariable[\"isBusy\",true,true];\ncreateDialog \"BankDialog\";\ncall BankDialogUpdateAmounts;\n\nwaitUntil {!" !="ANKING_NOT_AVAIL\",_typeOf] call dayz_rollingMessages;\n};\n\ncreateDialog \"atmDialog\";\ncall AtmDialogUpdateAmounts;\n\nwaitUntil {!di" !="!_isBusy) then {\nplayer setVariable[\"isBusy\",true,true]; \ncreateDialog \"GivePlayerDialog\";\n_display = uiNamespace getVariable[\"z" !="ked\",\"VaultStorage2\",\"TallSafe\",\"TallSafeLocked\"]) then {\ncreateDialog \"SafeKeyPad\";\n} else {\ncreateDialog \"KeypadUI\";\n};\n};\n\nda" !";\n\nif (count rv_vehicleList > 1) then {\nrv_isOk = false;\n\ncreateDialog \"remoteVehicle\";\n\n_display = uiNamespace getVariable[\"rv_" 1 createDisplay -1 createMarker !"\"createMarkerLocal\"," !"rcreateMarkerLocal" !"if (isnil 'BIS_GITA_fnc_createMarkers' || false) then {" !"_marker = createMarkerLocal [format[\"groupMember" +1 createMarker !"\"createMarkerLocal\"," !"rcreateMarkerLocal" !"if (isnil 'BIS_GITA_fnc_createMarkers' || false) then {" !"_marker = createMarkerLocal [format[\"groupMember" !">> \"CfgVehicles\" >> _vehicle >> \"displayName\");\n_marker = createMarkerLocal [\"vehicleMarker\" + (str _i),[_position select 0,_pos" 1 createUnit !="_newUnit = _group createUnit [_class,respawn_west_original,[],0,\"NONE\"];" !="BIS_MPF_logic = BIS_MPF_dummygroup createUnit [\"Logic\", [1000,10,0], [], 0, \"NONE\"];" 1 createVehicleLocal !="_object = (_x select 1) createVehicleLocal [0,0,0];" !="_plant = _x createVehicleLocal (getMarkerPos \"center\");" !="_point = \"Logic\" createVehicleLocal getPosATL _unit;" !"_object = _type createVehicleLocal [0,0,0];" !" = \"#lightpoint\" createVehicleLocal " !" = \"#particlesource\" createVehicleLocal " !="_para = \"ParachuteWest\" createVehicleLocal [0,0,0];" !="_sign = \"Sign_arrow_down_large_EP1\" createVehicleLocal [0,0,0];" !"_obj = \"Sign_sphere10cm_EP1\" createVehicleLocal [0,0,0];" !="_objectSnapGizmo = \"Sign_sphere10cm_EP1\" createVehicleLocal [0,0,0];" 1 ctrlAddEventHandler 1 ctrlSetPosition !="_control ctrlSetPosition [_posX, _posY];" !"3,_h]};\n_control ctrlsetposition _pos;" !="_control ctrlSetPosition [0, (_y + _deltaY)];" !="_disp_ctrl ctrlSetPosition [_posX, _posY];" !="_control ctrlSetPosition _grpPos;" !="_group ctrlSetPosition _pos;" !="((uiNamespace getVariable 'DAYZ_GUI_waiting') displayCtrl 1400) ctrlSetPosition _sandLevel;" !="_delayControl ctrlSetPosition [0, _pos];" !="_icon ctrlSetPosition [(_screen select 0),(_screen select 1),.99,.65];" 1 cutText !"_layer cuttext [\"\",\"plain\"];\n};\nmissionnamespace" !"\n\n\n3100 cuttext [\"\",\"plain\"];" !"} else {\n16 cutText [\"\",\"PLAIN\"];" !"exitWith {\n1 cutText [localize \"" !"progress_monitor.sqf\";\n0 cutText ['','BLACK',0]" !="8 cutText [\"\",\"PLAIN\"];" -1 deleteMarker !"} count allDead;\n\n\nif (dayz_oldBodyCount > _bodyCount) then {" +1 deleteMarker !"} count allDead;\n\n\nif (dayz_oldBodyCount > _bodyCount) then {" !"ocateMarkerTime = 60; \n\n_i = 0;\nfor \"_i\" from 0 to 60 do {deleteMarkerLocal (\"vehicleMarker\"+ (str _i));};\n\nif (count _keyIDS < " 1 displayAddEventHandler !"bis_fnc_halo_keydown_eh = (finddisplay 46) displayaddeventhandler [\"keydown\",\"_this call bis_fnc_halo_keydown;\"];" 1 displaySetEventHandler 1 DZE_doorManagementAdmins !="\n\n\n\n\n\n\n\n\n\n\n\nDZE_doorManagementMustBeClose = false; \nDZE_doorManagementAdmins = []; \nDZE_doorManagementAllowManualCode = true; \nD" !="true; };\n} count _doorFriends;\n\n\n\n\nif(_playerUID in DZE_DoorManagementAdmins) then { _isDoorAdmin = true; };\n};\n\n\n\n[ _isOwner\n, " !="ove select 0) == _ownerPUID && (!(dayz_playerUID in DZE_doorManagementAdmins) && !(dayz_playerUID == _ownerPUID))) exitWith {sys" @@ -67,13 +67,13 @@ 1 SetEventHandler !"\n_menu ctrlSetEventHandler [\"ButtonClick\",_compile];\n};" !"inGameUISetEventHandler [\"Action\",\"false\"];" !="];\n};\n\n_menu ctrlSetText format[_type,_name];\n_menu ctrlSetEventHandler [\"ButtonClick\",_compile];\n_i = _i + 1;\n};\n_pos set [3,_h" !="];\n};\n\n_menu ctrlSetText format[_type,_name];\n_menu ctrlSetEventHandler [\"ButtonClick\",_compile];\n_i = _i + 1;\n};\n\nlocal _isKey " 1 setMarkerAlpha 1 setMarkerBrush -1 setMarkerColor !",if (_vehicle == _x) then {name _x} else {_vehicle call dayz_getCrew}];\n_marker setMarkerColorLocal \"ColorGreen\";" +1 setMarkerColor !",if (_vehicle == _x) then {name _x} else {_vehicle call dayz_getCrew}];\n_marker setMarkerColorLocal \"ColorGreen\";" !"eLocal \"ICON\";\n_marker setMarkerTypeLocal \"DOT\";\n_marker setMarkerColorLocal \"ColorOrange\";\n_marker setMarkerSizeLocal [1.0, 1.0" 1 setMarkerDir 1 setMarkerPos !"\"setMarkerPosLocal\"," !"rsetMarkerPosLocal" -1 setMarkerShape -1 setMarkerSize -1 setMarkerText !",if (_vehicle == _x) then {name _x} else {_vehicle call dayz_getCrew}];\n_marker setMarkerColorLocal \"ColorGreen\";" -1 setMarkerType !",if (_vehicle == _x) then {name _x} else {_vehicle call dayz_getCrew}];\n_marker setMarkerColorLocal \"ColorGreen\";" +1 setMarkerShape !"tr _i),[_position select 0,_position select 1]];\n_marker setMarkerShapeLocal \"ICON\";\n_marker setMarkerTypeLocal \"DOT\";\n_marker s" +1 setMarkerSize !"DOT\";\n_marker setMarkerColorLocal \"ColorOrange\";\n_marker setMarkerSizeLocal [1.0, 1.0];\n_marker setMarkerTextLocal format [\"%1\"," +1 setMarkerText !",if (_vehicle == _x) then {name _x} else {_vehicle call dayz_getCrew}];\n_marker setMarkerColorLocal \"ColorGreen\";" !"rOrange\";\n_marker setMarkerSizeLocal [1.0, 1.0];\n_marker setMarkerTextLocal format [\"%1\",_name];\nsystemChat format[localize \"STR" +1 setMarkerType !",if (_vehicle == _x) then {name _x} else {_vehicle call dayz_getCrew}];\n_marker setMarkerColorLocal \"ColorGreen\";" !" select 1]];\n_marker setMarkerShapeLocal \"ICON\";\n_marker setMarkerTypeLocal \"DOT\";\n_marker setMarkerColorLocal \"ColorOrange\";\n_m" 1 setPosASL !="_unit setPosAsl [(_position select 0), (_position select 1), (LHA_height+1)];" !="_flame setPosASL [_pos select 0,_pos select 1,(_pos select 2)+0.2];" !="_fire setPosASL _location;" !"_objectHelper setPosASL _position;\n} else {" !"_b0x1337 setPosASL (getPosASL player);\n} else {" !"_obj setPosASL [_center select 0, _a, _b];" !"_objectSnapGizmo setPosASL " !"_para setposasl [\n" !"_thingy setPosASL (ATLToASL _pos);\n} else {" !="> \"fixWaterPos\");\nif (_fixWaterSpawn == 1) then {\n_vehicle setPosASL (_pos);\n} else {\n_vehicle setPos (_pos);\n}; \n} else {\n_ve" 1 setTerrainGrid 1 setUnitRecoilCoefficient From 1113b5793448839673d6d6914e7469b0fa0cbc97 Mon Sep 17 00:00:00 2001 From: A Man Date: Wed, 18 Aug 2021 10:42:03 +0200 Subject: [PATCH 12/40] Add toggleable salivals Take Clothes to Epoch Core This also adds the option to disable taking clothes for certain clothing. --- SQF/dayz_code/actions/takeClothes.sqf | 45 +++++++++++++++++++ SQF/dayz_code/compile/fn_selfActions.sqf | 27 +++++------ SQF/dayz_code/configVariables.sqf | 6 ++- SQF/dayz_code/init/variables.sqf | 1 + .../DZE_Server_Config/BattlEye/scripts.txt | 3 +- 5 files changed, 64 insertions(+), 18 deletions(-) create mode 100644 SQF/dayz_code/actions/takeClothes.sqf diff --git a/SQF/dayz_code/actions/takeClothes.sqf b/SQF/dayz_code/actions/takeClothes.sqf new file mode 100644 index 000000000..ac1ef48ab --- /dev/null +++ b/SQF/dayz_code/actions/takeClothes.sqf @@ -0,0 +1,45 @@ +/* + Originally by Zabn + Modified for DayZ Epoch 1.0.7+ by salival (https://github.com/oiad) +*/ + +if (dayz_actionInProgress) exitWith {localize "str_player_actionslimit" call dayz_rollingMessages;}; +dayz_actionInProgress = true; + +private ["_body","_clothesTaken","_finished","_itemNew","_itemNewName","_okSkin","_playerNear","_result","_skin"]; + +_body = _this select 3; + +player removeAction s_player_clothes; +s_player_clothes = -1; + +if (isNull _body) exitWith {dayz_actionInProgress = false; systemChat localize "str_cursorTargetNotFound";}; + +_playerNear = {isPlayer _x} count (([_body] call FNC_GetPos) nearEntities ["CAManBase", 10]) > 1; +if (_playerNear) exitWith {dayz_actionInProgress = false; localize "str_pickup_limit_5" call dayz_rollingMessages;}; + +_clothesTaken = _body getVariable["clothesTaken",false]; +if (_clothesTaken) exitWith {dayz_actionInProgress = false; localize "STR_CL_TC_ALREADY_TAKEN" call dayz_rollingMessages;}; + +_skin = typeOf _body; +_itemNew = _skin; +_itemNew = "Skin_" + _itemNew; +_okSkin = isClass (configFile >> "CfgMagazines" >> _itemNew); + +if (!_okSkin || _skin in DZE_Disable_Take_Clothes) exitWith {dayz_actionInProgress = false; format[localize "STR_CL_TC_NOT_SUPPORTED",_skin] call dayz_rollingMessages;}; + +_finished = ["Medic",1] call fn_loopAction; +if (_finished) then { + _itemNewName = getText (configFile >> "CfgMagazines" >> _itemNew >> "displayName"); + _result = [player,_itemNew] call BIS_fnc_invAdd; + if (_result) then { + _body setVariable["clothesTaken",true,true]; + format[localize "STR_CL_TC_ADD_OK",_itemNewName] call dayz_rollingMessages; + } else { + format[localize "STR_CL_TC_ADD_FAIL",_itemNewName] call dayz_rollingMessages; + }; +} else { + localize "str_epoch_player_26" call dayz_rollingMessages; +}; + +dayz_actionInProgress = false; \ No newline at end of file diff --git a/SQF/dayz_code/compile/fn_selfActions.sqf b/SQF/dayz_code/compile/fn_selfActions.sqf index 878098c88..6806ddbc8 100644 --- a/SQF/dayz_code/compile/fn_selfActions.sqf +++ b/SQF/dayz_code/compile/fn_selfActions.sqf @@ -789,23 +789,18 @@ if (!isNull _cursorTarget && {!_inVehicle && !_isPZombie && _canDo && player dis } else { player removeAction s_player_fillgen; s_player_fillgen = -1; - }; - - //Towing with tow truck - /* - if(_typeOfCursorTarget == "TOW_DZE") then { - if (s_player_towing < 0) then { - if(!(_cursorTarget getVariable ["DZEinTow", false])) then { - s_player_towing = player addAction [localize "STR_EPOCH_ACTIONS_ATTACH" "\z\addons\dayz_code\actions\tow_AttachStraps.sqf",_cursorTarget, 0, false, true]; - } else { - s_player_towing = player addAction [localize "STR_EPOCH_ACTIONS_DETACH", "\z\addons\dayz_code\actions\tow_DetachStraps.sqf",_cursorTarget, 0, false, true]; + }; + + if (DZE_Take_Clothes) then { + if (_isMan && !_isAlive && !_isZombie && {!(_cursorTarget isKindOf "Animal")} && {!(_cursorTarget getVariable["clothesTaken",false])} && {_typeOfCursorTarget in AllPlayers} && {!(_typeOfCursorTarget in DZE_Disable_Take_Clothes)}) then { + if (s_player_clothes < 0) then { + s_player_clothes = player addAction [format["%1",localize "STR_CL_TC_TAKE_CLOTHES"],"\z\addons\dayz_code\actions\takeClothes.sqf",_cursorTarget,0, false,true]; }; + } else { + player removeAction s_player_clothes; + s_player_clothes = -1; }; - } else { - player removeAction s_player_towing; - s_player_towing = -1; - }; - */ + }; // ZSC if (Z_singleCurrency) then { @@ -1079,6 +1074,8 @@ if (!isNull _cursorTarget && {!_inVehicle && !_isPZombie && _canDo && player dis s_bank_dialog3 = -1; player removeAction s_player_checkWallet; s_player_checkWallet = -1; + player removeAction s_player_clothes; + s_player_clothes = -1; }; //Dog actions on player self diff --git a/SQF/dayz_code/configVariables.sqf b/SQF/dayz_code/configVariables.sqf index 03213d851..c180ee6c8 100644 --- a/SQF/dayz_code/configVariables.sqf +++ b/SQF/dayz_code/configVariables.sqf @@ -161,6 +161,10 @@ if (!isDedicated) then { dayz_matchboxCount = false; // Enable match stick count. After five uses matches run out and must be replaced. dayz_waterBottleBreaking = false; // Water bottles have a chance to break when boiling and require duct tape to fix + // Take Clothes + DZE_Take_Clothes = false; // Allows to take the clothing from dead players and AIs + DZE_Disable_Take_Clothes = []; // Enter the skins you do not want to be allowed to be recovered from dead bodies. E.g.: DZE_Disable_Take_Clothes = ["Doctor_DZ","Assistant_DZ","Worker1_DZ"]; + /* DZE_CLICK_ACTIONS This is where you register your right-click actions @@ -192,7 +196,7 @@ if (!isDedicated) then { ]; }; - DZE_LocateVehicle = true; // Enable/Disable the option to locate a vehicle from a key in the inventory with a rightclick on the GPS. + DZE_LocateVehicle = false; // Enable/Disable the option to locate a vehicle from a key in the inventory with a rightclick on the GPS. if (DZE_LocateVehicle) then { DZE_CLICK_ACTIONS = DZE_CLICK_ACTIONS + [ diff --git a/SQF/dayz_code/init/variables.sqf b/SQF/dayz_code/init/variables.sqf index 8014d7ec7..b7edba423 100644 --- a/SQF/dayz_code/init/variables.sqf +++ b/SQF/dayz_code/init/variables.sqf @@ -207,6 +207,7 @@ if (!isDedicated) then { s_bank_dialog2 = -1; s_bank_dialog3 = -1; s_player_checkWallet = -1; + s_player_clothes = -1; }; call dayz_resetSelfActions; diff --git a/Server Files/DZE_Server_Config/BattlEye/scripts.txt b/Server Files/DZE_Server_Config/BattlEye/scripts.txt index 7351f5116..3e0540531 100644 --- a/Server Files/DZE_Server_Config/BattlEye/scripts.txt +++ b/Server Files/DZE_Server_Config/BattlEye/scripts.txt @@ -50,8 +50,7 @@ 1 lbSet !"_lbUsersControl lbSetColor [_x, [1,0,0,1]];" !"\n_control lbSetColor [_x, _color];\n};" !"_weaponsLBSetFocus" !="(_this select 0) displayCtrl _idc lbSetCurSel (profileNamespace getVariable [_var,_default]);" !="(_display displayCtrl 105) lbSetColor [_i, [0.06, 0.05, 0.03, 1]];" !" [7421," !"lbSetPicture [7422, _index" !"lbSetPicture [7402, _index" !"lbSetPicture [7401, _index" !="_userList lbSetData [(lbSize _userList) -1,_friendUID];" !" [TraderDialogItemList, _index, " !"_myGroup lbSetData [_index,getPlayerUID _x];" !"ive DZE_myVehicle} && {DZE_myVehicle == _x}) then {\n_control lbSetColor [(lbSize _control)-1,[0, 1, 0, 1]];\n};\n} count rv_vehicl" 1 loadFile 1 menu !",\"MenuSelected\",\"Draw\",\"VideoStop" !"_menu = _parent displayCtrl (1600 + _i);\n_menu ctrlShow " !"BIS_fnc_commsMenu" !"BIS_fnc_kbMenu" !"call gear_ui_offMenu;" !"dayz_inflame_showMenu" !"\"showCommandingMenu\", " !"rshowCommandingMenu" !"menu_" !"use action menu to " !"\"_menu\",\"_menu1\"" !"fn_gearMenuChecks" !"fn_pauseMenuChecks" -1 nearEntities !="exit = true;\n} else {\n_nearestObjects = (position player) nearEntities [[\"Air\", \"Car\", \"Motorcycle\", \"Tank\", \"Ship\"], 26];\nif (c" !="jects \"SpawnableWreck\";\n{deleteVehicle _x} count (_setPos nearEntities [\"zZombie_Base\",30]);\nplayer setDir _setDir;\n\nif (dayz_pa" !="ets,false];\n};\n};\n};\n};\n};\n} forEach ((getPosATL _refObj) nearEntities [\"Zed_Base\",100]);\n\nif (_attacked) then {\nif (r_player_un" !="((!surfaceIsWater _Pos) AND {(0 == {alive _x} count (_Pos nearEntities [ AllPlayers, 200 ]))}) then {\n_agent = if (_type == \"Pas" !="z, _elevation] ];\n};\n};\n};\n};\n} count ((getPosATL player) nearEntities [\"zZombie_Base\", 30]);\n};\n\n\n_buriedZeds\n};\n" !="call dz_fn_array_any);\n};\n\n_vehClose = (getPosATL player) nearEntities [[\"Car\",\"Tank\",\"Helicopter\",\"Plane\",\"StaticWeapon\",\"Ship\"" !="z_spawnZombies = {alive _x AND local _x} count (_position nearEntities [\"zZombie_Base\",_radius]);\ndayz_CurrentNearByZombies = {a" !="{\nr_player_infected = true;\n\n};\n};\n};\n} count (_mylastPos nearEntities [\"CAManBase\",12]);\nif (dayz_temperatur < ((50 / 100) * (d" !=" < dayz_maxGlobalZeds}) then {\n_zombiesNum = count (_bPos nearEntities [\"zZombie_Base\",(((sizeOf _type) * 2) + 10)]);\nif (_zombi" !="te;\n};\n};\n\n\n_nearByPlayer = ({isPlayer _x} count (_objPos nearEntities [\"CAManBase\",30])) > 0;\nif (!_nearByPlayer) then {\n_posit" !="_entityTime = diag_tickTime;\n\n_list = (getposATL _agent) nearEntities [[\"CAManBase\",\"AllVehicles\"],300];\n_isSomeone = ({isPlayer" !="_timeN = diag_tickTime;\n\n_list = (getposATL _agent) nearEntities [[\"CAManBase\",\"AllVehicles\"],300];\n_isSomeone = ({isPlayer _x} " !="_waitStart = diag_tickTime;\n\n_list = (getposATL _agent) nearEntities [[\"CAManBase\",\"AllVehicles\"],300];\n_isSomeone = ({isPlayer " !="lt = false;\n_pos = [player] call FNC_GetPos;\n_list = _pos nearEntities [[\"Air\",\"LandVehicle\",\"Ship\"],Z_VehicleDistance];\n\nif (!i" !="[\"localtargets\",_localtargets,false];\n};\n};\n} count (_pos nearEntities [\"zZombie_Base\",50]);\n} else {\nwhile {alive _projectile} " !="this select 2;\n_pos = _this select 3;\n\n_listTalk = _pos nearEntities [\"zZombie_Base\",_distance];\n\n{\n_distance = _distance max " !="_list = (getposATL _agent) nearEntities [[\"CAManBase\",\"AllVehicles\"],300];\n_isSomeone = ({isPlayer _x} count _list) > 0;\n\n_timeN" !=";};\n\n_playerNear = {isPlayer _x} count ((getPosATL _body) nearEntities [\"CAManBase\", 10]) > 1;\nif (_playerNear) exitWith {dayz_a" !="\n\n\n_pos = getPosATL player;\nif ({isPlayer _x} count (_pos nearEntities [\"CAManBase\",40]) > 1) then {\n[_unit,\"hit\",0,false] call " !="[];\n\n_PlayerNear = {isPlayer _x} count ((getPosATL _item) nearEntities [\"CAManBase\", 12]) > 1;\nif (_PlayerNear) exitWith {locali" !="layerNear = {isPlayer _x} count (([_obj] call FNC_GetPos) nearEntities [\"CAManBase\", 12]) > 1;\nif (_PlayerNear && (_isMine or _o" !="hicle _player] call FNC_getPos;\n\n\n_findNearestPole = _pos nearEntities [\"Plastic_Pole_EP1_DZ\", _distance];\n\n_IsNearPlot = count " !="layerNear = {isPlayer _x} count ((getPosATL cursortarget) nearEntities [\"CAManBase\", 10]) > 1;\nif (_playerNear) exitWith {\ndayz_" !="etPos;\n\nif (surfaceIsWater _location && {count (_location nearEntities [\"Ship\",8]) > 0}) then {\ndeleteVehicle _sign;\nlocalize \"S" !="yerNear = {isPlayer _x} count (([player] call FNC_GetPos) nearEntities [\"CAManBase\", 12]) > 1;\nif (_playerNear) exitWith {locali" !="ag_tickTime);\n_playerCheck = ({isPlayer _x} count (player nearEntities [\"AllVehicles\",5]) > 1);\n_zedCheck = ((count (player near" !="(_this select 1) && isServer && (({isPlayer _x} count (_z nearEntities ['CAManBase',150])) == 0)) exitWith { _z call sched_co_de" !=" do {\nuiSleep 5;\n};\nhideBody _body;\n\n\n\n\n\n\n_inRange = _pos nearEntities [\"CAManBase\",100];\n{\nif ((isPlayer _x) && {_x != player})" !=" {\n_PlayerNear = {isPlayer _x} count ((getPosATL _holder) nearEntities [\"CAManBase\", 12]) > 1;\nif (_PlayerNear) exitWith {locali" !="yerNear = {isPlayer _x} count (([_plant] call FNC_GetPos) nearEntities [\"CAManBase\", 12]) > 1;\nif (_playerNear) exitWith {dayz_a" !="layerNear = {isPlayer _x} count (([_obj] call FNC_GetPos) nearEntities [\"CAManBase\", 12]) > 1;\nif (_playerNear) exitWith {dayz_a" !="\n_ammo = \"RunOver\";\n};\n} count (([_unit] call fnc_getPos) nearEntities [[\"Air\",\"LandVehicle\",\"Ship\"],3]);\n};\n};\n};\n\n_end = false" !="{\n_liftHeli = _x;\n_found = true;\n};\n};\n};\n} count (player nearEntities [DZE_HeliAllowTowFrom,15]);\n};\n\nlocal _attached = _cursor" !="z_fn_array_any);\n};\n\nlocal _vehClose = (getPosATL player) nearEntities [[\"Car\",\"Tank\",\"Helicopter\",\"Plane\",\"StaticWeapon\",\"Ship\"" !=" = false;\n\nif (!isNull _this) then {\n_nearPlayers = _this nearEntities [\"CAManBase\", 12];\n_playerNear = ({isPlayer _x} count _ne" !="ePeople = if (DZE_doorManagementMustBeClose) then {player nearEntities [\"CAManBase\", 12]} else {playableUnits};\n\n{\nif (isPlayer " !"\n\n_PlayerNear = {isPlayer _x} count ((getPosATL _vehicle) nearEntities [\"CAManBase\", 12]) > 1;\nif (_PlayerNear) exitWith {" !="layerNear = {isPlayer _x} count (([_obj] call FNC_GetPos) nearEntities [\"CAManBase\", 10]) > 1;\nif (_playerNear) exitWith {dayz_a" !"arestVehicle),_x];\n};\n} count (([player] call fnc_getPos) nearEntities [[\"Air\",\"LandVehicle\",\"Ship\"],30]);\n\nif (count _findNeare" !"arPlayers = {(isPlayer _x && _x != player)} count (player nearEntities [\"CAManBase\",8]);\n\nif (!(_object isKindOf \"ATV_Base_EP1\")" !="ePeople = if (DZE_plotManagementMustBeClose) then {player nearEntities [\"CAManBase\", 12]} else {playableUnits};\n\n{\nif (isPlayer " !="lot\"];\n\nlbClear 7002;\n_plots = ([player] call FNC_getPos) nearEntities [\"Plastic_Pole_EP1_DZ\",15];\n_thePlot = _plots select 0;\n_" !="_area_preview = 1;\n\n_target = (([player] call FNC_getPos) nearEntities [\"Plastic_Pole_EP1_DZ\",15]) select 0;\n_objects = nearestO" !="_PlotPole select 0;\n_target = (([player] call FNC_getPos) nearEntities [\"Plastic_Pole_EP1_DZ\",15]) select 0;\n\n_buildables = DZE_" !=" == \"\") exitWith {};\n\n_plots = ([player] call FNC_getPos) nearEntities [\"Plastic_Pole_EP1_DZ\",15];\n\n_thePlot = _plots select 0;\n" !="here100cm_EP1\"; \n\n\n_thePlot = (([player] call FNC_getPos) nearEntities [\"Plastic_Pole_EP1_DZ\",15]) select 0;\n_center = getPosASL" !"arPlayers = {(isPlayer _x && _x != player)} count (player nearEntities [\"CAManBase\",8]);\n\nif ((_object isKindOf \"C130J_US_EP1\" o" !="RANGE = 1500;};CA_ZOMBIE_COUNT = count ((position player) nearEntities ['zZombie_Base',CA_GPS_RANGE]); CA_MAN_COUNT = count ((po" -1 nearestObject !="licVariableEventHandler {_pos = (_this select 1); _obj = nearestObjects [_pos, DZE_isWreckBuilding, 5]; if (count _obj > 0) then" !=" 0;\n_whatIwant = _this select 1;\n_ret = false;\n\n_flame = nearestObjects [_fireplace, [\"flamable_DZ\"], 1];\n_flame = if (count _fl" !="Whitelisted = [];\n_pointsNearby = [];\n_findWhitelisted = nearestObjects [_pos,_whitelist,(_radius + DZE_snapExtraRange)]-[_objec" !=".sqf\"\n\n\n\n\n\nprivate \"_object\";\n\n{\n_object = (_x select 0) nearestObject (_x select 1);\n_object hideObject true;\n_object setVariab" !="\ncall dayz_meleeMagazineCheck;\n{player reveal _x} count (nearestObjects [_position,[\"AllVehicles\",\"WeaponHolder\",\"Land_A_tent\",\"" !="ks.sqf\"\nsetMousePosition [0.5, 0.5];\n\nprivate [\"_exit\",\"_nearestObjects\",\"_rID\",\"_display\",\"_cTarget\",\"_dis\",\"_friendlyTo\",\"_las" !="eenMsg = localize 'str_player_setup_completed';\n_torev4l=nearestObjects [_setPos, Dayz_plants + DayZ_GearedObjects + [\"AllVehicl" !=") then {\n_pPos = [player] call FNC_GetPos;\n_fireplaces = nearestObjects [_pPos, [\"flamable_DZ\",\"Land_Fire\",\"Land_Campfire\"], 8];" !=" \n\n)\nmax 0;\n\nif (_scaleLight < 0.9) then {\n\n_nearFlare = nearestObject [getPosATL (vehicle player),\"RoadFlare\"];\nif (!isNull _ne" !=" call _check}) exitWith { \n_inside = true;\n};\n} forEach (nearestObjects [_unit, [\"Building\"], 50]);\n};\n\n\n_inside\n" !="= _this select 0;\n_ammo = _this select 1;\n\n_projectile = nearestObject [_unit, _ammo];\n_pos = getPosATL _projectile;\n\nif (_ammo " !="\n};\nif (\"workshop\" in _needNear) then {\n_isNear = count (nearestObjects [player, DZE_Workshops, _distance]);\nif(_isNear == 0) th" !="ingPlayer = player;\n_dir = round(random 360);\n_helipad = nearestObjects [player, [\"HeliHCivil\",\"HeliHempty\"], 100];\n\n\nif (count " !="1\",\"land_smd_water_pump\"];\n\n_canFill = call {\n\nif (count nearestObjects [_posATL,_wells,4] > 0) exitwith {[true,false]};\nif (toL" !="d) exitWith {\n_nearWaterHole = [true,_pond];\n};\n} count (nearestObjects [_x, [], 1]);\n\nif (_nearWaterHole select 0) exitWith {};" !="bj select 4;\n_projectile = _obj select 6;\n\n_projectile = nearestObject [_unit,_ammo];\n_endPos = getPosATL _projectile;\n_doWait =" !="_plantOutput select _index;\n_countOut = 1;\n};\n};\n} count nearestObjects [([player] call FNC_getPos), [], 10];\n\nif (count _findNe" !=" !r_player_unconscious && !_onLadder);\n\n_nearByObjects = nearestObjects [player,_objects,_range];\n\nif (count _nearByObjects == 0" !="= \"workshop\") exitwith {\n_distance = 3;\n_isNear = count (nearestObjects [_pos, DZE_Workshops, _distance]);\nif (_isNear == 0) the" !="earestPole) then {_pos} else {_nearestPole};\nif ((count (nearestObjects [_center,_buildables,_distance])) >= DZE_BuildingLimit) " !="_ammo in [\"Dragged\",\"RunOver\"])}) then {\n_vehicleArray = nearestObjects [([vehicle _unit] call fnc_getPos),[\"Air\",\"LandVehicle\"," !="n _rocks) exitWith { _findNearestRock = _x; };\n} foreach nearestObjects [getPosATL player, [], 8];\n\n\nif (!isNull _findNearestRoc" !="modeltoWorld [0,0,0]};\n_holder = objNull;\n\n\n_nearByPile= nearestObjects [_pos, [\"WeaponHolder\",\"WeaponHolderBase\"],2];\n\nif (coun" !="r);\nlocal _uid = getPlayerUID player;\nlocal _nearLight = nearestObject [player,\"LitObject\"];\nlocal _canPickLight = false;\nlocal " !="p = {\nlocal _doors = [];\nif (r_drag_sqf) then {\n_doors = nearestObjects [player, DayZ_DropDrageeObjects, 3]; \nif (count _doors >" !"With {};\nif (!_unconscious) exitWith {};\n\n_dropObjects = nearestObjects [player, DayZ_DropDrageeObjects, 3];\nif (count _dropObje" !"Name) in dayz_trees}) exitWith {\n\n_tree = _x;\n};\n} count nearestObjects [getPosATL player, [], 20];\n\nif (!isNull _tree) then {\n\n" !="ntities [\"Plastic_Pole_EP1_DZ\",15]) select 0;\n_objects = nearestObjects [_target, DZE_maintainClasses, DZE_maintainRange];\n\n_obj" !="E_LockableStorage + [\"DZ_storage_base\"];\n_count = count (nearestObjects [_target,_buildables,_range]);\n\n_colour = \"#ffffff\";\n\nif" !="e;\n_num = ceil (random (player distance _x));\n};\n} count nearestObjects [player, [], 50];\n\nfor \"_i\" from 1 to 10 do {\nif (!_ispo" !="j select 4;\n\n_projectile = _obj select 6;\n\n_projectile = nearestObject [_unit,_ammo];\n_vUp = vectorUp _projectile;\n_endPos = get" +1 nearEntities !="exit = true;\n} else {\n_nearestObjects = (position player) nearEntities [[\"Air\", \"Car\", \"Motorcycle\", \"Tank\", \"Ship\"], 26];\nif (c" !="jects \"SpawnableWreck\";\n{deleteVehicle _x} count (_setPos nearEntities [\"zZombie_Base\",30]);\nplayer setDir _setDir;\n\nif (dayz_pa" !="ets,false];\n};\n};\n};\n};\n};\n} forEach ((getPosATL _refObj) nearEntities [\"Zed_Base\",100]);\n\nif (_attacked) then {\nif (r_player_un" !="((!surfaceIsWater _Pos) AND {(0 == {alive _x} count (_Pos nearEntities [ AllPlayers, 200 ]))}) then {\n_agent = if (_type == \"Pas" !="z, _elevation] ];\n};\n};\n};\n};\n} count ((getPosATL player) nearEntities [\"zZombie_Base\", 30]);\n};\n\n\n_buriedZeds\n};\n" !="call dz_fn_array_any);\n};\n\n_vehClose = (getPosATL player) nearEntities [[\"Car\",\"Tank\",\"Helicopter\",\"Plane\",\"StaticWeapon\",\"Ship\"" !="z_spawnZombies = {alive _x AND local _x} count (_position nearEntities [\"zZombie_Base\",_radius]);\ndayz_CurrentNearByZombies = {a" !="{\nr_player_infected = true;\n\n};\n};\n};\n} count (_mylastPos nearEntities [\"CAManBase\",12]);\nif (dayz_temperatur < ((50 / 100) * (d" !=" < dayz_maxGlobalZeds}) then {\n_zombiesNum = count (_bPos nearEntities [\"zZombie_Base\",(((sizeOf _type) * 2) + 10)]);\nif (_zombi" !="te;\n};\n};\n\n\n_nearByPlayer = ({isPlayer _x} count (_objPos nearEntities [\"CAManBase\",30])) > 0;\nif (!_nearByPlayer) then {\n_posit" !="_entityTime = diag_tickTime;\n\n_list = (getposATL _agent) nearEntities [[\"CAManBase\",\"AllVehicles\"],300];\n_isSomeone = ({isPlayer" !="_timeN = diag_tickTime;\n\n_list = (getposATL _agent) nearEntities [[\"CAManBase\",\"AllVehicles\"],300];\n_isSomeone = ({isPlayer _x} " !="_waitStart = diag_tickTime;\n\n_list = (getposATL _agent) nearEntities [[\"CAManBase\",\"AllVehicles\"],300];\n_isSomeone = ({isPlayer " !="lt = false;\n_pos = [player] call FNC_GetPos;\n_list = _pos nearEntities [[\"Air\",\"LandVehicle\",\"Ship\"],Z_VehicleDistance];\n\nif (!i" !="[\"localtargets\",_localtargets,false];\n};\n};\n} count (_pos nearEntities [\"zZombie_Base\",50]);\n} else {\nwhile {alive _projectile} " !="this select 2;\n_pos = _this select 3;\n\n_listTalk = _pos nearEntities [\"zZombie_Base\",_distance];\n\n{\n_distance = _distance max " !="_list = (getposATL _agent) nearEntities [[\"CAManBase\",\"AllVehicles\"],300];\n_isSomeone = ({isPlayer _x} count _list) > 0;\n\n_timeN" !=";};\n\n_playerNear = {isPlayer _x} count ((getPosATL _body) nearEntities [\"CAManBase\", 10]) > 1;\nif (_playerNear) exitWith {dayz_a" !="\n\n\n_pos = getPosATL player;\nif ({isPlayer _x} count (_pos nearEntities [\"CAManBase\",40]) > 1) then {\n[_unit,\"hit\",0,false] call " !="[];\n\n_PlayerNear = {isPlayer _x} count ((getPosATL _item) nearEntities [\"CAManBase\", 12]) > 1;\nif (_PlayerNear) exitWith {locali" !="layerNear = {isPlayer _x} count (([_obj] call FNC_GetPos) nearEntities [\"CAManBase\", 12]) > 1;\nif (_PlayerNear && (_isMine or _o" !="hicle _player] call FNC_getPos;\n\n\n_findNearestPole = _pos nearEntities [\"Plastic_Pole_EP1_DZ\", _distance];\n\n_IsNearPlot = count " !="layerNear = {isPlayer _x} count ((getPosATL cursortarget) nearEntities [\"CAManBase\", 10]) > 1;\nif (_playerNear) exitWith {\ndayz_" !="etPos;\n\nif (surfaceIsWater _location && {count (_location nearEntities [\"Ship\",8]) > 0}) then {\ndeleteVehicle _sign;\nlocalize \"S" !="yerNear = {isPlayer _x} count (([player] call FNC_GetPos) nearEntities [\"CAManBase\", 12]) > 1;\nif (_playerNear) exitWith {locali" !="ag_tickTime);\n_playerCheck = ({isPlayer _x} count (player nearEntities [\"AllVehicles\",5]) > 1);\n_zedCheck = ((count (player near" !="(_this select 1) && isServer && (({isPlayer _x} count (_z nearEntities ['CAManBase',150])) == 0)) exitWith { _z call sched_co_de" !=" do {\nuiSleep 5;\n};\nhideBody _body;\n\n\n\n\n\n\n_inRange = _pos nearEntities [\"CAManBase\",100];\n{\nif ((isPlayer _x) && {_x != player})" !=" {\n_PlayerNear = {isPlayer _x} count ((getPosATL _holder) nearEntities [\"CAManBase\", 12]) > 1;\nif (_PlayerNear) exitWith {locali" !="yerNear = {isPlayer _x} count (([_plant] call FNC_GetPos) nearEntities [\"CAManBase\", 12]) > 1;\nif (_playerNear) exitWith {dayz_a" !="layerNear = {isPlayer _x} count (([_obj] call FNC_GetPos) nearEntities [\"CAManBase\", 12]) > 1;\nif (_playerNear) exitWith {dayz_a" !="\n_ammo = \"RunOver\";\n};\n} count (([_unit] call fnc_getPos) nearEntities [[\"Air\",\"LandVehicle\",\"Ship\"],3]);\n};\n};\n};\n\n_end = false" !="{\n_liftHeli = _x;\n_found = true;\n};\n};\n};\n} count (player nearEntities [DZE_HeliAllowTowFrom,15]);\n};\n\nlocal _attached = _cursor" !="z_fn_array_any);\n};\n\nlocal _vehClose = (getPosATL player) nearEntities [[\"Car\",\"Tank\",\"Helicopter\",\"Plane\",\"StaticWeapon\",\"Ship\"" !=" = false;\n\nif (!isNull _this) then {\n_nearPlayers = _this nearEntities [\"CAManBase\", 12];\n_playerNear = ({isPlayer _x} count _ne" !="ePeople = if (DZE_doorManagementMustBeClose) then {player nearEntities [\"CAManBase\", 12]} else {playableUnits};\n\n{\nif (isPlayer " !"\n\n_PlayerNear = {isPlayer _x} count ((getPosATL _vehicle) nearEntities [\"CAManBase\", 12]) > 1;\nif (_PlayerNear) exitWith {" !="layerNear = {isPlayer _x} count (([_obj] call FNC_GetPos) nearEntities [\"CAManBase\", 10]) > 1;\nif (_playerNear) exitWith {dayz_a" !"arestVehicle),_x];\n};\n} count (([player] call fnc_getPos) nearEntities [[\"Air\",\"LandVehicle\",\"Ship\"],30]);\n\nif (count _findNeare" !"arPlayers = {(isPlayer _x && _x != player)} count (player nearEntities [\"CAManBase\",8]);\n\nif (!(_object isKindOf \"ATV_Base_EP1\")" !="ePeople = if (DZE_plotManagementMustBeClose) then {player nearEntities [\"CAManBase\", 12]} else {playableUnits};\n\n{\nif (isPlayer " !="lot\"];\n\nlbClear 7002;\n_plots = ([player] call FNC_getPos) nearEntities [\"Plastic_Pole_EP1_DZ\",15];\n_thePlot = _plots select 0;\n_" !="_area_preview = 1;\n\n_target = (([player] call FNC_getPos) nearEntities [\"Plastic_Pole_EP1_DZ\",15]) select 0;\n_objects = nearestO" !="_PlotPole select 0;\n_target = (([player] call FNC_getPos) nearEntities [\"Plastic_Pole_EP1_DZ\",15]) select 0;\n\n_buildables = DZE_" !=" == \"\") exitWith {};\n\n_plots = ([player] call FNC_getPos) nearEntities [\"Plastic_Pole_EP1_DZ\",15];\n\n_thePlot = _plots select 0;\n" !="here100cm_EP1\"; \n\n\n_thePlot = (([player] call FNC_getPos) nearEntities [\"Plastic_Pole_EP1_DZ\",15]) select 0;\n_center = getPosASL" !"arPlayers = {(isPlayer _x && _x != player)} count (player nearEntities [\"CAManBase\",8]);\n\nif ((_object isKindOf \"C130J_US_EP1\" o" !="RANGE = 1500;};CA_ZOMBIE_COUNT = count ((position player) nearEntities ['zZombie_Base',CA_GPS_RANGE]); CA_MAN_COUNT = count ((po" !"ayerNear = {isPlayer _x} count (([_body] call FNC_GetPos) nearEntities [\"CAManBase\", 10]) > 1;\nif (_playerNear) exitWith {dayz_a"1 nearestObject !="licVariableEventHandler {_pos = (_this select 1); _obj = nearestObjects [_pos, DZE_isWreckBuilding, 5]; if (count _obj > 0) then" !=" 0;\n_whatIwant = _this select 1;\n_ret = false;\n\n_flame = nearestObjects [_fireplace, [\"flamable_DZ\"], 1];\n_flame = if (count _fl" !="Whitelisted = [];\n_pointsNearby = [];\n_findWhitelisted = nearestObjects [_pos,_whitelist,(_radius + DZE_snapExtraRange)]-[_objec" !=".sqf\"\n\n\n\n\n\nprivate \"_object\";\n\n{\n_object = (_x select 0) nearestObject (_x select 1);\n_object hideObject true;\n_object setVariab" !="\ncall dayz_meleeMagazineCheck;\n{player reveal _x} count (nearestObjects [_position,[\"AllVehicles\",\"WeaponHolder\",\"Land_A_tent\",\"" !="ks.sqf\"\nsetMousePosition [0.5, 0.5];\n\nprivate [\"_exit\",\"_nearestObjects\",\"_rID\",\"_display\",\"_cTarget\",\"_dis\",\"_friendlyTo\",\"_las" !="eenMsg = localize 'str_player_setup_completed';\n_torev4l=nearestObjects [_setPos, Dayz_plants + DayZ_GearedObjects + [\"AllVehicl" !=") then {\n_pPos = [player] call FNC_GetPos;\n_fireplaces = nearestObjects [_pPos, [\"flamable_DZ\",\"Land_Fire\",\"Land_Campfire\"], 8];" !=" \n\n)\nmax 0;\n\nif (_scaleLight < 0.9) then {\n\n_nearFlare = nearestObject [getPosATL (vehicle player),\"RoadFlare\"];\nif (!isNull _ne" !=" call _check}) exitWith { \n_inside = true;\n};\n} forEach (nearestObjects [_unit, [\"Building\"], 50]);\n};\n\n\n_inside\n" !="= _this select 0;\n_ammo = _this select 1;\n\n_projectile = nearestObject [_unit, _ammo];\n_pos = getPosATL _projectile;\n\nif (_ammo " !="\n};\nif (\"workshop\" in _needNear) then {\n_isNear = count (nearestObjects [player, DZE_Workshops, _distance]);\nif(_isNear == 0) th" !="ingPlayer = player;\n_dir = round(random 360);\n_helipad = nearestObjects [player, [\"HeliHCivil\",\"HeliHempty\"], 100];\n\n\nif (count " !="1\",\"land_smd_water_pump\"];\n\n_canFill = call {\n\nif (count nearestObjects [_posATL,_wells,4] > 0) exitwith {[true,false]};\nif (toL" !="d) exitWith {\n_nearWaterHole = [true,_pond];\n};\n} count (nearestObjects [_x, [], 1]);\n\nif (_nearWaterHole select 0) exitWith {};" !="bj select 4;\n_projectile = _obj select 6;\n\n_projectile = nearestObject [_unit,_ammo];\n_endPos = getPosATL _projectile;\n_doWait =" !="_plantOutput select _index;\n_countOut = 1;\n};\n};\n} count nearestObjects [([player] call FNC_getPos), [], 10];\n\nif (count _findNe" !=" !r_player_unconscious && !_onLadder);\n\n_nearByObjects = nearestObjects [player,_objects,_range];\n\nif (count _nearByObjects == 0" !="= \"workshop\") exitwith {\n_distance = 3;\n_isNear = count (nearestObjects [_pos, DZE_Workshops, _distance]);\nif (_isNear == 0) the" !="earestPole) then {_pos} else {_nearestPole};\nif ((count (nearestObjects [_center,_buildables,_distance])) >= DZE_BuildingLimit) " !="_ammo in [\"Dragged\",\"RunOver\"])}) then {\n_vehicleArray = nearestObjects [([vehicle _unit] call fnc_getPos),[\"Air\",\"LandVehicle\"," !="n _rocks) exitWith { _findNearestRock = _x; };\n} foreach nearestObjects [getPosATL player, [], 8];\n\n\nif (!isNull _findNearestRoc" !="modeltoWorld [0,0,0]};\n_holder = objNull;\n\n\n_nearByPile= nearestObjects [_pos, [\"WeaponHolder\",\"WeaponHolderBase\"],2];\n\nif (coun" !="r);\nlocal _uid = getPlayerUID player;\nlocal _nearLight = nearestObject [player,\"LitObject\"];\nlocal _canPickLight = false;\nlocal " !="p = {\nlocal _doors = [];\nif (r_drag_sqf) then {\n_doors = nearestObjects [player, DayZ_DropDrageeObjects, 3]; \nif (count _doors >" !"With {};\nif (!_unconscious) exitWith {};\n\n_dropObjects = nearestObjects [player, DayZ_DropDrageeObjects, 3];\nif (count _dropObje" !"Name) in dayz_trees}) exitWith {\n\n_tree = _x;\n};\n} count nearestObjects [getPosATL player, [], 20];\n\nif (!isNull _tree) then {\n\n" !="ntities [\"Plastic_Pole_EP1_DZ\",15]) select 0;\n_objects = nearestObjects [_target, DZE_maintainClasses, DZE_maintainRange];\n\n_obj" !="E_LockableStorage + [\"DZ_storage_base\"];\n_count = count (nearestObjects [_target,_buildables,_range]);\n\n_colour = \"#ffffff\";\n\nif" !="e;\n_num = ceil (random (player distance _x));\n};\n} count nearestObjects [player, [], 50];\n\nfor \"_i\" from 1 to 10 do {\nif (!_ispo" !="j select 4;\n\n_projectile = _obj select 6;\n\n_projectile = nearestObject [_unit,_ammo];\n_vUp = vectorUp _projectile;\n_endPos = get" 1 nearObjects !="ratorRunning\",false]))} count (([player] call FNC_getPos) nearObjects [\"Generator_DZ\",30]);\nif (_findNearestGen > 0) then {\ns_pl" !="lders = dayz_currentWeaponHolders - 1;\n} count (_worldPos nearObjects [\"ReammoBox\", 1]);\n\nif (_lootChance > random 1 && {dayz_cu" !="rgets == 0) then {\nprivate \"_objects\";\n\n_objects = _agent nearObjects [\"GrenadeHand\", 300]; \n{\nif (!(_x in _targets)) then {\nif " !="er] call FNC_GetPos;\n_isNear = {inflamed _x} count (_pPos nearObjects _distance);\nif(_isNear == 0) then {\n_abort = true;\n_reason" !="s select 0;\n_sign = _this select 1;\n_near = count (player nearObjects [_class,50]);\n\n[_class,_sign,_near] spawn {\n_class = _this" !="with {\n_distance = 3;\n_isNear = {inflamed _x} count (_pos nearObjects _distance);\nif (_isNear == 0) then {\n_abort = true;\n_reaso" !=" (_nearWaterHole select 0) exitWith {};\n} forEach (player nearObjects [\"waterHoleProxy\",50]);\n\n_nearWaterHole" !="unt _zeds;\n\n\ndayz_currentWeaponHolders = count (_position nearObjects [\"ReammoBox\",_radius]);\n\n\nlocal _vehicle = vehicle player;" !="yer] call FNC_GetPos;\n_isNear = {inflamed _x} count (_pos nearObjects 3);\nif (_isNear == 0) exitWith {dayz_actionInProgress = fa" 1 onMapSingleClick 1 playableUnits !"for [{_y=0},{_y < count(playableUnits)},{_y=_y+1}] do {" !"typeName player == \"OBJECT\" && {(player in playableUnits" !"AND {((alive _x) AND {((vehicle _x) distance _obj < 150)})}} count playableUnits)}) then {" !="_local = { _unit distance _x < _dis; } count playableUnits <= 1;" !"ManagementMustBeClose) then { player nearEntities [\"CAManBase\", 10] } else { playableUnits };" !=" = false;\n};\n};\n};\nif (!_isOk) exitWith {false};\n} count playableUnits;\n\n_isOk\n" !="lose) then {player nearEntities [\"CAManBase\", 12]} else {playableUnits};\n\n{\nif (isPlayer _x) then {\n_friendUID = getPlayerUID _x" From cc005a973a1540f8bf36729e313b679711c5523f Mon Sep 17 00:00:00 2001 From: A Man Date: Wed, 18 Aug 2021 11:01:29 +0200 Subject: [PATCH 13/40] Add toggleable Safe Zone Relocate by salival --- SQF/dayz_code/configVariables.sqf | 3 ++ SQF/dayz_server/system/safeZoneRelocate.sqf | 39 +++++++++++++++++++++ SQF/dayz_server/system/server_monitor.sqf | 3 ++ 3 files changed, 45 insertions(+) create mode 100644 SQF/dayz_server/system/safeZoneRelocate.sqf diff --git a/SQF/dayz_code/configVariables.sqf b/SQF/dayz_code/configVariables.sqf index c180ee6c8..0a366bf81 100644 --- a/SQF/dayz_code/configVariables.sqf +++ b/SQF/dayz_code/configVariables.sqf @@ -23,6 +23,9 @@ if (isServer) then { // ZSC Z_globalBankingTraders = false; // Enable banking NPCs at trader cities. + + // Safe Zone Relocating + DZE_SafeZone_Relocate = false; //Enables relocating of vehicles left in Safe Zones over a server restart. }; // Client diff --git a/SQF/dayz_server/system/safeZoneRelocate.sqf b/SQF/dayz_server/system/safeZoneRelocate.sqf new file mode 100644 index 000000000..e3e7f0d99 --- /dev/null +++ b/SQF/dayz_server/system/safeZoneRelocate.sqf @@ -0,0 +1,39 @@ +/* + Safe Zone Relocate by salival (https://github.com/oiad) +*/ + +private ["_customPosition","_minDist","_maxDist","_maxDamage","_message","_nearVehicles","_objDist","_position","_safeZonePos","_safeZoneRadius","_useCustomPosition","_unlock"]; + +_useCustomPosition = false; // Enable a custom position to move vehicles to (i.e a junk yard) +_customPosition = [6942.64,15121.6,0]; // Position for vehicles to be moved to if _useCustomPosition = true; +_minDist = 5; // Minimum distance from the custom position to move vehicles to +_maxDist = 1000; // Maximum distance from the safe zone position to find a safe position or custom position for relocation, setting this too low can make vehicles spawn very close to other vehicles. +_objDist = 15; // Minimum distance from the safe position for relocation to the center of the nearest object. Specifying quite a large distance here will slow the function and might often fail to find a suitable position. +_unlock = false; // Unlock vehicle when moved from the safe zone? +_maxDamage = 0.75; // Vehicles above or equal to this amount of damage will be deleted + +{ + _safeZonePos = _x select 0; + _safeZoneRadius = _x select 1; + _nearVehicles = _safeZonePos nearEntities [["Air","LandVehicle","Ship"],_safeZoneRadius]; + { + if (damage _x >= _maxDamage) then { + _message = format ["[SAFEZONE] %1 was deleted from the server for being too damaged before relocate: @%2 %3",typeOf _x,mapGridPosition _x,getPosATL _x]; + diag_log _message; + [_x getVariable["ObjectID","0"],_x getVariable["ObjectUID","0"],_x] call server_deleteObjDirect; + deleteVehicle _x; + } else { + if (_useCustomPosition) then { + _position = [_customPosition,_minDist,_maxDist,_objDist,1,0,0,[]] call BIS_fnc_findSafePos; + } else { + _position = [_safeZonePos,(_safeZoneRadius + 50),_maxDist,_objDist,if (_x isKindOf "Ship") then {2} else {0},0,0,[],[_safeZonePos,_safeZonePos]] call BIS_fnc_findSafePos; + }; + _x setPos _position; + [_x,"position"] call server_updateObject; + if (_unlock && {locked _x}) then {_x setVehicleLock "UNLOCKED"}; + + _message = format ["[SAFEZONE] %1 was moved out of a safe zone to: @%2 %3",typeOf _x,mapGridPosition _position,_position]; + diag_log _message; + }; + } forEach _nearVehicles; +} forEach DZE_safeZonePosArray; diff --git a/SQF/dayz_server/system/server_monitor.sqf b/SQF/dayz_server/system/server_monitor.sqf index 2fa703139..10bc401c1 100644 --- a/SQF/dayz_server/system/server_monitor.sqf +++ b/SQF/dayz_server/system/server_monitor.sqf @@ -466,4 +466,7 @@ if (_hiveLoaded) then { //Update gear last after all dynamic vehicles are created to save random loot to database (low priority) {[_x,"gear"] call server_updateObject} count _vehiclesToUpdate; }; + if (DZE_SafeZone_Relocate) then { + execVM "\z\addons\dayz_server\system\safeZoneRelocate.sqf"; + }; }; From c10a436c71a9737fc4144f393fe2d364f80f0de0 Mon Sep 17 00:00:00 2001 From: A Man Date: Wed, 18 Aug 2021 11:20:30 +0200 Subject: [PATCH 14/40] Fix 200Rnd 40mm FV510 HE and Sabot could not be used --- SQF/dayz_code/Configs/CfgMagazines/Magazines/VehicleAmmo.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SQF/dayz_code/Configs/CfgMagazines/Magazines/VehicleAmmo.hpp b/SQF/dayz_code/Configs/CfgMagazines/Magazines/VehicleAmmo.hpp index d908f9d96..31a7fd044 100644 --- a/SQF/dayz_code/Configs/CfgMagazines/Magazines/VehicleAmmo.hpp +++ b/SQF/dayz_code/Configs/CfgMagazines/Magazines/VehicleAmmo.hpp @@ -1484,7 +1484,7 @@ class 8Rnd_82mmILLUM_2B14: 8Rnd_82mmHE_2B14 }; class 200Rnd_40mmHE_FV510: Vehicle_ammo_base { - scope = 1; + scope = 2; displayName = $STR_DZ_MAG_200RND_FV510HE_NAME; descriptionShort = $STR_DZ_MAG_200RND_FV510HE_DESC; ammo = "Sh_40_HE"; From 343128bb0c1e405cf04e71344a6716a8932057dd Mon Sep 17 00:00:00 2001 From: A Man Date: Wed, 18 Aug 2021 13:14:17 +0200 Subject: [PATCH 15/40] Add toggleable Vehicle Service Point by salival --- SQF/dayz_code/actions/servicePoints/init.sqf | 176 ++++++++++++++++++ .../servicePoints/servicePointActions.sqf | 143 ++++++++++++++ SQF/dayz_code/configVariables.sqf | 118 ++++++++++++ SQF/dayz_code/init/compiles.sqf | 4 + .../DZE_Server_Config/BattlEye/scripts.txt | 23 +-- 5 files changed, 453 insertions(+), 11 deletions(-) create mode 100644 SQF/dayz_code/actions/servicePoints/init.sqf create mode 100644 SQF/dayz_code/actions/servicePoints/servicePointActions.sqf diff --git a/SQF/dayz_code/actions/servicePoints/init.sqf b/SQF/dayz_code/actions/servicePoints/init.sqf new file mode 100644 index 000000000..09aefd287 --- /dev/null +++ b/SQF/dayz_code/actions/servicePoints/init.sqf @@ -0,0 +1,176 @@ +/* + Vehicle Service Point by Axe Cop + Rewritten for single currency, gems, briefcase support and 1.0.7 epoch compatibility by salival - https://github.com/oiad/ + + Requires DayZ Epoch 1.0.7 + + This version adds support for both single currency and gems (from the epoch 1.0.7 update) as well as the original epoch briefcase currency system. + Instead of pricing things like the original way, prices are now done on a "worth" similar to how coins are done. The price value of items are below. + + 1 silver = 1 worth + 1 10oz silver = 10 worth + 1 gold = 100 worth + 1 10oz gold = 1,000 worth + 1 briefcase = 10,000 worth + + Please see dayz_code\configVariables.sqf for the value of gems (DZE_GemWorthArray) and their relevant worth if they are enabled. + + Example config settings for DZE_SP_Refuel_Costs, DZE_SP_Repair_Costs and DZE_SP_Rearm_Costs: + + All 3 sections can either be made free, disabled or a specifc price with the following examples: + + ["Air",localize "strwffree"] will make the vehicle config class of "Air" free for the specific action. + ["Air",localize "str_temp_param_disabled"] will make the vehicle config class of "Air" disabled for the specific action. + ["Air",2000] will make the vehicle config class of "Air" have a worth of 2000 for the specific action. + ["Armored_SUV_PMC",2000] will make the specific vehicle have a worth of 2000 for the specific action. + ["Armored_SUV_PMC",localize "strwffree"] will make the specific vehicle be free for the specific action. + ["Armored_SUV_PMC",localize "str_temp_param_disabled"] will make the specific vehicle be disabled for the specific action. + + Valid vehicle config classes as an example: "Air", "AllVehicles", "All", "APC", "Bicycle", "Car", "Helicopter", "Land", "Motorcycle", "Plane", "Ship", "Tank" +*/ + +private ["_folder","_actionTitleFormat","_actionCostsFormat","_message","_messageShown","_lastVehicle","_lastRole","_fnc_removeActions","_fnc_getCostsWep","_fnc_getCostsWep","_fnc_actionTitle","_fnc_isArmed","_fnc_getWeapons","_cycleTime","_servicePoints","_vehicle","_role","_costs","_actionTitle","_weapons","_weaponName"]; + +// general settings +_folder = "\z\addons\dayz_code\actions\servicePoints\"; // folder where the service point scripts are saved, relative to the mission file +_actionTitleFormat = "%1 (%2)"; // text of the vehicle menu, %1 = action name (Refuel, Repair, Rearm), %2 = costs (see format below) +_actionCostsFormat = "%2 %1"; // %1 = item name, %2 = item count +_message = localize "STR_CL_SP_MESSAGE"; // This is translated from your stringtable.xml in your mission folder root. Set to "" to disable +_cycleTime = 5; // Time in sections for how often the action menu will be refreshed and how often it will search for a nearby fuel station (setting this too low can make a lot of lag) + +_lastVehicle = objNull; +_lastRole = []; +_messageShown = false; + +SP_refuel_action = -1; +SP_repair_action = -1; +SP_rearm_actions = []; + +_fnc_removeActions = { + if (isNull _lastVehicle) exitWith {}; + _lastVehicle removeAction SP_refuel_action; + SP_refuel_action = -1; + _lastVehicle removeAction SP_repair_action; + SP_repair_action = -1; + { + _lastVehicle removeAction _x; + } forEach SP_rearm_actions; + SP_rearm_actions = []; + _lastVehicle = objNull; + _lastRole = []; +}; + +_fnc_getCosts = { + private ["_getVehicle","_getCosts","_cost","_getTypeName"]; + _getVehicle = _this select 0; + _getCosts = _this select 1; + _cost = []; + { + _getTypeName = _x select 0; + if (_getVehicle isKindOf _getTypeName) exitWith { + _cost = _x select 1; + }; + } forEach _getCosts; + _cost +}; + +_fnc_getCostsWep = { + private ["_weapon","_getCostsWep","_returnCostWep","_typeName"]; + _weapon = _this select 0; + _getCostsWep = _this select 1; + _returnCostWep = DZE_SP_Rearm_Defaultcost; + { + _typeName = _x select 0; + if (_weapon == _typeName) exitWith { + _returnCostWep = _x select 1; + }; + } forEach _getCostsWep; + _returnCostWep +}; + +_fnc_actionTitle = { + private ["_actionName","_actionCosts","_costsText","_return"]; + _actionName = _this select 0; + _actionCosts = _this select 1; + if (typeName _actionCosts == "STRING") then { + _costsText = _actionCosts; + } else { + _costsText = if (Z_SingleCurrency) then {format ["%1 %2",[_actionCosts] call BIS_fnc_numberText,CurrencyName]} else {format ["%1",[_actionCosts,true] call z_calcCurrency]}; + }; + _return = format [_actionTitleFormat,_actionName,_costsText]; + _return +}; + +_fnc_getWeapons = { + private ["_gWeaponsVehicle","_gWeaponsRole","_gWeapons","_gWeaponName","_gTurret","_gWeaponsTurret"]; + _gWeaponsVehicle = _this select 0; + _gWeaponsRole = _this select 1; + _gWeapons = []; + if (count _gWeaponsRole > 1) then { + _gTurret = _gWeaponsRole select 1; + _gWeaponsTurret = _gWeaponsVehicle weaponsTurret _gTurret; + { + _gWeaponName = getText (configFile >> "CfgWeapons" >> _x >> "displayName"); + if !(_gWeaponName in DZE_SP_Rearm_Ignore) then { + _gWeapons set [count _gWeapons, [_x,_gWeaponName,_gTurret]]; + }; + } forEach _gWeaponsTurret; + }; + _gWeapons +}; + +while {1==1} do { + _vehicle = vehicle player; + if (_vehicle != player) then { + _servicePoints = (nearestObjects [getPosATL _vehicle,DZE_SP_Classes,DZE_SP_MaxDistance]) - [_vehicle]; + if (count _servicePoints > 0) then { + if (assignedDriver _vehicle == player) then { + _role = ["Driver", [-1]]; + } else { + _role = assignedVehicleRole player; + }; + if (((str _role) != (str _lastRole)) || {_vehicle != _lastVehicle}) then { + call _fnc_removeActions; + }; + _lastVehicle = _vehicle; + _lastRole = _role; + if (DZE_SP_Refuel_Enable) then { + if (SP_refuel_action < 0) then { + _costs = [_vehicle,DZE_SP_Refuel_Costs] call _fnc_getCosts; + _actionTitle = [localize "config_depot.sqf8",_costs] call _fnc_actionTitle; + SP_refuel_action = _vehicle addAction [_actionTitle,_folder + "servicePointActions.sqf",["refuel",_costs,DZE_SP_Refuel_UpdateInterval,DZE_SP_Refuel_Amount],-1,false,true]; + }; + }; + if (DZE_SP_Repair_Enable) then { + if (SP_repair_action < 0) then { + _costs = [_vehicle,DZE_SP_Repair_Costs] call _fnc_getCosts; + _actionTitle = [localize "config_depot.sqf1",_costs] call _fnc_actionTitle; + SP_repair_action = _vehicle addAction [_actionTitle,_folder + "servicePointActions.sqf",["repair",_costs,DZE_SP_Repair_RepairTime],-1,false,true]; + }; + }; + if (DZE_SP_Rearm_Enable) then { + if ((count _role > 1) && {count SP_rearm_actions == 0}) then { + _weapons = [_vehicle,_role] call _fnc_getWeapons; + { + _weaponName = _x select 1; + _costs = [_weaponName,DZE_SP_Rearm_Costs] call _fnc_getCostsWep; + _actionTitle = [format["%1 %2",localize "config_depot.sqf5",_weaponName],_costs] call _fnc_actionTitle; + SP_rearm_action = _vehicle addAction [_actionTitle,_folder + "servicePointActions.sqf",["rearm",_costs,DZE_SP_Rearm_MagazineCount,_x],-1,false,true]; + SP_rearm_actions set [count SP_rearm_actions, SP_rearm_action]; + } forEach _weapons; + }; + }; + if (!_messageShown && {_message != ""}) then { + _messageShown = true; + _vehicle vehicleChat _message; + }; + } else { + call _fnc_removeActions; + _messageShown = false; + }; + } else { + call _fnc_removeActions; + _messageShown = false; + }; + uiSleep _cycleTime; +}; diff --git a/SQF/dayz_code/actions/servicePoints/servicePointActions.sqf b/SQF/dayz_code/actions/servicePoints/servicePointActions.sqf new file mode 100644 index 000000000..40dcec70a --- /dev/null +++ b/SQF/dayz_code/actions/servicePoints/servicePointActions.sqf @@ -0,0 +1,143 @@ +// Vehicle Service Point (Rearm) by Axe Cop +// Rewritten for single currency, gems, briefcase support and 1.0.7 epoch compatibility by salival - https://github.com/oiad/ +// Requires DayZ Epoch 1.0.7 for gem support. + +private ["_vehicle","_costs","_fuel","_magazineCount","_weapon","_type","_name","_weaponType","_weaponName","_turret","_magazines","_ammo","_textMissing","_pos","_message","_action","_damage","_selection","_strH","_disabled","_amount","_enoughMoney","_moneyInfo","_wealth","_success","_reason","_cmpt"]; + +_vehicle = _this select 0; + +_ammo = ""; +_reason = ""; + +_action = (_this select 3) select 0; + +_type = typeOf _vehicle; +_disabled = false; +_name = getText(configFile >> "cfgVehicles" >> _type >> "displayName"); + +_amount = (_this select 3) select 1; + +if (_action == "rearm") then { + _magazineCount = (_this select 3) select 2; + _weapon = (_this select 3) select 3; + + _weaponType = _weapon select 0; + _weaponName = _weapon select 1; + _turret = _weapon select 2; +}; + +if (typeName _amount == "STRING") then { + if (_amount == (localize "str_temp_param_disabled")) then { + if (_action == "rearm") then {_reason = format[localize "STR_CL_SP_UNABLE_REARM",_weaponName]; _disabled = true}; + if (_action == "repair") then {_reason = format[localize "STR_CL_SP_UNABLE_REPAIR",_name]; _disabled = true}; + if (_action == "refuel") then {_reason = format[localize "STR_CL_SP_UNABLE_REFUEL",_name]; _disabled = true}; + }; + if (_amount == (localize "strwffree")) then {_amount = 0}; +}; + +if (_disabled) exitWith {[_reason,1] call dayz_rollingMessages}; + +_enoughMoney = false; +_moneyInfo = [false, [], [], [], 0]; +_wealth = player getVariable [(["cashMoney","globalMoney"] select Z_persistentMoney),0]; + +if (Z_SingleCurrency) then { + _enoughMoney = (_wealth >= _amount); +} else { + Z_Selling = false; + if (Z_AllowTakingMoneyFromVehicle) then {false call Z_checkCloseVehicle}; + _moneyInfo = _amount call Z_canAfford; + _enoughMoney = _moneyInfo select 0; +}; + +_success = if (Z_SingleCurrency) then {true} else {[player,_amount,_moneyInfo,true,0] call Z_payDefault}; + +if (!_success && _enoughMoney) exitWith {systemChat localize "STR_EPOCH_TRADE_GEAR_AND_BAG_FULL"}; // Not enough room in gear or bag to accept change + +if (_enoughMoney) then { + _success = if (Z_SingleCurrency) then {_amount <= _wealth} else {[player,_amount,_moneyInfo,false,0] call Z_payDefault}; + if (_success) then { + if (Z_SingleCurrency) then { + player setVariable [(["cashMoney","globalMoney"] select Z_persistentMoney),(_wealth - _amount),true]; + }; + + [player,(getPosATL player),50,"refuel"] spawn fnc_alertZombies; + _vehicle engineOn false; + if (_action == "refuel") then { + [format[localize "STR_CL_SP_REFUELING",_name],1] call dayz_rollingMessages; + + while {vehicle player == _vehicle} do { + if ([0,0,0] distance (velocity _vehicle) > 1) exitWith {[format[localize "STR_CL_SP_REFUELING_STOPPED",_name],1] call dayz_rollingMessages}; + _fuel = (fuel _vehicle) + ((_this select 3) select 3); + if (_fuel > 0.99) exitWith { + _vehicle setFuel 1; + [format[localize "STR_CL_SP_REFUEL_OK",_name],1] call dayz_rollingMessages; + }; + _vehicle setFuel _fuel; + uiSleep ((_this select 3) select 2); + }; + }; + if (_action == "repair") then { + [player,(getPosATL player),50,"repair"] spawn fnc_alertZombies; + + _hitpoints = _vehicle call vehicle_getHitpoints; + _allRepaired = true; + { + if ((vehicle player != _vehicle) || {[0,0,0] distance (velocity _vehicle) > 1}) exitWith { + _allRepaired = false; + [format[localize "STR_CL_SP_REPAIRING_STOPPED",_name],1] call dayz_rollingMessages; + }; + _hits = [_vehicle,_x] call object_getHit; + _damage = _hits select 0; + if (_damage > 0) then { + _cmpt = []; + { + if (_forEachIndex > 2) then {_cmpt set [count _cmpt,_x]}; + } forEach toArray (_x); + _cmpt = toString _cmpt; + [format[localize "STR_CL_SP_REPAIRING",_cmpt],1] call dayz_rollingMessages; + _selection = getText(configFile >> "cfgVehicles" >> _type >> "HitPoints" >> _x >> "name"); + _strH = "hit_" + (_selection); + _vehicle setHit[_selection,0]; + _vehicle setVariable [_strH,0,true]; + uiSleep ((_this select 3) select 2); + }; + } forEach _hitpoints; + PVDZ_veh_Save = [_vehicle,"repair",true]; + publicVariableServer "PVDZ_veh_Save"; + + if (_allRepaired) then { + _vehicle setDamage 0; + _vehicle setVelocity [0,0,1]; + [format[localize "STR_CL_SP_REPAIR_OK",_name],1] call dayz_rollingMessages; + }; + }; + + if (_action == "rearm") then { + _magazines = getArray (configFile >> "CfgWeapons" >> _weaponType >> "magazines"); + _ammo = _magazines select 0; + + if (_weaponType == "CMFlareLauncher") then { + _vehicle removeWeaponTurret ["CMFlareLauncher",_turret]; + for "_i" from 1 to _magazineCount do {_vehicle addMagazineTurret [_ammo,_turret];}; + _vehicle addWeaponTurret ["CMFlareLauncher",_turret]; + } else { + {_vehicle removeMagazinesTurret [_x,_turret];} forEach _magazines; + + for "_i" from 1 to _magazineCount do {_vehicle addMagazineTurret [_ammo,_turret];}; + }; + + [format[localize "STR_CL_SP_REARMED",_weaponName,_name],1] call dayz_rollingMessages; + }; + call player_forceSave; + } else { + systemChat localize "STR_EPOCH_TRADE_DEBUG"; + }; +} else { + _itemText = if (Z_SingleCurrency) then {CurrencyName} else {[_amount,true] call z_calcCurrency}; + if (Z_SingleCurrency) then { + systemChat format[localize "STR_CL_SP_FAIL_COINS",[_amount] call BIS_fnc_numberText,_itemText,_action,_name]; + } else { + systemChat format[localize "STR_CL_SP_FAIL_BRIEFCASES",_itemText,_action,_name]; + }; +}; diff --git a/SQF/dayz_code/configVariables.sqf b/SQF/dayz_code/configVariables.sqf index 0a366bf81..11be994e8 100644 --- a/SQF/dayz_code/configVariables.sqf +++ b/SQF/dayz_code/configVariables.sqf @@ -206,6 +206,124 @@ if (!isDedicated) then { ["ItemGPS",localize "STR_CL_LV_LOCATE_VEHICLES","[] spawn locateVehicle;","true"] ]; }; + + // Service Points for Refuel, Repair and Rearm + DZE_Service_Points = false; + + if (DZE_Service_Points) then { + // Valid vehicle config classes as an example: "Air", "AllVehicles", "All", "APC", "Bicycle", "Car", "Helicopter", "Land", "Motorcycle", "Plane", "Ship", "Tank" + DZE_SP_Classes = ["Map_A_FuelStation_Feed","Land_A_FuelStation_Feed","FuelPump_DZ"]; // service point classes, You can also use dayz_fuelpumparray by its self for all the default fuel pumps. + DZE_SP_MaxDistance = 50; // maximum distance from a service point for the options to be shown + + // Refuel Settings + DZE_SP_Refuel_Enable = true; // enable or disable the refuel option + if (DZE_SP_Refuel_Enable) then { + DZE_SP_Refuel_Costs = [ + //["Ship",localize "str_temp_param_disabled"], // All vehicles are disabled to refuel. + ["Land",localize "strwffree"], // All vehicles are free to refuel. + ["Air",1000] //1000 worth is 1 10oz gold for all air vehicles + ]; + DZE_SP_Refuel_UpdateInterval = 1; // update interval (in seconds) + DZE_SP_Refuel_Amount = 0.05; // amount of fuel to add with every update (in percent) + }; + + + // Repair Settings + DZE_SP_Repair_Enable = true; // enable or disable the repair option + if (DZE_SP_Repair_Enable) then { + DZE_SP_Repair_RepairTime = 2; // time needed to repair each damaged part (in seconds) + DZE_SP_Repair_Costs = [ + ["Air",4000], // 4000 worth is 4 10oz gold. + ["AllVehicles",2000] // 2000 worth is 2 10oz gold for all other vehicles + ]; + }; + + // Rearm Settings + DZE_SP_Rearm_Enable = true; // enable or disable the rearm option + if (DZE_SP_Rearm_Enable) then { + DZE_SP_Rearm_Defaultcost = 10000; // Default cost to rearm a weapon. (10000 worth == 1 briefcase) + DZE_SP_Rearm_MagazineCount = 2; // amount of magazines to be added to the vehicle weapon + DZE_SP_Rearm_Ignore = [(localize "str_dn_horn"),(localize "str_dn_laser_designator")]; // Array of weapon display names that are ignored in the rearm listing. + /* + DZE_SP_Rearm_Costs is an array based on the AMMO type. I.e M240, MK19, PKM, PKT, M134 etc. + You can disable certain ammo types from being able to be rearmed by making the price disabled text + example: ["M134",localize "str_temp_param_disabled"] + */ + DZE_SP_Rearm_Costs = [ + [(localize "str_mn_40rnd_grad"),localize "str_temp_param_disabled"], // BM-21 Grad is disabled (ammo is broken) + [(localize "str_dn_flarelauncher"),2000], // Flares + [(localize "str_ep1_dn_smokelauncher"),2000], // Smokes + [(localize "str_dn_pk"),5000], // PKM + [(localize "str_dn_pkt"),5000], // PKT + [(localize "str_sn_m134"),5000], // M134 + [(localize "str_dn_ags30"),5000], // AGS-30 + [(localize "str_dn_dshkm"),5000], // DSHKM + [(localize "str_DN_VIKHR_CCP"),5000], // Vikhr 9A4172 + [(localize "str_baf_baf_l94a10"),5000], // L94A1 Chain Gun + [(localize "str_baf_crv70"),5000], // CRV7 + [(localize "str_baf_ctws0"),5000], // CTWS + [(localize "str_baf_m621_manual0"),5000], // M621 + [(localize "str_dn_2a38m"),5000], // 2A38M Gun + [(localize "str_dn_2a42"),5000], // 2A42 + [(localize "str_dn_2a46m"),5000], // 2A46M Cannon + [(localize "str_dn_2a46m_rocket"),5000], // 9M119M Refleks rocket + [(localize "str_dn_2a70"),5000], // 2A70 100mm + [(localize "str_dn_2a70_rocket"),5000], // 9M117M1 Arkan + [(localize "str_dn_2a72"),5000], // 2A72 30mm + [(localize "str_dn_80mmlauncher_burst"),5000], // S-8 + [(localize "str_dn_9m311laucher"),5000], // Tunguska 9M311 + [(localize "str_dn_ags17"),5000], // AGS-17 + [(localize "str_dn_d81"),5000], // D-81 + [(localize "str_dn_dt_veh"),5000], // DT + [(localize "str_dn_hellfire"),5000], // AGM-114 Hellfire + [(localize "str_dn_kord"),5000], // KORD + [(localize "str_dn_m197"),5000], // M197 + [(localize "str_dn_m240"),5000], // M240 + [(localize "str_dn_m242"),5000], // M242 + [(localize "str_dn_m256"),5000], // M256 + [(localize "str_dn_sidewinderlaucher"),5000], // AIM-9L Sidewinder + [(localize "str_dn_zis_s_53"),5000], // ZiS-S-53 + [(localize "str_ep1_dn_57mmlauncher"),5000], // S-5 + [(localize "str_ep1_dn_azp85"),5000], // AZP-23 + [(localize "str_ep1_dn_ffarlauncher"),5000], // Hydra + [(localize "str_ep1_dn_m2"),5000], // M2 Machinegun + [(localize "str_ep1_dn_m230"),5000], // M230 + [(localize "str_ep1_dn_m32_ep1"),5000], // M32 + [(localize "str_ep1_dn_mk19"),5000], // Mk19 + [(localize "str_ep1_dn_yakb"),5000], // Yak-B + [(localize "str_mn_at2_mi24d"),5000], // Falanga 3M11 + [(localize "str_mn_at5_bmp2"),5000], // Konkurs 9M113 + [(localize "str_mn_stinger"),5000], // FIM-92F Stinger + [(localize "str_mn_12rnd_mlrs"),5000], // MLRS + [(localize "str_baf_baf_l2a10"),5000], // L111A1 + [(localize "STR_DN_D10_CCP"),5000], // D-10 + [(localize "str_dn_tow"),5000], // M220 TOW + [(localize "str_dn_zu23"),5000], // ZU-23 + [(localize "str_dn_kpvt"),5000], // KPVT + [(localize "str_dn_m3p"),5000], // M3P + [(localize "str_dn_spg9"),5000], // SPG-9 + [(localize "str_dn_gau8"),5000], // GAU-8 + [(localize "str_dn_maverick"),5000], // AGM-65 Maverick + [(localize "str_dn_gbu12"),5000], // GBU-12 + [(localize "str_dn_gau12"),5000], // GAU-12 + [(localize "STR_DN_KH29_CCP"),5000], // Kh-29L + [(localize "str_dn_r73"),5000], // R-73 + [(localize "str_mn_fab250"),5000], // FAB-250 + [(localize "str_dn_gsh301"),5000], // GSh-301 + [(localize "str_mn_23mm_gsh23l"),5000], // GSh-23L + [(localize "str_sn_grenade"),5000], // Grenade + [(localize "str_mn_at9_mi24p"),5000], // Ataka-V 9M120 + [(localize "str_mn_at6_mi24v"),5000], // Shturm 9K114 + + ["SGMT",5000], // SGMT no localization available + ["M68",5000], // M68 no localization available + ["GAU-22",5000], // GAU-22 no localization available + ["GSh-30",5000], // GSh-30 no localization available + ["M60",5000], // M60 no localization available + ["GSh-30K",5000] // GSh-30K no localization available + ]; + }; + }; }; // Both diff --git a/SQF/dayz_code/init/compiles.sqf b/SQF/dayz_code/init/compiles.sqf index f1260455d..72432bbe1 100644 --- a/SQF/dayz_code/init/compiles.sqf +++ b/SQF/dayz_code/init/compiles.sqf @@ -207,6 +207,10 @@ if (!isDedicated) then { if (DZE_LocateVehicle) then { locateVehicle = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\locateVehicle.sqf"; }; + + if (DZE_Service_Points) then { + execVM "\z\addons\dayz_code\actions\servicePoints\init.sqf"; + }; // Weather if (DZE_Weather in [3,4]) then { diff --git a/Server Files/DZE_Server_Config/BattlEye/scripts.txt b/Server Files/DZE_Server_Config/BattlEye/scripts.txt index 3e0540531..cbfbfb18a 100644 --- a/Server Files/DZE_Server_Config/BattlEye/scripts.txt +++ b/Server Files/DZE_Server_Config/BattlEye/scripts.txt @@ -1,8 +1,8 @@ //new2 -1 addAction !", \"\\z\\addons\\dayz_code\\" !=" = -1;\n};\nif (_s1 > 0) then {\ns_player_toggleSnap = player addaction [format[\"\" + \"Snap: %1\" +\"\",snapAc" !="-1;\n};\n\nif (_s1 > 0) then {\ns_player_toggleVector = player addaction [format[\"\" + localize \"STR_EPOCH_ACTIO" !"\"addAction\", " !"raddAction" +1 addAction !", \"\\z\\addons\\dayz_code\\" !=" = -1;\n};\nif (_s1 > 0) then {\ns_player_toggleSnap = player addaction [format[\"\" + \"Snap: %1\" +\"\",snapAc" !="-1;\n};\n\nif (_s1 > 0) then {\ns_player_toggleVector = player addaction [format[\"\" + localize \"STR_EPOCH_ACTIO" !"\"addAction\", " !"raddAction" !="_costs] call _fnc_actionTitle;\nSP_refuel_action = _vehicle addAction [_actionTitle,_folder + \"servicePointActions.sqf\",[\"refuel\"" 1 addBackpack !"addBackpackCargoGlobal [_x,(_objWpnQty select _counter)];\n_counter = _counter + 1;\n} count _objWpnTypes;" !"addBackpack _item;\n};\n};\nformat[localize \"str_c" !"case 3: {_holder addBackpackCargoGlobal [_item,_amount];};\n};\n\n\n" !"}) then {\n_newUnit addBackpack _newBackpackType;\n\nd" !"addBackpack _backpackType; \ndayz_myBackpack = unitBackpack player;\n\n\n\n_backpackWpnT" !"};\n} count _wpns;\n\nif (_bcpk != \"\") then {\nplayer addBackpack" !"1 == \"trade_backpacks\") then {\nDZE_myVehicle addBackpack" !"7 addBackpackCargoGlobal [_create,_qty];\n};\nif (surfaceIsWater" !"case 5: {_item addBackpackCargoGlobal [_itemOut,_countOut]}; \n};\n} else" !="m (2 + 1)];\n};\n};\n\nif (_type == 5) exitWith {\n_container addBackpackCargoGlobal [_item, 1];\n};\n};\n} count ([_group, _count] cal" !="5) exitWith {\nif (isNull unitBackpack _unit) then {\n_unit addBackpack _item;\n};\n};\n};\n} foreach ([_group, _count] call dz_fn_loo" !="al [_itemOut,_countOut]};\nif (_type == 5) exitwith {_item addBackpackCargoGlobal [_itemOut,_countOut]}; \n};\n} else {\n_item addMa" 1 addMagazine !raddMagazine !"\"addMagazine\", " !"if (isClass (configfile >> \"cfgmagazines\" >> (_item))) then {_unit addMagazine _item;};\n};\n};\n};\n};" !"_vehicle addMagazineTurret [_ammo,_turret];\nplayer removeMagazine" !"if (dayz_actionInProgress) exitWith {" !"addMagazine _x;\n};\n} foreach _items;\nformat[loc" !"addMagazine \"ItemAntibiotic\" + str(_remain" !"sumeDrop\") == 0) then\n{\nplayer addMagazine" !"ion) do {\ncase \"CfgWeapons\":\n{\nplayer addWeapon _item;\n};\ncase \"CfgMagazines\":\n{\nplayer addMagazine" !"addMagazine [\"12Rnd_Quiver_Wood\",_qty_quiv" !" >> \"containerEmpty\")" !"plant) select 1;\n{\n_item addMagazine" !"addMagazineCargoGlobal [_itemtodrop,1];\n\nformat[localize \"str_f" !"addMagazine _attachment;\n\n\n(findDisplay 10" !"addMagazine getText (configFile >> \"CfgMagazines\" >> _x >> _water" !"};\n};\n\n\nswitch _type do {\ncase 1: {_holder addMagazine" !"do {\n_animalbody addMagazine _rawfoodtype" !"addMagazine _item;\n};\n};\n_idc = _idc" !"_newUnit addMagazine [_x select 0,_x select 1]" !"addMagazine _x } count MeleeMagazines;\n} e" !"_meleeNum < 1) then {\nplayer addMagazine" !"addMagazine _qtyRemaining;\n};\n};\ntrue" !"bag\";\n};\n};\n(_this select 0) addMagazine" !"addMagazine \"wholeBloodBagBNEG\";\n};\n};" !"_qty > 0) then {\n_firePlace addMagazine" !"ONEG\" }; \n};\ndayz_myBackpack addMagazine" !"addMagazine _x;\n_countmags = _countmags +1;\n};\n} count _gmag" !"E\"];\n_lootpile addMagazineCargoGlobal [\"TrapBear\", 1]" !"With\n{\nplayer addMagazine (_this select 1" !"lder addMagazineCargoGlobal [_x,(_objWpnQty select _counter)];\n_counter = _counter + 1;\n};\n} co" !"soldItem\"];\n{\n_object addMagazine" !"systemChat localize \"STR_EPOCH_TRADE_" !"if (_silver_1oz > 0) then {\nif (_silver_1oz == 1) then {\nplayer addMagazine" !="Random;\n} else {\n_item = \"ItemBloodbag\";\n};\n};\n_container addMagazineCargoGlobal [_item, 1];\n};\n\nif (_type == 2) exitWith {\n_c" !="electRandom;\n} else {\n_item = \"ItemBloodbag\";\n};\n};\n_unit addMagazine _item;\n};\n\nif (_type == 2) exitWith {\n_unit addWeapon _i" !="];\n\ncall {\nif (_humanityBody >= DZE_Hero) exitwith {_body addMagazine \"ItemDogTagHero\";};\nif (_humanityBody <= DZE_Bandit) exitw" !="_vehicle = \"WeaponHolder\" createVehicle [0,0,0];\n_vehicle addMagazineCargoGlobal [_item, 1];\n\nif (_isWater) then { \n_fixWaterSp" !"eep 3;\n_finished = true;\n};\n\nif (!_finished) then {\n_unit addMagazine _bagUsed;\n_msg = \"str_actions_medical_transfusion_interrup" -1 addWeapon !raddWeapon !"\"addWeapon\", " !"if (isClass (configfile >> \"cfgweapons\" >> (_item))) then {_unit addWeapon _item;}\nelse" !",0]] call dayz_NutritionSystem;\n" !"Remove) == 1}) then {\nplayer addWeapon _create;" !"Display 0;\n\n\nif (_weaponInUse) then\n{\n_muz" !"failChance) then {\nswitch (_selection) do {\ncase \"CfgWeapons\":\n{\nplayer addWeapon" !"addWeapon _fixedItem;\nformat[localize \"str_f" !"_wepcounts = (getWeaponCargo _plant) select 1;\n{\n_item addWeapon" !"addWeapon _repair;\n} else {\n\n[_repair" !"player addWeapon dayz_onBack] select 0;\n};\n\n" !"player addWeapon _addWeapon;\n\nif (vehicle player != player) then {\n_display = find" !"};\n};\n\n\nswitch _type do {\ncase 1: {_holder addMagazineCargoGlobal [_item,_amount];};\ncase 2: {_holder addWeapon" !"l fn_chance) then {\nplayer removeWeapon _x;\nplayer addWeapon _rem" !"else {\n_body addWeapon dayz_onBack;\n};\n};\n\n\n_infect" !"\" >> _x)) then {\nplayer addWeapon _x;\n};\n} count _wpns;\n};" !"lder addWeaponCargoGlobal [_x,(_objWpnQty select _counter)];\n_counter = _counter + 1;\n} co" !"WpnQtys = [];\nif (count _backpackWpn > 0) then {\n_backpackWpnTypes = _backpackWpn sel" !"addWeapon (\"Item\"+str(_remain)+\"Matchbox" !"{\nswitch (_x select 0) do\n{\ncase 2:\n{\n(_this select 0) addWeapon" !"addWeaponCargoGlobal [_bcpkWpn, 1];\n};\n};\n};\n};" !"s;\n};\n\n\nplayer addWeapon \"Loot" !"With\n{\nplayer addWeapon (_this select 1" !"\") then {\n_newUnit addWeapon _secweapon;\n};\n\n" !"soldItem\"];\n{\n_object addWeapon" !"then {\nsystemChat format[localize \"STR_EPOCH_" !"DuplicateTool;\n} else {\nplayer addWeapon" !="al [_item, 1];\n};\n\nif (_type == 2) exitWith {\n_container addWeaponCargoGlobal [_item, 1];\n\n_magazines = getArray (configFile >" !=" addMagazine _item;\n};\n\nif (_type == 2) exitWith {\n_unit addWeapon _item;\n};\n\nif (_type == 5) exitWith {\nif (isNull unitBackp" !="ile >> \"CfgWeapons\" >> _x >> \"type\") == 256) then {\nplayer addWeapon _x;\n} else {\n_x call player_addDuplicateTool;\n};\n};\n} count" !="\n_vehicle = \"WeaponHolder\" createVehicle [0,0,0];\n_vehicle addWeaponCargoGlobal [_item, 1];\n\nif (_isWater) then { \n_fixWaterSpa" +1 addWeapon !raddWeapon !"\"addWeapon\", " !"if (isClass (configfile >> \"cfgweapons\" >> (_item))) then {_unit addWeapon _item;}\nelse" !",0]] call dayz_NutritionSystem;\n" !"Remove) == 1}) then {\nplayer addWeapon _create;" !"Display 0;\n\n\nif (_weaponInUse) then\n{\n_muz" !"failChance) then {\nswitch (_selection) do {\ncase \"CfgWeapons\":\n{\nplayer addWeapon" !"addWeapon _fixedItem;\nformat[localize \"str_f" !"_wepcounts = (getWeaponCargo _plant) select 1;\n{\n_item addWeapon" !"addWeapon _repair;\n} else {\n\n[_repair" !"player addWeapon dayz_onBack] select 0;\n};\n\n" !"player addWeapon _addWeapon;\n\nif (vehicle player != player) then {\n_display = find" !"};\n};\n\n\nswitch _type do {\ncase 1: {_holder addMagazineCargoGlobal [_item,_amount];};\ncase 2: {_holder addWeapon" !"l fn_chance) then {\nplayer removeWeapon _x;\nplayer addWeapon _rem" !"else {\n_body addWeapon dayz_onBack;\n};\n};\n\n\n_infect" !"\" >> _x)) then {\nplayer addWeapon _x;\n};\n} count _wpns;\n};" !"lder addWeaponCargoGlobal [_x,(_objWpnQty select _counter)];\n_counter = _counter + 1;\n} co" !"WpnQtys = [];\nif (count _backpackWpn > 0) then {\n_backpackWpnTypes = _backpackWpn sel" !"addWeapon (\"Item\"+str(_remain)+\"Matchbox" !"{\nswitch (_x select 0) do\n{\ncase 2:\n{\n(_this select 0) addWeapon" !"addWeaponCargoGlobal [_bcpkWpn, 1];\n};\n};\n};\n};" !"s;\n};\n\n\nplayer addWeapon \"Loot" !"With\n{\nplayer addWeapon (_this select 1" !"\") then {\n_newUnit addWeapon _secweapon;\n};\n\n" !"soldItem\"];\n{\n_object addWeapon" !"then {\nsystemChat format[localize \"STR_EPOCH_" !"DuplicateTool;\n} else {\nplayer addWeapon" !="al [_item, 1];\n};\n\nif (_type == 2) exitWith {\n_container addWeaponCargoGlobal [_item, 1];\n\n_magazines = getArray (configFile >" !=" addMagazine _item;\n};\n\nif (_type == 2) exitWith {\n_unit addWeapon _item;\n};\n\nif (_type == 5) exitWith {\nif (isNull unitBackp" !="ile >> \"CfgWeapons\" >> _x >> \"type\") == 256) then {\nplayer addWeapon _x;\n} else {\n_x call player_addDuplicateTool;\n};\n};\n} count" !="\n_vehicle = \"WeaponHolder\" createVehicle [0,0,0];\n_vehicle addWeaponCargoGlobal [_item, 1];\n\nif (_isWater) then { \n_fixWaterSpa" !="do {_vehicle addMagazineTurret [_ammo,_turret];};\n_vehicle addWeaponTurret [\"CMFlareLauncher\",_turret];\n} else {\n{_vehicle remov" 1 allDead !"} count allDead;\n\n\nif (dayz_oldBodyCount > _bodyCount) then {" 1 allGroups !"publicVariableServer \"PVDZ_Server_UpdateGroup\";\n};\n} count allGroups;" 1 allMissionObjects !"[_x,2,0,false,false] spawn BIS_Effects_Burn;\n};\n} count allMissionObjects \"SpawnableWreck\";" @@ -14,7 +14,7 @@ 1 callExtension 1 camCreate !="_camera = \"camera\" camCreate [12222.323, 3415.7791, -0.059190542]" !"kdy = cos _dir * _size;\n_kdz = _size;\n\n\n_camera =" !="getPlayerUID player;\n_sourceID = \"0\";\n\n\n_camera = \"camera\" camCreate _deathPos;\n_camera camSetDir 0;\n_camera camSetFOV 1;\n_camer" 1 cameraEffect !"cameraEffect [\"Internal\",\"TOP\"];\n_camera camSetTarget _deathPos;\n_camera camSetPos [_deathPos select" !"r_Simulation\";\n\n_camera cameraEffect [\"Terminate" !"cameraEffect [\"internal\",\"back\"]\n\n_camera camPrepareTarget [6433.5" !"kdy = cos _dir * _size;\n_kdz = _size;\n\n\n_camera =" -1 cashMoney !="false];\n\nif (Z_SingleCurrency) then {\nplayer setVariable [\"cashMoney\", _characterCoins, true];\nplayer setVariable [\"globalMoney\"" !=" (Z_SingleCurrency) then {\n_wealth = player getVariable[([\"cashMoney\",\"globalMoney\"] select Z_persistentMoney),0];\nplayer setVar" !="ctrlSetText [13001,format [\"%1 %2\",[player getVariable [([\"cashMoney\",\"globalMoney\"] select Z_persistentMoney),0]] call BIS_fnc_" !="le [\"bodyName\",\"unknown\"];\n_hisMoney = _body getVariable [\"cashMoney\",0];\n\nif (isNil \"_hisMoney\") then {_hisMoney = 0;};\nif (!(t" !=" (!_canBuy) exitWith {}; \n\n_wealth = player getVariable[([\"cashMoney\",\"globalMoney\"] select Z_persistentMoney),0];\n\n_enoughMoney" !="if (Z_SingleCurrency) then {\n_coins = player getVariable [\"cashMoney\",0];\n_bankCoins = player getVariable [\"bankMoney\",0];\n_glob" !="l dayz_rollingMessages;};\n\n_hisMoney = _body getVariable [\"cashMoney\",0];\n\nif (_isZombie) then {\n_name = getText(configFile >> \"" !="wCurrencyUI) then {\nlocal _cashAmt = player getVariable[([\"cashMoney\",\"globalMoney\"] select Z_persistentMoney),0];\n_string = for" !=" = [false, [], [], [], 0];\n_wealth = player getVariable[([\"cashMoney\",\"globalMoney\"] select Z_persistentMoney),0];\n\nif (Z_Single" +1 cashMoney !="false];\n\nif (Z_SingleCurrency) then {\nplayer setVariable [\"cashMoney\", _characterCoins, true];\nplayer setVariable [\"globalMoney\"" !=" (Z_SingleCurrency) then {\n_wealth = player getVariable[([\"cashMoney\",\"globalMoney\"] select Z_persistentMoney),0];\nplayer setVar" !="ctrlSetText [13001,format [\"%1 %2\",[player getVariable [([\"cashMoney\",\"globalMoney\"] select Z_persistentMoney),0]] call BIS_fnc_" !="le [\"bodyName\",\"unknown\"];\n_hisMoney = _body getVariable [\"cashMoney\",0];\n\nif (isNil \"_hisMoney\") then {_hisMoney = 0;};\nif (!(t" !=" (!_canBuy) exitWith {}; \n\n_wealth = player getVariable[([\"cashMoney\",\"globalMoney\"] select Z_persistentMoney),0];\n\n_enoughMoney" !="if (Z_SingleCurrency) then {\n_coins = player getVariable [\"cashMoney\",0];\n_bankCoins = player getVariable [\"bankMoney\",0];\n_glob" !="l dayz_rollingMessages;};\n\n_hisMoney = _body getVariable [\"cashMoney\",0];\n\nif (_isZombie) then {\n_name = getText(configFile >> \"" !="wCurrencyUI) then {\nlocal _cashAmt = player getVariable[([\"cashMoney\",\"globalMoney\"] select Z_persistentMoney),0];\n_string = for" !=" = [false, [], [], [], 0];\n_wealth = player getVariable[([\"cashMoney\",\"globalMoney\"] select Z_persistentMoney),0];\n\nif (Z_Single" !="= [false, [], [], [], 0];\n_wealth = player getVariable [([\"cashMoney\",\"globalMoney\"] select Z_persistentMoney),0];\n\nif (Z_Single" 1 clearMagazineCargo !="ddWeaponCargo\", \n\"addMagazine\", \n\"addMagazineCargo\", \n\"clearMagazineCargo\",\n\"clearWeaponCargo\",\n\"endMission\",\n\"failMission\",\n\"ti" !="rclearMagazineCargo = 'clearMagazineCargo'" !="rclearMagazineCargocode = compile preprocessFileLineNumbers (BIS_PathMPscriptCommands + 'clearMagazineCargo.sqf')" !=", \"addWeaponCargo\", \"addWPCur\", \"animate\", \"callVar\", \"clearMagazineCargo\", \"clearWeaponCargo\", \"createDiaryRecord\", \"createMark" !="rclearMagazineCargocode={diag_log(\"WARNING illegal RE rclearMagazineCargocode with args:\"+str(_this));};" !="eeSpace select 5;\n_normalWeaps = _freeSpace select 6;\n\nclearMagazineCargoGlobal _object;\nclearWeaponCargoGlobal _object;\n\n_retur" !=" {\n_bpMags = (getMagazineCargo (unitbackpack player));\nclearMagazineCargoGlobal (unitbackpack player);\n\n{\n_count = ((_bpMags sel" !="o {\n\n_ok = false;\n_mags = getMagazineCargo _firePlace;\nclearMagazineCargoGlobal _firePlace;\n\n_fuel = [\"PartWoodPile\",\"ItemLog\",\"" 1 clearWeaponCargo !="Magazine\", \n\"addMagazineCargo\", \n\"clearMagazineCargo\",\n\"clearWeaponCargo\",\n\"endMission\",\n\"failMission\",\n\"titleCut\", \n\"titleText\"" !="rclearWeaponCargo = 'clearWeaponCargo'" !="rclearWeaponCargocode = compile preprocessFileLineNumbers (BIS_PathMPscriptCommands + 'clearWeaponCargo.sqf')" !="addWPCur\", \"animate\", \"callVar\", \"clearMagazineCargo\", \"clearWeaponCargo\", \"createDiaryRecord\", \"createMarkerLocal\", \"createSimp" !="rclearWeaponCargocode={diag_log(\"WARNING illegal RE rclearWeaponCargocode with args:\"+str(_this));};" !="_freeSpace select 6;\n\nclearMagazineCargoGlobal _object;\nclearWeaponCargoGlobal _object;\n\n_returnVar = [];\n_returnMag = [];\n_retu" 1 clearBackpackCargo @@ -40,27 +40,28 @@ 1 execVM !"rexecVM" !"\"execVM\", " !="[] execVM \"initJIPcompatible.sqf\";" !="_script = [] execVM (BIS_MP_Path + BIS_PATH_SQF + \"JIPWaitFor.sqf\");" !"execVM \"\\ca\\Data\\" !"execVM '\\ca\\Data\\" !"execVM \"\\ca\\missions" !"execVM 'ca\\modules\\" !"execVM \"ca\\modules\\" !"'\\ca\\ui\\" !"\"\\ca\\ui\\" !"scriptName \"MP\\data\\script" !"_handle\"];\n_handle = [_display] execVM _script;\n}" !"execVM '\\z\\addons\\dayz_code\\" !"execVM 'z\\addons\\dayz_code\\" !"execVM \"z\\addons\\dayz_code\\" !"execVM \"\\z\\addons\\dayz_code\\" !"execVM (\"\\z\\addons\\dayz_code\\" !="dayz_rulesHandle = execVM \"rules.sqf\";" !"execvm '\\ASC\\" !"\\usec_ch53\\scripts\\" !"execVM (_actionDir + \"warn.sqf" !="_this execVM \"\\GNT_C185\\scr\\C185_Exhaust.sqf\";[_this select 0] execvm \"\\GNT_C185\\scr\\G_CheckEngine.sqf\";" 1 failMission !"rfailMission" !"failMission\",\n\"titleCut\"," !"fadeSound\", \"failMission\"," !"if (_debug == 1) then {\ndiag_log (\"End Mission\");\n};\n\nfailMission" 1 forceEnd -1 globalMoney !="\"cashMoney\", _characterCoins, true];\nplayer setVariable [\"globalMoney\", _globalCoins, true];\nplayer setVariable [\"bankMoney\", _b" !="rency) then {\n_wealth = player getVariable[([\"cashMoney\",\"globalMoney\"] select Z_persistentMoney),0];\nplayer setVariable[([\"cash" !="13001,format [\"%1 %2\",[player getVariable [([\"cashMoney\",\"globalMoney\"] select Z_persistentMoney),0]] call BIS_fnc_numberText,Cu" !="Messages};\n\n_myMoney = player getVariable [([\"cashMoney\",\"globalMoney\"] select Z_persistentMoney),0];\n_myMoney = _myMoney + _his" !="xitWith {}; \n\n_wealth = player getVariable[([\"cashMoney\",\"globalMoney\"] select Z_persistentMoney),0];\n\n_enoughMoney = false;\n\n_m" !="able [\"bankMoney\",0];\n_globalCoins = player getVariable [\"globalMoney\",0];\n};\n\n\n[_model, _charID, _humanity, _zombieKills, _head" !="then {\nlocal _cashAmt = player getVariable[([\"cashMoney\",\"globalMoney\"] select Z_persistentMoney),0];\n_string = format [\"> \"CfgVehicles\" >>" !="#line 1 \"z\\addons\\dayz_code\\compile\\player_humanityChange.sqf\"\nprivate [\"_change\",\"_humanity\"];\n\n\n\n\n_change = _this;\n\n_humanity " !"layer]];\npublicVariableServer \"PVDZ_send\";\n\n\n20 call player_humanityChange;\n\nformat[localize \"str_actions_medical_gave_wipes\",(n" !=" [\"_msg\",\"_bagUsed\",\"_bloodResult\",\"_bloodAmount\",\"_unit\",\"_humanityAwarded\",\"_timer\",\"_i\",\"_isClose\",\"_duration\",\"_rhVal\",\"_blo" +1 humanity !="\nDZE_NameTags = 0; \nDZE_ForceNameTagsInTrader = false; \nDZE_HumanityTargetDistance = 25; \nDZE_HeartBeat = false; \nDZE_RestrictSk" !=";\ndayz_authKey = \"\";\nDZE_LastPingResp = diag_tickTime;\ndayz_humanitytarget = \"\";\ndayz_selectedVault = objNull;\ndayz_selectedDoor" !="ndler {(_this select 1) spawn BIS_Effects_Burn};\n\"PVCDZ_plr_Humanity\" addPublicVariableEventHandler {(_this select 1) spawn pla" !="s \"\\z\\addons\\dayz_code\\compile\\fn_surfaceNoise.sqf\";\nplayer_humanityMorph = compile preprocessFileLineNumbers \"\\z\\addons\\dayz_co" !="{\nif (alive cursorTarget) then {\ncursorTarget spawn dayz_lowHumanity;\n};\n};\n\n[_initDone]\n};\n" !="\"_posC\",\"_height\",\"_attached\",\n\"_combi\",\"_findNearestGen\",\"_humanity_logic\",\"_low_high\",\"_cancel\",\"_buy\",\"_buyV\",\"_humanity\",\"_t" !="ext\",\"_visual\",\"_audible\",\"_id\",\"_rID\",\"_color\",\"_string\",\"_humanity\",\"_size\",\"_friendlies\",\"_rfriendlies\",\"_rfriendlyTo\",\"_dist" !="'; closeDialog 0; createDialog 'horde_journal_pages_journal_humanity';" !="t size='2' font='Zeppelin33' color = '#000000' align='left'>Humanity: > \"CfgVehicles\" >>" !="#line 1 \"z\\addons\\dayz_code\\compile\\player_humanityChange.sqf\"\nprivate [\"_change\",\"_humanity\"];\n\n\n\n\n_change = _this;\n\n_humanity " !"layer]];\npublicVariableServer \"PVDZ_send\";\n\n\n20 call player_humanityChange;\n\nformat[localize \"str_actions_medical_gave_wipes\",(n" !=" [\"_msg\",\"_bagUsed\",\"_bloodResult\",\"_bloodAmount\",\"_unit\",\"_humanityAwarded\",\"_timer\",\"_i\",\"_isClose\",\"_duration\",\"_rhVal\",\"_blo" !="#line 1 \"z\\addons\\dayz_code\\compile\\player_humanityMorph.sqf\"\ncloseDialog 0;\nlocal _charID = _this select 1;\nlocal _model = _thi" 1 lbCurSel !"_selectedUserIndex = lbCurSel _lbUsersControl;" !="profileNamespace setVariable ['statusUI',(lbCurSel (_this select 0))];" !="profileNamespace setVariable ['streamerMode',(lbCurSel (_this select 0))];" !"_index = lbCurSel _lbcontrol;\n_selectedItem" !"_selected = lbCurSel _list;\n_classname = _list lnbData [_selected, 2];" !="_friendName = _userList lbText (lbCurSel _userList);" !")] call Z_" !"(lbCurSel 7421) call Z_fillCategoryList" !"] call Door" !"] call Plot" !"[(lbCurSel 12001)] " !="[(lbCurSel 21000), ((ctrlParent (_this select 0)) displayCtrl 21001)] spawn EpochDeathBoardClick;" !"((ctrlParent (_this select 0)) closeDisplay 2);" !="_uid = _playerList lbData (lbCurSel _playerList);" !"_myGroup lbData (lbCurSel _myGroup);" 1 lbSet !"_lbUsersControl lbSetColor [_x, [1,0,0,1]];" !"\n_control lbSetColor [_x, _color];\n};" !"_weaponsLBSetFocus" !="(_this select 0) displayCtrl _idc lbSetCurSel (profileNamespace getVariable [_var,_default]);" !="(_display displayCtrl 105) lbSetColor [_i, [0.06, 0.05, 0.03, 1]];" !" [7421," !"lbSetPicture [7422, _index" !"lbSetPicture [7402, _index" !"lbSetPicture [7401, _index" !="_userList lbSetData [(lbSize _userList) -1,_friendUID];" !" [TraderDialogItemList, _index, " !"_myGroup lbSetData [_index,getPlayerUID _x];" !"ive DZE_myVehicle} && {DZE_myVehicle == _x}) then {\n_control lbSetColor [(lbSize _control)-1,[0, 1, 0, 1]];\n};\n} count rv_vehicl" 1 loadFile 1 menu !",\"MenuSelected\",\"Draw\",\"VideoStop" !"_menu = _parent displayCtrl (1600 + _i);\n_menu ctrlShow " !"BIS_fnc_commsMenu" !"BIS_fnc_kbMenu" !"call gear_ui_offMenu;" !"dayz_inflame_showMenu" !"\"showCommandingMenu\", " !"rshowCommandingMenu" !"menu_" !"use action menu to " !"\"_menu\",\"_menu1\"" !"fn_gearMenuChecks" !"fn_pauseMenuChecks" -1 nearEntities !="exit = true;\n} else {\n_nearestObjects = (position player) nearEntities [[\"Air\", \"Car\", \"Motorcycle\", \"Tank\", \"Ship\"], 26];\nif (c" !="jects \"SpawnableWreck\";\n{deleteVehicle _x} count (_setPos nearEntities [\"zZombie_Base\",30]);\nplayer setDir _setDir;\n\nif (dayz_pa" !="ets,false];\n};\n};\n};\n};\n};\n} forEach ((getPosATL _refObj) nearEntities [\"Zed_Base\",100]);\n\nif (_attacked) then {\nif (r_player_un" !="((!surfaceIsWater _Pos) AND {(0 == {alive _x} count (_Pos nearEntities [ AllPlayers, 200 ]))}) then {\n_agent = if (_type == \"Pas" !="z, _elevation] ];\n};\n};\n};\n};\n} count ((getPosATL player) nearEntities [\"zZombie_Base\", 30]);\n};\n\n\n_buriedZeds\n};\n" !="call dz_fn_array_any);\n};\n\n_vehClose = (getPosATL player) nearEntities [[\"Car\",\"Tank\",\"Helicopter\",\"Plane\",\"StaticWeapon\",\"Ship\"" !="z_spawnZombies = {alive _x AND local _x} count (_position nearEntities [\"zZombie_Base\",_radius]);\ndayz_CurrentNearByZombies = {a" !="{\nr_player_infected = true;\n\n};\n};\n};\n} count (_mylastPos nearEntities [\"CAManBase\",12]);\nif (dayz_temperatur < ((50 / 100) * (d" !=" < dayz_maxGlobalZeds}) then {\n_zombiesNum = count (_bPos nearEntities [\"zZombie_Base\",(((sizeOf _type) * 2) + 10)]);\nif (_zombi" !="te;\n};\n};\n\n\n_nearByPlayer = ({isPlayer _x} count (_objPos nearEntities [\"CAManBase\",30])) > 0;\nif (!_nearByPlayer) then {\n_posit" !="_entityTime = diag_tickTime;\n\n_list = (getposATL _agent) nearEntities [[\"CAManBase\",\"AllVehicles\"],300];\n_isSomeone = ({isPlayer" !="_timeN = diag_tickTime;\n\n_list = (getposATL _agent) nearEntities [[\"CAManBase\",\"AllVehicles\"],300];\n_isSomeone = ({isPlayer _x} " !="_waitStart = diag_tickTime;\n\n_list = (getposATL _agent) nearEntities [[\"CAManBase\",\"AllVehicles\"],300];\n_isSomeone = ({isPlayer " !="lt = false;\n_pos = [player] call FNC_GetPos;\n_list = _pos nearEntities [[\"Air\",\"LandVehicle\",\"Ship\"],Z_VehicleDistance];\n\nif (!i" !="[\"localtargets\",_localtargets,false];\n};\n};\n} count (_pos nearEntities [\"zZombie_Base\",50]);\n} else {\nwhile {alive _projectile} " !="this select 2;\n_pos = _this select 3;\n\n_listTalk = _pos nearEntities [\"zZombie_Base\",_distance];\n\n{\n_distance = _distance max " !="_list = (getposATL _agent) nearEntities [[\"CAManBase\",\"AllVehicles\"],300];\n_isSomeone = ({isPlayer _x} count _list) > 0;\n\n_timeN" !=";};\n\n_playerNear = {isPlayer _x} count ((getPosATL _body) nearEntities [\"CAManBase\", 10]) > 1;\nif (_playerNear) exitWith {dayz_a" !="\n\n\n_pos = getPosATL player;\nif ({isPlayer _x} count (_pos nearEntities [\"CAManBase\",40]) > 1) then {\n[_unit,\"hit\",0,false] call " !="[];\n\n_PlayerNear = {isPlayer _x} count ((getPosATL _item) nearEntities [\"CAManBase\", 12]) > 1;\nif (_PlayerNear) exitWith {locali" !="layerNear = {isPlayer _x} count (([_obj] call FNC_GetPos) nearEntities [\"CAManBase\", 12]) > 1;\nif (_PlayerNear && (_isMine or _o" !="hicle _player] call FNC_getPos;\n\n\n_findNearestPole = _pos nearEntities [\"Plastic_Pole_EP1_DZ\", _distance];\n\n_IsNearPlot = count " !="layerNear = {isPlayer _x} count ((getPosATL cursortarget) nearEntities [\"CAManBase\", 10]) > 1;\nif (_playerNear) exitWith {\ndayz_" !="etPos;\n\nif (surfaceIsWater _location && {count (_location nearEntities [\"Ship\",8]) > 0}) then {\ndeleteVehicle _sign;\nlocalize \"S" !="yerNear = {isPlayer _x} count (([player] call FNC_GetPos) nearEntities [\"CAManBase\", 12]) > 1;\nif (_playerNear) exitWith {locali" !="ag_tickTime);\n_playerCheck = ({isPlayer _x} count (player nearEntities [\"AllVehicles\",5]) > 1);\n_zedCheck = ((count (player near" !="(_this select 1) && isServer && (({isPlayer _x} count (_z nearEntities ['CAManBase',150])) == 0)) exitWith { _z call sched_co_de" !=" do {\nuiSleep 5;\n};\nhideBody _body;\n\n\n\n\n\n\n_inRange = _pos nearEntities [\"CAManBase\",100];\n{\nif ((isPlayer _x) && {_x != player})" !=" {\n_PlayerNear = {isPlayer _x} count ((getPosATL _holder) nearEntities [\"CAManBase\", 12]) > 1;\nif (_PlayerNear) exitWith {locali" !="yerNear = {isPlayer _x} count (([_plant] call FNC_GetPos) nearEntities [\"CAManBase\", 12]) > 1;\nif (_playerNear) exitWith {dayz_a" !="layerNear = {isPlayer _x} count (([_obj] call FNC_GetPos) nearEntities [\"CAManBase\", 12]) > 1;\nif (_playerNear) exitWith {dayz_a" !="\n_ammo = \"RunOver\";\n};\n} count (([_unit] call fnc_getPos) nearEntities [[\"Air\",\"LandVehicle\",\"Ship\"],3]);\n};\n};\n};\n\n_end = false" !="{\n_liftHeli = _x;\n_found = true;\n};\n};\n};\n} count (player nearEntities [DZE_HeliAllowTowFrom,15]);\n};\n\nlocal _attached = _cursor" !="z_fn_array_any);\n};\n\nlocal _vehClose = (getPosATL player) nearEntities [[\"Car\",\"Tank\",\"Helicopter\",\"Plane\",\"StaticWeapon\",\"Ship\"" !=" = false;\n\nif (!isNull _this) then {\n_nearPlayers = _this nearEntities [\"CAManBase\", 12];\n_playerNear = ({isPlayer _x} count _ne" !="ePeople = if (DZE_doorManagementMustBeClose) then {player nearEntities [\"CAManBase\", 12]} else {playableUnits};\n\n{\nif (isPlayer " !"\n\n_PlayerNear = {isPlayer _x} count ((getPosATL _vehicle) nearEntities [\"CAManBase\", 12]) > 1;\nif (_PlayerNear) exitWith {" !="layerNear = {isPlayer _x} count (([_obj] call FNC_GetPos) nearEntities [\"CAManBase\", 10]) > 1;\nif (_playerNear) exitWith {dayz_a" !"arestVehicle),_x];\n};\n} count (([player] call fnc_getPos) nearEntities [[\"Air\",\"LandVehicle\",\"Ship\"],30]);\n\nif (count _findNeare" !"arPlayers = {(isPlayer _x && _x != player)} count (player nearEntities [\"CAManBase\",8]);\n\nif (!(_object isKindOf \"ATV_Base_EP1\")" !="ePeople = if (DZE_plotManagementMustBeClose) then {player nearEntities [\"CAManBase\", 12]} else {playableUnits};\n\n{\nif (isPlayer " !="lot\"];\n\nlbClear 7002;\n_plots = ([player] call FNC_getPos) nearEntities [\"Plastic_Pole_EP1_DZ\",15];\n_thePlot = _plots select 0;\n_" !="_area_preview = 1;\n\n_target = (([player] call FNC_getPos) nearEntities [\"Plastic_Pole_EP1_DZ\",15]) select 0;\n_objects = nearestO" !="_PlotPole select 0;\n_target = (([player] call FNC_getPos) nearEntities [\"Plastic_Pole_EP1_DZ\",15]) select 0;\n\n_buildables = DZE_" !=" == \"\") exitWith {};\n\n_plots = ([player] call FNC_getPos) nearEntities [\"Plastic_Pole_EP1_DZ\",15];\n\n_thePlot = _plots select 0;\n" !="here100cm_EP1\"; \n\n\n_thePlot = (([player] call FNC_getPos) nearEntities [\"Plastic_Pole_EP1_DZ\",15]) select 0;\n_center = getPosASL" !"arPlayers = {(isPlayer _x && _x != player)} count (player nearEntities [\"CAManBase\",8]);\n\nif ((_object isKindOf \"C130J_US_EP1\" o" !="RANGE = 1500;};CA_ZOMBIE_COUNT = count ((position player) nearEntities ['zZombie_Base',CA_GPS_RANGE]); CA_MAN_COUNT = count ((po" !"ayerNear = {isPlayer _x} count (([_body] call FNC_GetPos) nearEntities [\"CAManBase\", 10]) > 1;\nif (_playerNear) exitWith {dayz_a"1 nearestObject !="licVariableEventHandler {_pos = (_this select 1); _obj = nearestObjects [_pos, DZE_isWreckBuilding, 5]; if (count _obj > 0) then" !=" 0;\n_whatIwant = _this select 1;\n_ret = false;\n\n_flame = nearestObjects [_fireplace, [\"flamable_DZ\"], 1];\n_flame = if (count _fl" !="Whitelisted = [];\n_pointsNearby = [];\n_findWhitelisted = nearestObjects [_pos,_whitelist,(_radius + DZE_snapExtraRange)]-[_objec" !=".sqf\"\n\n\n\n\n\nprivate \"_object\";\n\n{\n_object = (_x select 0) nearestObject (_x select 1);\n_object hideObject true;\n_object setVariab" !="\ncall dayz_meleeMagazineCheck;\n{player reveal _x} count (nearestObjects [_position,[\"AllVehicles\",\"WeaponHolder\",\"Land_A_tent\",\"" !="ks.sqf\"\nsetMousePosition [0.5, 0.5];\n\nprivate [\"_exit\",\"_nearestObjects\",\"_rID\",\"_display\",\"_cTarget\",\"_dis\",\"_friendlyTo\",\"_las" !="eenMsg = localize 'str_player_setup_completed';\n_torev4l=nearestObjects [_setPos, Dayz_plants + DayZ_GearedObjects + [\"AllVehicl" !=") then {\n_pPos = [player] call FNC_GetPos;\n_fireplaces = nearestObjects [_pPos, [\"flamable_DZ\",\"Land_Fire\",\"Land_Campfire\"], 8];" !=" \n\n)\nmax 0;\n\nif (_scaleLight < 0.9) then {\n\n_nearFlare = nearestObject [getPosATL (vehicle player),\"RoadFlare\"];\nif (!isNull _ne" !=" call _check}) exitWith { \n_inside = true;\n};\n} forEach (nearestObjects [_unit, [\"Building\"], 50]);\n};\n\n\n_inside\n" !="= _this select 0;\n_ammo = _this select 1;\n\n_projectile = nearestObject [_unit, _ammo];\n_pos = getPosATL _projectile;\n\nif (_ammo " !="\n};\nif (\"workshop\" in _needNear) then {\n_isNear = count (nearestObjects [player, DZE_Workshops, _distance]);\nif(_isNear == 0) th" !="ingPlayer = player;\n_dir = round(random 360);\n_helipad = nearestObjects [player, [\"HeliHCivil\",\"HeliHempty\"], 100];\n\n\nif (count " !="1\",\"land_smd_water_pump\"];\n\n_canFill = call {\n\nif (count nearestObjects [_posATL,_wells,4] > 0) exitwith {[true,false]};\nif (toL" !="d) exitWith {\n_nearWaterHole = [true,_pond];\n};\n} count (nearestObjects [_x, [], 1]);\n\nif (_nearWaterHole select 0) exitWith {};" !="bj select 4;\n_projectile = _obj select 6;\n\n_projectile = nearestObject [_unit,_ammo];\n_endPos = getPosATL _projectile;\n_doWait =" !="_plantOutput select _index;\n_countOut = 1;\n};\n};\n} count nearestObjects [([player] call FNC_getPos), [], 10];\n\nif (count _findNe" !=" !r_player_unconscious && !_onLadder);\n\n_nearByObjects = nearestObjects [player,_objects,_range];\n\nif (count _nearByObjects == 0" !="= \"workshop\") exitwith {\n_distance = 3;\n_isNear = count (nearestObjects [_pos, DZE_Workshops, _distance]);\nif (_isNear == 0) the" !="earestPole) then {_pos} else {_nearestPole};\nif ((count (nearestObjects [_center,_buildables,_distance])) >= DZE_BuildingLimit) " !="_ammo in [\"Dragged\",\"RunOver\"])}) then {\n_vehicleArray = nearestObjects [([vehicle _unit] call fnc_getPos),[\"Air\",\"LandVehicle\"," !="n _rocks) exitWith { _findNearestRock = _x; };\n} foreach nearestObjects [getPosATL player, [], 8];\n\n\nif (!isNull _findNearestRoc" !="modeltoWorld [0,0,0]};\n_holder = objNull;\n\n\n_nearByPile= nearestObjects [_pos, [\"WeaponHolder\",\"WeaponHolderBase\"],2];\n\nif (coun" !="r);\nlocal _uid = getPlayerUID player;\nlocal _nearLight = nearestObject [player,\"LitObject\"];\nlocal _canPickLight = false;\nlocal " !="p = {\nlocal _doors = [];\nif (r_drag_sqf) then {\n_doors = nearestObjects [player, DayZ_DropDrageeObjects, 3]; \nif (count _doors >" !"With {};\nif (!_unconscious) exitWith {};\n\n_dropObjects = nearestObjects [player, DayZ_DropDrageeObjects, 3];\nif (count _dropObje" !"Name) in dayz_trees}) exitWith {\n\n_tree = _x;\n};\n} count nearestObjects [getPosATL player, [], 20];\n\nif (!isNull _tree) then {\n\n" !="ntities [\"Plastic_Pole_EP1_DZ\",15]) select 0;\n_objects = nearestObjects [_target, DZE_maintainClasses, DZE_maintainRange];\n\n_obj" !="E_LockableStorage + [\"DZ_storage_base\"];\n_count = count (nearestObjects [_target,_buildables,_range]);\n\n_colour = \"#ffffff\";\n\nif" !="e;\n_num = ceil (random (player distance _x));\n};\n} count nearestObjects [player, [], 50];\n\nfor \"_i\" from 1 to 10 do {\nif (!_ispo" !="j select 4;\n\n_projectile = _obj select 6;\n\n_projectile = nearestObject [_unit,_ammo];\n_vUp = vectorUp _projectile;\n_endPos = get" +1 nearEntities !="exit = true;\n} else {\n_nearestObjects = (position player) nearEntities [[\"Air\", \"Car\", \"Motorcycle\", \"Tank\", \"Ship\"], 26];\nif (c" !="jects \"SpawnableWreck\";\n{deleteVehicle _x} count (_setPos nearEntities [\"zZombie_Base\",30]);\nplayer setDir _setDir;\n\nif (dayz_pa" !="ets,false];\n};\n};\n};\n};\n};\n} forEach ((getPosATL _refObj) nearEntities [\"Zed_Base\",100]);\n\nif (_attacked) then {\nif (r_player_un" !="((!surfaceIsWater _Pos) AND {(0 == {alive _x} count (_Pos nearEntities [ AllPlayers, 200 ]))}) then {\n_agent = if (_type == \"Pas" !="z, _elevation] ];\n};\n};\n};\n};\n} count ((getPosATL player) nearEntities [\"zZombie_Base\", 30]);\n};\n\n\n_buriedZeds\n};\n" !="call dz_fn_array_any);\n};\n\n_vehClose = (getPosATL player) nearEntities [[\"Car\",\"Tank\",\"Helicopter\",\"Plane\",\"StaticWeapon\",\"Ship\"" !="z_spawnZombies = {alive _x AND local _x} count (_position nearEntities [\"zZombie_Base\",_radius]);\ndayz_CurrentNearByZombies = {a" !="{\nr_player_infected = true;\n\n};\n};\n};\n} count (_mylastPos nearEntities [\"CAManBase\",12]);\nif (dayz_temperatur < ((50 / 100) * (d" !=" < dayz_maxGlobalZeds}) then {\n_zombiesNum = count (_bPos nearEntities [\"zZombie_Base\",(((sizeOf _type) * 2) + 10)]);\nif (_zombi" !="te;\n};\n};\n\n\n_nearByPlayer = ({isPlayer _x} count (_objPos nearEntities [\"CAManBase\",30])) > 0;\nif (!_nearByPlayer) then {\n_posit" !="_entityTime = diag_tickTime;\n\n_list = (getposATL _agent) nearEntities [[\"CAManBase\",\"AllVehicles\"],300];\n_isSomeone = ({isPlayer" !="_timeN = diag_tickTime;\n\n_list = (getposATL _agent) nearEntities [[\"CAManBase\",\"AllVehicles\"],300];\n_isSomeone = ({isPlayer _x} " !="_waitStart = diag_tickTime;\n\n_list = (getposATL _agent) nearEntities [[\"CAManBase\",\"AllVehicles\"],300];\n_isSomeone = ({isPlayer " !="lt = false;\n_pos = [player] call FNC_GetPos;\n_list = _pos nearEntities [[\"Air\",\"LandVehicle\",\"Ship\"],Z_VehicleDistance];\n\nif (!i" !="[\"localtargets\",_localtargets,false];\n};\n};\n} count (_pos nearEntities [\"zZombie_Base\",50]);\n} else {\nwhile {alive _projectile} " !="this select 2;\n_pos = _this select 3;\n\n_listTalk = _pos nearEntities [\"zZombie_Base\",_distance];\n\n{\n_distance = _distance max " !="_list = (getposATL _agent) nearEntities [[\"CAManBase\",\"AllVehicles\"],300];\n_isSomeone = ({isPlayer _x} count _list) > 0;\n\n_timeN" !=";};\n\n_playerNear = {isPlayer _x} count ((getPosATL _body) nearEntities [\"CAManBase\", 10]) > 1;\nif (_playerNear) exitWith {dayz_a" !="\n\n\n_pos = getPosATL player;\nif ({isPlayer _x} count (_pos nearEntities [\"CAManBase\",40]) > 1) then {\n[_unit,\"hit\",0,false] call " !="[];\n\n_PlayerNear = {isPlayer _x} count ((getPosATL _item) nearEntities [\"CAManBase\", 12]) > 1;\nif (_PlayerNear) exitWith {locali" !="layerNear = {isPlayer _x} count (([_obj] call FNC_GetPos) nearEntities [\"CAManBase\", 12]) > 1;\nif (_PlayerNear && (_isMine or _o" !="hicle _player] call FNC_getPos;\n\n\n_findNearestPole = _pos nearEntities [\"Plastic_Pole_EP1_DZ\", _distance];\n\n_IsNearPlot = count " !="layerNear = {isPlayer _x} count ((getPosATL cursortarget) nearEntities [\"CAManBase\", 10]) > 1;\nif (_playerNear) exitWith {\ndayz_" !="etPos;\n\nif (surfaceIsWater _location && {count (_location nearEntities [\"Ship\",8]) > 0}) then {\ndeleteVehicle _sign;\nlocalize \"S" !="yerNear = {isPlayer _x} count (([player] call FNC_GetPos) nearEntities [\"CAManBase\", 12]) > 1;\nif (_playerNear) exitWith {locali" !="ag_tickTime);\n_playerCheck = ({isPlayer _x} count (player nearEntities [\"AllVehicles\",5]) > 1);\n_zedCheck = ((count (player near" !="(_this select 1) && isServer && (({isPlayer _x} count (_z nearEntities ['CAManBase',150])) == 0)) exitWith { _z call sched_co_de" !=" do {\nuiSleep 5;\n};\nhideBody _body;\n\n\n\n\n\n\n_inRange = _pos nearEntities [\"CAManBase\",100];\n{\nif ((isPlayer _x) && {_x != player})" !=" {\n_PlayerNear = {isPlayer _x} count ((getPosATL _holder) nearEntities [\"CAManBase\", 12]) > 1;\nif (_PlayerNear) exitWith {locali" !="yerNear = {isPlayer _x} count (([_plant] call FNC_GetPos) nearEntities [\"CAManBase\", 12]) > 1;\nif (_playerNear) exitWith {dayz_a" !="layerNear = {isPlayer _x} count (([_obj] call FNC_GetPos) nearEntities [\"CAManBase\", 12]) > 1;\nif (_playerNear) exitWith {dayz_a" !="\n_ammo = \"RunOver\";\n};\n} count (([_unit] call fnc_getPos) nearEntities [[\"Air\",\"LandVehicle\",\"Ship\"],3]);\n};\n};\n};\n\n_end = false" !="{\n_liftHeli = _x;\n_found = true;\n};\n};\n};\n} count (player nearEntities [DZE_HeliAllowTowFrom,15]);\n};\n\nlocal _attached = _cursor" !="z_fn_array_any);\n};\n\nlocal _vehClose = (getPosATL player) nearEntities [[\"Car\",\"Tank\",\"Helicopter\",\"Plane\",\"StaticWeapon\",\"Ship\"" !=" = false;\n\nif (!isNull _this) then {\n_nearPlayers = _this nearEntities [\"CAManBase\", 12];\n_playerNear = ({isPlayer _x} count _ne" !="ePeople = if (DZE_doorManagementMustBeClose) then {player nearEntities [\"CAManBase\", 12]} else {playableUnits};\n\n{\nif (isPlayer " !"\n\n_PlayerNear = {isPlayer _x} count ((getPosATL _vehicle) nearEntities [\"CAManBase\", 12]) > 1;\nif (_PlayerNear) exitWith {" !="layerNear = {isPlayer _x} count (([_obj] call FNC_GetPos) nearEntities [\"CAManBase\", 10]) > 1;\nif (_playerNear) exitWith {dayz_a" !"arestVehicle),_x];\n};\n} count (([player] call fnc_getPos) nearEntities [[\"Air\",\"LandVehicle\",\"Ship\"],30]);\n\nif (count _findNeare" !"arPlayers = {(isPlayer _x && _x != player)} count (player nearEntities [\"CAManBase\",8]);\n\nif (!(_object isKindOf \"ATV_Base_EP1\")" !="ePeople = if (DZE_plotManagementMustBeClose) then {player nearEntities [\"CAManBase\", 12]} else {playableUnits};\n\n{\nif (isPlayer " !="lot\"];\n\nlbClear 7002;\n_plots = ([player] call FNC_getPos) nearEntities [\"Plastic_Pole_EP1_DZ\",15];\n_thePlot = _plots select 0;\n_" !="_area_preview = 1;\n\n_target = (([player] call FNC_getPos) nearEntities [\"Plastic_Pole_EP1_DZ\",15]) select 0;\n_objects = nearestO" !="_PlotPole select 0;\n_target = (([player] call FNC_getPos) nearEntities [\"Plastic_Pole_EP1_DZ\",15]) select 0;\n\n_buildables = DZE_" !=" == \"\") exitWith {};\n\n_plots = ([player] call FNC_getPos) nearEntities [\"Plastic_Pole_EP1_DZ\",15];\n\n_thePlot = _plots select 0;\n" !="here100cm_EP1\"; \n\n\n_thePlot = (([player] call FNC_getPos) nearEntities [\"Plastic_Pole_EP1_DZ\",15]) select 0;\n_center = getPosASL" !"arPlayers = {(isPlayer _x && _x != player)} count (player nearEntities [\"CAManBase\",8]);\n\nif ((_object isKindOf \"C130J_US_EP1\" o" !="RANGE = 1500;};CA_ZOMBIE_COUNT = count ((position player) nearEntities ['zZombie_Base',CA_GPS_RANGE]); CA_MAN_COUNT = count ((po" !"ayerNear = {isPlayer _x} count (([_body] call FNC_GetPos) nearEntities [\"CAManBase\", 10]) > 1;\nif (_playerNear) exitWith {dayz_a" +1 nearestObject !="licVariableEventHandler {_pos = (_this select 1); _obj = nearestObjects [_pos, DZE_isWreckBuilding, 5]; if (count _obj > 0) then" !=" 0;\n_whatIwant = _this select 1;\n_ret = false;\n\n_flame = nearestObjects [_fireplace, [\"flamable_DZ\"], 1];\n_flame = if (count _fl" !="Whitelisted = [];\n_pointsNearby = [];\n_findWhitelisted = nearestObjects [_pos,_whitelist,(_radius + DZE_snapExtraRange)]-[_objec" !=".sqf\"\n\n\n\n\n\nprivate \"_object\";\n\n{\n_object = (_x select 0) nearestObject (_x select 1);\n_object hideObject true;\n_object setVariab" !="\ncall dayz_meleeMagazineCheck;\n{player reveal _x} count (nearestObjects [_position,[\"AllVehicles\",\"WeaponHolder\",\"Land_A_tent\",\"" !="ks.sqf\"\nsetMousePosition [0.5, 0.5];\n\nprivate [\"_exit\",\"_nearestObjects\",\"_rID\",\"_display\",\"_cTarget\",\"_dis\",\"_friendlyTo\",\"_las" !="eenMsg = localize 'str_player_setup_completed';\n_torev4l=nearestObjects [_setPos, Dayz_plants + DayZ_GearedObjects + [\"AllVehicl" !=") then {\n_pPos = [player] call FNC_GetPos;\n_fireplaces = nearestObjects [_pPos, [\"flamable_DZ\",\"Land_Fire\",\"Land_Campfire\"], 8];" !=" \n\n)\nmax 0;\n\nif (_scaleLight < 0.9) then {\n\n_nearFlare = nearestObject [getPosATL (vehicle player),\"RoadFlare\"];\nif (!isNull _ne" !=" call _check}) exitWith { \n_inside = true;\n};\n} forEach (nearestObjects [_unit, [\"Building\"], 50]);\n};\n\n\n_inside\n" !="= _this select 0;\n_ammo = _this select 1;\n\n_projectile = nearestObject [_unit, _ammo];\n_pos = getPosATL _projectile;\n\nif (_ammo " !="\n};\nif (\"workshop\" in _needNear) then {\n_isNear = count (nearestObjects [player, DZE_Workshops, _distance]);\nif(_isNear == 0) th" !="ingPlayer = player;\n_dir = round(random 360);\n_helipad = nearestObjects [player, [\"HeliHCivil\",\"HeliHempty\"], 100];\n\n\nif (count " !="1\",\"land_smd_water_pump\"];\n\n_canFill = call {\n\nif (count nearestObjects [_posATL,_wells,4] > 0) exitwith {[true,false]};\nif (toL" !="d) exitWith {\n_nearWaterHole = [true,_pond];\n};\n} count (nearestObjects [_x, [], 1]);\n\nif (_nearWaterHole select 0) exitWith {};" !="bj select 4;\n_projectile = _obj select 6;\n\n_projectile = nearestObject [_unit,_ammo];\n_endPos = getPosATL _projectile;\n_doWait =" !="_plantOutput select _index;\n_countOut = 1;\n};\n};\n} count nearestObjects [([player] call FNC_getPos), [], 10];\n\nif (count _findNe" !=" !r_player_unconscious && !_onLadder);\n\n_nearByObjects = nearestObjects [player,_objects,_range];\n\nif (count _nearByObjects == 0" !="= \"workshop\") exitwith {\n_distance = 3;\n_isNear = count (nearestObjects [_pos, DZE_Workshops, _distance]);\nif (_isNear == 0) the" !="earestPole) then {_pos} else {_nearestPole};\nif ((count (nearestObjects [_center,_buildables,_distance])) >= DZE_BuildingLimit) " !="_ammo in [\"Dragged\",\"RunOver\"])}) then {\n_vehicleArray = nearestObjects [([vehicle _unit] call fnc_getPos),[\"Air\",\"LandVehicle\"," !="n _rocks) exitWith { _findNearestRock = _x; };\n} foreach nearestObjects [getPosATL player, [], 8];\n\n\nif (!isNull _findNearestRoc" !="modeltoWorld [0,0,0]};\n_holder = objNull;\n\n\n_nearByPile= nearestObjects [_pos, [\"WeaponHolder\",\"WeaponHolderBase\"],2];\n\nif (coun" !="r);\nlocal _uid = getPlayerUID player;\nlocal _nearLight = nearestObject [player,\"LitObject\"];\nlocal _canPickLight = false;\nlocal " !="p = {\nlocal _doors = [];\nif (r_drag_sqf) then {\n_doors = nearestObjects [player, DayZ_DropDrageeObjects, 3]; \nif (count _doors >" !"With {};\nif (!_unconscious) exitWith {};\n\n_dropObjects = nearestObjects [player, DayZ_DropDrageeObjects, 3];\nif (count _dropObje" !"Name) in dayz_trees}) exitWith {\n\n_tree = _x;\n};\n} count nearestObjects [getPosATL player, [], 20];\n\nif (!isNull _tree) then {\n\n" !="ntities [\"Plastic_Pole_EP1_DZ\",15]) select 0;\n_objects = nearestObjects [_target, DZE_maintainClasses, DZE_maintainRange];\n\n_obj" !="E_LockableStorage + [\"DZ_storage_base\"];\n_count = count (nearestObjects [_target,_buildables,_range]);\n\n_colour = \"#ffffff\";\n\nif" !="e;\n_num = ceil (random (player distance _x));\n};\n} count nearestObjects [player, [], 50];\n\nfor \"_i\" from 1 to 10 do {\nif (!_ispo" !="j select 4;\n\n_projectile = _obj select 6;\n\n_projectile = nearestObject [_unit,_ammo];\n_vUp = vectorUp _projectile;\n_endPos = get" !="player;\nif (_vehicle != player) then {\n_servicePoints = (nearestObjects [getPosATL _vehicle,DZE_SP_Classes,DZE_SP_MaxDistance]) " 1 nearObjects !="ratorRunning\",false]))} count (([player] call FNC_getPos) nearObjects [\"Generator_DZ\",30]);\nif (_findNearestGen > 0) then {\ns_pl" !="lders = dayz_currentWeaponHolders - 1;\n} count (_worldPos nearObjects [\"ReammoBox\", 1]);\n\nif (_lootChance > random 1 && {dayz_cu" !="rgets == 0) then {\nprivate \"_objects\";\n\n_objects = _agent nearObjects [\"GrenadeHand\", 300]; \n{\nif (!(_x in _targets)) then {\nif " !="er] call FNC_GetPos;\n_isNear = {inflamed _x} count (_pPos nearObjects _distance);\nif(_isNear == 0) then {\n_abort = true;\n_reason" !="s select 0;\n_sign = _this select 1;\n_near = count (player nearObjects [_class,50]);\n\n[_class,_sign,_near] spawn {\n_class = _this" !="with {\n_distance = 3;\n_isNear = {inflamed _x} count (_pos nearObjects _distance);\nif (_isNear == 0) then {\n_abort = true;\n_reaso" !=" (_nearWaterHole select 0) exitWith {};\n} forEach (player nearObjects [\"waterHoleProxy\",50]);\n\n_nearWaterHole" !="unt _zeds;\n\n\ndayz_currentWeaponHolders = count (_position nearObjects [\"ReammoBox\",_radius]);\n\n\nlocal _vehicle = vehicle player;" !="yer] call FNC_GetPos;\n_isNear = {inflamed _x} count (_pos nearObjects 3);\nif (_isNear == 0) exitWith {dayz_actionInProgress = fa" 1 onMapSingleClick 1 playableUnits !"for [{_y=0},{_y < count(playableUnits)},{_y=_y+1}] do {" !"typeName player == \"OBJECT\" && {(player in playableUnits" !"AND {((alive _x) AND {((vehicle _x) distance _obj < 150)})}} count playableUnits)}) then {" !="_local = { _unit distance _x < _dis; } count playableUnits <= 1;" !"ManagementMustBeClose) then { player nearEntities [\"CAManBase\", 10] } else { playableUnits };" !=" = false;\n};\n};\n};\nif (!_isOk) exitWith {false};\n} count playableUnits;\n\n_isOk\n" !="lose) then {player nearEntities [\"CAManBase\", 12]} else {playableUnits};\n\n{\nif (isPlayer _x) then {\n_friendUID = getPlayerUID _x" 1 positionCameraToWorld -1 removeAllEventHandlers !"_WarnFuel = false;\n};\n\n};\n\n_vehicle removeAllEventHandlers \"IncomingMissile" !"leep _wait;} else {sleep (_wait * 4);};\n};\n\n_vehicle removeAllEventHandlers \"Dammaged" !"lse\"];\n{\n(findDisplay 12) displayCtrl 51 ctrlRemoveAllEventHandlers" !"select 1,0] nearestObject (_x select 2);\n_building removeAllEventHandlers" !"\n\n\n\nif (_this isKindOf \"AllVehicles\") then {\n\n_this removeAllEventHandlers" !"With {};\n\n_old = player;\n_old removeAllEventHandlers \"FiredN" !"\npublicVariableServer \"PVDZ_veh_Save\";\n};\n};\n\n\n_unit removeAllEventHandlers" +1 removeAllEventHandlers !"_WarnFuel = false;\n};\n\n};\n\n_vehicle removeAllEventHandlers \"IncomingMissile" !"leep _wait;} else {sleep (_wait * 4);};\n};\n\n_vehicle removeAllEventHandlers \"Dammaged" !"lse\"];\n{\n(findDisplay 12) displayCtrl 51 ctrlRemoveAllEventHandlers" !"select 1,0] nearestObject (_x select 2);\n_building removeAllEventHandlers" !"\n\n\n\nif (_this isKindOf \"AllVehicles\") then {\n\n_this removeAllEventHandlers" !"\npublicVariableServer \"PVDZ_veh_Save\";\n};\n};\n\n\n_unit removeAllEventHandlers" !="r == _model) exitWith {};\n\nlocal _old = player;\n_old removeAllEventHandlers \"FiredNear\";\n_old removeAllEventHandlers \"HandleDama" 1 selectPlayer !"addSwitchableUnit dayz_originalPlayer;\nsetPlayable dayz_originalPlayer;\nselectPlayer dayz_originalPlayer;" !"addSwitchableUnit _newUnit;\nsetPlayable _newUnit;\nselectPlayer _newUnit;" 1 serverCommand !="_character = if (serverCommandAvailable \"#kick\") then { call sched_tg_follow } else { player };" !"serverCommand (\"#vote kick \" + _selectedName);" 1 setAperture !"select 1);\n\nif(_NVOn == \"ON\") exitwith\n{\nsetaperture -1" !"+_inc;\n\n_NVOn = (_NV select 0);\n\nif(_NVOn == \"ON\") then {\n\nsetAperture" 1 setCamUseTI -1 setDamage !"if (_entity isKindOf \"Animal\") then {\n_entity setDamage 1;" !"player setDamage 1;\n};\n\nif (dayz_onBack != \"\") then {\nif (dayz_onBack in w" !"if (_ent isKindOf \"Animal\" || _ent isKindOf \"zZombie_base\") then {\n_ent setDamage 1;" +1 setDamage !"if (_entity isKindOf \"Animal\") then {\n_entity setDamage 1;" !"player setDamage 1;\n};\n\nif (dayz_onBack != \"\") then {\nif (dayz_onBack in w" !"if (_ent isKindOf \"Animal\" || _ent isKindOf \"zZombie_base\") then {\n_ent setDamage 1;" !="Server \"PVDZ_veh_Save\";\n\nif (_allRepaired) then {\n_vehicle setDamage 0;\n_vehicle setVelocity [0,0,1];\n[format[localize \"STR_CL_S" 1 setDammage 1 setDate !rsetDate !"\"setDate\", " !"\n\n\nif (!isDedicated) then {\n\"dayzSetDate\" addPublicVariableEventHandler {" !"if (_x != _newdate select _forEachIndex) exitWith {\nsetDate _newdate" !"plr_Login1]; \nPVDZ_send = [player,\"dayzSetDate\",[player]];\npublicVariableServer" !="!isNil \"dayzSetDate\"" !"diag_log ['Date & time received:', dayzSetDate];\nsetDate dayzSetDate;\ndiag" 1 SetEventHandler !"\n_menu ctrlSetEventHandler [\"ButtonClick\",_compile];\n};" !"inGameUISetEventHandler [\"Action\",\"false\"];" !="];\n};\n\n_menu ctrlSetText format[_type,_name];\n_menu ctrlSetEventHandler [\"ButtonClick\",_compile];\n_i = _i + 1;\n};\n_pos set [3,_h" !="];\n};\n\n_menu ctrlSetText format[_type,_name];\n_menu ctrlSetEventHandler [\"ButtonClick\",_compile];\n_i = _i + 1;\n};\n\nlocal _isKey " @@ -69,8 +70,8 @@ 1 setMarkerColor !",if (_vehicle == _x) then {name _x} else {_vehicle call dayz_getCrew}];\n_marker setMarkerColorLocal \"ColorGreen\";" !"eLocal \"ICON\";\n_marker setMarkerTypeLocal \"DOT\";\n_marker setMarkerColorLocal \"ColorOrange\";\n_marker setMarkerSizeLocal [1.0, 1.0" 1 setMarkerDir 1 setMarkerPos !"\"setMarkerPosLocal\"," !"rsetMarkerPosLocal" -1 setMarkerShape !"tr _i),[_position select 0,_position select 1]];\n_marker setMarkerShapeLocal \"ICON\";\n_marker setMarkerTypeLocal \"DOT\";\n_marker s" -1 setMarkerSize !"DOT\";\n_marker setMarkerColorLocal \"ColorOrange\";\n_marker setMarkerSizeLocal [1.0, 1.0];\n_marker setMarkerTextLocal format [\"%1\"," +1 setMarkerShape !"tr _i),[_position select 0,_position select 1]];\n_marker setMarkerShapeLocal \"ICON\";\n_marker setMarkerTypeLocal \"DOT\";\n_marker s" +1 setMarkerSize !"DOT\";\n_marker setMarkerColorLocal \"ColorOrange\";\n_marker setMarkerSizeLocal [1.0, 1.0];\n_marker setMarkerTextLocal format [\"%1\"," 1 setMarkerText !",if (_vehicle == _x) then {name _x} else {_vehicle call dayz_getCrew}];\n_marker setMarkerColorLocal \"ColorGreen\";" !"rOrange\";\n_marker setMarkerSizeLocal [1.0, 1.0];\n_marker setMarkerTextLocal format [\"%1\",_name];\nsystemChat format[localize \"STR" 1 setMarkerType !",if (_vehicle == _x) then {name _x} else {_vehicle call dayz_getCrew}];\n_marker setMarkerColorLocal \"ColorGreen\";" !" select 1]];\n_marker setMarkerShapeLocal \"ICON\";\n_marker setMarkerTypeLocal \"DOT\";\n_marker setMarkerColorLocal \"ColorOrange\";\n_m" 1 setPosASL !="_unit setPosAsl [(_position select 0), (_position select 1), (LHA_height+1)];" !="_flame setPosASL [_pos select 0,_pos select 1,(_pos select 2)+0.2];" !="_fire setPosASL _location;" !"_objectHelper setPosASL _position;\n} else {" !"_b0x1337 setPosASL (getPosASL player);\n} else {" !"_obj setPosASL [_center select 0, _a, _b];" !"_objectSnapGizmo setPosASL " !"_para setposasl [\n" !"_thingy setPosASL (ATLToASL _pos);\n} else {" !="> \"fixWaterPos\");\nif (_fixWaterSpawn == 1) then {\n_vehicle setPosASL (_pos);\n} else {\n_vehicle setPos (_pos);\n}; \n} else {\n_ve" @@ -81,7 +82,7 @@ 1 sideLogic !"publicVariable \"BIS_MPF_logic\";" 1 switchCamera !"\"switchCamera\", " !"rswitchCamera" !"player switchCamera _currentCamera;\nif (_currentWpn !=" !"< 150) && random 1 > 0.5) then {\n_killer switchcamera" 1 systemChat !="systemChat format[localize \"str_missing_to_do_this\", _x];" !"systemChat (localize " !"systemChat format[localize \"STR_EPOCH_" !"systemChat localize \"STR_EPOCH_" !"case \"system\": {systemChat _message;};" !"systemchat localize \"STR_CRAFTING_NEEDED_ITEMS\";" !"systemChat format[localize \"STR_CL_" !"systemChat localize \"STR_CL_" !=") then {\nif (player getVariable[\"radiostate\",true]) then {\nsystemChat (\"[RADIO] \" + _message);\nplaySound \"Radio_Message_Sound\";\n" !"systemChat localize \"str_cursorTargetNotFound\"" -1 title !"titleCut [\"\", \"BLACK " !"\"titleCut\", " !"\"titleText\"" !="rtitleCut = 'titleCut'" !"rtitleCutc" !="rtitleText = 'titleText'" !"rtitleTextc" !"(_missionTextListPath >> \"titles\")" !"(_display displayCtrl _titleIDC) ctrlShow false;" !"titleText [format[localize \"str_return_lobby\", _x" !",\"_titleText\"" !"localize 'STR_UI_GENDER_TITLE';\n_timeNem" !="scriptName \"MP\\data\\scriptCommands\\titleText.sqf\";" !_fillTradeTitle !_bldTxtStringTitle !"localize \"str_halo_altitude_speed" !"play displayCtrl 8801 ctrlSetText(format[localize \"STR_CL_RV_TITLE\",_keyDisplay]);\n\n_control = ((findDisplay 8800) displayCtrl 8" +1 title !"titleCut [\"\", \"BLACK " !"\"titleCut\", " !"\"titleText\"" !="rtitleCut = 'titleCut'" !"rtitleCutc" !="rtitleText = 'titleText'" !"rtitleTextc" !"(_missionTextListPath >> \"titles\")" !"(_display displayCtrl _titleIDC) ctrlShow false;" !"titleText [format[localize \"str_return_lobby\", _x" !",\"_titleText\"" !"localize 'STR_UI_GENDER_TITLE';\n_timeNem" !="scriptName \"MP\\data\\scriptCommands\\titleText.sqf\";" !_fillTradeTitle !_bldTxtStringTitle !"localize \"str_halo_altitude_speed" !"play displayCtrl 8801 ctrlSetText(format[localize \"STR_CL_RV_TITLE\",_keyDisplay]);\n\n_control = ((findDisplay 8800) displayCtrl 8" !="f\"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nprivate [\"_folder\",\"_actionTitleFormat\",\"_actionCostsFormat\",\"_message\",\"_messageShown\",\"_last" 1 toString !"_animCheck = toString ([(_animStateArray select 0),(_animStateArray select 1)" !="_skinToModel = toString (_finalArray);" !="{_textArrayTemp = _textArrayTemp + [tostring [_x]]} foreach _line;" !="_cmpt = toString _cmpt;" !="_objName = toLower(toString(_objName));" !"if (toString _hayArr != _needle) then {" !="_type = toString _typeA;" !="_anim4 = toString _anim4;" !"{(count _stance>17)}) then {toString [_stance select 17]}" !"BIS_fnc_timeToString" !"02, if (typeName _name == \"ARRAY\") then {toString _name} else {_name}];" !="s = true;\n\n_array = toArray (animationState player);\n_str = toString [_array select 5,_array select 6,_array select 7];\n_anim = " !=" _input - [_x];\n} forEach _badChars;\n\n_input = parseNumber (toString (_input));\n_input\n};\n\nBankDialogUpdateAmounts = {\nprivate [" 1 worldTo !="_relPos = _building worldToModel _point;" !"_w2m = _x worldToModel (getPosATL player);\n_bb = (boundingbox _x) select 1;" !="_h = _offset + ((_o worldToModel (getPosATL _o)) select 2);" !"_pos set [2,(_pos select 2) + 1.5];\n_screen = worldToScreen _pos;\n_text = composeText [image" !="\n_pos = _this select 1; \n_offset = 1; \n\n_relPos = _building worldToModel _pos;\n_boundingBox = boundingBox _building;\n\n_min = _bo" From b3871aa3219269154aa2b72ef482ee642441e959 Mon Sep 17 00:00:00 2001 From: A Man Date: Wed, 18 Aug 2021 13:51:05 +0200 Subject: [PATCH 16/40] Add toggleable Garage Door Opener by salival --- SQF/dayz_code/actions/garageDoorOpener.sqf | 70 ++++++++++++++++++++++ SQF/dayz_code/compile/fn_selfActions.sqf | 21 ++++++- SQF/dayz_code/configVariables.sqf | 10 +++- SQF/dayz_code/init/variables.sqf | 2 + 4 files changed, 101 insertions(+), 2 deletions(-) create mode 100644 SQF/dayz_code/actions/garageDoorOpener.sqf diff --git a/SQF/dayz_code/actions/garageDoorOpener.sqf b/SQF/dayz_code/actions/garageDoorOpener.sqf new file mode 100644 index 000000000..7eef6173e --- /dev/null +++ b/SQF/dayz_code/actions/garageDoorOpener.sqf @@ -0,0 +1,70 @@ +/* + Garage door opener script by salival (https://github.com/oiad) +*/ + +if (dayz_actionInProgress) exitWith {localize "str_player_actionslimit" call dayz_rollingMessages;}; +dayz_actionInProgress = true; + +private ["_door","_typeof","_state"]; + +_door = _this select 3; +_typeof = typeof _door; +_state = 5; + +if (isNull _door) exitWith {dayz_actionInProgress = false; systemChat localize "str_cursorTargetNotFound";}; + +{DZE_myVehicle removeAction _x} count s_player_gdoor_opener;s_player_gdoor_opener = []; +s_player_gdoor_opener_ctrl = 1; + +call { + if (_typeof in ["WoodenGate_1_DZ","WoodenGate_2_DZ","WoodenGate_3_DZ","WoodenGate_4_DZ"]) exitwith { + if (_door animationPhase "DoorR" == 0) then { + systemChat localize "STR_CL_GDO_DOOR_OPEN"; + _door animate ["DoorR",1]; + _door animate ["DoorL",1]; + } else { + systemChat localize "STR_CL_GDO_DOOR_CLOSE"; + _door animate ["DoorR",0]; + _door animate ["DoorL",0]; + _state = 4; + }; + }; + if (_typeof in ["CinderGarageOpenTopLocked_DZ","Land_DZE_WoodOpenTopGarageLocked"]) exitwith { + if (_door animationPhase "doorl" == 0) then { + systemChat localize "STR_CL_GDO_DOOR_OPEN"; + _door animate ["doorR",1]; + _door animate ["doorl",1]; + } else { + systemChat localize "STR_CL_GDO_DOOR_CLOSE"; + _door animate ["doorR",0]; + _door animate ["doorl",0]; + _state = 4; + }; + }; + if (_typeof in ["CinderGateLocked_DZ","Land_DZE_WoodGateLocked"]) exitwith { + if (_door animationPhase "Open_door" == 0) then { + systemChat localize "STR_CL_GDO_DOOR_OPEN"; + _door animate ["Open_door",1]; + _door animate ["Open_doorR",1]; + } else { + systemChat localize "STR_CL_GDO_DOOR_CLOSE"; + _door animate ["Open_door",0]; + _door animate ["Open_doorR",0]; + _state = 4; + }; + }; + if (_door animationPhase "Open_door" == 0) then { + systemChat localize "STR_CL_GDO_DOOR_OPEN"; + _door animate ["Open_door",1]; + } else { + systemChat localize "STR_CL_GDO_DOOR_CLOSE"; + _door animate ["Open_door",0]; + _state = 4; + }; +}; + +PVDZE_handleSafeGear = [player,_door,_state,"DoorOpener"]; +publicVariableServer "PVDZE_handleSafeGear"; + +s_player_gdoor_opener_ctrl = -1; +dayz_actionInProgress = false; \ No newline at end of file diff --git a/SQF/dayz_code/compile/fn_selfActions.sqf b/SQF/dayz_code/compile/fn_selfActions.sqf index 6806ddbc8..d1cf483e1 100644 --- a/SQF/dayz_code/compile/fn_selfActions.sqf +++ b/SQF/dayz_code/compile/fn_selfActions.sqf @@ -128,9 +128,28 @@ if (_inVehicle) then { {DZE_myVehicle removeAction _x} count s_player_lockUnlockInside;s_player_lockUnlockInside = []; s_player_lockUnlockInside_ctrl = -1; }; + + //Allows to open garage doors from the vehicle, but may negatively impact performance + if (DZE_GarageDoor_Opener) then { + local _doors = nearestObjects [DZE_myVehicle, DZE_GarageDoors, DZE_GarageDoor_Radius]; + + if (count _doors > 0 && {driver DZE_myVehicle == player}) then { + local _hasAccess = [player,_doors select 0] call FNC_check_access; + if (s_player_gdoor_opener_ctrl < 0 && ((_hasAccess select 0) || (_hasAccess select 2) || (_hasAccess select 3) || (_hasAccess select 4))) then { + local _door = DZE_myVehicle addAction [format["%1",localize "STR_CL_GDO_GARAGE"],"\z\addons\dayz_code\actions\garageDoorOpener.sqf",_doors select 0, 1, false, true]; + s_player_gdoor_opener set [count s_player_gdoor_opener,_door]; + s_player_gdoor_opener_ctrl = 1; + }; + } else { + {DZE_myVehicle removeAction _x} count s_player_gdoor_opener;s_player_gdoor_opener = []; + s_player_gdoor_opener_ctrl = -1; + }; + }; } else { {DZE_myVehicle removeAction _x} count s_player_lockUnlockInside;s_player_lockUnlockInside = []; s_player_lockUnlockInside_ctrl = -1; + {DZE_myVehicle removeAction _x} count s_player_gdoor_opener;s_player_gdoor_opener = []; + s_player_gdoor_opener_ctrl = -1; }; if (DZE_HeliLift) then { @@ -1075,7 +1094,7 @@ if (!isNull _cursorTarget && {!_inVehicle && !_isPZombie && _canDo && player dis player removeAction s_player_checkWallet; s_player_checkWallet = -1; player removeAction s_player_clothes; - s_player_clothes = -1; + s_player_clothes = -1; }; //Dog actions on player self diff --git a/SQF/dayz_code/configVariables.sqf b/SQF/dayz_code/configVariables.sqf index 11be994e8..42e3461f9 100644 --- a/SQF/dayz_code/configVariables.sqf +++ b/SQF/dayz_code/configVariables.sqf @@ -205,7 +205,15 @@ if (!isDedicated) then { DZE_CLICK_ACTIONS = DZE_CLICK_ACTIONS + [ ["ItemGPS",localize "STR_CL_LV_LOCATE_VEHICLES","[] spawn locateVehicle;","true"] ]; - }; + }; + + // Garage Door Opener + DZE_GarageDoor_Opener = false; // Enables the option to open Garage Doors from the inside of a vehicle. + + if (DZE_GarageDoor_Opener) then { + DZE_GarageDoors = ["CinderWallDoorLocked_DZ","Land_DZE_GarageWoodDoorLocked","Land_DZE_LargeWoodDoorLocked","WoodenGate_1_DZ","WoodenGate_2_DZ","WoodenGate_3_DZ","WoodenGate_4_DZ","Land_DZE_WoodGateLocked","CinderGateLocked_DZ","Land_DZE_WoodOpenTopGarageLocked","CinderGarageOpenTopLocked_DZ"]; // Array of Garage Doors that can be opened. + DZE_GarageDoor_Radius = 30; // Radius from where the Garage Doors can be opened. Higher values may negatively impact the performance + }; // Service Points for Refuel, Repair and Rearm DZE_Service_Points = false; diff --git a/SQF/dayz_code/init/variables.sqf b/SQF/dayz_code/init/variables.sqf index b7edba423..461cbca09 100644 --- a/SQF/dayz_code/init/variables.sqf +++ b/SQF/dayz_code/init/variables.sqf @@ -208,6 +208,8 @@ if (!isDedicated) then { s_bank_dialog3 = -1; s_player_checkWallet = -1; s_player_clothes = -1; + s_player_gdoor_opener = []; + s_player_gdoor_opener_ctrl = -1; }; call dayz_resetSelfActions; From 05118343fce29948e8a8822a8768eee8f66c01b4 Mon Sep 17 00:00:00 2001 From: worldwidesorrow Date: Wed, 18 Aug 2021 09:47:25 -0500 Subject: [PATCH 17/40] Integrate NS Bloodsuckers Add and update files for bloodsucker spawning option. --- .../Configs/CfgVehicles/CfgVehicles.hpp | 3 +- .../Configs/CfgVehicles/Zeds/Bloodsuckers.hpp | 134 ++ .../Configs/CfgWeapons/CfgWeapons.hpp | 5 +- .../Configs/CfgWeapons/Tools/MutantHeart.hpp | 7 + .../Configs/RscDisplay/RscPlayerUI.hpp | 20 + SQF/dayz_code/Configs/cfgMoves.hpp | 2054 +++++++++++++++++ SQF/dayz_code/actions/gather_meat.sqf | 107 +- .../compile/building_spawnZombies.sqf | 7 + SQF/dayz_code/compile/local_gutObject.sqf | 57 +- SQF/dayz_code/compile/mutant_findTarget.sqf | 28 + SQF/dayz_code/compile/mutant_generate.sqf | 16 + SQF/dayz_code/compile/player_alertZombies.sqf | 42 +- SQF/dayz_code/compile/player_mutantAttack.sqf | 76 + SQF/dayz_code/compile/player_spawnCheck.sqf | 16 + SQF/dayz_code/compile/player_zombieCheck.sqf | 231 +- SQF/dayz_code/configVariables.sqf | 12 +- SQF/dayz_code/init/compiles.sqf | 9 +- SQF/dayz_code/stringtable.xml | 15 + SQF/dayz_code/system/mutant_agent.fsm | 719 ++++++ .../system/scheduler/sched_corpses.sqf | 2 +- 20 files changed, 3335 insertions(+), 225 deletions(-) create mode 100644 SQF/dayz_code/Configs/CfgVehicles/Zeds/Bloodsuckers.hpp create mode 100644 SQF/dayz_code/Configs/CfgWeapons/Tools/MutantHeart.hpp create mode 100644 SQF/dayz_code/compile/mutant_findTarget.sqf create mode 100644 SQF/dayz_code/compile/mutant_generate.sqf create mode 100644 SQF/dayz_code/compile/player_mutantAttack.sqf create mode 100644 SQF/dayz_code/system/mutant_agent.fsm diff --git a/SQF/dayz_code/Configs/CfgVehicles/CfgVehicles.hpp b/SQF/dayz_code/Configs/CfgVehicles/CfgVehicles.hpp index e827177c0..78873857c 100644 --- a/SQF/dayz_code/Configs/CfgVehicles/CfgVehicles.hpp +++ b/SQF/dayz_code/Configs/CfgVehicles/CfgVehicles.hpp @@ -230,8 +230,6 @@ class CfgVehicles class epoch_car: Car { vehicleClass = "DayZ Epoch Vehicles"; - side = 1; - faction = "USMC"; selectionBackLights = "brzdove svetlo"; selectionBrakeLights = "zadni svetlo"; crew = ""; @@ -622,6 +620,7 @@ class CfgVehicles #include "Zeds\WildZeds.hpp" //Wild type zeds #include "Zeds\SwarmZeds.hpp" //Swarm type zeds #include "Zeds\PlayerZeds.hpp" //Player type zeds + #include "Zeds\Bloodsuckers.hpp" //NS Bloodsuckers //Skins #include "Skins\Male.hpp" #include "Skins\Female.hpp" diff --git a/SQF/dayz_code/Configs/CfgVehicles/Zeds/Bloodsuckers.hpp b/SQF/dayz_code/Configs/CfgVehicles/Zeds/Bloodsuckers.hpp new file mode 100644 index 000000000..686337797 --- /dev/null +++ b/SQF/dayz_code/Configs/CfgVehicles/Zeds/Bloodsuckers.hpp @@ -0,0 +1,134 @@ +class z_bloodsucker : Zed_Base { + scope = 2; + glassesEnabled = 0; + vehicleClass = "Zombie"; + displayName = $STR_ZNAME_BLOODSUCKER; + model = "\nst\NS_mutants\blood\bloodsucker.p3d"; + hiddenSelections[] = {"invisible"}; + //hiddenSelectionsTextures[] = {}; + fsmDanger = ""; + fsmFormation = ""; + //zombieLoot = "bloodsucker"; + moves = "CfgMovesBloodsucker"; + isMan = false; + weapons[] = {}; + magazines[] = {}; + sensitivity = 1; // sensor sensitivity + sensitivityEar = 1; + identityTypes[] = {}; + class TalkTopics {}; + languages[] = {}; + armor = 46; + damageScale = 250; + sepsisChance = 0; + BleedChance = 10; // Maybe this should be higher + forcedSpeed = 6; // Left here to prevent errors in player_zombieCheck + + class Eventhandlers { + init = "[(_this select 0)] execFSM ""\z\AddOns\dayz_code\system\mutant_agent.fsm"""; + local = "_z = _this select 0; if (!(_this select 1)) exitWith {}; if (isServer) exitWith { _z call sched_co_deleteVehicle; }; [_z,true] execFSM '\z\AddOns\dayz_code\system\mutant_agent.fsm';"; + //HandleDamage = "_this call local_zombieDamage;"; + //Killed = "[_this,'zombieKills'] call local_eventKill;"; + }; + + class UserActions + { + class Butcher + { + displayName = $STR_EPOCH_ACTIONS_GUTBLOOD; + displayNameDefault = $STR_EPOCH_ACTIONS_GUTBLOOD; + priority = 0; + radius = 3; + position = ""; + showWindow = 1; + onlyForPlayer = 1; + shortcut = ""; + condition = "(['Butcher',this] call userActionConditions)"; + statement = "this spawn player_butcher;"; + }; + }; + + class HitPoints { + class HitHead { + armor = 10; + material = -1; + name = "head_hit"; + passThrough = true; + memoryPoint = "pilot"; + }; + + class HitBody : HitHead { + armor = 20; + name = "body"; + memoryPoint = "aimPoint"; + }; + + class HitSpine : HitHead { + armor = 10; + name = "Spine2"; + memoryPoint = "aimPoint"; + }; + + class HitHands : HitHead { + armor = 10; + material = -1; + name = "hands"; + passThrough = true; + }; + + class HitLArm : HitHands { + name = "LeftArm"; + memoryPoint = "lelbow"; + }; + + class HitRArm : HitHands { + name = "RightArm"; + memoryPoint = "relbow"; + }; + + class HitLForeArm : HitHands { + name = "LeftForeArm"; + memoryPoint = "lwrist"; + }; + + class HitRForeArm : HitHands { + name = "RightForeArm"; + memoryPoint = "rwrist"; + }; + + class HitLHand : HitHands { + name = "LeftHand"; + memoryPoint = "LeftHandMiddle1"; + }; + + class HitRHand : HitHands { + name = "RightHand"; + memoryPoint = "RightHandMiddle1"; + }; + + class HitLegs : HitHands { + name = "legs"; + memoryPoint = "pelvis"; + }; + + class HitLLeg : HitHands { + name = "LeftLeg"; + memoryPoint = "lknee"; + }; + + class HitLLegUp : HitHands { + name = "LeftUpLeg"; + memoryPoint = "lfemur"; + }; + + class HitRLeg : HitHands { + name = "RightLeg"; + memoryPoint = "rknee"; + }; + + class HitRLegUp : HitHands { + name = "RightUpLeg"; + memoryPoint = "rfemur"; + }; + }; +}; \ No newline at end of file diff --git a/SQF/dayz_code/Configs/CfgWeapons/CfgWeapons.hpp b/SQF/dayz_code/Configs/CfgWeapons/CfgWeapons.hpp index 260344ccd..5e9614bb3 100644 --- a/SQF/dayz_code/Configs/CfgWeapons/CfgWeapons.hpp +++ b/SQF/dayz_code/Configs/CfgWeapons/CfgWeapons.hpp @@ -214,8 +214,6 @@ class CfgWeapons #include "Rifles\WA2000.hpp" #include "Rifles\BarrettMRAD.hpp" - #include "Rifles\RedRyder.hpp" - /* PISTOLS */ class M9; @@ -346,9 +344,10 @@ class CfgWeapons #include "Tools\Scissors.hpp" #include "Tools\ScrewExtractor.hpp" #include "Tools\Wrench.hpp" + #include "Tools\MutantHeart.hpp" #include "Item\ItemKeys.hpp" #include "Item\Documents.hpp" - #include "VehicleWeapons.hpp" + #include "VehicleWeapons.hpp" }; \ No newline at end of file diff --git a/SQF/dayz_code/Configs/CfgWeapons/Tools/MutantHeart.hpp b/SQF/dayz_code/Configs/CfgWeapons/Tools/MutantHeart.hpp new file mode 100644 index 000000000..a44f9453f --- /dev/null +++ b/SQF/dayz_code/Configs/CfgWeapons/Tools/MutantHeart.hpp @@ -0,0 +1,7 @@ +class ItemMutantHeart: ItemCore +{ + scope = 2; + displayName = $STR_MUTANT_HEART; + picture = "\nst\ns_mutants\blood\heart_icon_ca.paa"; + descriptionShort = $STR_MUTANT_HEART_DESC; +}; \ No newline at end of file diff --git a/SQF/dayz_code/Configs/RscDisplay/RscPlayerUI.hpp b/SQF/dayz_code/Configs/RscDisplay/RscPlayerUI.hpp index 6bc4b4bdb..3892cb186 100644 --- a/SQF/dayz_code/Configs/RscDisplay/RscPlayerUI.hpp +++ b/SQF/dayz_code/Configs/RscDisplay/RscPlayerUI.hpp @@ -931,4 +931,24 @@ class RscTitles }; }; }; + class mutant_attack + { + idd=-1; + movingEnable=0; + duration=1; + fadein=0; + name="Skrabanec"; + controls[]= + { + "skrabanec" + }; + class skrabanec: RscPicture + { + x=0; + y=0; + w=1; + h=1; + text="\nst\textures\skrabanec.paa"; + }; + }; }; diff --git a/SQF/dayz_code/Configs/cfgMoves.hpp b/SQF/dayz_code/Configs/cfgMoves.hpp index 0050a9752..84cd12e66 100644 --- a/SQF/dayz_code/Configs/cfgMoves.hpp +++ b/SQF/dayz_code/Configs/cfgMoves.hpp @@ -661,4 +661,2058 @@ class CfgGesturesDogDZ transitionsInterpolated[] = {}; transitionsSimple[] = {}; transitionsDisabled[] = {}; +}; + +class CfgMovesBloodsucker: CfgMovesMaleSdr +{ + skeletonName="OFP2_ManSkeleton"; + gestures="CfgGesturesMale"; + class StandBase; + class StatesExt + { + class AmovPercMstpSnonWnonDnon: StandBase + { + actions="CivilStandActions"; + duty=-1; + equivalentTo=""; + preload=0; + file="\nst\ns_anims\bloodsucker\forward.rtm"; + showWeaponAim=0; + disableWeapons=1; + canPullTrigger=0; + speed=1e+010; + relSpeedMin=0.69999999; + relSpeedMax=1.1; + leaningFactorBeg=0; + leaningFactorEnd=0; + looped=1; + soundEnabled=0; + soundOverride=""; + soundEdge[]={0.5,1}; + enableBinocular=1; + leftHandIKBeg=0; + leftHandIKCurve[]={}; + leftHandIKEnd=0; + rightHandIKBeg=0; + rightHandIKCurve[]={}; + rightHandIKEnd=0; + hasCollShapeSafe=0; + collisionShapeSafe=""; + collisionShape="ca\Anims\Characters\data\Geom\Sdr\Perc_Mrun_Slow_Wrfl.p3d"; + headBobStrength=0.21393; + limitGunMovement=0.1; + enableOptics=-1; + ConnectTo[]= + { + "ActsPercMstpSnonWpstDnon_suicide1A", + 0.02, + "ActsPercMstpSnonWpstDnon_suicide2A", + 0.02, + "AmovPercMstpSnonWnonDnon_sekaniIn", + 0.02, + "AidlPercMstpSnonWnonDnon", + 0.0099999998, + "AidlPercMstpSnonWnonDnon_player", + 0.0099999998, + "AovrPercMstpSnonWnonDf", + 0.0099999998, + "AmovPercMstpSnonWnonDnon_turnL", + 0.02, + "AmovPercMstpSnonWnonDnon_turnR", + 0.02, + "AmovPercMstpSnonWnonDnon_AmovPknlMstpSnonWnonDnon", + 0.02, + "AmovPercMstpSnonWnonDnon_AmovPpneMstpSnonWnonDnon", + 0.02, + "AmovPercMstpSnonWnonDnon_AmovPercMstpSrasWrflDnon", + 0.02, + "AmovPercMstpSnonWnonDnon_AmovPercMstpSrasWpstDnon", + 0.02, + "AmovPercMstpSnonWnonDnon_AmovPknlMstpSrasWlnrDnon", + 0.029999999, + "AmovPercMstpSnonWnonDnon_AwopPercMstpSoptWbinDnon", + 0.02, + "ActsPercMstpSnonWnonDnon_varStayLeant", + 2, + "ActsPercMstpSnonWrflDnon_Interrogate01", + 2, + "ActsPercMstpSnonWrflDnon_Interrogate02", + 2, + "ActsPsitMstpSnonWnonDnon_InterrogateLeaves", + 2, + "AmovPercMstpSnonWnonDnon_Scared", + 2, + "AmovPercMstpSnonWnonDnon_Scared2", + 2, + "AmovPercMstpSnonWnonDnon_carCheckPush", + 2, + "AmovPercMstpSnonWnonDnon_carCheckWash", + 2, + "AmovPercMstpSnonWnonDnon_carCheckWheel", + 2, + "AmovPercMstpSnonWnonDnon_exerciseKata", + 2, + "ActsPercMstpSnonWnonDnon_DancingDuoIvan", + 2, + "ActsPercMstpSnonWnonDnon_DancingDuoStefan", + 2, + "ActsPercMstpSnonWnonDnon_DancingStefan", + 2, + "AmovPercMstpSnonWnonDnon_exercisekneeBendA", + 2, + "AmovPercMstpSnonWnonDnon_exercisekneeBendB", + 2, + "AmovPercMstpSnonWnonDnon_exercisePushup", + 2, + "AmovPercMstpSnonWnonDnon_seeWatch", + 2, + "AmovPercMstpSnonWnonDnon_talking", + 2, + "ActsPercMstpSnonWpstDnon_sceneBardak01", + 0.1, + "AmovPercMstpSnonWnonDnon_normalizationTest", + 0.1, + "AmovPercMstpSnonWnonDnon_SaluteIn", + 0.1, + "AmovPercMstpSnonWnonDnon_EaseIn", + 0.1, + "AmovPercMstpSnonWnonDnon_AmovPsitMstpSnonWnonDnon_ground", + 0.1, + "AmovPercMstpSnonWnonDnon_AmovPercMstpSsurWnonDnon", + 0.1, + "AwopPercMstpSgthWnonDnon_start", + 0.1, + "LadderCivilOn", + 1, + "AswmPercMstpSnonWnonDnon", + 0.30000001, + "ActsPknlMstpWunaSnonDnon_sceneCrashSite_Villager", + 0.1, + "AmovPercMstpSnonWnonDnon_AinvPknlMstpSnonWnonDnon", + 0.02, + "AmovPercMstpSnonWnonDnon_AcrgPknlMstpSnonWnonDnon_getInLow", + 0.02, + "AmovPercMstpSnonWnonDnon_AcrgPknlMstpSnonWnonDnon_getInMedium", + 0.02, + "AmovPercMstpSnonWnonDnon_AcrgPknlMstpSnonWnonDnon_getInHigh", + 0.02, + "amovpercmstpsnonwnondnon_amovpercmstpsraswlnrdnon", + 0.02, + "ActsPercSnonWnonDnon_assembling", + 0.0099999998, + "ActsPercSnonWnonDnon_carFixing", + 0.0099999998, + "ActsPercSnonWnonDnon_carFixing2", + 0.0099999998, + "ActsPercSnonWnonDnon_tableSupport_TalkIn", + 0.0099999998, + "ActsPercMstpSrasWunaDnon_sceneLopotevBandCaptured_Kostey", + 0.0099999998, + "AidlPpneMstpSnonWnonDnon_SleepA_layDown", + 0.0099999998, + "AidlPpneMstpSnonWnonDnon_SleepB_layDown", + 0.0099999998, + "AidlPpneMstpSnonWnonDnon_SleepC_layDown", + 0.0099999998, + "ActsPercMstpSnonWunaDnon_sceneNikitinDisloyalty_Nikitin", + 0.0099999998, + "ActsPercMstpSnonWunaDnon_sceneNikitinDisloyalty_Bardak", + 0.0099999998, + "ActsPercMstpSlowWrflDnon_sceneNikitinDisloyalty_Homeless", + 0.0099999998, + "ActsPercMstpSnonWunaDnon_sceneNikitinDisloyalty_Lopotev1", + 0.0099999998, + "ErcUnarm_sitUnarm_L", + 0.0099999998, + "ErcUnarm_sitUnarm_R", + 0.0099999998, + "sitTableRfl_listening_onTTractor", + 0.0099999998, + "sitUnarm_L_idleLoop_onFoiledPallets", + 0.0099999998, + "sitUnarm_L_idleLoop_onFoiledPallets2", + 0.0099999998, + "ErcUnarm_sitTable", + 0.0099999998, + "sitTableUnarm_talkingListening_TowingTractor", + 0.0099999998, + "UnaErc_UnaErcPoslechVelitele", + 0.0099999998, + "Csdr_LHD_oprenOzabradli118cm_A", + 0.0099999998, + "UnaErcVelitelProslov1", + 0.0099999998, + "FPS_shift", + 0.0099999998, + "ctsLopoHover_cdf2", + 0.0099999998, + "ctsLopoHover_lopotev", + 0.0099999998, + "sitUnarm_L_idleLoop_inUH1Y", + 0.0099999998, + "AmelPercMstpSnonWnonDnon_amaterUder1", + 0.02, + "AmelPercMstpSnonWnonDnon_amaterUder2", + 0.02, + "AmelPercMstpSnonWnonDnon_amaterUder3", + 0.02, + "AmelPercMstpSnonWnonDnon_zasah1", + 0.02, + "AmelPercMstpSnonWnonDnon_zasah2", + 0.02, + "AmelPercMstpSnonWnonDnon_zasah3hard", + 0.02, + "AmelPercMstpSnonWnonDnon_zasah4", + 0.02, + "AmelPercMstpSnonWnonDnon_zasah5hard", + 0.02, + "AmelPercMstpSnonWnonDnon_zasah6hlava", + 0.02, + "AmelPercMstpSnonWnonDnon_zasah7bricho", + 0.02, + "NavigationDriverReverse", + 0.0099999998, + "RepairingKneel", + 0.0099999998, + "RepairingErc", + 0.0099999998, + "NavigationHeli", + 0.0099999998, + "AmovPercMstpSnonWnonDnon_initLoop", + 0.0099999998, + "AmovPercMstpSnonWnonDnon_idle70chozeniPoRukou", + 0.0099999998, + "AmovPercMstpSnonWnonDnon_idle68boxing", + 0.0099999998, + "AmovPercMstpSnonWnonDnon_zevl", + 0.0099999998 + }; + InterpolateTo[]= + { + "AinvPknlMstpSnonWnonDnon_AinvPknlMstpSnonWnonDnon_medic", + 0.02, + "AmovPercMstpSnonWnonDnon_turnL", + 0.02, + "AmovPercMstpSnonWnonDnon_turnR", + 0.02, + "AmovPercMwlkSnonWnonDf", + 0.02, + "AmovPercMwlkSnonWnonDfl", + 0.02, + "AmovPercMwlkSnonWnonDl", + 0.02, + "AmovPercMwlkSnonWnonDbl", + 0.02, + "AmovPercMwlkSnonWnonDb", + 0.02, + "AmovPercMwlkSnonWnonDbr", + 0.02, + "AmovPercMwlkSnonWnonDr", + 0.02, + "AmovPercMwlkSnonWnonDfr", + 0.02, + "AmovPercMrunSnonWnonDf", + 0.02, + "AmovPercMrunSnonWnonDfl", + 0.02, + "AmovPercMrunSnonWnonDl", + 0.02, + "AmovPercMrunSnonWnonDbl", + 0.02, + "AmovPercMrunSnonWnonDb", + 0.02, + "AmovPercMrunSnonWnonDbr", + 0.02, + "AmovPercMrunSnonWnonDr", + 0.02, + "AmovPercMrunSnonWnonDfr", + 0.02, + "AmovPercMevaSnonWnonDf", + 0.02, + "AmovPercMevaSnonWnonDfl", + 0.02, + "AmovPercMevaSnonWnonDfr", + 0.02, + "AdthPercMstpSnonWnonDnon_1", + 0.0099999998, + "AdthPercMstpSnonWnonDnon_2", + 0.0099999998, + "AdthPercMstpSnonWnonDnon_3", + 0.0099999998, + "ActsPsitMstpSnonWnonDnon_varSittingDrinking", + 0.02, + "AmovPercMstpSnonWnonDnon_AcinPknlMwlkSnonWnonDb_1", + 0.1, + "ActsPercMstpSnonWnonDnon_talking01", + 0.1, + "ActsPercMstpSnonWnonDnon_talking02", + 0.1, + "ActsPercMstpSnonWnonDnon_talking03", + 0.1, + "ActsPercMstpSnonWnonDnon_talking04", + 0.1, + "AidlPercSnonWnonDnon_talkBS", + 0.0099999998, + "sitTableRfl_listening_onTTractor", + 0.0099999998, + "sitUnarm_L_idleLoop_onFoiledPallets", + 0.0099999998, + "sitUnarm_L_idleLoop_onFoiledPallets2", + 0.0099999998, + "sitUnarm_L_idleLoop_inUH1Y", + 0.0099999998 + }; + }; + class AmovPercMrunSnonWnonDf: AmovPercMstpSnonWnonDnon + { + actions="CivilRunActionsF"; + file="\nst\ns_anims\bloodsucker\forward.rtm"; + speed=3.21; + soundEdge[]={0.25,0.5,0.75,1}; + duty=0.40000001; + soundOverride="run"; + soundEnabled=1; + limitGunMovement=0.1; + walkcycles=2; + disableWeapons=1; + ConnectTo[]= + { + "AmovPercMsprSnonWnonDf_AmovPpneMstpSnonWnonDnon", + 0.02 + }; + InterpolateTo[]= + { + "AmovPercMstpSnonWnonDnon", + 0.02, + "AmovPercMwlkSnonWnonDf", + 0.025, + "AmovPercMrunSnonWnonDfl", + 0.025, + "AmovPercMrunSnonWnonDfr", + 0.025, + "AmovPknlMrunSnonWnonDf", + 0.029999999, + "AmovPercMsprSnonWnonDf_AmovPpneMstpSnonWnonDnon", + 0.02, + "AmovPercMevaSnonWnonDf", + 0.02 + }; + }; + class AmovPercMwlkSnonWnonDf: AmovPercMstpSnonWnonDnon + { + actions="CivilWlkActionsF"; + file="\nst\ns_anims\bloodsucker\forward.rtm"; + soundEdge[]={0.25,0.5,0.75,1}; + speed=3.21; + duty=-0.1; + soundOverride="walk"; + soundEnabled=1; + walkcycles=2; + ConnectTo[]={}; + InterpolateTo[]= + { + "AmovPercMwlkSnonWnonDnon_transition", + 0.015, + "AmovPercMwlkSnonWnonDfl", + 0.025, + "AmovPercMwlkSnonWnonDfr", + 0.025, + "AmovPercMrunSnonWnonDf", + 0.025, + "AmovPknlMwlkSnonWnonDf", + 0.029999999, + "AmovPercMevaSnonWnonDf", + 0.025, + "AmovPercMrunSnonWnonDf_AmovPercMstpSnonWnonDnon_gthStart", + 0.1 + }; + }; + class AmovPercMwlkSnonWnonDfl: AmovPercMwlkSnonWnonDf + { + actions="CivilWlkActionsFL"; + file="\nst\ns_anims\bloodsucker\forward.rtm"; + speed=3.21; + ConnectTo[]={}; + InterpolateTo[]= + { + "AmovPercMwlkSnonWnonDnon_transition", + 0.015, + "AmovPercMwlkSnonWnonDf", + 0.025, + "AmovPercMwlkSnonWnonDl", + 0.025, + "AmovPercMrunSnonWnonDfl", + 0.025, + "AmovPknlMwlkSnonWnonDfl", + 0.029999999, + "AmovPercMevaSnonWnonDfl", + 0.025, + "AmovPercMrunSnonWnonDf_AmovPercMstpSnonWnonDnon_gthStart", + 0.1 + }; + }; + class AmovPercMwlkSnonWnonDl: AmovPercMwlkSnonWnonDf + { + actions="CivilWlkActionsL"; + file="\nst\ns_anims\bloodsucker\forward.rtm"; + speed=3.21; + ConnectTo[]={}; + InterpolateTo[]= + { + "AmovPercMwlkSnonWnonDnon_transition", + 0.015, + "AmovPercMwlkSnonWnonDfl", + 0.025, + "AmovPercMwlkSnonWnonDbl", + 0.025, + "AmovPercMrunSnonWnonDl", + 0.025, + "AmovPknlMwlkSnonWnonDl", + 0.029999999 + }; + }; + class AmovPercMwlkSnonWnonDbl: AmovPercMwlkSnonWnonDf + { + actions="CivilWlkActionsBL"; + file="\nst\ns_anims\bloodsucker\forward.rtm"; + speed=3.21; + ConnectTo[]={}; + InterpolateTo[]= + { + "AmovPercMwlkSnonWnonDnon_transition", + 0.015, + "AmovPercMwlkSnonWnonDl", + 0.025, + "AmovPercMwlkSnonWnonDb", + 0.025, + "AmovPercMrunSnonWnonDbl", + 0.025, + "AmovPknlMwlkSnonWnonDbl", + 0.029999999 + }; + }; + class AmovPercMwlkSnonWnonDb: AmovPercMwlkSnonWnonDf + { + actions="CivilWlkActionsB"; + file="\nst\ns_anims\bloodsucker\forward.rtm"; + speed=3.21; + ConnectTo[]={}; + InterpolateTo[]= + { + "AmovPercMwlkSnonWnonDnon_transition", + 0.015, + "AmovPercMwlkSnonWnonDbl", + 0.025, + "AmovPercMwlkSnonWnonDbr", + 0.025, + "AmovPercMrunSnonWnonDb", + 0.025, + "AmovPknlMwlkSnonWnonDb", + 0.029999999 + }; + }; + class AmovPercMwlkSnonWnonDbr: AmovPercMwlkSnonWnonDf + { + actions="CivilWlkActionsBR"; + file="\nst\ns_anims\bloodsucker\forward.rtm"; + speed=3.21; + ConnectTo[]={}; + InterpolateTo[]= + { + "AmovPercMwlkSnonWnonDnon_transition", + 0.015, + "AmovPercMwlkSnonWnonDb", + 0.025, + "AmovPercMwlkSnonWnonDr", + 0.025, + "AmovPercMrunSnonWnonDbr", + 0.025, + "AmovPknlMwlkSnonWnonDbr", + 0.029999999 + }; + }; + class AmovPercMwlkSnonWnonDr: AmovPercMwlkSnonWnonDf + { + actions="CivilWlkActionsR"; + file="\nst\ns_anims\bloodsucker\forward.rtm"; + speed=3.21; + ConnectTo[]={}; + InterpolateTo[]= + { + "AmovPercMwlkSnonWnonDnon_transition", + 0.015, + "AmovPercMwlkSnonWnonDbr", + 0.025, + "AmovPercMwlkSnonWnonDfr", + 0.15000001, + "AmovPercMrunSnonWnonDr", + 0.025, + "AmovPknlMwlkSnonWnonDr", + 0.029999999 + }; + }; + class AmovPercMwlkSnonWnonDfr: AmovPercMwlkSnonWnonDf + { + actions="CivilWlkActionsFR"; + file="\nst\ns_anims\bloodsucker\forward.rtm"; + speed=3.21; + ConnectTo[]={}; + InterpolateTo[]= + { + "AmovPercMwlkSnonWnonDnon_transition", + 0.015, + "AmovPercMwlkSnonWnonDf", + 0.025, + "AmovPercMwlkSnonWnonDr", + 0.15000001, + "AmovPercMrunSnonWnonDfr", + 0.025, + "AmovPknlMwlkSnonWnonDfr", + 0.029999999, + "AmovPercMevaSnonWnonDfr", + 0.025, + "AmovPercMrunSnonWnonDf_AmovPercMstpSnonWnonDnon_gthStart", + 0.1 + }; + }; + class SprintBaseDf: StandBase + { + actions="RifleStandEvasiveActions"; + preload=0; + file="\nst\ns_anims\bloodsucker\forward.rtm"; + speed=3.21; + soundOverride="sprint"; + duty=0.60000002; + showWeaponAim=0; + collisionShape="ca\Anims\Characters\data\Geom\Sdr\Perc_Mrun_Slow_Wrfl.p3d"; + leaningFactorBeg=0; + leaningFactorEnd=0; + limitGunMovement=0; + relSpeedMin=0.69717097; + relSpeedMax=1.1; + enableAutoActions=0; + visibleSize=1.000121; + soundEnabled=1; + aiming="aimingCivil"; + aimingBody="aimingUpCivil"; + headBobStrength=0.154229; + headBobMode=2; + ConnectTo[]= + { + "AmovPercMsprSlowWrflDf_AmovPpneMstpSrasWrflDnon", + 0.02 + }; + InterpolateTo[]= + { + "AmovPercMsprSlowWrflDf_AmovPpneMstpSrasWrflDnon", + 0.02 + }; + }; + class SprintBaseDfl: SprintBaseDf + { + file="\nst\ns_anims\bloodsucker\forward.rtm"; + speed=3.21; + collisionShape="ca\Anims\Characters\data\Geom\Sdr\Perc_Mrun_Slow_Wrfl_Dl.p3d"; + ConnectTo[]={}; + InterpolateTo[]={}; + }; + class SprintBaseDfr: SprintBaseDf + { + file="\nst\ns_anims\bloodsucker\forward.rtm"; + speed=3.21; + collisionShape="ca\Anims\Characters\data\Geom\Sdr\Perc_Mrun_Slow_Wrfl_Dr.p3d"; + ConnectTo[]={}; + InterpolateTo[]={}; + }; + class SprintCivilBaseDf: SprintBaseDf + { + file="\nst\ns_anims\bloodsucker\forward.rtm"; + speed=3.21; + collisionShape="ca\Anims\Characters\data\Geom\Sdr\Perc_Wnon.p3d"; + visibleSize=1.000121; + ConnectTo[]={}; + InterpolateTo[]={}; + }; + class SprintCivilBaseDfl: SprintCivilBaseDf + { + file="\nst\ns_anims\bloodsucker\forward.rtm"; + speed=3.21; + ConnectTo[]={}; + InterpolateTo[]={}; + }; + class SprintCivilBaseDfr: SprintCivilBaseDf + { + file="\nst\ns_anims\bloodsucker\forward.rtm"; + speed=3.21; + ConnectTo[]={}; + InterpolateTo[]={}; + }; + class AmovPercMevaSnonWnonDf: SprintCivilBaseDf + { + actions="CivilEvasiveActions"; + soundOverride="sprint"; + soundEnabled=1; + speed=3.21; + canPullTrigger=0; + duty=0.60000002; + walkcycles=1; + ConnectTo[]= + { + "AmovPercMsprSnonWnonDf_AmovPpneMstpSnonWnonDnon", + 0.02 + }; + InterpolateTo[]= + { + "AmovPercMstpSnonWnonDnon", + 0.02, + "AmovPercMwlkSnonWnonDf", + 0.025, + "AmovPercMrunSnonWnonDf", + 0.02, + "AmovPercMsprSnonWnonDf_AmovPpneMstpSnonWnonDnon", + 0.02, + "AmovPercMevaSnonWnonDfl", + 0.02, + "AmovPercMevaSnonWnonDfr", + 0.02 + }; + }; + class AmovPercMevaSnonWnonDfl: SprintCivilBaseDfl + { + actions="CivilEvasiveActions"; + soundOverride="sprint"; + soundEnabled=1; + canPullTrigger=0; + duty=0.60000002; + relSpeedMin=0.69717097; + relSpeedMax=1.1064889; + walkcycles=2; + ConnectTo[]= + { + "AmovPercMsprSnonWnonDf_AmovPpneMstpSnonWnonDnon", + 0.02 + }; + InterpolateTo[]= + { + "AmovPercMstpSnonWnonDnon", + 0.02, + "AmovPercMwlkSnonWnonDfl", + 0.025, + "AmovPercMrunSnonWnonDfl", + 0.02, + "AmovPercMsprSnonWnonDf_AmovPpneMstpSnonWnonDnon", + 0.02, + "AmovPercMevaSnonWnonDf", + 0.02, + "AmovPercMevaSnonWnonDfr", + 0.02 + }; + }; + class AmovPercMevaSnonWnonDfr: SprintCivilBaseDfr + { + actions="CivilEvasiveActions"; + soundOverride="sprint"; + soundEnabled=1; + canPullTrigger=0; + duty=0.60000002; + relSpeedMin=0.69717097; + relSpeedMax=1.1064889; + walkcycles=2; + ConnectTo[]= + { + "AmovPercMsprSnonWnonDf_AmovPpneMstpSnonWnonDnon", + 0.02 + }; + InterpolateTo[]= + { + "AmovPercMstpSnonWnonDnon", + 0.02, + "AmovPercMwlkSnonWnonDfr", + 0.025, + "AmovPercMrunSnonWnonDfr", + 0.02, + "AmovPercMsprSnonWnonDf_AmovPpneMstpSnonWnonDnon", + 0.02, + "AmovPercMevaSnonWnonDf", + 0.02, + "AmovPercMevaSnonWnonDfl", + 0.02 + }; + }; + class AmovPercMevaSrasWrflDf: SprintBaseDf + { + actions="RifleStandEvasiveActions"; + collisionShape="ca\Anims\Characters\data\Geom\Sdr\Perc_Mrun_Slow_Wrfl.p3d"; + relSpeedMin=0.797005; + soundOverride="sprint"; + soundEnabled=1; + limitGunMovement=0.1; + weaponIK=1; + headBobStrength=0.25373101; + duty=0.60000002; + ConnectTo[]={}; + InterpolateTo[]= + { + "AmovPercMstpSrasWrflDnon", + 0.02, + "AmovPercMrunSlowWrflDf", + 0.025, + "AmovPercMwlkSrasWrflDf", + 0.025, + "AmovPercMrunSrasWrflDf", + 0.025, + "AmovPercMsprSlowWrflDf_AmovPpneMstpSrasWrflDnon", + 0.02, + "AmovPknlMevaSrasWrflDf", + 0.025, + "AmovPercMevaSlowWrflDf", + 0.025, + "AmovPercMevaSrasWrflDfl", + 0.025, + "AmovPercMevaSrasWrflDfr", + 0.025, + "AdthPercMrunSlowWrflDf_6", + 0.0099999998, + "AdthPercMrunSlowWrflDf_A1short", + 0.0099999998, + "AdthPercMrunSlowWrflDf_A2short", + 0.0099999998, + "AdthPercMrunSlowWrflDf_A3short", + 0.0099999998, + "AdthPercMrunSlowWrflDf_A4short", + 0.0099999998 + }; + }; + class AmovPknlMevaSrasWrflDf: AmovPercMevaSrasWrflDf + { + actions="RifleKneelEvasiveActions"; + ConnectTo[]={}; + InterpolateTo[]= + { + "AmovPknlMrunSlowWrflDf", + 0.025, + "AmovPknlMrunSrasWrflDf", + 0.025, + "AmovPercMevaSrasWrflDf", + 0.025, + "AmovPercMevaSlowWrflDf", + 0.025 + }; + }; + class AmovPercMevaSlowWrflDf: AmovPercMevaSrasWrflDf + { + actions="RifleStandLowEvasiveActions"; + limitGunMovement=0.1; + weaponIK=1; + headBobStrength=0.25373101; + ConnectTo[]={}; + InterpolateTo[]= + { + "AmovPercMstpSlowWrflDnon", + 0.025, + "AmovPercMwlkSlowWrflDf", + 0.025, + "AmovPercMrunSlowWrflDf", + 0.025, + "AmovPercMevaSrasWrflDf", + 0.025, + "AidlPercMevaSrasWrflDf", + 0.0099999998, + "AmovPercMevaSlowWrflDfl", + 0.025, + "AmovPercMevaSlowWrflDfr", + 0.025, + "AdthPercMrunSlowWrflDf_A1short", + 0.0099999998, + "AdthPercMrunSlowWrflDf_A2short", + 0.0099999998, + "AdthPercMrunSlowWrflDf_A3short", + 0.0099999998, + "AdthPercMrunSlowWrflDf_A4short", + 0.0099999998 + }; + }; + class AmovPercMstpSrasWpstDnon: StandBase + { + actions="PistolStandActions"; + duty=-1; + file="\nst\ns_anims\bloodsucker\forward.rtm"; + showWeaponAim=1; + disableWeapons=0; + disableWeaponsLong=0; + showHandGun=1; + speed=1e+010; + relSpeedMin=0.700001; + relSpeedMax=1.1; + aiming="aimingPistol"; + aimingBody="aimingUpPistol"; + looped=1; + soundEnabled=0; + enableBinocular=1; + leftHandIKBeg=1; + leftHandIKCurve[]={1}; + leftHandIKEnd=1; + rightHandIKBeg=1; + rightHandIKCurve[]={1}; + rightHandIKEnd=1; + collisionShape="ca\Anims\Characters\Data\Geom\Sdr\Perc_Wpst.p3d"; + weaponIK=2; + enableOptics=2; + headBobStrength=0.22388101; + headBobMode=2; + ConnectTo[]= + { + "AidlPercMstpSrasWpstDnon_player_0S", + 0.02, + "AovrPercMstpSrasWpstDf", + 0.0099999998, + "AmovPercMstpSrasWpstDnon_AidlPercMstpSlowWpstDnon", + 0.0099999998, + "AmovPercMstpSrasWpstDnon_turnL", + 0.02, + "AmovPercMstpSrasWpstDnon_turnR", + 0.02, + "PistolMagazineReloadStand", + 0.1, + "AmovPercMstpSrasWpstDnon_AmovPercMstpSlowWpstDnon", + 0.02, + "AmovPercMstpSrasWpstDnon_AmovPknlMstpSrasWpstDnon", + 0.02, + "AmovPercMstpSrasWpstDnon_AmovPpneMstpSrasWpstDnon", + 0.02, + "AmovPercMstpSrasWpstDnon_AmovPercMstpSrasWrflDnon", + 0.02, + "AmovPercMstpSrasWpstDnon_AwopPercMstpSoptWbinDnon", + 0.02, + "AmovPercMstpSrasWpstDnon_AmovPercMstpSnonWnonDnon", + 0.02, + "ActsPercMstpSnonWpstDnon_sceneBardakPistol01", + 0.1, + "AmovPercMstpSrasWpstDnon_SaluteIn", + 0.02, + "AwopPercMstpSgthWpstDnon_Part1", + 0.1, + "AswmPercMstpSnonWnonDnon", + 0.30000001, + "AmovPercMstpSrasWpstDnon_AinvPknlMstpSnonWnonDnon", + 0.02, + "amovpercmstpsraswpstdnon_amovpercmstpsraswlnrdnon", + 0.02, + "ctsLopoHover_shagarov", + 0.0099999998 + }; + InterpolateTo[]= + { + "AmovPercMstpSrasWpstDnon_turnL", + 0.02, + "AmovPercMstpSrasWpstDnon_turnR", + 0.02, + "AmovPercMwlkSrasWpstDf", + 0.02, + "AmovPercMwlkSrasWpstDfl", + 0.02, + "AmovPercMwlkSrasWpstDl", + 0.02, + "AmovPercMwlkSrasWpstDbl", + 0.02, + "AmovPercMwlkSrasWpstDb", + 0.02, + "AmovPercMwlkSrasWpstDbr", + 0.02, + "AmovPercMwlkSrasWpstDr", + 0.02, + "AmovPercMwlkSrasWpstDfr", + 0.02, + "AmovPercMrunSrasWpstDf", + 0.02, + "AmovPercMrunSrasWpstDfl", + 0.02, + "AmovPercMrunSrasWpstDl", + 0.02, + "AmovPercMrunSrasWpstDbl", + 0.02, + "AmovPercMrunSrasWpstDb", + 0.02, + "AmovPercMrunSrasWpstDbr", + 0.02, + "AmovPercMrunSrasWpstDr", + 0.02, + "AmovPercMrunSrasWpstDfr", + 0.02, + "AmovPercMevaSrasWpstDf", + 0.02, + "AmovPercMevaSrasWpstDfl", + 0.02, + "AmovPercMevaSrasWpstDfr", + 0.02, + "AdthPercMstpSrasWpstDnon_1", + 0.0099999998, + "AdthPercMstpSrasWpstDnon_3", + 0.0099999998, + "AdthPercMstpSrasWpstDnon_5", + 0.0099999998 + }; + }; + class AmovPpneMstpSrasWpstDnon: AmovPercMstpSrasWpstDnon + { + actions="PistolProneActions"; + file="\nst\ns_anims\bloodsucker\forward.rtm"; + showWeaponAim=1; + visibleSize=0.100123; + onLandBeg=1; + onLandEnd=1; + aiming="aimingPistol"; + aimingBody="aimingUpPistol"; + legs="legsDefault"; + collisionShape="ca\Anims\Characters\Data\Geom\Sdr\Ppne.p3d"; + leaningFactorBeg=0; + leaningFactorEnd=0; + leaning="leaningDefault"; + soundOverride="crawl"; + weaponIK=2; + limitGunMovement=1; + ConnectTo[]= + { + "AmovPpneMstpSrasWpstDnon_turnL", + 0.02, + "AmovPpneMstpSrasWpstDnon_turnR", + 0.02, + "PistolMagazineReloadProne", + 0.1, + "AmovPpneMstpSrasWpstDnon_AmovPercMstpSrasWpstDnon", + 0.02, + "AmovPpneMstpSrasWpstDnon_AmovPknlMstpSrasWpstDnon", + 0.02, + "AmovPpneMstpSrasWpstDnon_AmovPpneMstpSrasWrflDnon", + 0.02, + "AmovPpneMstpSrasWpstDnon_AwopPpneMstpSoptWbinDnon", + 0.02, + "AmovPpneMstpSrasWpstDnon_AmovPpneMstpSnonWnonDnon", + 0.02, + "AmovPpneMstpSrasWpstDnon_AmovPpneMevaSlowWpstDl", + 0.02, + "AmovPpneMstpSrasWpstDnon_AmovPpneMevaSlowWpstDr", + 0.02, + "AwopPpneMstpSgthWpstDnon_Part1", + 0.1, + "AidlPpneMstpSrasWpstDnon0S", + 0.1, + "AidlPpneMstpSrasWpstDnon01", + 0.1, + "AidlPpneMstpSrasWpstDnon02", + 0.1, + "AidlPpneMstpSrasWpstDnon03", + 0.1, + "AmovPpneMstpSrasWpstDnon_healed", + 0.02 + }; + InterpolateTo[]= + { + "AmovPpneMstpSrasWpstDnon_turnL", + 0.02, + "AmovPpneMstpSrasWpstDnon_turnR", + 0.02, + "AmovPpneMrunSlowWpstDf", + 0.02, + "AmovPpneMrunSlowWpstDfl", + 0.02, + "AmovPpneMrunSlowWpstDl", + 0.02, + "AmovPpneMrunSlowWpstDbl", + 0.02, + "AmovPpneMrunSlowWpstDb", + 0.02, + "AmovPpneMrunSlowWpstDbr", + 0.02, + "AmovPpneMrunSlowWpstDr", + 0.02, + "AmovPpneMrunSlowWpstDfr", + 0.02, + "AmovPpneMstpSrasWpstDnon_AmovPercMsprSlowWpstDf", + 0.0099999998, + "AdthPpneMstpSrasWpstDnon_1", + 0.0099999998, + "AdthPpneMstpSrasWpstDnon_2", + 0.0099999998, + "AidlPpneMstpSrasWpstDnon0S", + 0.02, + "AidlPpneMstpSrasWpstDnon01", + 0.02, + "AidlPpneMstpSrasWpstDnon02", + 0.02, + "AidlPpneMstpSrasWpstDnon03", + 0.02 + }; + }; + class AmovPpneMrunSlowWpstDf: AmovPpneMstpSrasWpstDnon + { + visibleSize=0.150123; + file="\nst\ns_anims\bloodsucker\forward.rtm"; + speed=3.21; + soundOverride="crawl"; + duty=0.40000001; + showWeaponAim=0; + disableWeapons=1; + limitGunMovement=0; + soundEnabled=1; + legs="wholeBody"; + leaning="empty"; + aimingBody="empty"; + aiming="empty"; + relSpeedMin=0.69717097; + relSpeedMax=1.096506; + ConnectTo[]={}; + InterpolateTo[]= + { + "AmovPpneMstpSrasWpstDnon", + 0.02, + "AmovPpneMrunSlowWpstDl", + 0.025, + "AmovPpneMrunSlowWpstDfr", + 0.025, + "AmovPpneMstpSrasWpstDnon_AmovPercMsprSlowWpstDf", + 0.0099999998 + }; + }; + class AmovPpneMrunSlowWpstDfl: AmovPpneMrunSlowWpstDf + { + file="\nst\ns_anims\bloodsucker\forward.rtm"; + speed=3.21; + duty=0.40000001; + relSpeedMin=0.69717097; + relSpeedMax=1.096506; + soundOverride="crawl"; + soundEnabled=1; + ConnectTo[]={}; + InterpolateTo[]= + { + "AmovPpneMstpSrasWpstDnon", + 0.02, + "AmovPpneMrunSlowWpstDl", + 0.025, + "AmovPpneMrunSlowWpstDb", + 0.025, + "AmovPpneMstpSrasWpstDnon_AmovPercMsprSlowWpstDf", + 0.0099999998 + }; + }; + class AmovPpneMrunSlowWpstDl: AmovPpneMrunSlowWpstDf + { + file="\nst\ns_anims\bloodsucker\forward.rtm"; + speed=3.21; + duty=0.40000001; + relSpeedMin=0.69717097; + relSpeedMax=1.096506; + soundOverride="crawl"; + soundEnabled=1; + ConnectTo[]={}; + InterpolateTo[]= + { + "AmovPpneMstpSrasWpstDnon", + 0.02, + "AmovPpneMrunSlowWpstDf", + 0.025, + "AmovPpneMrunSlowWpstDfl", + 0.025 + }; + }; + class AmovPpneMrunSlowWpstDbl: AmovPpneMrunSlowWpstDf + { + file="\nst\ns_anims\bloodsucker\forward.rtm"; + speed=3.21; + duty=0.40000001; + relSpeedMin=0.69717097; + relSpeedMax=1.096506; + soundOverride="crawl"; + soundEnabled=1; + ConnectTo[]={}; + InterpolateTo[]= + { + "AmovPpneMstpSrasWpstDnon", + 0.02, + "AmovPpneMrunSlowWpstDb", + 0.025, + "AmovPpneMrunSlowWpstDbr", + 0.025 + }; + }; + class AmovPpneMrunSlowWpstDb: AmovPpneMrunSlowWpstDf + { + file="\nst\ns_anims\bloodsucker\forward.rtm"; + speed=3.21; + duty=0.40000001; + relSpeedMin=0.69717097; + relSpeedMax=1.096506; + soundOverride="crawl"; + soundEnabled=1; + ConnectTo[]={}; + InterpolateTo[]= + { + "AmovPpneMstpSrasWpstDnon", + 0.02, + "AmovPpneMrunSlowWpstDfl", + 0.025, + "AmovPpneMrunSlowWpstDbl", + 0.025 + }; + }; + class AmovPpneMrunSlowWpstDbr: AmovPpneMrunSlowWpstDf + { + file="\nst\ns_anims\bloodsucker\forward.rtm"; + speed=3.21; + duty=0.40000001; + relSpeedMin=0.69717097; + relSpeedMax=1.096506; + soundOverride="crawl"; + soundEnabled=1; + ConnectTo[]={}; + InterpolateTo[]= + { + "AmovPpneMstpSrasWpstDnon", + 0.02, + "AmovPpneMrunSlowWpstDbl", + 0.025, + "AmovPpneMrunSlowWpstDr", + 0.025 + }; + }; + class AmovPpneMrunSlowWpstDr: AmovPpneMrunSlowWpstDf + { + file="\nst\ns_anims\bloodsucker\forward.rtm"; + speed=3.21; + duty=0.40000001; + relSpeedMin=0.69717097; + relSpeedMax=1.096506; + soundOverride="crawl"; + soundEnabled=1; + ConnectTo[]={}; + InterpolateTo[]= + { + "AmovPpneMstpSrasWpstDnon", + 0.02, + "AmovPpneMrunSlowWpstDbr", + 0.025, + "AmovPpneMrunSlowWpstDfr", + 0.025 + }; + }; + class AmovPpneMrunSlowWpstDfr: AmovPpneMrunSlowWpstDf + { + file="\nst\ns_anims\bloodsucker\forward.rtm"; + speed=3.21; + relSpeedMin=0.69717097; + relSpeedMax=1.096506; + soundOverride="crawl"; + soundEnabled=1; + ConnectTo[]={}; + InterpolateTo[]= + { + "AmovPpneMstpSrasWpstDnon", + 0.02, + "AmovPpneMrunSlowWpstDf", + 0.025, + "AmovPpneMrunSlowWpstDr", + 0.025, + "AmovPpneMstpSrasWpstDnon_AmovPercMsprSlowWpstDf", + 0.0099999998 + }; + }; + class AmovPercMstpSlowWrflDnon: StandBase + { + actions="RifleLowStandActions"; + duty=-1; + file="\nst\ns_anims\bloodsucker\forward.rtm"; + collisionShape="ca\Anims\Characters\data\Geom\Sdr\Perc_Idle.p3d"; + showWeaponAim=0; + disableWeapons=0; + disableWeaponsLong=1; + speed=1e+010; + relSpeedMin=0.69999999; + relSpeedMax=1.1; + looped=1; + soundEnabled=0; + enableBinocular=1; + aiming="aimingDefault"; + aimingBody="aimingUpDefault"; + leftHandIKBeg=1; + leftHandIKCurve[]={1}; + leftHandIKEnd=1; + rightHandIKBeg=1; + rightHandIKCurve[]={1}; + rightHandIKEnd=1; + aimPrecision=1; + weaponIK=1; + headBobMode=2; + canPullTrigger=0; + ConnectTo[]= + { + "AidlPercMstpSlowWrflDnon_player_0S", + 0.0099999998, + "AovrPercMstpSlowWrflDf", + 0.0099999998, + "AmovPercMstpSlowWrflDnon_turnL", + 0.02, + "AmovPercMstpSlowWrflDnon_turnR", + 0.02, + "AmovPercMstpSlowWrflDnon_AmovPknlMstpSlowWrflDnon", + 0.02, + "AmovPercMstpSlowWrflDnon_AmovPpneMstpSrasWrflDnon", + 0.02, + "AmovPercMstpSlowWrflDnon_AmovPercMstpSrasWrflDnon", + 0.0099999998, + "ActsPsitMstpSnonWrflDnon_varSittingDrinking", + 10, + "AmovPercMstpSlowWrflDnon_ScaredTalking", + 2, + "AmovPercMstpSlowWrflDnon_talking", + 2, + "AmovPercMstpSlowWrflDnon_seeWatch", + 2, + "AmovPercMstpSlowWrflDnon_SaluteIn", + 0.1, + "AmovPercMstpSrasWrflDnon_SaluteIn", + 0.15000001, + "AmovPercMstpSlowWrflDnon_AmovPsitMstpSlowWrflDnon", + 0.1, + "AmovPercMstpSlowWrflDnon_AmovPsitMstpSrasWrflDnon", + 0.1, + "LadderRifleOn", + 1, + "AswmPercMstpSnonWnonDnon", + 0.30000001, + "AidlPercMstpSrasWrflDnon0S", + 0.0099999998, + "ActsPpneMstpWunaSnonDnon_sceneCrashSite_Cooper", + 0.1, + "AidlPercMstpSlowWrflDnon0S", + 0.0099999998, + "ActsPpneMstpWrflSlowDnon_sceneCrashSite_Ohara", + 0.1, + "ActsPpneMstpWrflSlowDnon_sceneCrashSite_Sykes", + 0.1, + "ActsPpneMstpWrflSlowDnon_sceneCrashSite_Rodriguez", + 0.1, + "AmovPercMstpSlowWrflDnon_AcinPknlMwlkSlowWrflDb_1", + 0.0099999998, + "AmovPercMstpSnonWnonDnon_AcinPknlMwlkSnonWnonDb_1", + 0.1, + "ActsPercMstpSnonWnonDnon_talking01a", + 0.1, + "AidlPercSlowWrflDnon_talkCalm", + 0.0099999998, + "ActsPercMstpSrasWrflDnon_sceneLopotevBandCaptured_Rodriguez1", + 0.0099999998, + "ActsPercMstpSrasWrflDnon_sceneLopotevBandCaptured_Ohara1", + 0.0099999998, + "ActsPercMstpSlowWrflDnon_sceneLopotevBandCaptured_Cooper", + 0.1, + "AidlPercSlowWrflDnon_talkHeated", + 0.0099999998, + "ActsPercMstpSlowWrflDnon_sceneNikitinDisloyalty_Steve", + 0.0099999998, + "ActsPercMstpSlowWrflDnon_sceneNikitinDisloyalty_Simms", + 0.0099999998, + "ActsPercMstpSlowWrflDnon_sceneNikitinDisloyalty_Kostey", + 0.0099999998, + "ActsPercMstpSlowWrflDnon_sceneNikitinDisloyalty_Adamson", + 0.0099999998, + "ActsPercMstpSgthWmagDnon_sceneNikitinDisloyalty_USflashbang1", + 10, + "ActsPercMstpSlowWpstDnon_sceneLopotevBandCaptured_Sykes", + 0.0099999998, + "ErcRflLow_sitRfl_L", + 0.0099999998, + "ErcRflLow_sitRfl_L2", + 0.0099999998, + "ErcRflLow_sitRfl_R", + 0.0099999998, + "ErcRflLow_sitTable", + 0.0099999998, + "ErcRflLow_sitRfl_L_CARGO", + 0.0099999998, + "CtsDoktor_Doktor_uder4", + 0.0099999998, + "CtsDoktor_Doktor_uder5", + 0.0099999998, + "CtsDoktor_Vojak_vyslechStand2unaerc_reverse", + 0.0099999998, + "otockaErcRflLow_180leva", + 0.0099999998, + "ctsLopoHover_cooper", + 0.0099999998, + "ctsLopoHover_ohara", + 0.0099999998, + "ctsLopoHover_rodriguez", + 0.0099999998, + "ctsLopoHover_sykes", + 0.0099999998, + "sitRfl_R_BidleLoopTest", + 0.0099999998, + "AmelPercMstpSlowWrflDnon_StrokeGun", + 0.02, + "ActsPercMstpSlowWrflDnon_listeningOrdersUnderFireShort", + 0.0099999998, + "AmovPercMstpSlowWrflDnon_ActsPercMstpSlowWrflDr_HideFromFire", + 0.0099999998, + "AsigPercMstpSlowWrflDnon_GoGo", + 0.0099999998, + "AsigPercMstpSlowWrflDnon_AmovPercMrunSlowWrflDnon_GoGo", + 0.0099999998, + "AsigPercMstpSlowWrflDnon_SendMenInAction", + 0.0099999998, + "AmovPercMstpSnonWnonDnon_zevl", + 0.0099999998, + "c4coming2cdf_genericstani", + 0.0099999998 + }; + InterpolateTo[]= + { + "AmovPercMstpSlowWrflDnon_turnL", + 0.02, + "AmovPercMstpSlowWrflDnon_turnR", + 0.02, + "AmovPercMwlkSlowWrflDf", + 0.02, + "AmovPercMwlkSlowWrflDfl", + 0.02, + "AmovPercMwlkSlowWrflDl", + 0.02, + "AmovPercMwlkSlowWrflDbl", + 0.02, + "AmovPercMwlkSlowWrflDb", + 0.02, + "AmovPercMwlkSlowWrflDbr", + 0.02, + "AmovPercMwlkSlowWrflDr", + 0.02, + "AmovPercMwlkSlowWrflDfr", + 0.02, + "AmovPercMrunSlowWrflDf", + 0.02, + "AmovPercMrunSlowWrflDfl", + 0.02, + "AmovPercMrunSlowWrflDl", + 0.02, + "AmovPercMrunSlowWrflDbl", + 0.02, + "AmovPercMrunSlowWrflDb", + 0.02, + "AmovPercMrunSlowWrflDbr", + 0.02, + "AmovPercMrunSlowWrflDr", + 0.02, + "AmovPercMrunSlowWrflDfr", + 0.02, + "AmovPercMevaSlowWrflDf", + 0.025, + "AmovPercMevaSlowWrflDfl", + 0.025, + "AmovPercMevaSlowWrflDfr", + 0.025, + "AmovPercMstpSlowWrflDnon_AmovPercMevaSrasWrflDl", + 0.02, + "AmovPercMstpSlowWrflDnon_AmovPercMevaSrasWrflDr", + 0.02, + "AmovPercMstpSlowWrflDnon_AmovPercMevaSrasWrflDb", + 0.02, + "AdthPercMstpSlowWrflDnon_1", + 0.0099999998, + "AdthPercMstpSlowWrflDnon_2", + 0.0099999998, + "AdthPercMstpSlowWrflDnon_4", + 0.0099999998, + "AdthPercMstpSlowWrflDnon_8", + 0.0099999998, + "AdthPercMstpSlowWrflDnon_rS0", + 0.0099999998, + "AwopPercMstpSgthWrflDnon_Start1", + 0.1, + "AwopPercMstpSgthWrflDnon_Throw1", + 0.1, + "AwopPercMstpSgthWrflDnon_End1", + 0.1, + "AwopPercMstpSgthWrflDnon_Throw2", + 0.1, + "AwopPercMstpSgthWrflDnon_End2", + 0.1, + "AidlPercMstpSlowWrflDnon01", + 0.02, + "AidlPercMstpSlowWrflDnon02", + 0.02, + "AidlPercMstpSlowWrflDnon03", + 0.02, + "AidlPercMstpSlowWrflDnon04", + 0.02, + "AidlPercMstpSlowWrflDnon_i01", + 0.02, + "AidlPercMstpSlowWrflDnon_i02", + 0.02, + "AidlPercMstpSlowWrflDnon_i03", + 0.02, + "AidlPercMstpSlowWrflDnon_i04", + 0.02, + "AidlPercMstpSlowWrflDnon_i05", + 0.02, + "AidlPercMstpSlowWrflDnon_i06", + 0.02, + "AidlPercMstpSlowWrflDnon_i07", + 0.02, + "AidlPercMstpSlowWrflDnon_i08", + 0.02, + "AidlPercMstpSlowWrflDnon_i09", + 0.02, + "AidlPercMstpSlowWrflDnon_i10", + 0.02, + "AidlPercMstpSlowWrflDnon_i11", + 0.02, + "AidlPercMstpSlowWrflDnon_i12", + 0.02, + "AidlPercMstpSlowWrflDnon_i13", + 0.02, + "AidlPercMstpSlowWrflDnon05", + 0.02, + "AidlPercMstpSlowWrflDnon06", + 0.02, + "AmovPercMstpSlowWrflDnon_AcinPknlMwlkSlowWrflDb_1", + 0.0099999998, + "AdthPercMstpSlowWrflDnon_16", + 0.0099999998, + "AdthPercMstpSlowWrflDnon_32", + 0.0099999998, + "ActsPercMstpSlowWrflDnon_talking_C3BeginBriefing", + 0.1, + "AidlPercSlowWrflDnon_talkListeningS", + 0.0099999998, + "AidlPercSnonWnonDnon_talkAS", + 0.0099999998 + }; + }; + class AmovPercMstpSrasWrflDnon: AmovPercMstpSlowWrflDnon + { + visibleSize=0.70012099; + actions="RifleStandActions"; + file="\nst\ns_anims\bloodsucker\forward.rtm"; + collisionShape="ca\Anims\Characters\data\Geom\Sdr\Perc_Wrfl.p3d"; + showWeaponAim=1; + disableWeapons=0; + disableWeaponsLong=0; + aiming="aimingDefault"; + aimingBody="aimingUpDefault"; + relSpeedMax=1.1; + relSpeedMin=0.700001; + aimPrecision=1; + weaponIK=1; + canPullTrigger=1; + ConnectTo[]= + { + "AidlPercMstpSrasWrflDnon_aiming0S", + 0.02, + "AovrPercMstpSrasWrflDf", + 0.0099999998, + "AmovPercMwlkSrasWrflDnon_transition", + 0.02, + "AmovPercMstpSrasWrflDnon_turnL", + 0.02, + "AmovPercMstpSrasWrflDnon_turnR", + 0.02, + "WeaponMagazineReloadStand", + 0.1, + "amovpercmstpsraswrfldnon_amovpercmstpsraswlnrdnon", + 0.0099999998, + "AmovPercMstpSrasWrflDnon_AmovPknlMstpSrasWrflDnon", + 0.02, + "AmovPercMstpSrasWrflDnon_AmovPpneMstpSrasWrflDnon", + 0.02, + "AmovPercMstpSrasWrflDnon_AmovPercMstpSlowWrflDnon", + 0.0099999998, + "AmovPercMstpSrasWrflDnon_AmovPercMstpSrasWpstDnon", + 0.02, + "AmovPercMstpSrasWrflDnon_AwopPercMstpSoptWbinDnon", + 0.02, + "AmovPercMstpSrasWrflDnon_AmovPercMstpSnonWnonDnon", + 0.02, + "AwopPercMstpSgthWrflDnon_Start2", + 0.1, + "AswmPercMstpSnonWnonDnon", + 0.30000001, + "AmovPercMstpSrasWrflDnon_AinvPknlMstpSlayWrflDnon", + 0.02, + "AmovPercMstpSlowWrflDnon_AcinPknlMwlkSlowWrflDb_1", + 0.0099999998, + "ActsPercMstpSnonWpstDnon_sceneBardakRifle01", + 0.1, + "adthpercmstpsraswrfldnon_NikitinDead", + 0.0099999998, + "ActsPercMstpSrasWrflDnon_sceneLopotevBandCaptured_zevl1", + 0.0099999998, + "ActsPercMstpSrasWrflDnon_sceneLopotevBandCaptured_zevl2", + 0.0099999998, + "ActsPercMstpSrasWunaDnon_sceneLopotevBandCaptured_Bardak", + 10, + "ActsPercMstpSrasWrflDnon_sceneLopotevBandCaptured_Lopotev", + 0.0099999998, + "ActsPercMstpSrasWrflDnon_sceneLopotevBandCaptured_Miles", + 0.0099999998, + "ActsPercMstpSrasWrflDnon_sceneLopotevBandCaptured_Nameless", + 0.0099999998, + "ActsPercMstpSrasWrflDnon_sceneLopotevBandCaptured_Nikitin", + 0.0099999998 + }; + InterpolateTo[]= + { + "AmovPercMstpSrasWrflDnon_turnL", + 0.02, + "AmovPercMstpSrasWrflDnon_turnR", + 0.02, + "AmovPercMwlkSrasWrflDf", + 0.02, + "AmovPercMwlkSrasWrflDfl", + 0.02, + "AmovPercMwlkSrasWrflDl", + 0.02, + "AmovPercMwlkSrasWrflDbl", + 0.02, + "AmovPercMwlkSrasWrflDb", + 0.02, + "AmovPercMwlkSrasWrflDbr", + 0.02, + "AmovPercMwlkSrasWrflDr", + 0.02, + "AmovPercMwlkSrasWrflDfr", + 0.02, + "AmovPercMrunSrasWrflDf", + 0.02, + "AmovPercMrunSrasWrflDfl", + 0.02, + "AmovPercMrunSrasWrflDl", + 0.02, + "AmovPercMrunSrasWrflDbl", + 0.02, + "AmovPercMrunSrasWrflDb", + 0.02, + "AmovPercMrunSrasWrflDbr", + 0.02, + "AmovPercMrunSrasWrflDr", + 0.02, + "AmovPercMrunSrasWrflDfr", + 0.02, + "AmovPercMstpSrasWrflDnon_AmovPknlMstpSlowWrflDnon", + 0.02, + "AmovPercMevaSrasWrflDf", + 0.02, + "AmovPercMevaSrasWrflDfl", + 0.02, + "AmovPercMevaSrasWrflDfr", + 0.02, + "AmovPercMstpSrasWrflDnon_AmovPercMevaSrasWrflDl", + 0.02, + "AmovPercMstpSrasWrflDnon_AmovPercMevaSrasWrflDr", + 0.02, + "AmovPercMstpSrasWrflDnon_AmovPercMevaSrasWrflDb", + 0.02, + "AdthPercMstpSrasWrflDnon_1", + 0.0099999998, + "AdthPercMstpSrasWrflDnon_2", + 0.0099999998, + "AdthPercMstpSrasWrflDnon_4", + 0.0099999998, + "AdthPercMstpSrasWrflDnon_8", + 0.0099999998, + "AdthPercMstpSrasWrflDnon_rS0", + 0.0099999998, + "AidlPercMstpSrasWrflDnon0S", + 0.02, + "AidlPercMstpSrasWrflDnon", + 0.0099999998, + "AmovPercMstpSlowWrflDnon_AcinPknlMwlkSlowWrflDb_1", + 0.0099999998, + "AdthPercMstpSrasWrflDnon_16", + 0.0099999998, + "AdthPercMstpSrasWrflDnon_32", + 0.0099999998, + "adthpercmstpsraswrfldnon_NikitinDead", + 0.0099999998 + }; + }; + class AmovPpneMstpSrasWrflDnon: AmovPercMstpSrasWrflDnon + { + variantsAI[]={}; + actions="RifleProneActions"; + file="\nst\ns_anims\bloodsucker\forward.rtm"; + collisionShape="ca\Anims\Characters\data\Geom\Sdr\Ppne.p3d"; + onLandBeg=1; + onLandEnd=1; + showWeaponAim=1; + disableWeapons=0; + visibleSize=0.100123; + aimPrecision=0.30000001; + aiming="aimingDefault"; + aimingBody="aimingUpDefault"; + leaning="leaningDefault"; + legs="legsDefault"; + leaningFactorBeg=0; + leaningFactorEnd=0; + limitGunMovement=1; + soundOverride="crawl"; + weaponIK=1; + headBobStrength=0.20398; + ConnectTo[]= + { + "AmovPpneMstpSrasWrflDnon_injured", + 0.1, + "AmovPpneMstpSrasWrflDnon_turnL", + 0.02, + "AmovPpneMstpSrasWrflDnon_turnR", + 0.02, + "WeaponMagazineReloadProne", + 0.1, + "AmovPpneMstpSrasWrflDnon_AmovPercMstpSrasWrflDnon", + 0.02, + "AmovPpneMstpSrasWrflDnon_AmovPknlMstpSrasWrflDnon", + 0.02, + "AmovPpneMstpSrasWrflDnon_AmovPpneMstpSrasWpstDnon", + 0.02, + "AmovPpneMstpSrasWrflDnon_AwopPpneMstpSoptWbinDnon", + 0.02, + "AmovPpneMstpSrasWrflDnon_AmovPpneMstpSnonWnonDnon", + 0.02, + "AmovPpneMstpSrasWrflDnon_AmovPpneMevaSlowWrflDl", + 0.02, + "AmovPpneMstpSrasWrflDnon_AmovPpneMevaSlowWrflDr", + 0.02, + "AwopPpneMstpSgthWrflDnon_Start", + 0.1, + "AwopPpneMstpSgthWrflDnon_End", + 0.1, + "AidlPpneMstpSrasWrflDnon0S", + 0.1, + "AidlPpneMstpSrasWrflDnon01", + 0.1, + "AidlPpneMstpSrasWrflDnon02", + 0.1, + "AidlPpneMstpSrasWrflDnon03", + 0.1, + "AmovPpneMstpSrasWrflDnon_healed", + 0.02 + }; + InterpolateTo[]= + { + "AmovPpneMstpSrasWrflDnon_turnL", + 0.02, + "AmovPpneMstpSrasWrflDnon_turnR", + 0.02, + "AmovPpneMrunSlowWrflDf", + 0.02, + "AmovPpneMrunSlowWrflDfl", + 0.02, + "AmovPpneMrunSlowWrflDl", + 0.02, + "AmovPpneMrunSlowWrflDbl", + 0.02, + "AmovPpneMrunSlowWrflDb", + 0.02, + "AmovPpneMrunSlowWrflDbr", + 0.02, + "AmovPpneMrunSlowWrflDr", + 0.02, + "AmovPpneMrunSlowWrflDfr", + 0.02, + "AmovPpneMsprSlowWrflDf", + 0.02, + "AmovPpneMsprSlowWrflDbl", + 0.02, + "AmovPpneMsprSlowWrflDl", + 0.02, + "AmovPpneMsprSlowWrflDr", + 0.02, + "AmovPpneMsprSlowWrflDbr", + 0.02, + "AmovPpneMsprSlowWrflDb", + 0.02, + "AmovPpneMsprSlowWrflDfl", + 0.02, + "AmovPpneMsprSlowWrflDfr", + 0.02, + "AmovPpneMstpSrasWrflDnon_AmovPercMsprSlowWrflDf", + 0.050000001, + "AdthPpneMstpSrasWrflDnon_1", + 0.0099999998, + "AdthPpneMstpSrasWrflDnon_2", + 0.0099999998, + "AidlPpneMstpSrasWrflDnon0S", + 0.02, + "AidlPpneMstpSrasWrflDnon01", + 0.02, + "AidlPpneMstpSrasWrflDnon02", + 0.02, + "AidlPpneMstpSrasWrflDnon03", + 0.02 + }; + }; + class AmovPpneMrunSlowWrflDf: AmovPpneMstpSrasWrflDnon + { + visibleSize=0.150123; + file="\nst\ns_anims\bloodsucker\forward.rtm"; + speed=0.5; + soundOverride="crawl"; + duty=0.40000001; + showWeaponAim=0; + disableWeapons=1; + soundEnabled=1; + limitGunMovement=0; + legs="wholeBody"; + aiming="empty"; + aimingBody="empty"; + leaning="empty"; + relSpeedMin=0.69717097; + relSpeedMax=1.096506; + leftHandIKBeg=0; + leftHandIKCurve[]={}; + leftHandIKEnd=0; + actions="RifleProneActionsRunF"; + ConnectTo[]={}; + InterpolateTo[]= + { + "AmovPpneMstpSrasWrflDnon", + 0.02, + "AmovPpneMrunSlowWrflDfl", + 0.025, + "AmovPpneMrunSlowWrflDfr", + 0.025, + "AmovPpneMsprSlowWrflDf", + 0.025, + "AmovPpneMstpSrasWrflDnon_AmovPercMsprSlowWrflDf", + 0.050000001, + "AdthPpneMstpSlowWrflDf_1", + 0.0099999998, + "AdthPpneMstpSlowWrflDf_2", + 0.0099999998 + }; + }; + class AmovPpneMstpSrasWrflDnon_turnL: AmovPpneMstpSrasWrflDnon + { + file="\nst\ns_anims\bloodsucker\forward.rtm"; + speed=0.5; + soundOverride="crawl"; + ConnectTo[]= + { + "AmovPpneMstpSrasWrflDnon", + 0.02 + }; + InterpolateTo[]= + { + "AmovPpneMstpSrasWrflDnon", + 0.02 + }; + }; + class AmovPpneMstpSrasWrflDnon_turnR: AmovPpneMstpSrasWrflDnon + { + file="\nst\ns_anims\bloodsucker\forward.rtm"; + speed=0.5; + soundOverride="crawl"; + ConnectTo[]= + { + "AmovPpneMstpSrasWrflDnon", + 0.02 + }; + InterpolateTo[]= + { + "AmovPpneMstpSrasWrflDnon", + 0.02 + }; + }; + class AmovPpneMstpSnonWnonDnon: AmovPercMstpSnonWnonDnon + { + actions="CivilProneActions"; + file="\nst\ns_anims\bloodsucker\forward.rtm"; + legs="Wholebody"; + onLandBeg=1; + onLandEnd=1; + collisionShape="ca\Anims\Characters\data\Geom\Sdr\Ppne.p3d"; + aimingBody="empty"; + disableWeapons=0; + soundOverride="crawl"; + canPullTrigger=0; + ConnectTo[]= + { + "AmovPpneMstpSnonWnonDnon_turnL", + 0.02, + "AmovPpneMstpSnonWnonDnon_turnR", + 0.02, + "AmovPpneMstpSnonWnonDnon_AmovPercMstpSnonWnonDnon", + 0.02, + "AmovPpneMstpSnonWnonDnon_AmovPknlMstpSnonWnonDnon", + 0.02, + "AmovPpneMstpSnonWnonDnon_AmovPercMsprSnonWnonDf", + 0.050000001, + "AmovPpneMstpSnonWnonDnon_AmovPpneMstpSrasWrflDnon", + 0.02, + "AmovPpneMstpSnonWnonDnon_AmovPpneMstpSrasWpstDnon", + 0.02, + "AmovPpneMstpSnonWnonDnon_AmovPknlMstpSrasWlnrDnon", + 0.02, + "AmovPpneMstpSnonWnonDnon_AwopPpneMstpSoptWbinDnon", + 0.02, + "AmovPpneMstpSnonWnonDnon_AmovPpneMevaSnonWnonDl", + 0.02, + "AmovPpneMstpSnonWnonDnon_AmovPpneMevaSnonWnonDr", + 0.02, + "AmovPpneMstpSnonWnonDnon_AmovPsitMstpSnonWnonDnon_ground", + 0.1, + "AwopPpneMstpSgthWnonDnon_start", + 0.1, + "AidlPpneMstpSnonWnonDnon0S", + 0.1, + "AidlPpneMstpSnonWnonDnon01", + 0.1, + "AidlPpneMstpSnonWnonDnon02", + 0.1, + "AidlPpneMstpSnonWnonDnon03", + 0.1, + "AmovPpneMstpSnonWnonDnon_healed", + 0.02, + "AmovPpneMstpSnonWnonDnon_injured", + 0.1 + }; + InterpolateTo[]= + { + "AmovPpneMstpSnonWnonDnon_turnL", + 0.02, + "AmovPpneMstpSnonWnonDnon_turnR", + 0.02, + "AmovPpneMrunSnonWnonDf", + 0.02, + "AmovPpneMrunSnonWnonDfl", + 0.02, + "AmovPpneMrunSnonWnonDl", + 0.02, + "AmovPpneMrunSnonWnonDbl", + 0.02, + "AmovPpneMrunSnonWnonDb", + 0.02, + "AmovPpneMrunSnonWnonDbr", + 0.02, + "AmovPpneMrunSnonWnonDr", + 0.02, + "AmovPpneMrunSnonWnonDfr", + 0.02, + "AdthPpneMstpSnonWnonDnon", + 0.0099999998 + }; + }; + class AmovPpneMrunSnonWnonDf: AmovPpneMstpSnonWnonDnon + { + file="\nst\ns_anims\bloodsucker\forward.rtm"; + speed=0.5; + duty=0.40000001; + soundOverride="crawl"; + leaningFactorBeg=0; + leaningFactorEnd=0; + soundEnabled=1; + legs="wholeBody"; + aimingBody="empty"; + leaning="empty"; + aiming="empty"; + relSpeedMin=0.69717097; + relSpeedMax=1.096506; + canPullTrigger=0; + ConnectTo[]={}; + InterpolateTo[]= + { + "AmovPpneMstpSnonWnonDnon", + 0.02, + "AmovPpneMrunSnonWnonDfl", + 0.025, + "AmovPpneMrunSnonWnonDfr", + 0.025, + "AmovPpneMstpSnonWnonDnon_AmovPercMsprSnonWnonDf", + 0.050000001 + }; + }; + class AmovPpneMstpSnonWnonDnon_turnL: AmovPpneMstpSnonWnonDnon + { + file="\nst\ns_anims\bloodsucker\forward.rtm"; + speed=0.5; + soundOverride="crawl"; + canPullTrigger=0; + ConnectTo[]= + { + "AmovPpneMstpSnonWnonDnon", + 0.02 + }; + InterpolateTo[]= + { + "AmovPpneMstpSnonWnonDnon", + 0.02 + }; + }; + class AmovPpneMstpSnonWnonDnon_turnR: AmovPpneMstpSnonWnonDnon + { + file="\nst\ns_anims\bloodsucker\forward.rtm"; + speed=0.5; + soundOverride="crawl"; + canPullTrigger=0; + ConnectTo[]= + { + "AmovPpneMstpSnonWnonDnon", + 0.02 + }; + InterpolateTo[]= + { + "AmovPpneMstpSnonWnonDnon", + 0.02 + }; + }; + class AmovPpneMrunSnonWnonDfl: AmovPpneMrunSnonWnonDf + { + file="\nst\ns_anims\bloodsucker\forward.rtm"; + speed=0.5; + duty=0.40000001; + relSpeedMin=0.69717097; + relSpeedMax=1.096506; + soundOverride="crawl"; + soundEnabled=1; + canPullTrigger=0; + ConnectTo[]={}; + InterpolateTo[]= + { + "AmovPpneMstpSnonWnonDnon", + 0.02, + "AmovPpneMrunSnonWnonDf", + 0.025, + "AmovPpneMrunSnonWnonDl", + 0.025, + "AmovPpneMstpSnonWnonDnon_AmovPercMsprSnonWnonDf", + 0.050000001 + }; + }; + class AmovPpneMrunSnonWnonDl: AmovPpneMrunSnonWnonDf + { + file="\nst\ns_anims\bloodsucker\forward.rtm"; + speed=0.5; + duty=0.40000001; + relSpeedMin=0.69717097; + relSpeedMax=1.096506; + soundOverride="crawl"; + soundEnabled=1; + canPullTrigger=0; + ConnectTo[]={}; + InterpolateTo[]= + { + "AmovPpneMstpSnonWnonDnon", + 0.02, + "AmovPpneMrunSnonWnonDfl", + 0.025, + "AmovPpneMrunSnonWnonDbl", + 0.025 + }; + }; + class AmovPpneMrunSnonWnonDbl: AmovPpneMrunSnonWnonDf + { + file="\nst\ns_anims\bloodsucker\forward.rtm"; + speed=0.5; + duty=0.40000001; + relSpeedMin=0.69717097; + relSpeedMax=1.096506; + soundOverride="crawl"; + soundEnabled=1; + canPullTrigger=0; + ConnectTo[]={}; + InterpolateTo[]= + { + "AmovPpneMstpSnonWnonDnon", + 0.02, + "AmovPpneMrunSnonWnonDl", + 0.025, + "AmovPpneMrunSnonWnonDb", + 0.025 + }; + }; + class AmovPpneMrunSnonWnonDb: AmovPpneMrunSnonWnonDf + { + file="\nst\ns_anims\bloodsucker\forward.rtm"; + speed=0.5; + duty=0.40000001; + relSpeedMin=0.69717097; + relSpeedMax=1.096506; + soundOverride="crawl"; + soundEnabled=1; + canPullTrigger=0; + ConnectTo[]={}; + InterpolateTo[]= + { + "AmovPpneMstpSnonWnonDnon", + 0.02, + "AmovPpneMrunSnonWnonDbl", + 0.025, + "AmovPpneMrunSnonWnonDbr", + 0.025 + }; + }; + class AmovPpneMrunSnonWnonDbr: AmovPpneMrunSnonWnonDf + { + file="\nst\ns_anims\bloodsucker\forward.rtm"; + speed=0.5; + duty=0.40000001; + relSpeedMin=0.69717097; + relSpeedMax=1.096506; + soundOverride="crawl"; + soundEnabled=1; + canPullTrigger=0; + ConnectTo[]={}; + InterpolateTo[]= + { + "AmovPpneMstpSnonWnonDnon", + 0.02, + "AmovPpneMrunSnonWnonDb", + 0.025, + "AmovPpneMrunSnonWnonDr", + 0.025 + }; + }; + class AmovPpneMrunSnonWnonDr: AmovPpneMrunSnonWnonDf + { + file="\nst\ns_anims\bloodsucker\forward.rtm"; + speed=0.5; + duty=0.40000001; + relSpeedMin=0.69717097; + relSpeedMax=1.096506; + soundOverride="crawl"; + soundEnabled=1; + canPullTrigger=0; + ConnectTo[]={}; + InterpolateTo[]= + { + "AmovPpneMstpSnonWnonDnon", + 0.02, + "AmovPpneMrunSnonWnonDbr", + 0.025, + "AmovPpneMrunSnonWnonDfr", + 0.025 + }; + }; + class AmovPpneMrunSnonWnonDfr: AmovPpneMrunSnonWnonDf + { + file="\nst\ns_anims\bloodsucker\forward.rtm"; + speed=1.05; + duty=0.40000001; + relSpeedMin=0.69717097; + relSpeedMax=1.096506; + soundOverride="crawl"; + soundEnabled=1; + canPullTrigger=0; + ConnectTo[]={}; + InterpolateTo[]= + { + "AmovPpneMstpSnonWnonDnon", + 0.02, + "AmovPpneMrunSnonWnonDf", + 0.025, + "AmovPpneMrunSnonWnonDr", + 0.025, + "AmovPpneMstpSnonWnonDnon_AmovPercMsprSnonWnonDf", + 0.050000001 + }; + }; + }; }; \ No newline at end of file diff --git a/SQF/dayz_code/actions/gather_meat.sqf b/SQF/dayz_code/actions/gather_meat.sqf index 1826fb5af..9e90794df 100644 --- a/SQF/dayz_code/actions/gather_meat.sqf +++ b/SQF/dayz_code/actions/gather_meat.sqf @@ -1,27 +1,28 @@ -private ["_item","_type","_hasHarvested","_knifeArray","_PlayerNear","_isListed","_activeKnife","_text","_qty","_string","_isZombie","_humanity","_finished"]; - if (dayz_actionInProgress) exitWith {localize "str_player_actionslimit" call dayz_rollingMessages;}; + +local _body = _this; + +if (_body getVariable["meatHarvested",false]) exitWith {}; // Exit the script if the meat has already been harvested. +if ({isPlayer _x} count ((getPosATL _body) nearEntities ["CAManBase", 12]) > 1) exitWith {localize "str_pickup_limit_5" call dayz_rollingMessages;}; // Exit the script if another player is near to prevent duping. + dayz_actionInProgress = true; -_item = _this; -_type = typeOf _item; -_isZombie = _type isKindOf "zZombie_base"; -_hasHarvested = _item getVariable["meatHarvested",false]; +local _type = typeOf _body; +local _isZombie = _type isKindOf "zZombie_base"; +local _isMutant = _type == "z_bloodsucker"; +local _knives = []; +local _string = ""; -_knifeArray = []; - -_PlayerNear = {isPlayer _x} count ((getPosATL _item) nearEntities ["CAManBase", 12]) > 1; -if (_PlayerNear) exitWith {localize "str_pickup_limit_5" call dayz_rollingMessages; dayz_actionInProgress = false;}; - -//Count how many active tools the player has +// Count how many knives the player has { - if (_x IN items player) then { - _knifeArray set [count _knifeArray, _x]; + if (_x in items player) then { + _knives set [count _knives, _x]; }; } count Dayz_Gutting; -if ((count _knifeArray) < 1) exitWith { - if (_isZombie) then { +// Exit the script if the player doesn't have a knife +if ((count _knives) < 1) exitWith { + if (_isZombie || _isMutant) then { format[localize "str_missing_to_do_this",localize "STR_EQUIP_NAME_4"] call dayz_rollingMessages; } else { localize "str_cannotgut" call dayz_rollingMessages; @@ -29,48 +30,48 @@ if ((count _knifeArray) < 1) exitWith { dayz_actionInProgress = false; }; -if ((count _knifeArray > 0) and !_hasHarvested) then { - //Use sharpest knife player has - _activeKnife = _knifeArray select 0; +[player,(getPosATL player),10,"gut"] spawn fnc_alertZombies; - //Get Animal Type - _isListed = isClass (configFile >> "CfgSurvival" >> "Meat" >> _type); - _text = getText (configFile >> "CfgVehicles" >> _type >> "displayName"); +local _finished = ["Medic",1] call fn_loopAction; +if (!_finished) exitWith {dayz_actionInProgress = false;}; - [player,(getPosATL player),10,"gut"] spawn fnc_alertZombies; +// Added Nutrition-Factor for work +["Working",0,[20,40,15,0]] call dayz_NutritionSystem; - _finished = ["Medic",1] call fn_loopAction; - if (!_finished) exitWith {}; +//Get Animal Type +local _isListed = isClass (configFile >> "CfgSurvival" >> "Meat" >> _type); +local _text = getText (configFile >> "CfgVehicles" >> _type >> "displayName"); - // Added Nutrition-Factor for work - ["Working",0,[20,40,15,0]] call dayz_NutritionSystem; +_body setVariable ["meatHarvested",true,true]; +local _qty = if (_isListed) then {getNumber (configFile >> "CfgSurvival" >> "Meat" >> _type >> "yield")} else {2}; +if ((_knives select 0) == "ItemKnifeBlunt") then {_qty = round(_qty / 2);}; - _item setVariable ["meatHarvested",true,true]; - - _qty = if (_isListed) then {getNumber (configFile >> "CfgSurvival" >> "Meat" >> _type >> "yield")} else {2}; - if (_activeKnife == "ItemKnifeBlunt") then { _qty = round(_qty / 2); }; - - if (local _item) then { - [_item,_qty] spawn local_gutObject; //leave as spawn (sleeping in loops will work but can freeze the script) - } else { - PVCDZ_obj_GutBody =[_item,_qty]; - publicVariable "PVCDZ_obj_GutBody"; - }; - - ["knives",0.2] call fn_dynamicTool; - - if (_isZombie) then { - // Reduce humanity for gutting zeds - _humanity = player getVariable ["humanity",0]; - _humanity = _humanity - 10; - player setVariable ["humanity",_humanity,true]; - _string = format[localize "str_success_gutted_zombie",_text]; //%1 has been gutted, zombie parts are now on the carcass - } else { - _string = format[localize "str_success_gutted_animal",_text,_qty]; - }; - closeDialog 0; - uiSleep 0.02; - _string call dayz_rollingMessages; +if (local _body) then { + [_body,_qty] spawn local_gutObject; //leave as spawn (sleeping in loops will work but can freeze the script) +} else { + PVCDZ_obj_GutBody =[_body,_qty]; + publicVariable "PVCDZ_obj_GutBody"; }; +["knives",0.2] call fn_dynamicTool; + +call { + if (_isZombie) exitWith { + // Reduce humanity for gutting zeds + local _humanity = player getVariable ["humanity",0]; + player setVariable ["humanity",(_humanity - 10),true]; + _string = format[localize "str_success_gutted_zombie",_text]; //%1 has been gutted, zombie parts are now on the carcass + }; + + if (_isMutant) exitWith { + _string = format[localize "str_success_gutted_mutant",_text]; + }; + + _string = format[localize "str_success_gutted_animal",_text,_qty]; // default is gut animal +}; + +closeDialog 0; +uiSleep 0.02; +_string call dayz_rollingMessages; + dayz_actionInProgress = false; diff --git a/SQF/dayz_code/compile/building_spawnZombies.sqf b/SQF/dayz_code/compile/building_spawnZombies.sqf index 8e7be6f60..865a9e981 100644 --- a/SQF/dayz_code/compile/building_spawnZombies.sqf +++ b/SQF/dayz_code/compile/building_spawnZombies.sqf @@ -41,4 +41,11 @@ if (!([_objPos] call DZE_SafeZonePosCheck)) then { }; } forEach _positions; }; + + // Bloodsuckers + if (DZE_Bloodsuckers) then { + if ((dayz_spawnBloodsuckers < DZE_BloodsuckersMaxLocal) && {dayz_CurrentNearBloodsuckers < DZE_BloodsuckersMaxNear} && {dayz_currentGlobalBloodsuckers < DZE_BloodsuckersMaxGlobal} && {_type in DZE_BloodsuckerBuildings} && {(random 1) < DZE_BloodsuckerChance}) then { + _objPos call mutant_generate; + }; + }; }; diff --git a/SQF/dayz_code/compile/local_gutObject.sqf b/SQF/dayz_code/compile/local_gutObject.sqf index aad00420d..48eed429f 100644 --- a/SQF/dayz_code/compile/local_gutObject.sqf +++ b/SQF/dayz_code/compile/local_gutObject.sqf @@ -1,38 +1,43 @@ -private ["_amount","_animalbody","_rawfoodtype","_qty"]; +local _body = _this select 0; +local _qty = _this select 1; +local _rawfoodtype = ""; +local _bodyType = typeOf _body; +local _time = diag_tickTime; -_animalbody = _this select 0; -_qty = _this select 1; - -if (_animalbody isKindOf "zZombie_base") then { - _qty = 1; - _rawfoodtype = "ItemZombieParts"; -} else { - _rawfoodtype = getText (configFile >> "CfgSurvival" >> "Meat" >> typeOf _animalbody >> "rawfoodtype"); +call { + if (_body isKindOf "zZombie_base") exitWith { + _qty = 1; + _rawfoodtype = "ItemZombieParts"; + }; + + if (_bodyType == "z_bloodsucker") exitWith { + _qty = 1; + _rawfoodtype = "ItemMutantHeart"; // toolbelt item + }; + // default is animal + _rawfoodtype = getText (configFile >> "CfgSurvival" >> "Meat" >> _bodyType >> "rawfoodtype"); }; -if (local _animalbody) then { +if (local _body) then { for "_i" from 1 to _qty do { - _animalbody addMagazine _rawfoodtype; + if (_rawfoodtype == "ItemMutantHeart") then { + _body addWeapon _rawfoodtype; + } else { + _body addMagazine _rawfoodtype; + }; }; - if (typeOf _animalbody in ["Cock","Hen"]) then { - _amount = (floor (random 4)) + 2; + if (_bodyType in ["Cock","Hen"]) then { + local _amount = (floor (random 4)) + 2; for "_x" from 1 to _amount do { - _animalbody addMagazine "equip_feathers"; + _body addMagazine "equip_feathers"; }; }; - [time, _animalbody] spawn { - _timer = _this select 0; - _body = _this select 1; - _pos = getPosATL _body; - while {(count magazines _body > 0) && (time - _timer < 300)} do { - uiSleep 5; - }; - hideBody _body; - - uiSleep 10; - deleteVehicle _body; - true + while {((count magazines _body > 0) || (count weapons _body > 0)) && (diag_tickTime - _time < 300)} do { + uiSleep 5; }; + hideBody _body; + uiSleep 10; + deleteVehicle _body; }; diff --git a/SQF/dayz_code/compile/mutant_findTarget.sqf b/SQF/dayz_code/compile/mutant_findTarget.sqf new file mode 100644 index 000000000..c89269571 --- /dev/null +++ b/SQF/dayz_code/compile/mutant_findTarget.sqf @@ -0,0 +1,28 @@ +/* + _localtargets and _remotetargets are set in player_zombieCheck. + The bloodsucker will move in the direction of the player assigned as target. + Players with a mutant heart on tool belt will not be targeted. +*/ + +local _mutant = _this; + +if (isNull _mutant) exitWith {objNull}; // Prevent errors if mutant is suddenly deleted + +local _localtargets = _mutant getVariable ["localtargets",[]]; +local _remotetargets = _mutant getVariable ["remotetargets",[]]; +local _targets = _localtargets + _remotetargets; + +local _target = objNull; +local _scandist = 200; + +{ + if !(_x hasWeapon "ItemMutantHeart") then { + local _dist = _x distance _mutant; + if (_dist < _scandist) then { + _target = _x; + _scandist = _dist; + }; + }; +} count _targets; + +_target \ No newline at end of file diff --git a/SQF/dayz_code/compile/mutant_generate.sqf b/SQF/dayz_code/compile/mutant_generate.sqf new file mode 100644 index 000000000..ca1278726 --- /dev/null +++ b/SQF/dayz_code/compile/mutant_generate.sqf @@ -0,0 +1,16 @@ +// Select random position between 50 and 100 meters away from the building. +local _pos = [_this, 50, 100, 1] call fn_selectRandomLocation; + +if (surfaceIsWater _pos) exitWith { diag_log "Mutant_Generate: Location is in water...abort"; }; + +// Create mutant +_agent = createAgent ["z_bloodsucker", _pos, [], 0, "NONE"]; +_agent setDir (random 360); +_agent setPosATL _pos; + +// Add to counts +dayz_spawnBloodsuckers = dayz_spawnBloodsuckers + 1; +dayz_CurrentNearBloodsuckers = dayz_CurrentNearBloodsuckers + 1; +dayz_currentGlobalBloodsuckers = dayz_currentGlobalBloodsuckers + 1; + +//diag_log format ["Bloodsucker Counts: Current local - %1, Current near - %2, Current global - %3",dayz_spawnBloodsuckers,dayz_CurrentNearBloodsuckers,dayz_currentGlobalBloodsuckers]; diff --git a/SQF/dayz_code/compile/player_alertZombies.sqf b/SQF/dayz_code/compile/player_alertZombies.sqf index 8a222e24e..38b1c8b15 100644 --- a/SQF/dayz_code/compile/player_alertZombies.sqf +++ b/SQF/dayz_code/compile/player_alertZombies.sqf @@ -1,23 +1,16 @@ -private ["_unit","_distance","_doRun","_pos","_listTalk","_zombie","_50","_localtargets","_remotetargets","_targets","_dis"]; - -_unit = _this select 0; -_distance = _this select 1; -_doRun = _this select 2; -_pos = _this select 3; - -_listTalk = _pos nearEntities ["zZombie_Base",_distance]; +local _unit = _this select 0; +local _distance = _this select 1; +local _doRun = _this select 2; +local _pos = _this select 3; { - _distance = _distance max floor(_distance*.9); - _dis = _x distance _unit; - _zombie = _x; - + local _dis = _x distance _unit; call { if (_dis < 51) exitwith { if (_doRun) then { - _localtargets = _x getVariable ["localtargets",[]]; - _remotetargets = _x getVariable ["remotetargets",[]]; - _targets = _localtargets + _remotetargets; + local _localtargets = _x getVariable ["localtargets",[]]; + local _remotetargets = _x getVariable ["remotetargets",[]]; + local _targets = _localtargets + _remotetargets; if (!(_unit in _targets)) then { if !(local _x) then { _remotetargets set [count _remotetargets,_unit]; @@ -28,16 +21,15 @@ _listTalk = _pos nearEntities ["zZombie_Base",_distance]; }; }; } else { - _zombie setVariable ["myDest",_pos,true]; + _x setVariable ["myDest",_pos,true]; }; }; if ((_dis > 50) && {_dis <= 71}) exitwith { - _50 = round(random 100); - if (_50 < 50) then { + if (random 100 < 50) then { if (_doRun) then { - _localtargets = _x getVariable ["localtargets",[]]; - _remotetargets = _x getVariable ["remotetargets",[]]; - _targets = _localtargets + _remotetargets; + local _localtargets = _x getVariable ["localtargets",[]]; + local _remotetargets = _x getVariable ["remotetargets",[]]; + local _targets = _localtargets + _remotetargets; if (!(_unit in _targets)) then { if !(local _x) then { _remotetargets set [count _remotetargets,_unit]; @@ -48,14 +40,14 @@ _listTalk = _pos nearEntities ["zZombie_Base",_distance]; }; }; } else { - _zombie setVariable ["myDest",_pos,true]; + _x setVariable ["myDest",_pos,true]; }; } else { - _zombie setVariable ["myDest",_pos,true]; + _x setVariable ["myDest",_pos,true]; }; }; if (_dis > 70) exitwith { - _zombie setVariable ["myDest",_pos,true]; + _x setVariable ["myDest",_pos,true]; }; }; -} count _listTalk; +} count (_pos nearEntities ["Zed_Base",_distance]); diff --git a/SQF/dayz_code/compile/player_mutantAttack.sqf b/SQF/dayz_code/compile/player_mutantAttack.sqf new file mode 100644 index 000000000..6394004dd --- /dev/null +++ b/SQF/dayz_code/compile/player_mutantAttack.sqf @@ -0,0 +1,76 @@ +/* + DayZ Epoch mutant attack script by JasonTM + Adapted from player_zombieAttack by facoptere + and Nightstalker melee attack effects by sumraknightstalkers.cz +*/ + +local _mutant = _this; +if (isNull _mutant) exitWith {}; // Prevent errors if mutant is deleted suddenly + +local _damage = 0.5 + random (1.2); // Not sure about this. Maybe bloodsuckers should cause more damage. +local _wound = ""; +local _dir = [_mutant,player] call BIS_Fnc_dirTo; +_mutant setDir _dir; + +if (r_player_blood < (r_player_bloodTotal * 0.8)) then { + local _cnt = count (DAYZ_woundHit select 1); + local _index = floor (random _cnt); + _index = (DAYZ_woundHit select 1) select _index; + _wound = (DAYZ_woundHit select 0) select _index; +} else { + local _cnt = count (DAYZ_woundHit_ok select 1); + local _index = floor (random _cnt); + _index = (DAYZ_woundHit_ok select 1) select _index; + _wound = (DAYZ_woundHit_ok select 0) select _index; +}; + +local _pos = getPosATL player; +local _nearPlayer = false; + +{ + if (isPlayer _x && _x != player && {_x distance _pos < 100}) exitWith {_nearPlayer = true;}; +} count playableUnits; + +// Select a random attack sound +_sound = ["bloodatt0","bloodatt1","bloodatt2","bloodatt3"] call BIS_fnc_selectRandom; + +// Broadcast hit noise and animation if a player is near +if (_nearPlayer) then { + [_mutant,_sound,0,false] call dayz_zombieSpeak; + //[objNull, _mutant, rplayMove, "AmelPercMstpSnonWnonDnon_amaterUder2"] call RE; + [nil, _mutant, rSwitchMove, "AmelPercMstpSnonWnonDnon_amaterUder2"] call RE; +} else { + [_mutant,_sound,0,true] call dayz_zombieSpeak; + //_mutant playMove "AmelPercMstpSnonWnonDnon_amaterUder2"; + _mutant switchMove "AmelPercMstpSnonWnonDnon_amaterUder2"; +}; + +uiSleep 0.3; // This sleep better coordinates the UI effects below with the animation and attack sound above. + +if (DZE_BloodsuckerScreenEffect) then {cutRSC ["mutant_attack","PLAIN"];}; // the cool red slash marks that show up on screen. +"dynamicBlur" ppEffectEnable true; +"dynamicBlur" ppEffectAdjust [2]; +"dynamicBlur" ppEffectCommit 0.1; + +_pp = ppEffectCreate ["colorCorrections", 1553]; +_pp ppEffectEnable true; +_pp ppEffectAdjust [1, 1, 0, [0.1, 0.0, 0.0, 1], [1.0, 0.5, 0.5, 0.1], [0.199, 0.587, 0.114, 0.0]]; +_pp ppEffectCommit 0.1; +uiSleep 0.1; +_pp ppEffectAdjust [1, 1, 0, [0.1, 0.0, 0.0, 0.5], [1.0, 0.5, 0.5, 0.1], [0.199, 0.587, 0.114, 0.0]]; +_pp ppEffectCommit 0.3; +uiSleep 0.3; +ppEffectDestroy _pp; + +[player, _wound, _damage, _mutant, "zombie"] call fnc_usec_damageHandler; + +uiSleep 0.2; + +if (_nearPlayer) then { + [nil, _mutant, rSWITCHMOVE, ""] call RE; +} else { + _mutant switchMove ""; +}; + +uiSleep 3; +"dynamicBlur" ppEffectEnable false; \ No newline at end of file diff --git a/SQF/dayz_code/compile/player_spawnCheck.sqf b/SQF/dayz_code/compile/player_spawnCheck.sqf index 7cff6dea9..e6aed8be5 100644 --- a/SQF/dayz_code/compile/player_spawnCheck.sqf +++ b/SQF/dayz_code/compile/player_spawnCheck.sqf @@ -21,6 +21,22 @@ dayz_maxControlledZombies = dayz_maxLocalZombies; // This variable is also used // Current loot spawns dayz_currentWeaponHolders = count (_position nearObjects ["ReammoBox",_radius]); +// Current bloodsuckers +if (DZE_Bloodsuckers) then { + local _bloodsuckers = entities "z_bloodsucker"; + dayz_currentGlobalBloodsuckers = count _bloodsuckers; + dayz_CurrentNearBloodsuckers = 0; + dayz_spawnBloodsuckers = 0; + { + if ((_x distance _position) < _radius && {alive _x}) then { + if (local _x) then { + dayz_spawnBloodsuckers = dayz_spawnBloodsuckers + 1; + }; + dayz_CurrentNearBloodsuckers = dayz_CurrentNearBloodsuckers + 1; + }; + } count _bloodsuckers; +}; + // In vehicle check local _vehicle = vehicle player; local _inVehicle = (_vehicle != player); diff --git a/SQF/dayz_code/compile/player_zombieCheck.sqf b/SQF/dayz_code/compile/player_zombieCheck.sqf index 73f891fc7..c33557cee 100644 --- a/SQF/dayz_code/compile/player_zombieCheck.sqf +++ b/SQF/dayz_code/compile/player_zombieCheck.sqf @@ -1,139 +1,144 @@ -private ["_attacked","_chance","_near","_targeted","_localtargets","_remotetargets","_forcedSpeed","_vehicle","_refObj", -"_multiplier","_isAir","_hearingThreshold","_sightThreshold","_type","_dist","_attackDist", -"_targetedBySight","_targetedBySound","_targets","_last","_entHeight","_pHeight","_delta","_attackResult","_cantSee","_tPos","_zPos", -"_targetAngle","_inAngle","_lowBlood","_speedMin","_speedMax"]; +// Check for near zombies and mutants and attack player -_vehicle = vehicle player; -_refObj = driver _vehicle; -_attacked = false; // at least one Z attacked the player -_near = false; -//_multiplier = 1; -_isAir = _vehicle isKindOf "Air"; -_speedMin = DZE_ZombieSpeed select 0; -_speedMax = DZE_ZombieSpeed select 1; +local _vehicle = vehicle player; +local _inVehicle = _vehicle != player; +local _refObj = driver _vehicle; +local _attacked = false; // at least one Z attacked the player +local _isAir = _vehicle isKindOf "Air"; +local _speedMin = DZE_ZombieSpeed select 0; +local _speedMax = DZE_ZombieSpeed select 1; +local _cantSee = false; { - _forcedSpeed = if ((_speedMin != _speedMax) && {(_speedMin > 0) && (_speedMax > 0)}) then {((random (DZE_ZombieSpeed select 1)) max (DZE_ZombieSpeed select 0));} else {getNumber (configFile >> "CfgVehicles" >> (typeOf _x) >> "forcedSpeed");}; - //_forcedSpeed = getNumber (configFile >> "CfgVehicles" >> (typeOf _x) >> "forcedSpeed"); - //_hearingThreshold = getNumber (configFile >> "CfgVehicles" >> (typeOf _x) >> "hearingThreshold"); - //_sightThreshold = getNumber (configFile >> "CfgVehicles" >> (typeOf _x) >> "sightThreshold"); - - if !(typeOf _x == "swarm_newBase") then { - _type = "zombie"; - if (alive _x) then { - private ["_dist","_attackDist"]; - _dist = _x distance _refObj; - _group = _x; - _chance = 1; //0 / dayz_monitorPeriod; // Z verbosity - _targetedBySight = false; - _targetedBySound = false; - _localtargets = _group getVariable ["localtargets",[]]; - _remotetargets = _group getVariable ["remotetargets",[]]; - _targets = _localtargets + _remotetargets; - - if (_x distance player >= (dayz_areaAffect*2)) then { - if (speed _x < 4) then { - [_x,"idle",(_chance + 4),true] call dayz_zombieSpeak; - } else { - [_x,"chase",(_chance + 3),true] call dayz_zombieSpeak; - }; + local _isZombie = _x isKindOf "zZombie_base"; + local _isMutant = typeOf _x == "z_bloodsucker"; + local _forcedSpeed = if ((_speedMin != _speedMax) && {(_speedMin > 0) && (_speedMax > 0)}) then {((random (DZE_ZombieSpeed select 1)) max (DZE_ZombieSpeed select 0));} else {getNumber (configFile >> "CfgVehicles" >> (typeOf _x) >> "forcedSpeed");}; + local _dist = _x distance _refObj; + local _chance = 1; //0 / dayz_monitorPeriod; // Z verbosity + local _targetedBySight = false; + local _targetedBySound = false; + local _localtargets = _x getVariable ["localtargets",[]]; + local _remotetargets = _x getVariable ["remotetargets",[]]; + local _targets = _localtargets + _remotetargets; + + if (_isMutant) then { + if (_dist <= 5) then { + local _skin = _x getVariable ["mutantSkin", "act_krovosos_new1"]; // Set textures locally on each client to prevent issues with RESec + _x setObjectTexture [0, format["\nst\ns_mutants\blood\%1.paa",_skin]]; + } else { + _x setObjectTexture [0, ""]; + local _sound = ["bloodgrowl0","bloodgrowl2","bloodgrowl3","bloodgrowl4","bloodforest1","bloodforest2","bloodforest3","bloodforest4"] call BIS_fnc_selectRandom; + [_x,_sound,(_chance + 4),false] call dayz_zombieSpeak; + }; + }; + + if (_isZombie) then { + if (_x distance _refObj >= (dayz_areaAffect*2)) then { + if (speed _x < 4) then { + [_x,"idle",(_chance + 4),true] call dayz_zombieSpeak; + } else { + [_x,"chase",(_chance + 3),true] call dayz_zombieSpeak; }; - - if (_x distance _refObj >= 3.3) then {_x setVariable ["speedLimit",_forcedSpeed,false];}; - //if (!local _x) then { - if (_refObj in _targets) then { - _last = _x getVariable ["lastAttack", 0]; - _entHeight = (getPosATL _x) select 2; - _pHeight = (getPosATL _refObj) select 2; - _delta = _pHeight - _entHeight; - _x setVariable ["speedLimit", 0, false]; - - if (_x distance _refObj <= 3) then { - //Force AI to Stand - _x setUnitPos "UP"; - if !(animationState _x == "ZombieFeed") then { - if (((diag_tickTime - _last) > 1.5) && ((_delta < 1.5) && (_delta > -1.5))) then { - _cantSee = [_x,_refObj] call dayz_losCheck; - if (!_cantSee) then { - _attackResult = [_x, _type] spawn player_zombieAttack; - _x setVariable ["lastAttack", diag_tickTime]; - }; + }; + if (_dist >= 3.3) then {_x setVariable ["speedLimit",_forcedSpeed,false];}; + }; + + if (_refObj in _targets) then { + if (_isZombie) then {_x setVariable ["speedLimit", 0, false];}; + + if (_dist <= 3) then { + //Force AI to Stand + _x setUnitPos "UP"; + if !(animationState _x == "ZombieFeed") then { + local _last = _x getVariable ["lastAttack", 0]; + local _entHeight = (getPosATL _x) select 2; + local _pHeight = (getPosATL _refObj) select 2; + local _delta = _pHeight - _entHeight; + if (((diag_tickTime - _last) > 1.5) && ((_delta < 1.5) && (_delta > -1.5))) then { + _cantSee = [_refObj,_x] call dayz_losCheck; + if (!_cantSee) then { + if (_isZombie) then { + [_x, "zombie"] spawn player_zombieAttack; + } else { + if (!(_refObj hasWeapon "ItemMutantHeart") && !_inVehicle) then { + _x spawn player_mutantAttack; }; }; - } else { - _x setVariable ["speedLimit", _forcedSpeed, false]; + _x setVariable ["lastAttack", diag_tickTime]; }; - _attacked = true; - } else { - _x setVariable ["speedLimit", _forcedSpeed, false]; }; - //}; - - //Block all target atteps while in a vehicle - if (!_isAir) then { - if !(_refObj in _targets) then { - //Noise Activation (zed is within players audial projection) - if (_dist < DAYZ_disAudial) then { - if (DAYZ_disAudial > 80) then { + }; + } else { + if (_isZombie) then {_x setVariable ["speedLimit", _forcedSpeed, false];}; + }; + _attacked = true; + } else { + if (_isZombie) then {_x setVariable ["speedLimit", _forcedSpeed, false];}; + }; + + //Block all target attempts while in an aircraft + if (!_isAir) then { + if !(_refObj in _targets) then { + //Noise Activation (zed is within players audial projection) + if (_dist < DAYZ_disAudial) then { + if (DAYZ_disAudial > 80) then { + _targetedBySound = true; + } else { + //if (DAYZ_disAudial > 6) then { + _chance = [_x,_dist,DAYZ_disAudial] call dayz_losChance; + //diag_log ("Visual Detection: " + str([_x,_dist]) + " " + str(_chance)); + if ((random 1) < _chance) then { + //make sure the player isnt behind a building or wall if target is in the open always target if player is making too much noise + _cantSee = [_refObj,_x] call dayz_losCheck; + if (!_cantSee) then { _targetedBySound = true; } else { - //if (DAYZ_disAudial > 6) then { - _chance = [_x,_dist,DAYZ_disAudial] call dayz_losChance; - //diag_log ("Visual Detection: " + str([_x,_dist]) + " " + str(_chance)); - if ((random 1) < _chance) then { - //make sure the player isnt behind a building or wall if target is in the open always target if player is making too much noise - _cantSee = [_refObj,_x] call dayz_losCheck; - if (!_cantSee) then { - _targetedBySound = true; - } else { - if (_dist < (DAYZ_disAudial / 2)) then {_targetedBySound = true;}; - }; - }; - //}; + if (_dist < (DAYZ_disAudial / 2)) then {_targetedBySound = true;}; }; }; - - //Sight Activation - if (_dist < DAYZ_disVisual ) then { - _chance = [_x,_dist,DAYZ_disVisual] call dayz_losChance; - if ((random 1) < _chance) then { - _tPos = getPosASL _vehicle; - _zPos = getPosASL _x; - _targetAngle = 30; - _inAngle = [_zPos,(direction _x),_targetAngle,_tPos] call fnc_inAngleSector; - if (_inAngle) then { - _cantSee = [_refObj,_x] call dayz_losCheck; - if (!_cantSee) then {_targetedBySight = true;}; - }; - }; - }; + //}; }; }; - if (_targetedBySight or _targetedBySound) then { - [_x, "spotted", 0, false] call dayz_zombieSpeak; - //diag_log format["Zombie: %1, Distance: %2, Target Reason: Sight-%3,%5/Sound-%4,%6",(typeof _x),_dist,_targetedBySight,_targetedBySound,DAYZ_disVisual,DAYZ_disAudial]; - - switch (local _x) do { - case false: { - _remotetargets set [count _remotetargets,_refObj]; - _x setVariable ["remotetargets",_remotetargets,true]; + //Sight Activation + if (_dist < DAYZ_disVisual) then { + _chance = [_x,_dist,DAYZ_disVisual] call dayz_losChance; + if ((random 1) < _chance) then { + local _tPos = getPosASL _vehicle; + local _zPos = getPosASL _x; + local _targetAngle = 30; + local _inAngle = [_zPos,(direction _x),_targetAngle,_tPos] call fnc_inAngleSector; + if (_inAngle) then { + _cantSee = [_refObj,_x] call dayz_losCheck; + if (!_cantSee) then {_targetedBySight = true;}; }; - case true: { - _localtargets set [count _localtargets,_refObj]; - _x setVariable ["localtargets",_localtargets,false]; - }; - }; + }; }; }; }; + + if (_targetedBySight || _targetedBySound) then { + local _sound = ["spotted","bloodgrowl1"] select _isMutant; + [_x, _sound, 0, false] call dayz_zombieSpeak; + //diag_log format["Zombie: %1, Distance: %2, Target Reason: Sight-%3,%5/Sound-%4,%6",(typeof _x),_dist,_targetedBySight,_targetedBySound,DAYZ_disVisual,DAYZ_disAudial]; + + if (local _x) then { + _localtargets set [count _localtargets,_refObj]; + _x setVariable ["localtargets",_localtargets,false]; + } else { + _remotetargets set [count _remotetargets,_refObj]; + _x setVariable ["remotetargets",_remotetargets,true]; + }; + }; + + if (_isMutant && DZE_BloodsuckerDeleteNearTrader && isInTraderCity) then {deleteVehicle _x}; // Delete bloodsucker if the player is in a trader city } forEach ((getPosATL _refObj) nearEntities ["Zed_Base",100]); if (_attacked) then { if (r_player_unconscious) then { [_refObj, "scream", 6, false] call dayz_zombieSpeak; } else { - _lowBlood = (r_player_blood / r_player_bloodTotal) < 0.5; + local _lowBlood = (r_player_blood / r_player_bloodTotal) < 0.5; if (diag_ticktime - dayz_panicCooldown > 9 && _lowBlood) then { //Prevents overlapping sounds (panic tracks are 4-9s, this script is called every 1s) //50% chance every 9s @@ -143,5 +148,5 @@ if (_attacked) then { }; }; -// return true if attacked or near. if so, player_monitor will perform its ridiculous 'while true' loop faster. -(_attacked OR _near) +// return true if attacked. if so, player_monitor will perform its ridiculous 'while true' loop faster. +_attacked diff --git a/SQF/dayz_code/configVariables.sqf b/SQF/dayz_code/configVariables.sqf index 0a366bf81..5a795dcfd 100644 --- a/SQF/dayz_code/configVariables.sqf +++ b/SQF/dayz_code/configVariables.sqf @@ -205,7 +205,17 @@ if (!isDedicated) then { DZE_CLICK_ACTIONS = DZE_CLICK_ACTIONS + [ ["ItemGPS",localize "STR_CL_LV_LOCATE_VEHICLES","[] spawn locateVehicle;","true"] ]; - }; + }; + + // Bloodsuckers + DZE_Bloodsuckers = false; // Enable bloodsucker spawning. + DZE_BloodsuckerChance = .15; // Chance that a building will spawn a bloodsucker. Default .15 (15%) + DZE_BloodsuckerBuildings = ["Land_Hlidac_budka","Land_Mil_Guardhouse","Land_Mil_Barracks","Land_Mil_House","Land_Mil_Barracks_i","CrashSite_RU","CrashSite_US","CrashSite_EU","CrashSite_UN"]; // Bloodsuckers will spawn near these building classes. + DZE_BloodsuckersMaxGlobal = 15; // Maximum number of bloodsuckers allowed on the map at one time. + DZE_BloodsuckersMaxNear = 3; // Maximum number of bloodsuckers allowed in any 200 meter area. + DZE_BloodsuckersMaxLocal = 2; // Maximum number of bloodsuckers that can spawn per client. + DZE_BloodsuckerScreenEffect = true; // On screen slash marks when the bloodsuckers attack. + DZE_BloodsuckerDeleteNearTrader = true; // Deletes bloodsuckers when near trader cities. }; // Both diff --git a/SQF/dayz_code/init/compiles.sqf b/SQF/dayz_code/init/compiles.sqf index f1260455d..1ca14e578 100644 --- a/SQF/dayz_code/init/compiles.sqf +++ b/SQF/dayz_code/init/compiles.sqf @@ -206,7 +206,14 @@ if (!isDedicated) then { if (DZE_LocateVehicle) then { locateVehicle = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\locateVehicle.sqf"; - }; + }; + + // Bloodsuckers + if (DZE_Bloodsuckers) then { + player_mutantAttack = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_mutantAttack.sqf"; + mutant_generate = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\mutant_generate.sqf"; + mutant_findTarget = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\mutant_findTarget.sqf"; + }; // Weather if (DZE_Weather in [3,4]) then { diff --git a/SQF/dayz_code/stringtable.xml b/SQF/dayz_code/stringtable.xml index 4aa5f253d..3e7149d27 100644 --- a/SQF/dayz_code/stringtable.xml +++ b/SQF/dayz_code/stringtable.xml @@ -14281,6 +14281,9 @@ Infecté Infikovaný + + Bloodsucker + Viral Infected Infectado Viral @@ -22463,6 +22466,9 @@ %1 a été vidé, les pièces de zombies sont maintenant sur la carcasse. %1 byl zničený, zombie díly jsou nyní na kostru. + + You have carved the heart of the %1 from it's chest. + Tame Dog Hund zähmen @@ -25541,6 +25547,9 @@ Dépecer le zombie Vykuchat Zombie + + Butcher Bloodsucker + Open %1 %1 öffnen @@ -27337,6 +27346,12 @@ Zombiehaut in einem Sack. Кожа зомби в мешке. + + Mutant Heart + + + Bloodsuckers will not attack a player that keeps one in their inventory. + Combination Lock Zahlenschloss diff --git a/SQF/dayz_code/system/mutant_agent.fsm b/SQF/dayz_code/system/mutant_agent.fsm new file mode 100644 index 000000000..09c4deca8 --- /dev/null +++ b/SQF/dayz_code/system/mutant_agent.fsm @@ -0,0 +1,719 @@ +/*%FSM*/ +/*%FSM*/ +/* +item0[] = {"init",0,250,-400.000000,-250.000000,-300.000000,-200.000000,0.000000,"init"}; +item1[] = {"End",1,250,175.000000,-250.000000,275.000000,-200.000000,0.000000,"End"}; +item2[] = {"Not_Alive",4,218,25.000000,375.000000,125.000000,425.000000,5.000000,"Not" \n "Alive"}; +item3[] = {"Nobody_Near",4,218,25.000000,525.000000,125.000000,575.000000,6.000000,"Nobody" \n "Near"}; +item4[] = {"",7,210,-29.000042,396.000000,-20.999958,404.000000,0.000000,""}; +item5[] = {"",7,210,-29.000040,470.999939,-20.999960,479.000061,0.000000,""}; +item6[] = {"",7,210,-354.000031,121.000000,-346.000000,129.000000,0.000000,""}; +item7[] = {"UnitReady",4,218,-275.000000,275.000000,-175.000000,325.000000,5.000000,"UnitReady"}; +item8[] = {"Chase",2,250,-150.000000,375.000000,-50.000000,425.000000,0.000000,"Chase"}; +item9[] = {"",7,210,-29.000006,121.000000,-20.999994,129.000000,0.000000,""}; +item10[] = {"",7,210,-29.000008,221.000000,-20.999992,229.000015,0.000000,""}; +item11[] = {"No_Target",4,218,-400.000000,450.000000,-300.000000,500.000000,3.000000,"No" \n "Target"}; +item12[] = {"",7,210,-479.000000,471.000000,-471.000000,479.000000,0.000000,""}; +item13[] = {"",7,210,-729.000000,346.000000,-721.000000,354.000000,0.000000,""}; +item14[] = {"",7,210,221.000000,396.000000,229.000000,404.000000,0.000000,""}; +item15[] = {"",7,210,221.000000,471.000000,229.000000,479.000000,0.000000,""}; +item16[] = {"Cleanup_",2,250,175.000000,200.000000,275.000000,250.000000,0.000000,"Cleanup?"}; +item17[] = {"nobody_around",4,218,175.000000,-25.000000,275.000000,25.000000,0.000000,"nobody" \n "around"}; +item18[] = {"",7,210,-104.000023,471.000000,-95.999985,479.000000,0.000000,""}; +item19[] = {"cant_see",4,218,-275.000000,575.000000,-175.000000,625.000000,2.000000,"cant" \n "see"}; +item20[] = {"Finish_Move",2,250,-275.000000,650.000000,-175.000000,700.000000,0.000000,"Finish" \n "Move"}; +item21[] = {"finished",4,218,-425.000000,650.000000,-325.000000,700.000000,1.000000,"finished"}; +item22[] = {"",7,210,-479.000000,671.000000,-471.000000,679.000000,0.000000,""}; +item23[] = {"",7,210,-29.000002,671.000000,-20.999998,679.000000,0.000000,""}; +item24[] = {"Move",2,250,-650.000000,50.000000,-550.000000,100.000000,0.000000,"Move"}; +item25[] = {"someone_here",4,218,300.000000,200.000000,400.000000,250.000000,0.000000,"someone" \n "here"}; +item26[] = {"wait",2,250,300.000000,125.000000,400.000000,175.000000,0.000000,"wait"}; +item27[] = {"time_up",4,218,300.000000,-25.000000,400.000000,25.000000,0.000000,"time" \n "up"}; +item28[] = {"",7,210,346.000000,95.999992,354.000000,104.000000,0.000000,""}; +item29[] = {"",7,210,221.000000,96.000008,229.000000,103.999977,0.000000,""}; +item30[] = {"Time_Check",4,218,425.000000,125.000000,525.000000,175.000000,0.000000,"Time" \n "Check"}; +item31[] = {"",7,210,346.000000,-79.000000,354.000000,-71.000000,0.000000,""}; +item32[] = {"",7,210,221.000000,-79.000000,229.000000,-71.000000,0.000000,""}; +item33[] = {"too_long",4,4314,-425.000000,725.000000,-325.000000,775.000000,0.000000,"too long"}; +item34[] = {"",7,210,-229.000000,746.000000,-221.000000,754.000000,0.000000,""}; +item35[] = {"",7,210,-479.000000,746.000000,-471.000000,754.000000,0.000000,""}; +item36[] = {"Reset_Targeting",2,250,-525.000000,325.000000,-425.000000,375.000000,0.000000,"Reset" \n "Targeting"}; +item37[] = {"deleted",4,218,425.000000,-25.000000,525.000000,25.000000,0.000000,"deleted"}; +item38[] = {"",7,210,471.000000,-79.000000,479.000000,-71.000000,0.000000,""}; +item39[] = {"",7,210,471.000000,95.999977,479.000000,104.000023,0.000000,""}; +item40[] = {"",7,210,-104.000000,596.000000,-95.999992,604.000000,0.000000,""}; +item41[] = {"Target_Dead",4,218,-275.000000,500.000000,-175.000000,550.000000,3.000000,"Target Dead"}; +item42[] = {"",7,210,-479.000000,521.000000,-471.000000,529.000000,0.000000,""}; +item43[] = {"TimeCheck",4,218,-150.000000,275.000000,-50.000000,325.000000,2.000000,"TimeCheck"}; +item44[] = {"No_Agent",4,218,25.000000,450.000000,125.000000,500.000000,5.000000,"No Agent"}; +item45[] = {"",7,210,221.000015,546.000061,229.000000,553.999939,0.000000,""}; +item46[] = {"",7,210,-29.000042,545.999939,-20.999958,554.000061,0.000000,""}; +item47[] = {"Ready",4,218,-400.000000,-125.000000,-300.000000,-75.000000,0.000000,"Ready"}; +item48[] = {"Loiter",2,250,-400.000000,25.000000,-300.000000,75.000000,0.000000,"Loiter"}; +item49[] = {"Time_Check",4,218,-275.000000,50.000000,-175.000000,100.000000,0.000000,"Time" \n "Check"}; +item50[] = {"MoveCompleted_",4,218,-525.000000,50.000000,-425.000000,100.000000,3.000000,"MoveCompleted "}; +item51[] = {"Failed_Move",4,218,-525.000000,100.000000,-425.000000,150.000000,3.000000,"Failed Move"}; +item52[] = {"Not_moving",4,218,-525.000000,0.000000,-425.000000,50.000000,1.000000,"Not moving"}; +item53[] = {"",7,210,-604.000000,-29.000000,-596.000000,-21.000000,0.000000,""}; +item54[] = {"player_check",4,218,-275.000000,0.000000,-175.000000,50.000000,2.000000,"player" \n "check"}; +item55[] = {"True",8,218,-525.000000,-50.000000,-425.000000,0.000000,0.000000,"True"}; +item56[] = {"",7,210,-729.000000,-129.000000,-721.000000,-121.000008,0.000000,""}; +item57[] = {"InRange",4,218,-275.000000,400.000000,-175.000000,450.000000,1.000000,"InRange"}; +item58[] = {"Attacking_Wait",2,250,-400.000000,375.000000,-300.000000,425.000000,0.000000,"Attacking Wait"}; +item59[] = {"NotInRange",4,218,-275.000000,350.000000,-175.000000,400.000000,1.000000,"NotInRange"}; +item60[] = {"TimeCheck",4,218,-400.000000,275.000000,-300.000000,325.000000,0.000000,"TimeCheck"}; +item61[] = {"Has_Target",4,218,-150.000000,200.000000,-50.000000,250.000000,0.000000,"Has" \n "Target"}; +item62[] = {"Reset_MoveTo",2,250,-275.000000,200.000000,-175.000000,250.000000,0.000000,"Reset MoveTo"}; +item63[] = {"",7,210,-479.000000,-129.000000,-471.000000,-121.000000,0.000000,""}; +item64[] = {"isDedicated",4,218,-125.000000,-250.000000,-25.000000,-200.000000,0.000000,"isDedicated"}; +link0[] = {0,47}; +link1[] = {0,64}; +link2[] = {2,14}; +link3[] = {3,45}; +link4[] = {4,2}; +link5[] = {4,5}; +link6[] = {5,44}; +link7[] = {5,46}; +link8[] = {6,9}; +link9[] = {7,8}; +link10[] = {8,4}; +link11[] = {8,18}; +link12[] = {8,43}; +link13[] = {8,57}; +link14[] = {9,10}; +link15[] = {10,4}; +link16[] = {10,61}; +link17[] = {11,12}; +link18[] = {12,36}; +link19[] = {13,56}; +link20[] = {14,16}; +link21[] = {15,14}; +link22[] = {16,25}; +link23[] = {16,29}; +link24[] = {17,32}; +link25[] = {18,11}; +link26[] = {18,40}; +link27[] = {18,41}; +link28[] = {19,20}; +link29[] = {20,21}; +link30[] = {20,23}; +link31[] = {20,34}; +link32[] = {21,22}; +link33[] = {22,42}; +link34[] = {23,46}; +link35[] = {24,53}; +link36[] = {25,26}; +link37[] = {26,28}; +link38[] = {26,30}; +link39[] = {27,31}; +link40[] = {28,27}; +link41[] = {28,29}; +link42[] = {28,39}; +link43[] = {29,17}; +link44[] = {30,26}; +link45[] = {31,32}; +link46[] = {32,1}; +link47[] = {33,35}; +link48[] = {34,33}; +link49[] = {35,22}; +link50[] = {36,13}; +link51[] = {37,38}; +link52[] = {38,31}; +link53[] = {39,37}; +link54[] = {40,19}; +link55[] = {41,42}; +link56[] = {42,12}; +link57[] = {43,8}; +link58[] = {44,15}; +link59[] = {45,15}; +link60[] = {46,3}; +link61[] = {47,48}; +link62[] = {48,6}; +link63[] = {48,49}; +link64[] = {48,50}; +link65[] = {48,51}; +link66[] = {48,52}; +link67[] = {48,54}; +link68[] = {49,48}; +link69[] = {50,24}; +link70[] = {51,24}; +link71[] = {52,24}; +link72[] = {53,55}; +link73[] = {54,48}; +link74[] = {55,48}; +link75[] = {56,63}; +link76[] = {57,58}; +link77[] = {58,59}; +link78[] = {58,60}; +link79[] = {59,8}; +link80[] = {60,58}; +link81[] = {61,62}; +link82[] = {62,7}; +link83[] = {63,55}; +link84[] = {64,1}; +globals[] = {25.000000,1,0,0,0,640,480,1,193,6316128,1,-736.296082,268.705750,907.675354,265.884705,1425,910,1}; +window[] = {2,-1,-1,-1,-1,883,182,1390,182,3,1443}; +*//*%FSM*/ +class FSM +{ + fsmName = "DZE Bloodsucker Agent"; + class States + { + /*%FSM*/ + class init + { + name = "init"; + init = /*%FSM*/"_agent = _this select 0;" \n + "_position = _agent modelToWorld [0,0,0];" \n + "" \n + "_secondHand = false;" \n + "" \n + "if (count _this > 1) then {" \n + " _secondHand = true;" \n + " diag_log (""Second Hand Bloodsucker Initialized: "" + str(_this));" \n + "};"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class isDedicated + { + priority = 0.000000; + to="End"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"isDedicated"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Ready + { + priority = 0.000000; + to="Loiter"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"(!isNil 'dayz_clientPreload' && {dayz_clientPreload}) && !(isNull _agent)"/*%FSM*/; + action=/*%FSM*/"_myDest = [_agent,_position] call zombie_loiter;" \n + "" \n + "_agent disableAI ""FSM"";" \n + "_agent setBehaviour ""CARELESS"";" \n + "_agent setSpeedMode ""FULL"";" \n + "" \n + "// hint ""Bloodsucker has spawned"";" \n + "" \n + "_isSomeone = true;" \n + "" \n + "_target = objNull;" \n + "_targetPos = [];" \n + "_entityTime = diag_tickTime;" \n + "" \n + "// Select skin" \n + "_skin = [""act_krovosos_new1"",""act_krovosos_3"",""act_krovosos_2""] call BIS_fnc_selectRandom;" \n + "_agent setVariable [""mutantSkin"",_skin, false];" \n + "" \n + "// Announce presence" \n + "[_agent,""bloodgrowl1"",0,false] call dayz_zombieSpeak;"/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class End + { + name = "End"; + init = /*%FSM*/"if (!isDedicated) then {" \n + " if (!isNull _agent) then {" \n + " deleteVehicle _agent;" \n + " };" \n + "} else {" \n + " [_agent] call zombie_findOwner;" \n + "};"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + }; + }; + /*%FSM*/ + /*%FSM*/ + class Chase + { + name = "Chase"; + init = /*%FSM*/"_timeN = diag_tickTime;" \n + "" \n + "_target = _agent call mutant_findTarget;" \n + "_targetPos = getPosATL _target;" \n + "_isAlive = alive _agent;" \n + "_isTargetAlive = alive _target;" \n + "" \n + "//Move to location" \n + "_agent moveTo _targetPos;" \n + "" \n + "//Check if LOS" \n + "if ((_agroCheck % 8) == 0) then {" \n + " _agroCheck = 0;" \n + " _cantSee = [_target,_agent] call dayz_losCheck;" \n + "};"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Nobody_Near + { + priority = 6.000000; + to="Cleanup_"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!_isSomeone"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Not_Alive + { + priority = 5.000000; + to="Cleanup_"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!_isAlive"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class No_Agent + { + priority = 5.000000; + to="Cleanup_"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"(isNull _agent)"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class No_Target + { + priority = 3.000000; + to="Reset_Targeting"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"(isNull _target) && ((diag_tickTime - _timeN) > 5)"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Target_Dead + { + priority = 3.000000; + to="Reset_Targeting"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!_isTargetAlive"/*%FSM*/; + action=/*%FSM*/"_timeN = diag_tickTime;"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class cant_see + { + priority = 2.000000; + to="Finish_Move"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_cantSee"/*%FSM*/; + action=/*%FSM*/"// diag_log (""Mutant Cant See Target"");"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class TimeCheck + { + priority = 2.000000; + to="Chase"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"(diag_tickTime - _timeN) > 2" \n + ""/*%FSM*/; + action=/*%FSM*/"_agroCheck= _agroCheck + 1;"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class InRange + { + priority = 1.000000; + to="Attacking_Wait"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_agent distance _targetPos < 3.1"/*%FSM*/; + action=/*%FSM*/"_agent stop true;" \n + "" \n + "_myDest = [ _agent modelToWorld [0,0,0]];" \n + "" \n + "_agent setVariable [""myDest"",(_agent modelToWorld [0,0,0])];" \n + "" \n + "_agroCheck= 0;"/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Cleanup_ + { + name = "Cleanup_"; + init = /*%FSM*/"_waitStart = diag_tickTime;"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class nobody_around + { + priority = 0.000000; + to="End"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!_isSomeone"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class someone_here + { + priority = 0.000000; + to="wait"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_isSomeone"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Finish_Move + { + name = "Finish_Move"; + init = /*%FSM*/"_timeN = diag_tickTime;" \n + "" \n + "_isSomeone = false;" \n + "{" \n + " if (isPlayer _x && {_x distance _agent < 300}) exitWith {_isSomeone = true;};" \n + "} count playableUnits;"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Nobody_Near + { + priority = 6.000000; + to="Cleanup_"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!_isSomeone"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class finished + { + priority = 1.000000; + to="Reset_Targeting"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_agent distance _targetPos < 3"/*%FSM*/; + action=/*%FSM*/"//diag_log (""Finished"");"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class too_long + { + priority = 0.000000; + to="Reset_Targeting"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"(diag_tickTime - _timeN) > 20"/*%FSM*/; + action=/*%FSM*/"//diag_log (""Mutant Cant See Timeout"");"/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Move + { + name = "Move"; + init = /*%FSM*/"_myDest = [_agent,_position] call zombie_loiter;"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class True + { + priority = 0.000000; + to="Loiter"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/""/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class wait + { + name = "wait"; + init = /*%FSM*/"_isSomeone = false;" \n + "{" \n + " if (isPlayer _x && {_x distance _agent < 300}) exitWith {_isSomeone = true;};" \n + "} count playableUnits;" \n + "" \n + "_timeN = diag_tickTime;" \n + "" \n + "//diag_log (""Waiting until players are not near to delete bloodsucker, or timeout"");"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class time_up + { + priority = 0.000000; + to="End"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"(diag_tickTime - _waitStart) > 300"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class nobody_around + { + priority = 0.000000; + to="End"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!_isSomeone"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class deleted + { + priority = 0.000000; + to="End"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"isNull _agent;"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Time_Check + { + priority = 0.000000; + to="wait"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"(diag_tickTime - _timeN) > 30"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Reset_Targeting + { + name = "Reset_Targeting"; + init = /*%FSM*/"//Lets move" \n + "_myDest = [_agent,_position] call zombie_loiter;" \n + "" \n + "// Reset Targets" \n + "_agent setVariable [""localtargets"", [], false];" \n + "_agent setVariable [""remotetargets"", [], true];" \n + "_target = objNull;" \n + "" \n + "// diag_log (""Mutant Targets Reset"");" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class True + { + priority = 0.000000; + to="Loiter"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/""/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Loiter + { + name = "Loiter"; + init = /*%FSM*/"_isAlive = alive _agent;" \n + "_timeN = diag_tickTime;" \n + "" \n + "//Look for target" \n + "_target = _agent call mutant_findTarget;" \n + "" \n + "if (_myDest distance (getposATL _agent) > 3) then {" \n + " _agent moveTo _myDest;" \n + "};"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Nobody_Near + { + priority = 6.000000; + to="Cleanup_"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!_isSomeone"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class No_Agent + { + priority = 5.000000; + to="Cleanup_"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"(isNull _agent)"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Not_Alive + { + priority = 5.000000; + to="Cleanup_"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!_isAlive"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Failed_Move + { + priority = 3.000000; + to="Move"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"moveToFailed _agent;"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class MoveCompleted_ + { + priority = 3.000000; + to="Move"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"moveToCompleted _agent;"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class player_check + { + priority = 2.000000; + to="Loiter"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"(diag_tickTime - _entityTime) > 30"/*%FSM*/; + action=/*%FSM*/"_entityTime = diag_tickTime;" \n + "" \n + "_isSomeone = false;" \n + "{" \n + " if (isPlayer _x && {_x distance _agent < 300}) exitWith {_isSomeone = true;};" \n + "} count playableUnits;"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Not_moving + { + priority = 1.000000; + to="Move"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"(Speed _agent == 0)" \n + ""/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Time_Check + { + priority = 0.000000; + to="Loiter"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"(diag_tickTime - _timeN) > 1"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Has_Target + { + priority = 0.000000; + to="Reset_MoveTo"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!(isNull _target)"/*%FSM*/; + action=/*%FSM*/"// diag_log ""Bloodsucker found target"";"/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Attacking_Wait + { + name = "Attacking_Wait"; + init = /*%FSM*/"_targetPos = _target modelToWorld [0,-1,0];" \n + "" \n + "_timeN = diag_tickTime;" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class NotInRange + { + priority = 1.000000; + to="Chase"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_agent distance _targetPos > 3.1"/*%FSM*/; + action=/*%FSM*/"_agent stop false;"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class TimeCheck + { + priority = 0.000000; + to="Attacking_Wait"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"((diag_tickTime - _timeN) > 1)"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Reset_MoveTo + { + name = "Reset_MoveTo"; + init = /*%FSM*/"_agent moveTo (_agent modelToWorld [0,0,0]);"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class UnitReady + { + priority = 5.000000; + to="Chase"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"unitReady _agent"/*%FSM*/; + action=/*%FSM*/"_myDest = [ _agent modelToWorld [0,0,0]];" \n + "_agent setVariable [""myDest"",(_agent modelToWorld [0,0,0])];" \n + "" \n + "//Lets see if we can get the AI to stop running away before heading to the player" \n + "_agent moveTo (_agent modelToWorld [0,0,0]);" \n + "" \n + "_agroCheck = 0;" \n + "_cantSee = false;"/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + }; + initState="init"; + finalStates[] = + { + "End", + }; +}; +/*%FSM*/ \ No newline at end of file diff --git a/SQF/dayz_server/system/scheduler/sched_corpses.sqf b/SQF/dayz_server/system/scheduler/sched_corpses.sqf index b40e7d698..5d607e882 100644 --- a/SQF/dayz_server/system/scheduler/sched_corpses.sqf +++ b/SQF/dayz_server/system/scheduler/sched_corpses.sqf @@ -36,7 +36,7 @@ sched_corpses = { _addFlies = 0; { if (local _x && {_x isKindOf "CAManBase"}) then { - if (_x isKindOf "zZombie_Base") then { + if (_x isKindOf "zZombie_Base" || {typeOf _x == "z_bloodsucker"}) then { _x call sched_co_deleteVehicle; _delQtyZ = _delQtyZ + 1; } else { From 3a100962f7ca7cad2dccb80e5a11e9920075966b Mon Sep 17 00:00:00 2001 From: worldwidesorrow Date: Wed, 18 Aug 2021 09:51:29 -0500 Subject: [PATCH 18/40] accidental overwrite --- SQF/dayz_code/Configs/CfgVehicles/CfgVehicles.hpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/SQF/dayz_code/Configs/CfgVehicles/CfgVehicles.hpp b/SQF/dayz_code/Configs/CfgVehicles/CfgVehicles.hpp index 78873857c..3813c6a99 100644 --- a/SQF/dayz_code/Configs/CfgVehicles/CfgVehicles.hpp +++ b/SQF/dayz_code/Configs/CfgVehicles/CfgVehicles.hpp @@ -230,6 +230,8 @@ class CfgVehicles class epoch_car: Car { vehicleClass = "DayZ Epoch Vehicles"; + side = 1; + faction = "USMC"; selectionBackLights = "brzdove svetlo"; selectionBrakeLights = "zadni svetlo"; crew = ""; From a1c7dfec439c89968a2318157abb8f7e997abf65 Mon Sep 17 00:00:00 2001 From: worldwidesorrow Date: Wed, 18 Aug 2021 09:59:12 -0500 Subject: [PATCH 19/40] Update createvehicle.txt --- Server Files/DZE_Server_Config/BattlEye/createvehicle.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Server Files/DZE_Server_Config/BattlEye/createvehicle.txt b/Server Files/DZE_Server_Config/BattlEye/createvehicle.txt index 4e3c8ae05..bea251c8f 100644 --- a/Server Files/DZE_Server_Config/BattlEye/createvehicle.txt +++ b/Server Files/DZE_Server_Config/BattlEye/createvehicle.txt @@ -2,7 +2,7 @@ 5 !(^DZ_|^z_|^pz_|^WeaponHolder|Box|dog|PZombie_VB|^Smoke|^Chem|^._40mm|_DZ$|^Trap) !=(SeaGull|SmallSecondary|HelicopterExplo(Small|Big)|Stash(Small|Medium)(|[1-4])) !=(CZ_VestPouch_EP1|R_M136_AT|R_MEEWS_HEAT|Wire_cat1) !TentStorage !=(JackDaniels|(Tin|Soda)Can|RoadFlare|WoodenArrowF|zZombie_Base|Parachute(West|C)|Grenade(_|HandTimed)(West|East)) !=(CMflareAmmo|Pipebomb) !=(WildBoar|Rabbit|Sheep|Sheep(01_EP1|02_EP1)|Goat|Goat(01_EP1|02_EP1)|Hen|Cow0[1234]|Cow01_EP1|Cock) !=Blood_Trail_DZ !^(Wooden|Metal)Fence !^WoodenGate_ !=(ShantyHouse(|Stage[2-7])|SurvivorWorkshop(|Stage2|[ABC]Stage[345])|WorkBench) !=explosive_bolt !"Land_" !=Sign_(arrow_down_large|sphere10cm)_EP1 !="MAP_c_fern" !="Grave" !"VaultStorage" !="LaserTargetW" !Fort_ !Nest !CMflare !="GyroGrenade" !="CraterLong" !="pook_camel_HE" !="Fin" !="Pastor" !_DZE[12]$ !"TallSafe" 5 SeaGull //set to its own line so we know which kick we have here with out looking in the logs 1 ^DZ_ !=DZ_(British_ACU|Czech_Vest_Pouch|(TK_Assault_Pack|Patrol_Pack|Assault_Pack|ALICE_Pack|CivilBackpack|Backpack|LargeGunBag|GunBag)_EP1) !=DZ_((AmmoBox|ExplosiveBox)(RU|US)|MedBox|CardboardBox) -1 ^z_ !=z_((|new_)villager[1234]|(|new_)worker[1234]|teacher|hunter|suit[1-6]|soldier(|_pilot|_heavy)|policeman(|2)|doctor|priest) !=z_(citizen[1-4]|profiteer[1-4]|rocker[1-4]|lumberjack[1-4]|hunter[2345]|assistant|pilot|takistani[1-6]) !z_soldier_(usmc|fr|cdf|ru|gue|ins|tk|cz|un|ger|baf|pmc|acr) !=z_(dealer|gardener|mafiaboss|postman[1-4]|prisoner[1-3]|firefighter[1-5]|civilian([1-9]|1[0-5])) +1 ^z_ !=z_((|new_)villager[1234]|(|new_)worker[1234]|teacher|hunter|suit[1-6]|soldier(|_pilot|_heavy)|policeman(|2)|doctor|priest) !=z_(citizen[1-4]|profiteer[1-4]|rocker[1-4]|lumberjack[1-4]|hunter[2345]|assistant|pilot|takistani[1-6]) !z_soldier_(usmc|fr|cdf|ru|gue|ins|tk|cz|un|ger|baf|pmc|acr) !=z_(dealer|gardener|mafiaboss|postman[1-4]|prisoner[1-3]|firefighter[1-5]|civilian([1-9]|1[0-5])) !=z_bloodsucker 1 ^WeaponHolder !=WeaponHolder !WeaponHolder_part !=WeaponHolder_(Item(DomeTent|CamoNet|Crowbar|Fuelcan|Hatchet|Jerrycan|Tent)|Melee(BaseBallBat(|Nails)|BatBarbed|Machete)) !=WeaponHolder_Part(Engine|Fueltank|Generic|Glass|VRotor|Wheel) !=WeaponHolder_Item(WorkBench|MetalSheet|ConcreteBlock|RSJ|Pickaxe|Generator) 1 Box !=(DZ_((AmmoBox|ExplosiveBox)(RU|US)|MedBox|CardboardBox)|Item(Match|Tool)box|equip_pvc_box|DebugBoxPlayer_DZ|WeaponHolder_ItemLockbox) !=LockboxStorage(Locked|WinterLocked|2Locked|Winter2Locked) 1 ^Smoke !=SmokeShell(|Red|Green|Yellow) !=SmokeLauncherAmmo From 615a9a0be8950dd86d889dc551ee5d822c4865d7 Mon Sep 17 00:00:00 2001 From: A Man Date: Wed, 18 Aug 2021 17:07:32 +0200 Subject: [PATCH 20/40] Fix overwritten RedRyder --- SQF/dayz_code/Configs/CfgWeapons/CfgWeapons.hpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/SQF/dayz_code/Configs/CfgWeapons/CfgWeapons.hpp b/SQF/dayz_code/Configs/CfgWeapons/CfgWeapons.hpp index 5e9614bb3..6c69823c1 100644 --- a/SQF/dayz_code/Configs/CfgWeapons/CfgWeapons.hpp +++ b/SQF/dayz_code/Configs/CfgWeapons/CfgWeapons.hpp @@ -214,6 +214,8 @@ class CfgWeapons #include "Rifles\WA2000.hpp" #include "Rifles\BarrettMRAD.hpp" + #include "Rifles\RedRyder.hpp" + /* PISTOLS */ class M9; From 339c14ae52749dc7e5293dc8f970da07f12d6f68 Mon Sep 17 00:00:00 2001 From: A Man Date: Wed, 18 Aug 2021 17:14:57 +0200 Subject: [PATCH 21/40] Revert moving down dayz_actionInProgress = true; Do not move dayz_actionInProgress = true; lower. Fast clicker can bypass this check very easy then. Also add isNull check. --- SQF/dayz_code/actions/gather_meat.sqf | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/SQF/dayz_code/actions/gather_meat.sqf b/SQF/dayz_code/actions/gather_meat.sqf index 9e90794df..c77bf8ee7 100644 --- a/SQF/dayz_code/actions/gather_meat.sqf +++ b/SQF/dayz_code/actions/gather_meat.sqf @@ -1,11 +1,10 @@ if (dayz_actionInProgress) exitWith {localize "str_player_actionslimit" call dayz_rollingMessages;}; +dayz_actionInProgress = true; local _body = _this; - -if (_body getVariable["meatHarvested",false]) exitWith {}; // Exit the script if the meat has already been harvested. -if ({isPlayer _x} count ((getPosATL _body) nearEntities ["CAManBase", 12]) > 1) exitWith {localize "str_pickup_limit_5" call dayz_rollingMessages;}; // Exit the script if another player is near to prevent duping. - -dayz_actionInProgress = true; +if (isNull _body) exitWith {dayz_actionInProgress = false; systemChat localize "str_cursorTargetNotFound";}; +if (_body getVariable["meatHarvested",false]) exitWith {dayz_actionInProgress = false;}; // Exit the script if the meat has already been harvested. +if ({isPlayer _x} count ((getPosATL _body) nearEntities ["CAManBase", 12]) > 1) exitWith {dayz_actionInProgress = false;localize "str_pickup_limit_5" call dayz_rollingMessages;}; // Exit the script if another player is near to prevent duping. local _type = typeOf _body; local _isZombie = _type isKindOf "zZombie_base"; @@ -74,4 +73,4 @@ closeDialog 0; uiSleep 0.02; _string call dayz_rollingMessages; -dayz_actionInProgress = false; +dayz_actionInProgress = false; \ No newline at end of file From fa75563ae1eb5f5ff4894df654664a909dcb1cf4 Mon Sep 17 00:00:00 2001 From: A Man Date: Wed, 18 Aug 2021 17:29:12 +0200 Subject: [PATCH 22/40] Make ZSC vars getting only checked if Z_SingleCurrency = true --- SQF/dayz_server/system/server_monitor.sqf | 2 +- SQF/dayz_server/traders/caribou.sqf | 2 +- SQF/dayz_server/traders/chernarus11.sqf | 2 +- SQF/dayz_server/traders/chernarus17.sqf | 2 +- SQF/dayz_server/traders/cmr_ovaron.sqf | 2 +- SQF/dayz_server/traders/fdf_isle1_a.sqf | 2 +- SQF/dayz_server/traders/isladuala.sqf | 2 +- SQF/dayz_server/traders/lingor.sqf | 2 +- SQF/dayz_server/traders/namalsk.sqf | 2 +- SQF/dayz_server/traders/napf.sqf | 2 +- SQF/dayz_server/traders/panthera2.sqf | 2 +- SQF/dayz_server/traders/sauerland.sqf | 2 +- SQF/dayz_server/traders/smd_sahrani_a2.sqf | 2 +- SQF/dayz_server/traders/takistan.sqf | 2 +- SQF/dayz_server/traders/tavi.sqf | 2 +- 15 files changed, 15 insertions(+), 15 deletions(-) diff --git a/SQF/dayz_server/system/server_monitor.sqf b/SQF/dayz_server/system/server_monitor.sqf index 10bc401c1..bf06e38ad 100644 --- a/SQF/dayz_server/system/server_monitor.sqf +++ b/SQF/dayz_server/system/server_monitor.sqf @@ -341,7 +341,7 @@ if ((playersNumber west + playersNumber civilian) == 0) exitWith { // prevent immediate hive write when vehicle parts are set up _object setVariable ["lastUpdate",diag_ticktime]; _object setVariable ["ObjectID", _idKey, true]; - if (Z_SingleCurrency && ZSC_VehicleMoneyStorage) then { + if (Z_SingleCurrency && {ZSC_VehicleMoneyStorage}) then { _object setVariable ["cashMoney", _storageMoney, true]; }; diff --git a/SQF/dayz_server/traders/caribou.sqf b/SQF/dayz_server/traders/caribou.sqf index a3ec74c17..b5c2e1281 100644 --- a/SQF/dayz_server/traders/caribou.sqf +++ b/SQF/dayz_server/traders/caribou.sqf @@ -45,7 +45,7 @@ ] call server_spawnTraders; // Bankers -if (Z_singleCurrency && Z_globalBanking && Z_globalBankingTraders) then { +if (Z_singleCurrency && {Z_globalBanking && Z_globalBankingTraders}) then { [ //Raven Rock ["Functionary1_EP1",[1386.9,6941.33,0],93], diff --git a/SQF/dayz_server/traders/chernarus11.sqf b/SQF/dayz_server/traders/chernarus11.sqf index dec75ad04..cf5d8991f 100644 --- a/SQF/dayz_server/traders/chernarus11.sqf +++ b/SQF/dayz_server/traders/chernarus11.sqf @@ -60,7 +60,7 @@ ] call server_spawnTraders; // Bankers -if (Z_singleCurrency && Z_globalBanking && Z_globalBankingTraders) then { +if (Z_singleCurrency && {Z_globalBanking && Z_globalBankingTraders}) then { [ //Stary ["Functionary1_EP1",[6324.71,7787,0],64], diff --git a/SQF/dayz_server/traders/chernarus17.sqf b/SQF/dayz_server/traders/chernarus17.sqf index 207ade6b3..20c522a87 100644 --- a/SQF/dayz_server/traders/chernarus17.sqf +++ b/SQF/dayz_server/traders/chernarus17.sqf @@ -60,7 +60,7 @@ ] call server_spawnTraders; // Bankers -if (Z_singleCurrency && Z_globalBanking && Z_globalBankingTraders) then { +if (Z_singleCurrency && {Z_globalBanking && Z_globalBankingTraders}) then { [ //Stary ["Functionary1_EP1",[6324.71,7787,0],64], diff --git a/SQF/dayz_server/traders/cmr_ovaron.sqf b/SQF/dayz_server/traders/cmr_ovaron.sqf index 8bfb90aee..7e1d397fd 100644 --- a/SQF/dayz_server/traders/cmr_ovaron.sqf +++ b/SQF/dayz_server/traders/cmr_ovaron.sqf @@ -48,7 +48,7 @@ ] call server_spawnTraders; // Bankers -if (Z_singleCurrency && Z_globalBanking && Z_globalBankingTraders) then { +if (Z_singleCurrency && {Z_globalBanking && Z_globalBankingTraders}) then { [ //Lissabon ["Functionary1_EP1",[4349.68,6725.49,0],179], diff --git a/SQF/dayz_server/traders/fdf_isle1_a.sqf b/SQF/dayz_server/traders/fdf_isle1_a.sqf index a97bb37f2..09d493495 100644 --- a/SQF/dayz_server/traders/fdf_isle1_a.sqf +++ b/SQF/dayz_server/traders/fdf_isle1_a.sqf @@ -44,7 +44,7 @@ ] call server_spawnTraders; // Bankers -if (Z_singleCurrency && Z_globalBanking && Z_globalBankingTraders) then { +if (Z_singleCurrency && {Z_globalBanking && Z_globalBankingTraders}) then { [ //Jesco ["Functionary1_EP1",[9662.23,10879.8,0],0], diff --git a/SQF/dayz_server/traders/isladuala.sqf b/SQF/dayz_server/traders/isladuala.sqf index 0a30b92f6..e5ed5fdd5 100644 --- a/SQF/dayz_server/traders/isladuala.sqf +++ b/SQF/dayz_server/traders/isladuala.sqf @@ -60,7 +60,7 @@ ] call server_spawnTraders; // Bankers -if (Z_singleCurrency && Z_globalBanking && Z_globalBankingTraders) then { +if (Z_singleCurrency && {Z_globalBanking && Z_globalBankingTraders}) then { [ //Camara ["Functionary1_EP1",[2001.31,1196.58,0],342], diff --git a/SQF/dayz_server/traders/lingor.sqf b/SQF/dayz_server/traders/lingor.sqf index f406bdf5f..7d700eb35 100644 --- a/SQF/dayz_server/traders/lingor.sqf +++ b/SQF/dayz_server/traders/lingor.sqf @@ -60,7 +60,7 @@ ] call server_spawnTraders; // Bankers -if (Z_singleCurrency && Z_globalBanking && Z_globalBankingTraders) then { +if (Z_singleCurrency && {Z_globalBanking && Z_globalBankingTraders}) then { [ ["Functionary1_EP1",[3020.2061,5945.2783,0.23],0], ["Functionary1_EP1",[4140.2051,1505.2682,2.3],55], diff --git a/SQF/dayz_server/traders/namalsk.sqf b/SQF/dayz_server/traders/namalsk.sqf index e4c4da940..6caa36097 100644 --- a/SQF/dayz_server/traders/namalsk.sqf +++ b/SQF/dayz_server/traders/namalsk.sqf @@ -28,7 +28,7 @@ ] call server_spawnTraders; // Bankers -if (Z_singleCurrency && Z_globalBanking && Z_globalBankingTraders) then { +if (Z_singleCurrency && {Z_globalBanking && Z_globalBankingTraders}) then { [ //Sebjan ["Functionary1_EP1",[6215.8,9177.55,0],133], diff --git a/SQF/dayz_server/traders/napf.sqf b/SQF/dayz_server/traders/napf.sqf index ced24a451..a558b6eeb 100644 --- a/SQF/dayz_server/traders/napf.sqf +++ b/SQF/dayz_server/traders/napf.sqf @@ -60,7 +60,7 @@ ] call server_spawnTraders; // Bankers -if (Z_singleCurrency && Z_globalBanking && Z_globalBankingTraders) then { +if (Z_singleCurrency && {Z_globalBanking && Z_globalBankingTraders}) then { [ ["Functionary1_EP1",[12399.83,5054.3413,0.2],52], ["Functionary1_EP1",[15529.827,13236.555,2.38],164], diff --git a/SQF/dayz_server/traders/panthera2.sqf b/SQF/dayz_server/traders/panthera2.sqf index 40c4b4a50..a1b5788ab 100644 --- a/SQF/dayz_server/traders/panthera2.sqf +++ b/SQF/dayz_server/traders/panthera2.sqf @@ -60,7 +60,7 @@ ] call server_spawnTraders; // Bankers -if (Z_singleCurrency && Z_globalBanking && Z_globalBankingTraders) then { +if (Z_singleCurrency && {Z_globalBanking && Z_globalBankingTraders}) then { [ ["Functionary1_EP1",[4770.4067,7482.2651,-1.7],0], ["Functionary1_EP1",[4431.1997,1616.5604,1.9],-85], diff --git a/SQF/dayz_server/traders/sauerland.sqf b/SQF/dayz_server/traders/sauerland.sqf index bb73ad3e5..81d9a1c47 100644 --- a/SQF/dayz_server/traders/sauerland.sqf +++ b/SQF/dayz_server/traders/sauerland.sqf @@ -58,7 +58,7 @@ ] call server_spawnTraders; // Bankers -if (Z_singleCurrency && Z_globalBanking && Z_globalBankingTraders) then { +if (Z_singleCurrency && {Z_globalBanking && Z_globalBankingTraders}) then { [ //Seedorf ["Functionary1_EP1",[15488.6,17014.2,0],172], diff --git a/SQF/dayz_server/traders/smd_sahrani_a2.sqf b/SQF/dayz_server/traders/smd_sahrani_a2.sqf index 7a12542d1..76374556e 100644 --- a/SQF/dayz_server/traders/smd_sahrani_a2.sqf +++ b/SQF/dayz_server/traders/smd_sahrani_a2.sqf @@ -60,7 +60,7 @@ ] call server_spawnTraders; // Bankers -if (Z_singleCurrency && Z_globalBanking && Z_globalBankingTraders) then { +if (Z_singleCurrency && {Z_globalBanking && Z_globalBankingTraders}) then { [ //Corazol ["Functionary1_EP1",[12552.1,8355.03,0],29], diff --git a/SQF/dayz_server/traders/takistan.sqf b/SQF/dayz_server/traders/takistan.sqf index 572559586..f3fb3b54c 100644 --- a/SQF/dayz_server/traders/takistan.sqf +++ b/SQF/dayz_server/traders/takistan.sqf @@ -56,7 +56,7 @@ ] call server_spawnTraders; // Bankers -if (Z_singleCurrency && Z_globalBanking && Z_globalBankingTraders) then { +if (Z_singleCurrency && {Z_globalBanking && Z_globalBankingTraders}) then { [ //Nur ["Functionary1_EP1",[1964.39,12575,0],200], diff --git a/SQF/dayz_server/traders/tavi.sqf b/SQF/dayz_server/traders/tavi.sqf index e3552b297..8ce73806d 100644 --- a/SQF/dayz_server/traders/tavi.sqf +++ b/SQF/dayz_server/traders/tavi.sqf @@ -80,7 +80,7 @@ ] call server_spawnTraders; // Bankers -if (Z_singleCurrency && Z_globalBanking && Z_globalBankingTraders) then { +if (Z_singleCurrency && {Z_globalBanking && Z_globalBankingTraders}) then { [ ["Functionary1_EP1",[5461.0132,8762.3438,0.056497198],52], ["Functionary1_EP1",[11026.932,842.23804,0.18712912],138.57352], From be7898aac1787660abb2a45ff83cd1d1487d8995 Mon Sep 17 00:00:00 2001 From: A Man Date: Wed, 18 Aug 2021 18:38:03 +0200 Subject: [PATCH 23/40] Add toggleable Bury and Butcher Bodies by salival This also re-arranges the configVariables.sqf and loads the variables for both (server and client) first. This allows to check for certain variables like Z_SingleCurrency and stops the loading of all other Z_SingleCurrency variables even when Z_SingleCurrency was not on. --- SQF/dayz_code/actions/buryActions.sqf | 85 ++++++++ SQF/dayz_code/compile/fn_selfActions.sqf | 47 ++++- SQF/dayz_code/compile/player_zombieCheck.sqf | 4 +- SQF/dayz_code/configVariables.sqf | 190 ++++++++++-------- SQF/dayz_code/init/variables.sqf | 4 +- .../compile/server_publishVehicle3.sqf | 4 +- .../system/scheduler/sched_corpses.sqf | 2 +- .../system/scheduler/sched_init.sqf | 24 +-- .../system/scheduler/sched_lootCrates.sqf | 38 ++++ .../BattlEye/createvehicle.txt | 6 +- .../DZE_Server_Config/BattlEye/scripts.txt | 12 +- 11 files changed, 294 insertions(+), 122 deletions(-) create mode 100644 SQF/dayz_code/actions/buryActions.sqf create mode 100644 SQF/dayz_server/system/scheduler/sched_lootCrates.sqf diff --git a/SQF/dayz_code/actions/buryActions.sqf b/SQF/dayz_code/actions/buryActions.sqf new file mode 100644 index 000000000..26c465216 --- /dev/null +++ b/SQF/dayz_code/actions/buryActions.sqf @@ -0,0 +1,85 @@ +/* + Bury/Butcher body script by salival (https://github.com/oiad) +*/ +if (dayz_actionInProgress) exitWith {localize "str_player_actionslimit" call dayz_rollingMessages;}; +dayz_actionInProgress = true; + +private ["_action","_backPackMag","_backPackWpn","_crate","_corpse","_cross","_gain","_isBury","_grave","_name","_playerNear","_backPack","_position","_sound","_notOnRoad"]; + +_corpse = (_this select 3) select 0; +if (isNull _corpse) exitWith {dayz_actionInProgress = false; systemChat localize "str_cursorTargetNotFound";}; + +_playerNear = {isPlayer _x} count (([_corpse] call FNC_GetPos) nearEntities ["CAManBase", 10]) > 1; +if (_playerNear) exitWith {dayz_actionInProgress = false; localize "str_pickup_limit_5" call dayz_rollingMessages;}; + +_action = (_this select 3) select 1; +_notOnRoad = false; // Restrict burying/butchering on roads? + +player removeAction s_player_bury_human; +s_player_bury_human = -1; +player removeAction s_player_butcher_human; +s_player_butcher_human = -1; + +_position = getPosATL _corpse; +_isBury = _action == "bury"; + +if (_notOnRoad && {isOnRoad _position}) exitWith {dayz_actionInProgress = false; format[localize "STR_CL_BA_ROAD",if (_isBury) then {localize "STR_CL_BA_BURY1"} else {"STR_CL_BA_BUTCHER1"}] call dayz_rollingMessages;}; + +_finished = ["Medic",1] call fn_loopAction; +if (!_finished) exitWith {dayz_actionInProgress = false;localize "str_epoch_player_26" call dayz_rollingMessages;}; + +_corpse setVariable["isBuried",true,true]; + +_backPack = typeOf (unitBackPack _corpse); + +_crate = createVehicle ["DZ_AmmoBoxSmallUS",_position,[],0,"CAN_COLLIDE"]; +_crate setPosATL [(_position select 0)+1,(_position select 1)+1.5,_position select 2]; +_crate setVariable ["permaLoot",true,true]; +_crate setVariable ["bury",true,true]; + +_grave = createVehicle ["Grave",_position,[],0,"CAN_COLLIDE"]; +_grave setPosATL [(_position select 0)+1,_position select 1,_position select 2]; +_grave setVariable ["bury",true,true]; + +if (_isBury) then { + _name = _corpse getVariable["bodyName","unknown"]; + _cross = createVehicle ["GraveCross1",_position,[],0,"CAN_COLLIDE"]; + _cross setPosATL [(_position select 0)+1,(_position select 1)-1.2,_position select 2]; + _cross setVariable ["bury",true,true]; +}; + +{_crate addWeaponCargoGlobal [_x,1]} forEach weapons _corpse; +{_crate addMagazineCargoGlobal [_x,1]} forEach magazines _corpse; + +if (_backPack != "") then { + _backPackWpn = getWeaponCargo unitBackpack _corpse; + _backPackMag = getMagazineCargo unitBackpack _corpse; + + if (count _backPackWpn > 0) then {{_crate addWeaponCargoGlobal [_x,(_backPackWpn select 1) select _forEachIndex]} forEach (_backPackWpn select 0);}; + if (count _backPackMag > 0) then {{_crate addMagazineCargoGlobal [_x,(_backPackMag select 1) select _forEachIndex]} forEach (_backPackMag select 0);}; + + _crate addBackpackCargoGlobal [_backPack,1]; +}; + +_sound = _corpse getVariable ["sched_co_fliesSource",nil]; +if (!isNil "_sound") then { + detach _sound; + deleteVehicle _sound; +}; + +deleteVehicle _corpse; + +if (_isBury) then { + if (_name != "unknown") then { + format[localize "STR_CL_BA_RIP",_name] call dayz_rollingMessages; + } else { + localize "STR_CL_BA_RIP_UNKNOWN" call dayz_rollingMessages; + }; +} else { + ["knives",0.2] call fn_dynamicTool; +}; + +_gain = if (_isBury) then {DZE_Bury_Body_Value} else {DZE_Butcher_Body_Value}; +_gain call player_humanityChange; + +dayz_actionInProgress = false; diff --git a/SQF/dayz_code/compile/fn_selfActions.sqf b/SQF/dayz_code/compile/fn_selfActions.sqf index d1cf483e1..457877bc4 100644 --- a/SQF/dayz_code/compile/fn_selfActions.sqf +++ b/SQF/dayz_code/compile/fn_selfActions.sqf @@ -808,16 +808,41 @@ if (!isNull _cursorTarget && {!_inVehicle && !_isPZombie && _canDo && player dis } else { player removeAction s_player_fillgen; s_player_fillgen = -1; - }; - - if (DZE_Take_Clothes) then { - if (_isMan && !_isAlive && !_isZombie && {!(_cursorTarget isKindOf "Animal")} && {!(_cursorTarget getVariable["clothesTaken",false])} && {_typeOfCursorTarget in AllPlayers} && {!(_typeOfCursorTarget in DZE_Disable_Take_Clothes)}) then { - if (s_player_clothes < 0) then { - s_player_clothes = player addAction [format["%1",localize "STR_CL_TC_TAKE_CLOTHES"],"\z\addons\dayz_code\actions\takeClothes.sqf",_cursorTarget,0, false,true]; + }; + + if (!_isAlive && _isMan && !_isZombie && {!(_cursorTarget isKindOf "Animal")}) then { + if (DZE_Take_Clothes) then { + if (!(_cursorTarget getVariable["clothesTaken",false]) && {_typeOfCursorTarget in AllPlayers} && {!(_typeOfCursorTarget in DZE_Disable_Take_Clothes)}) then { + if (s_player_clothes < 0) then { + s_player_clothes = player addAction [format["%1",localize "STR_CL_TC_TAKE_CLOTHES"],"\z\addons\dayz_code\actions\takeClothes.sqf",_cursorTarget,0, false,true]; + }; + } else { + player removeAction s_player_clothes; + s_player_clothes = -1; + }; + }; + + if (DZE_Bury_Body) then { + local _hasShovel = ("ItemEtool" in _itemsPlayer || "ItemShovel" in _itemsPlayer); + if (_hasShovel && !(_cursorTarget getVariable ["bodyButchered",false])) then { + if (s_player_bury_human < 0) then { + s_player_bury_human = player addAction [format["%1",localize "STR_CL_BA_BURY"],"\z\addons\dayz_code\actions\buryActions.sqf",[_cursorTarget,"bury"],0,false,true]; + }; + } else { + player removeAction s_player_bury_human; + s_player_bury_human = -1; + }; + }; + + if (DZE_Butcher_Body) then { + if (({_x in ["ItemKnife","ItemKnife5","ItemKnife4","ItemKnife3","ItemKnife2","ItemKnife1"]} count _itemsPlayer > 0) && !(_cursorTarget getVariable ["bodyButchered",false])) then { + if (s_player_butcher_human < 0) then { + s_player_butcher_human = player addAction [format["%1",localize "STR_CL_BA_BUTCHER"],"\z\addons\dayz_code\actions\buryActions.sqf",[_cursorTarget,"butcher"],0,false,true]; + }; + } else { + player removeAction s_player_butcher_human; + s_player_butcher_human = -1; }; - } else { - player removeAction s_player_clothes; - s_player_clothes = -1; }; }; @@ -1095,6 +1120,10 @@ if (!isNull _cursorTarget && {!_inVehicle && !_isPZombie && _canDo && player dis s_player_checkWallet = -1; player removeAction s_player_clothes; s_player_clothes = -1; + player removeAction s_player_bury_human; + s_player_bury_human = -1; + player removeAction s_player_butcher_human; + s_player_butcher_human = -1; }; //Dog actions on player self diff --git a/SQF/dayz_code/compile/player_zombieCheck.sqf b/SQF/dayz_code/compile/player_zombieCheck.sqf index c33557cee..40dc832fa 100644 --- a/SQF/dayz_code/compile/player_zombieCheck.sqf +++ b/SQF/dayz_code/compile/player_zombieCheck.sqf @@ -11,7 +11,7 @@ local _cantSee = false; { local _isZombie = _x isKindOf "zZombie_base"; - local _isMutant = typeOf _x == "z_bloodsucker"; + local _isMutant = (DZE_Bloodsuckers && {typeOf _x == "z_bloodsucker"}); local _forcedSpeed = if ((_speedMin != _speedMax) && {(_speedMin > 0) && (_speedMax > 0)}) then {((random (DZE_ZombieSpeed select 1)) max (DZE_ZombieSpeed select 0));} else {getNumber (configFile >> "CfgVehicles" >> (typeOf _x) >> "forcedSpeed");}; local _dist = _x distance _refObj; local _chance = 1; //0 / dayz_monitorPeriod; // Z verbosity @@ -131,7 +131,7 @@ local _cantSee = false; }; }; - if (_isMutant && DZE_BloodsuckerDeleteNearTrader && isInTraderCity) then {deleteVehicle _x}; // Delete bloodsucker if the player is in a trader city + if (_isMutant && {DZE_BloodsuckerDeleteNearTrader && isInTraderCity}) then {deleteVehicle _x}; // Delete bloodsucker if the player is in a trader city } forEach ((getPosATL _refObj) nearEntities ["Zed_Base",100]); if (_attacked) then { diff --git a/SQF/dayz_code/configVariables.sqf b/SQF/dayz_code/configVariables.sqf index 7da054bd6..c13658460 100644 --- a/SQF/dayz_code/configVariables.sqf +++ b/SQF/dayz_code/configVariables.sqf @@ -3,6 +3,80 @@ // To change a variable copy paste it in the mission init.sqf below the #include line. // Standard DayZ variables are found in dayz_code\init\variables.sqf. +// Both +dayz_infectiouswaterholes = true; //Enable infected waterholes +dayz_townGenerator = false; // Spawn vanilla map junk instead of Epoch DynamicDebris. Currently only compatible with Chernarus. Also enables comfrey plant spawner which negatively impacts performance. +dayz_townGeneratorBlackList = []; // If townGenerator is enabled it will not spawn junk within 150m of these positions. Example for Chernarus traders: [[4053,11668,0],[11463,11349,0],[6344,7806,0],[1606,7803,0],[12944,12766,0],[5075,9733,0],[12060,12638,0]] +DZE_HeliLift = true; // Enable Epoch heli lift system +DZE_GodModeBaseExclude = []; //Array of object class names excluded from the god mode bases feature +DZE_NoVehicleExplosions = false; //Disable vehicle explosions to prevent damage to objects by ramming. Doesn't work with amphibious pook which should not be used due to FPS issues. +DZE_SafeZoneZombieLoot = false; // Enable spawning of Zombies and loot in positions listed in DZE_SafeZonePosArray? +dayz_ForcefullmoonNights = false; // Forces night time to be full moon. +infectedWaterHoles = []; //Needed for non-cherno maps. +DZE_GodModeBase = false; // Disables damage handler from base objects so they can't be destroyed. +dayz_spawnselection = 0; //(Chernarus only) Turn on spawn selection 0 = random only spawns, 1 = spawn choice based on limits +dayz_classicBloodBagSystem = false; // disable blood types system and use the single classic ItemBloodbag +dayz_enableFlies = true; // Enable flies on dead bodies (negatively impacts FPS). + +// Death Messages +DZE_DeathMsgChat = "none"; //"none","global","side","system" Display death messages in selected chat channel. +DZE_DeathMsgDynamicText = false; // Display death messages as dynamicText in the top left with weapon icons. +DZE_DeathMsgRolling = false; // Display death messages as rolling messages in bottom center of screen. + +// ZSC +Z_SingleCurrency = false; // Enable single currency system. + +if (Z_SingleCurrency) then { + Z_globalBanking = false; // Enable global banking system. + Z_persistentMoney = false; // Enabling this stores currency to player_data instead of character_data. Currency transfers to a new character after death. For PVE servers only. Formerly called "GlobalMoney". + CurrencyName = "Coins"; // If using single currency this is the currency display name. + DZE_MoneyStorageClasses = ["VaultStorage","VaultStorage2","VaultStorageLocked","VaultStorage2Locked","LockboxStorageLocked","LockboxStorage2Locked","LockboxStorage","LockboxStorage2","LockboxStorageWinterLocked","LockboxStorageWinter2Locked","LockboxStorageWinter","LockboxStorageWinter2","TallSafe","TallSafeLocked"]; // If using single currency this is an array of object classes players can store coins in. E.g.: ["GunRack_DZ","WoodCrate_DZ"] + ZSC_VehicleMoneyStorage = true; // Allow players to store money in vehicles. If vehicles are destroyed the money is also destroyed. +}; + +Z_VehicleDistance = 40; // Max distance a vehicle can be sold or accessed from at a trader. + +// Plot Management and Plot for Life +DZE_permanentPlot = true; // Plot ownership saves after death. Enables Plot for Life by @RimBlock and Plot Management by @DevZupa. +DZE_isRemovable = ["Plastic_Pole_EP1_DZ"]; //Items that can be removed with a crowbar with no ownership or access required. To forbid base take overs remove plot pole from this list and add it to DZE_restrictRemoval. It is not necessary to add wrecks or items that inherit from 'BuiltItems' to this list. + +// Door Management +DZE_doorManagement = true; // Enable Door Management by @DevZupa. + +// Group System +dayz_groupSystem = false; // Enable group system + +// Bury and Butcher Bodies +DZE_Bury_Body = false; // Enable Bury Bodies +DZE_Butcher_Body = false; // Enable Butcher Bodies + +// Weather +DZE_Weather = 2; // Options: 1 - Summer Static, 2 - Summer Dynamic, 3 - Winter Static, 4 - Winter Dynamic. If static is selected, the weather settings will be set at server startup and not change. Weather settings can be adjusted with array DZE_WeatherVariables. + +// The settings in the array below may be adjusted as desired. The default settings are designed to maximize client and server performance. +// Having several features enabled at once might have adverse effects on client performance. For instance, you could have snowfall, ground fog, and breath fog threads all running at once. +DZE_WeatherVariables = [ + 15, // Minimum time in minutes for the weather to change. (default value: 15). + 30, // Maximum time in minutes for the weather to change. (default value: 30). + 0, // Minimum fog intensity (0 = no fog, 1 = maximum fog). (default value: 0). + .2, // Maximum fog intensity (0 = no fog, 1 = maximum fog). (default value: 0.8). + 0, // Minimum overcast intensity (0 = clear sky, 1 = completely overcast). (default value: 0). Note: Rain and snow will not occur when overcast is less than 0.70. + .6, // Maximum overcast intensity (0 = clear sky, 1 = completely overcast). (default value: 1). + 0, // Minimum rain intensity (0 = no rain, 1 = maximum rain). Overcast needs to be at least 70% for it to rain. + .6, // Maximum rain intensity (0 = no rain, 1 = maximum rain). Overcast needs to be at least 70% for it to rain. + 0, // Minimum wind strength (default value: 0). + 3, // Maximum wind strength (default value: 5). + .25, // Probability for wind to change when weather changes. (default value: .25). + 1, // Minimum snow intensity (0 = no snow, 1 = maximum snow). Overcast needs to be at least 75% for it to snow. + 1, // Maximum snow intensity (0 = no snow, 1 = maximum snow). Overcast needs to be at least 75% for it to snow. + .2,// Probability for a blizzard to occur when it is snowing. (0 = no blizzards, 1 = blizzard all the time). (default value: .2). + 10, // Blizzard interval in minutes. Set to zero to have the blizzard run for the whole interval, otherwise you can set a custom time interval for the blizzard. + 0, // Ground Fog Effects. Options: 0 - no ground fog, 1 - only at evening, night, and early morning, 2 - anytime, 3 - near cities and towns, at late evening, night, and early morning, 4 - near cities and towns, anytime. + 400, // Distance in meters from player to scan for buildings to spawn ground fog. By default, only the 15 nearest buildings will spawn ground fog. + false, // Allow ground fog when it's snowing or raining? + 2 // Winter Breath Fog Effects. Options: 0 - no breath fog, 1 - anytime, 2 - only when snowing or blizzard. Note: breath fog is only available with winter weather enabled. +]; + //Server if (isServer) then { DynamicVehicleDamageLow = 0; // Min damage random vehicles can spawn with @@ -148,15 +222,17 @@ if (!isDedicated) then { DZE_Bandit = -5000; // Defines the value at how much humanity the player is classed as a bandit. // ZSC - Z_showCurrencyUI = true; // Show the currency icon on the screen when Z_SingleCurrency is enabled. - Z_showBankUI = true; // Show the banking icon on the screen when Z_globalBanking is enabled. - ZSC_bankTraders = ["Functionary1_EP1"]; // Array of trader classnames that are available for banking (i.e Functionary1_EP1), do not use _DZ classes - they are used as player skins - ZSC_limitOnBank = true; // Have a limit on the bank? (i.e true or false) limits the global banking to the number below. - ZSC_bankObjects = [""]; // Array of objects that are available for banking i.e: ["Suitcase","Info_Board_EP1","Laptop_EP1","SatPhone"] - ZSC_maxBankMoney = 500000; // Default limit for bank objects. - ZSC_defaultStorageMultiplier = 200; // Default magazine count for bank objects that don't have storage slots i.e: ["Suitcase","Info_Board_EP1","Laptop_EP1","SatPhone"] - ZSC_MaxMoneyInStorageMultiplier = 5000; // Multiplier for how much money a bank object can hold, example: 200 magazine slots in the object (or the default value above ^^) multiplied by the 5000 multiplier is 1 million coin storage. (200 * 5000 = 1,000,000 coins) - ZSC_ZombieCoins = [false,[0,1000]]; // First value activate coins on zombies, second value from 0 - 1000 coins on each zombie. Coin for zombies are handled directly in check wallet. + if (Z_SingleCurrency) then { + Z_showCurrencyUI = true; // Show the currency icon on the screen when Z_SingleCurrency is enabled. + Z_showBankUI = true; // Show the banking icon on the screen when Z_globalBanking is enabled. + ZSC_bankTraders = ["Functionary1_EP1"]; // Array of trader classnames that are available for banking (i.e Functionary1_EP1), do not use _DZ classes - they are used as player skins + ZSC_limitOnBank = true; // Have a limit on the bank? (i.e true or false) limits the global banking to the number below. + ZSC_bankObjects = [""]; // Array of objects that are available for banking i.e: ["Suitcase","Info_Board_EP1","Laptop_EP1","SatPhone"] + ZSC_maxBankMoney = 500000; // Default limit for bank objects. + ZSC_defaultStorageMultiplier = 200; // Default magazine count for bank objects that don't have storage slots i.e: ["Suitcase","Info_Board_EP1","Laptop_EP1","SatPhone"] + ZSC_MaxMoneyInStorageMultiplier = 5000; // Multiplier for how much money a bank object can hold, example: 200 magazine slots in the object (or the default value above ^^) multiplied by the 5000 multiplier is 1 million coin storage. (200 * 5000 = 1,000,000 coins) + ZSC_ZombieCoins = [false,[0,1000]]; // First value activate coins on zombies, second value from 0 - 1000 coins on each zombie. Coin for zombies are handled directly in check wallet. + }; // Loot system dayz_toolBreaking = false; //Sledgehammer, crowbar and pickaxe have a chance to break when used. @@ -164,6 +240,13 @@ if (!isDedicated) then { dayz_matchboxCount = false; // Enable match stick count. After five uses matches run out and must be replaced. dayz_waterBottleBreaking = false; // Water bottles have a chance to break when boiling and require duct tape to fix + if (DZE_Bury_Body) then { + DZE_Bury_Body_Value = 30;// Amount of humanity to gain for burying a body. + }; + if (DZE_Butcher_Body) then { + DZE_Butcher_Body_Value = -30;// Amount of humanity to lose for butchering a body. + }; + // Take Clothes DZE_Take_Clothes = false; // Allows to take the clothing from dead players and AIs DZE_Disable_Take_Clothes = []; // Enter the skins you do not want to be allowed to be recovered from dead bodies. E.g.: DZE_Disable_Take_Clothes = ["Doctor_DZ","Assistant_DZ","Worker1_DZ"]; @@ -206,6 +289,19 @@ if (!isDedicated) then { ["ItemGPS",localize "STR_CL_LV_LOCATE_VEHICLES","[] spawn locateVehicle;","true"] ]; }; + + // Bloodsuckers + DZE_Bloodsuckers = false; // Enable bloodsucker spawning. + + if (DZE_Bloodsuckers) then { + DZE_BloodsuckerChance = .15; // Chance that a building will spawn a bloodsucker. Default .15 (15%) + DZE_BloodsuckerBuildings = ["Land_Hlidac_budka","Land_Mil_Guardhouse","Land_Mil_Barracks","Land_Mil_House","Land_Mil_Barracks_i","CrashSite_RU","CrashSite_US","CrashSite_EU","CrashSite_UN"]; // Bloodsuckers will spawn near these building classes. + DZE_BloodsuckersMaxGlobal = 15; // Maximum number of bloodsuckers allowed on the map at one time. + DZE_BloodsuckersMaxNear = 3; // Maximum number of bloodsuckers allowed in any 200 meter area. + DZE_BloodsuckersMaxLocal = 2; // Maximum number of bloodsuckers that can spawn per client. + DZE_BloodsuckerScreenEffect = true; // On screen slash marks when the bloodsuckers attack. + DZE_BloodsuckerDeleteNearTrader = true; // Deletes bloodsuckers when near trader cities. + }; // Garage Door Opener DZE_GarageDoor_Opener = false; // Enables the option to open Garage Doors from the inside of a vehicle. @@ -332,84 +428,8 @@ if (!isDedicated) then { ]; }; }; - - // Bloodsuckers - DZE_Bloodsuckers = false; // Enable bloodsucker spawning. - DZE_BloodsuckerChance = .15; // Chance that a building will spawn a bloodsucker. Default .15 (15%) - DZE_BloodsuckerBuildings = ["Land_Hlidac_budka","Land_Mil_Guardhouse","Land_Mil_Barracks","Land_Mil_House","Land_Mil_Barracks_i","CrashSite_RU","CrashSite_US","CrashSite_EU","CrashSite_UN"]; // Bloodsuckers will spawn near these building classes. - DZE_BloodsuckersMaxGlobal = 15; // Maximum number of bloodsuckers allowed on the map at one time. - DZE_BloodsuckersMaxNear = 3; // Maximum number of bloodsuckers allowed in any 200 meter area. - DZE_BloodsuckersMaxLocal = 2; // Maximum number of bloodsuckers that can spawn per client. - DZE_BloodsuckerScreenEffect = true; // On screen slash marks when the bloodsuckers attack. - DZE_BloodsuckerDeleteNearTrader = true; // Deletes bloodsuckers when near trader cities. }; -// Both -dayz_infectiouswaterholes = true; //Enable infected waterholes -dayz_townGenerator = false; // Spawn vanilla map junk instead of Epoch DynamicDebris. Currently only compatible with Chernarus. Also enables comfrey plant spawner which negatively impacts performance. -dayz_townGeneratorBlackList = []; // If townGenerator is enabled it will not spawn junk within 150m of these positions. Example for Chernarus traders: [[4053,11668,0],[11463,11349,0],[6344,7806,0],[1606,7803,0],[12944,12766,0],[5075,9733,0],[12060,12638,0]] -DZE_HeliLift = true; // Enable Epoch heli lift system -DZE_GodModeBaseExclude = []; //Array of object class names excluded from the god mode bases feature -DZE_NoVehicleExplosions = false; //Disable vehicle explosions to prevent damage to objects by ramming. Doesn't work with amphibious pook which should not be used due to FPS issues. -DZE_SafeZoneZombieLoot = false; // Enable spawning of Zombies and loot in positions listed in DZE_SafeZonePosArray? -dayz_ForcefullmoonNights = false; // Forces night time to be full moon. -infectedWaterHoles = []; //Needed for non-cherno maps. -DZE_GodModeBase = false; // Disables damage handler from base objects so they can't be destroyed. -dayz_spawnselection = 0; //(Chernarus only) Turn on spawn selection 0 = random only spawns, 1 = spawn choice based on limits -dayz_classicBloodBagSystem = false; // disable blood types system and use the single classic ItemBloodbag -dayz_enableFlies = true; // Enable flies on dead bodies (negatively impacts FPS). - -// Death Messages -DZE_DeathMsgChat = "none"; //"none","global","side","system" Display death messages in selected chat channel. -DZE_DeathMsgDynamicText = false; // Display death messages as dynamicText in the top left with weapon icons. -DZE_DeathMsgRolling = false; // Display death messages as rolling messages in bottom center of screen. - -// ZSC -Z_SingleCurrency = false; // Enable single currency system. -Z_globalBanking = false; // Enable global banking system. -Z_persistentMoney = false; // Enabling this stores currency to player_data instead of character_data. Currency transfers to a new character after death. For PVE servers only. Formerly called "GlobalMoney". -Z_VehicleDistance = 40; // Max distance a vehicle can be sold or accessed from at a trader. -CurrencyName = "Coins"; // If using single currency this is the currency display name. -DZE_MoneyStorageClasses = ["VaultStorage","VaultStorage2","VaultStorageLocked","VaultStorage2Locked","LockboxStorageLocked","LockboxStorage2Locked","LockboxStorage","LockboxStorage2","LockboxStorageWinterLocked","LockboxStorageWinter2Locked","LockboxStorageWinter","LockboxStorageWinter2","TallSafe","TallSafeLocked"]; // If using single currency this is an array of object classes players can store coins in. E.g.: ["GunRack_DZ","WoodCrate_DZ"] -ZSC_VehicleMoneyStorage = true; // Allow players to store money in vehicles. If vehicles are destroyed the money is also destroyed. - -// Plot Management and Plot for Life -DZE_permanentPlot = true; // Plot ownership saves after death. Enables Plot for Life by @RimBlock and Plot Management by @DevZupa. -DZE_isRemovable = ["Plastic_Pole_EP1_DZ"]; //Items that can be removed with a crowbar with no ownership or access required. To forbid base take overs remove plot pole from this list and add it to DZE_restrictRemoval. It is not necessary to add wrecks or items that inherit from 'BuiltItems' to this list. - -// Door Management -DZE_doorManagement = true; // Enable Door Management by @DevZupa. - -// Group System -dayz_groupSystem = false; // Enable group system - -// Weather -DZE_Weather = 2; // Options: 1 - Summer Static, 2 - Summer Dynamic, 3 - Winter Static, 4 - Winter Dynamic. If static is selected, the weather settings will be set at server startup and not change. Weather settings can be adjusted with array DZE_WeatherVariables. - -// The settings in the array below may be adjusted as desired. The default settings are designed to maximize client and server performance. -// Having several features enabled at once might have adverse effects on client performance. For instance, you could have snowfall, ground fog, and breath fog threads all running at once. -DZE_WeatherVariables = [ - 15, // Minimum time in minutes for the weather to change. (default value: 15). - 30, // Maximum time in minutes for the weather to change. (default value: 30). - 0, // Minimum fog intensity (0 = no fog, 1 = maximum fog). (default value: 0). - .2, // Maximum fog intensity (0 = no fog, 1 = maximum fog). (default value: 0.8). - 0, // Minimum overcast intensity (0 = clear sky, 1 = completely overcast). (default value: 0). Note: Rain and snow will not occur when overcast is less than 0.70. - .6, // Maximum overcast intensity (0 = clear sky, 1 = completely overcast). (default value: 1). - 0, // Minimum rain intensity (0 = no rain, 1 = maximum rain). Overcast needs to be at least 70% for it to rain. - .6, // Maximum rain intensity (0 = no rain, 1 = maximum rain). Overcast needs to be at least 70% for it to rain. - 0, // Minimum wind strength (default value: 0). - 3, // Maximum wind strength (default value: 5). - .25, // Probability for wind to change when weather changes. (default value: .25). - 1, // Minimum snow intensity (0 = no snow, 1 = maximum snow). Overcast needs to be at least 75% for it to snow. - 1, // Maximum snow intensity (0 = no snow, 1 = maximum snow). Overcast needs to be at least 75% for it to snow. - .2,// Probability for a blizzard to occur when it is snowing. (0 = no blizzards, 1 = blizzard all the time). (default value: .2). - 10, // Blizzard interval in minutes. Set to zero to have the blizzard run for the whole interval, otherwise you can set a custom time interval for the blizzard. - 0, // Ground Fog Effects. Options: 0 - no ground fog, 1 - only at evening, night, and early morning, 2 - anytime, 3 - near cities and towns, at late evening, night, and early morning, 4 - near cities and towns, anytime. - 400, // Distance in meters from player to scan for buildings to spawn ground fog. By default, only the 15 nearest buildings will spawn ground fog. - false, // Allow ground fog when it's snowing or raining? - 2 // Winter Breath Fog Effects. Options: 0 - no breath fog, 1 - anytime, 2 - only when snowing or blizzard. Note: breath fog is only available with winter weather enabled. -]; - /* Developers: diff --git a/SQF/dayz_code/init/variables.sqf b/SQF/dayz_code/init/variables.sqf index 461cbca09..3f2605696 100644 --- a/SQF/dayz_code/init/variables.sqf +++ b/SQF/dayz_code/init/variables.sqf @@ -209,7 +209,9 @@ if (!isDedicated) then { s_player_checkWallet = -1; s_player_clothes = -1; s_player_gdoor_opener = []; - s_player_gdoor_opener_ctrl = -1; + s_player_gdoor_opener_ctrl = -1; + s_player_bury_human = -1; + s_player_butcher_human = -1; }; call dayz_resetSelfActions; diff --git a/SQF/dayz_server/compile/server_publishVehicle3.sqf b/SQF/dayz_server/compile/server_publishVehicle3.sqf index d876457bb..9c83ebcfe 100644 --- a/SQF/dayz_server/compile/server_publishVehicle3.sqf +++ b/SQF/dayz_server/compile/server_publishVehicle3.sqf @@ -46,7 +46,7 @@ _magazines = getMagazineCargo _object; _backpacks = getBackpackCargo _object; _inv = [_weapons,_magazines,_backpacks]; -if (Z_SingleCurrency && ZSC_VehicleMoneyStorage) then { +if (Z_SingleCurrency && {ZSC_VehicleMoneyStorage}) then { _coins = _object getVariable ["cashMoney",0]; }; @@ -107,7 +107,7 @@ if (_outcome != "PASS") then { _object setVariable ["lastUpdate",diag_tickTime]; _object setVariable ["CharacterID", _characterID, true]; - if (Z_SingleCurrency && ZSC_VehicleMoneyStorage && {_coins > 0}) then { + if (Z_SingleCurrency && {ZSC_VehicleMoneyStorage && (_coins > 0)}) then { _object setVariable ["cashMoney",_coins,true]; }; diff --git a/SQF/dayz_server/system/scheduler/sched_corpses.sqf b/SQF/dayz_server/system/scheduler/sched_corpses.sqf index 5d607e882..a3e2d4c45 100644 --- a/SQF/dayz_server/system/scheduler/sched_corpses.sqf +++ b/SQF/dayz_server/system/scheduler/sched_corpses.sqf @@ -97,7 +97,7 @@ sched_corpses = { if (_onoff == 1) then { _sound = createSoundSource["Sound_Flies",getPosATL _x,[],0]; _sound attachTo [_x]; - _x setVariable ["sched_co_fliesSource", _sound]; + _x setVariable ["sched_co_fliesSource", _sound,[false,true] select (DZE_Bury_Body || DZE_Butcher_Body)]; //diag_log "create sound"; }; // broadcast flies status for everyone periodically, to update visible swarm diff --git a/SQF/dayz_server/system/scheduler/sched_init.sqf b/SQF/dayz_server/system/scheduler/sched_init.sqf index 1ced93f40..6e4b4d6b2 100644 --- a/SQF/dayz_server/system/scheduler/sched_init.sqf +++ b/SQF/dayz_server/system/scheduler/sched_init.sqf @@ -1,4 +1,4 @@ -#define PATH "z\addons\dayz_server\system\scheduler\" +#define PATH "\z\addons\dayz_server\system\scheduler\" call compile preprocessFileLineNumbers (PATH+"sched_corpses.sqf"); call compile preprocessFileLineNumbers (PATH+"sched_lootpiles.sqf"); @@ -6,8 +6,11 @@ call compile preprocessFileLineNumbers (PATH+"sched_sync.sqf"); call compile preprocessFileLineNumbers (PATH+"sched_safetyVehicle.sqf"); call compile preprocessFileLineNumbers (PATH+"sched_event.sqf"); call compile preprocessFileLineNumbers (PATH+"sched_traps.sqf"); +if (DZE_Bury_Body || DZE_Butcher_Body) then { + call compile preprocessFileLineNumbers (PATH+"sched_lootCrates.sqf"); +}; -[ +local _list = [ // period offset code <-> ctx init code ->ctx [ 60, 0, sched_event, sched_event_init ], [ 60, 224, sched_corpses ], @@ -17,17 +20,12 @@ call compile preprocessFileLineNumbers (PATH+"sched_traps.sqf"); [ 120, 48, sched_safetyVehicle ], [ 360, 480, sched_fps ], [ 30, 60, sched_traps, sched_traps_init ] -] execFSM ("z\addons\dayz_code\system\scheduler\scheduler.fsm"); +]; -//diag_log [ __FILE__, "Scheduler started"]; +if (DZE_Bury_Body || DZE_Butcher_Body) then { + _list set [count _list, [ 60, 240, sched_lootCrates ]]; +}; +_list execFSM ("\z\addons\dayz_code\system\scheduler\scheduler.fsm"); - - -/* -// (see ViralZeds.hpp -> zombie_agent.fsm -> zombie_findOwner.sqf), called when a zombie becomes "local" to the server after the player disconnected -zombie_findOwner = { - (_this select 0) call fa_deleteVehicle; -}; -*/ - +//diag_log [ __FILE__, "Scheduler started"]; \ No newline at end of file diff --git a/SQF/dayz_server/system/scheduler/sched_lootCrates.sqf b/SQF/dayz_server/system/scheduler/sched_lootCrates.sqf new file mode 100644 index 000000000..09e1234ff --- /dev/null +++ b/SQF/dayz_server/system/scheduler/sched_lootCrates.sqf @@ -0,0 +1,38 @@ +#include "\z\addons\dayz_server\compile\server_toggle_debug.hpp" + +// Delete loot crates, graves and crosses after 25 minutes +sched_lootCrates = { + private ["_delQtyCrate","_crateTime","_objects","_crates","_graves","_cross"]; + + _delQtyCrate = 0; + #define CENTER getMarkerPos "center" + #define RADIUS ((getMarkerSize "center") select 1)*2 + + _crates = CENTER nearObjects ["DZ_AmmoBoxSmallUS",RADIUS]; + _graves = CENTER nearObjects ["Grave",RADIUS]; + _cross = CENTER nearObjects ["GraveCross1",RADIUS]; + + _objects = _crates + _graves + _cross; + + { + if (_x getVariable ["bury",false]) then { + _crateTime = _x getVariable ["sched_co_crateTime", -1]; + if (_crateTime == -1) exitWith { + _crateTime = diag_tickTime; + _x setVariable ["sched_co_crateTime", _crateTime]; + }; + if (diag_tickTime - _crateTime > 25*60) then { + _x call sched_co_deleteVehicle; + _delQtyCrate = _delQtyCrate + 1; + }; + }; + } forEach _objects; + +#ifdef SERVER_DEBUG + if (_delQtyCrate> 0) then { + diag_log format ["%1: Deleted %2 bury/butcher objects.",__FILE__,_delQtyCrate]; + }; +#endif + + objNull +}; \ No newline at end of file diff --git a/Server Files/DZE_Server_Config/BattlEye/createvehicle.txt b/Server Files/DZE_Server_Config/BattlEye/createvehicle.txt index bea251c8f..c2e10be6c 100644 --- a/Server Files/DZE_Server_Config/BattlEye/createvehicle.txt +++ b/Server Files/DZE_Server_Config/BattlEye/createvehicle.txt @@ -1,10 +1,10 @@ //new -5 !(^DZ_|^z_|^pz_|^WeaponHolder|Box|dog|PZombie_VB|^Smoke|^Chem|^._40mm|_DZ$|^Trap) !=(SeaGull|SmallSecondary|HelicopterExplo(Small|Big)|Stash(Small|Medium)(|[1-4])) !=(CZ_VestPouch_EP1|R_M136_AT|R_MEEWS_HEAT|Wire_cat1) !TentStorage !=(JackDaniels|(Tin|Soda)Can|RoadFlare|WoodenArrowF|zZombie_Base|Parachute(West|C)|Grenade(_|HandTimed)(West|East)) !=(CMflareAmmo|Pipebomb) !=(WildBoar|Rabbit|Sheep|Sheep(01_EP1|02_EP1)|Goat|Goat(01_EP1|02_EP1)|Hen|Cow0[1234]|Cow01_EP1|Cock) !=Blood_Trail_DZ !^(Wooden|Metal)Fence !^WoodenGate_ !=(ShantyHouse(|Stage[2-7])|SurvivorWorkshop(|Stage2|[ABC]Stage[345])|WorkBench) !=explosive_bolt !"Land_" !=Sign_(arrow_down_large|sphere10cm)_EP1 !="MAP_c_fern" !="Grave" !"VaultStorage" !="LaserTargetW" !Fort_ !Nest !CMflare !="GyroGrenade" !="CraterLong" !="pook_camel_HE" !="Fin" !="Pastor" !_DZE[12]$ !"TallSafe" +5 !(^DZ_|^z_|^pz_|^WeaponHolder|Box|dog|PZombie_VB|^Smoke|^Chem|^._40mm|_DZ$|^Trap) !=(SeaGull|SmallSecondary|HelicopterExplo(Small|Big)|Stash(Small|Medium)(|[1-4])) !=(CZ_VestPouch_EP1|R_M136_AT|R_MEEWS_HEAT|Wire_cat1) !TentStorage !=(JackDaniels|(Tin|Soda)Can|RoadFlare|WoodenArrowF|zZombie_Base|Parachute(West|C)|Grenade(_|HandTimed)(West|East)) !=(CMflareAmmo|Pipebomb) !=(WildBoar|Rabbit|Sheep|Sheep(01_EP1|02_EP1)|Goat|Goat(01_EP1|02_EP1)|Hen|Cow0[1234]|Cow01_EP1|Cock) !=Blood_Trail_DZ !^(Wooden|Metal)Fence !^WoodenGate_ !=(ShantyHouse(|Stage[2-7])|SurvivorWorkshop(|Stage2|[ABC]Stage[345])|WorkBench) !=explosive_bolt !"Land_" !=Sign_(arrow_down_large|sphere10cm)_EP1 !="MAP_c_fern" !="Grave" !"VaultStorage" !="LaserTargetW" !Fort_ !Nest !CMflare !="GyroGrenade" !="CraterLong" !="pook_camel_HE" !="Fin" !="Pastor" !_DZE[12]$ !"TallSafe" !=GraveCross1 5 SeaGull //set to its own line so we know which kick we have here with out looking in the logs -1 ^DZ_ !=DZ_(British_ACU|Czech_Vest_Pouch|(TK_Assault_Pack|Patrol_Pack|Assault_Pack|ALICE_Pack|CivilBackpack|Backpack|LargeGunBag|GunBag)_EP1) !=DZ_((AmmoBox|ExplosiveBox)(RU|US)|MedBox|CardboardBox) +1 ^DZ_ !=DZ_(British_ACU|Czech_Vest_Pouch|(TK_Assault_Pack|Patrol_Pack|Assault_Pack|ALICE_Pack|CivilBackpack|Backpack|LargeGunBag|GunBag)_EP1) !=DZ_((AmmoBox|ExplosiveBox)(RU|US)|MedBox|CardboardBox) !DZ_AmmoBox 1 ^z_ !=z_((|new_)villager[1234]|(|new_)worker[1234]|teacher|hunter|suit[1-6]|soldier(|_pilot|_heavy)|policeman(|2)|doctor|priest) !=z_(citizen[1-4]|profiteer[1-4]|rocker[1-4]|lumberjack[1-4]|hunter[2345]|assistant|pilot|takistani[1-6]) !z_soldier_(usmc|fr|cdf|ru|gue|ins|tk|cz|un|ger|baf|pmc|acr) !=z_(dealer|gardener|mafiaboss|postman[1-4]|prisoner[1-3]|firefighter[1-5]|civilian([1-9]|1[0-5])) !=z_bloodsucker 1 ^WeaponHolder !=WeaponHolder !WeaponHolder_part !=WeaponHolder_(Item(DomeTent|CamoNet|Crowbar|Fuelcan|Hatchet|Jerrycan|Tent)|Melee(BaseBallBat(|Nails)|BatBarbed|Machete)) !=WeaponHolder_Part(Engine|Fueltank|Generic|Glass|VRotor|Wheel) !=WeaponHolder_Item(WorkBench|MetalSheet|ConcreteBlock|RSJ|Pickaxe|Generator) -1 Box !=(DZ_((AmmoBox|ExplosiveBox)(RU|US)|MedBox|CardboardBox)|Item(Match|Tool)box|equip_pvc_box|DebugBoxPlayer_DZ|WeaponHolder_ItemLockbox) !=LockboxStorage(Locked|WinterLocked|2Locked|Winter2Locked) +1 Box !=(DZ_((AmmoBox|ExplosiveBox)(RU|US)|MedBox|CardboardBox)|Item(Match|Tool)box|equip_pvc_box|DebugBoxPlayer_DZ|WeaponHolder_ItemLockbox) !=LockboxStorage(Locked|WinterLocked|2Locked|Winter2Locked) !DZ_AmmoBox 1 ^Smoke !=SmokeShell(|Red|Green|Yellow) !=SmokeLauncherAmmo 1 ^Chem !=Chem(Green|Red|Blue) 1 ^._40mm !=(G_40mm_HE|G_40mm_Smoke|F_40mm_White|F_40mm_Green) diff --git a/Server Files/DZE_Server_Config/BattlEye/scripts.txt b/Server Files/DZE_Server_Config/BattlEye/scripts.txt index cbfbfb18a..c04e6ca55 100644 --- a/Server Files/DZE_Server_Config/BattlEye/scripts.txt +++ b/Server Files/DZE_Server_Config/BattlEye/scripts.txt @@ -1,8 +1,8 @@ //new2 1 addAction !", \"\\z\\addons\\dayz_code\\" !=" = -1;\n};\nif (_s1 > 0) then {\ns_player_toggleSnap = player addaction [format[\"\" + \"Snap: %1\" +\"\",snapAc" !="-1;\n};\n\nif (_s1 > 0) then {\ns_player_toggleVector = player addaction [format[\"\" + localize \"STR_EPOCH_ACTIO" !"\"addAction\", " !"raddAction" !="_costs] call _fnc_actionTitle;\nSP_refuel_action = _vehicle addAction [_actionTitle,_folder + \"servicePointActions.sqf\",[\"refuel\"" -1 addBackpack !"addBackpackCargoGlobal [_x,(_objWpnQty select _counter)];\n_counter = _counter + 1;\n} count _objWpnTypes;" !"addBackpack _item;\n};\n};\nformat[localize \"str_c" !"case 3: {_holder addBackpackCargoGlobal [_item,_amount];};\n};\n\n\n" !"}) then {\n_newUnit addBackpack _newBackpackType;\n\nd" !"addBackpack _backpackType; \ndayz_myBackpack = unitBackpack player;\n\n\n\n_backpackWpnT" !"};\n} count _wpns;\n\nif (_bcpk != \"\") then {\nplayer addBackpack" !"1 == \"trade_backpacks\") then {\nDZE_myVehicle addBackpack" !"7 addBackpackCargoGlobal [_create,_qty];\n};\nif (surfaceIsWater" !"case 5: {_item addBackpackCargoGlobal [_itemOut,_countOut]}; \n};\n} else" !="m (2 + 1)];\n};\n};\n\nif (_type == 5) exitWith {\n_container addBackpackCargoGlobal [_item, 1];\n};\n};\n} count ([_group, _count] cal" !="5) exitWith {\nif (isNull unitBackpack _unit) then {\n_unit addBackpack _item;\n};\n};\n};\n} foreach ([_group, _count] call dz_fn_loo" !="al [_itemOut,_countOut]};\nif (_type == 5) exitwith {_item addBackpackCargoGlobal [_itemOut,_countOut]}; \n};\n} else {\n_item addMa" -1 addMagazine !raddMagazine !"\"addMagazine\", " !"if (isClass (configfile >> \"cfgmagazines\" >> (_item))) then {_unit addMagazine _item;};\n};\n};\n};\n};" !"_vehicle addMagazineTurret [_ammo,_turret];\nplayer removeMagazine" !"if (dayz_actionInProgress) exitWith {" !"addMagazine _x;\n};\n} foreach _items;\nformat[loc" !"addMagazine \"ItemAntibiotic\" + str(_remain" !"sumeDrop\") == 0) then\n{\nplayer addMagazine" !"ion) do {\ncase \"CfgWeapons\":\n{\nplayer addWeapon _item;\n};\ncase \"CfgMagazines\":\n{\nplayer addMagazine" !"addMagazine [\"12Rnd_Quiver_Wood\",_qty_quiv" !" >> \"containerEmpty\")" !"plant) select 1;\n{\n_item addMagazine" !"addMagazineCargoGlobal [_itemtodrop,1];\n\nformat[localize \"str_f" !"addMagazine _attachment;\n\n\n(findDisplay 10" !"addMagazine getText (configFile >> \"CfgMagazines\" >> _x >> _water" !"};\n};\n\n\nswitch _type do {\ncase 1: {_holder addMagazine" !"do {\n_animalbody addMagazine _rawfoodtype" !"addMagazine _item;\n};\n};\n_idc = _idc" !"_newUnit addMagazine [_x select 0,_x select 1]" !"addMagazine _x } count MeleeMagazines;\n} e" !"_meleeNum < 1) then {\nplayer addMagazine" !"addMagazine _qtyRemaining;\n};\n};\ntrue" !"bag\";\n};\n};\n(_this select 0) addMagazine" !"addMagazine \"wholeBloodBagBNEG\";\n};\n};" !"_qty > 0) then {\n_firePlace addMagazine" !"ONEG\" }; \n};\ndayz_myBackpack addMagazine" !"addMagazine _x;\n_countmags = _countmags +1;\n};\n} count _gmag" !"E\"];\n_lootpile addMagazineCargoGlobal [\"TrapBear\", 1]" !"With\n{\nplayer addMagazine (_this select 1" !"lder addMagazineCargoGlobal [_x,(_objWpnQty select _counter)];\n_counter = _counter + 1;\n};\n} co" !"soldItem\"];\n{\n_object addMagazine" !"systemChat localize \"STR_EPOCH_TRADE_" !"if (_silver_1oz > 0) then {\nif (_silver_1oz == 1) then {\nplayer addMagazine" !="Random;\n} else {\n_item = \"ItemBloodbag\";\n};\n};\n_container addMagazineCargoGlobal [_item, 1];\n};\n\nif (_type == 2) exitWith {\n_c" !="electRandom;\n} else {\n_item = \"ItemBloodbag\";\n};\n};\n_unit addMagazine _item;\n};\n\nif (_type == 2) exitWith {\n_unit addWeapon _i" !="];\n\ncall {\nif (_humanityBody >= DZE_Hero) exitwith {_body addMagazine \"ItemDogTagHero\";};\nif (_humanityBody <= DZE_Bandit) exitw" !="_vehicle = \"WeaponHolder\" createVehicle [0,0,0];\n_vehicle addMagazineCargoGlobal [_item, 1];\n\nif (_isWater) then { \n_fixWaterSp" !"eep 3;\n_finished = true;\n};\n\nif (!_finished) then {\n_unit addMagazine _bagUsed;\n_msg = \"str_actions_medical_transfusion_interrup" -1 addWeapon !raddWeapon !"\"addWeapon\", " !"if (isClass (configfile >> \"cfgweapons\" >> (_item))) then {_unit addWeapon _item;}\nelse" !",0]] call dayz_NutritionSystem;\n" !"Remove) == 1}) then {\nplayer addWeapon _create;" !"Display 0;\n\n\nif (_weaponInUse) then\n{\n_muz" !"failChance) then {\nswitch (_selection) do {\ncase \"CfgWeapons\":\n{\nplayer addWeapon" !"addWeapon _fixedItem;\nformat[localize \"str_f" !"_wepcounts = (getWeaponCargo _plant) select 1;\n{\n_item addWeapon" !"addWeapon _repair;\n} else {\n\n[_repair" !"player addWeapon dayz_onBack] select 0;\n};\n\n" !"player addWeapon _addWeapon;\n\nif (vehicle player != player) then {\n_display = find" !"};\n};\n\n\nswitch _type do {\ncase 1: {_holder addMagazineCargoGlobal [_item,_amount];};\ncase 2: {_holder addWeapon" !"l fn_chance) then {\nplayer removeWeapon _x;\nplayer addWeapon _rem" !"else {\n_body addWeapon dayz_onBack;\n};\n};\n\n\n_infect" !"\" >> _x)) then {\nplayer addWeapon _x;\n};\n} count _wpns;\n};" !"lder addWeaponCargoGlobal [_x,(_objWpnQty select _counter)];\n_counter = _counter + 1;\n} co" !"WpnQtys = [];\nif (count _backpackWpn > 0) then {\n_backpackWpnTypes = _backpackWpn sel" !"addWeapon (\"Item\"+str(_remain)+\"Matchbox" !"{\nswitch (_x select 0) do\n{\ncase 2:\n{\n(_this select 0) addWeapon" !"addWeaponCargoGlobal [_bcpkWpn, 1];\n};\n};\n};\n};" !"s;\n};\n\n\nplayer addWeapon \"Loot" !"With\n{\nplayer addWeapon (_this select 1" !"\") then {\n_newUnit addWeapon _secweapon;\n};\n\n" !"soldItem\"];\n{\n_object addWeapon" !"then {\nsystemChat format[localize \"STR_EPOCH_" !"DuplicateTool;\n} else {\nplayer addWeapon" !="al [_item, 1];\n};\n\nif (_type == 2) exitWith {\n_container addWeaponCargoGlobal [_item, 1];\n\n_magazines = getArray (configFile >" !=" addMagazine _item;\n};\n\nif (_type == 2) exitWith {\n_unit addWeapon _item;\n};\n\nif (_type == 5) exitWith {\nif (isNull unitBackp" !="ile >> \"CfgWeapons\" >> _x >> \"type\") == 256) then {\nplayer addWeapon _x;\n} else {\n_x call player_addDuplicateTool;\n};\n};\n} count" !="\n_vehicle = \"WeaponHolder\" createVehicle [0,0,0];\n_vehicle addWeaponCargoGlobal [_item, 1];\n\nif (_isWater) then { \n_fixWaterSpa" !="do {_vehicle addMagazineTurret [_ammo,_turret];};\n_vehicle addWeaponTurret [\"CMFlareLauncher\",_turret];\n} else {\n{_vehicle remov" +1 addBackpack !"addBackpackCargoGlobal [_x,(_objWpnQty select _counter)];\n_counter = _counter + 1;\n} count _objWpnTypes;" !"addBackpack _item;\n};\n};\nformat[localize \"str_c" !"case 3: {_holder addBackpackCargoGlobal [_item,_amount];};\n};\n\n\n" !"}) then {\n_newUnit addBackpack _newBackpackType;\n\nd" !"addBackpack _backpackType; \ndayz_myBackpack = unitBackpack player;\n\n\n\n_backpackWpnT" !"};\n} count _wpns;\n\nif (_bcpk != \"\") then {\nplayer addBackpack" !"1 == \"trade_backpacks\") then {\nDZE_myVehicle addBackpack" !"7 addBackpackCargoGlobal [_create,_qty];\n};\nif (surfaceIsWater" !"case 5: {_item addBackpackCargoGlobal [_itemOut,_countOut]}; \n};\n} else" !="m (2 + 1)];\n};\n};\n\nif (_type == 5) exitWith {\n_container addBackpackCargoGlobal [_item, 1];\n};\n};\n} count ([_group, _count] cal" !="5) exitWith {\nif (isNull unitBackpack _unit) then {\n_unit addBackpack _item;\n};\n};\n};\n} foreach ([_group, _count] call dz_fn_loo" !="al [_itemOut,_countOut]};\nif (_type == 5) exitwith {_item addBackpackCargoGlobal [_itemOut,_countOut]}; \n};\n} else {\n_item addMa" !="forEachIndex]} forEach (_backPackMag select 0);};\n\n_crate addBackpackCargoGlobal [_backPack,1];\n};\n\n_sound = _corpse getVariable" +1 addMagazine !raddMagazine !"\"addMagazine\", " !"if (isClass (configfile >> \"cfgmagazines\" >> (_item))) then {_unit addMagazine _item;};\n};\n};\n};\n};" !"_vehicle addMagazineTurret [_ammo,_turret];\nplayer removeMagazine" !"if (dayz_actionInProgress) exitWith {" !"addMagazine _x;\n};\n} foreach _items;\nformat[loc" !"addMagazine \"ItemAntibiotic\" + str(_remain" !"sumeDrop\") == 0) then\n{\nplayer addMagazine" !"ion) do {\ncase \"CfgWeapons\":\n{\nplayer addWeapon _item;\n};\ncase \"CfgMagazines\":\n{\nplayer addMagazine" !"addMagazine [\"12Rnd_Quiver_Wood\",_qty_quiv" !" >> \"containerEmpty\")" !"plant) select 1;\n{\n_item addMagazine" !"addMagazineCargoGlobal [_itemtodrop,1];\n\nformat[localize \"str_f" !"addMagazine _attachment;\n\n\n(findDisplay 10" !"addMagazine getText (configFile >> \"CfgMagazines\" >> _x >> _water" !"};\n};\n\n\nswitch _type do {\ncase 1: {_holder addMagazine" !"addMagazine _item;\n};\n};\n_idc = _idc" !"_newUnit addMagazine [_x select 0,_x select 1]" !"addMagazine _x } count MeleeMagazines;\n} e" !"_meleeNum < 1) then {\nplayer addMagazine" !"addMagazine _qtyRemaining;\n};\n};\ntrue" !"bag\";\n};\n};\n(_this select 0) addMagazine" !"addMagazine \"wholeBloodBagBNEG\";\n};\n};" !"_qty > 0) then {\n_firePlace addMagazine" !"ONEG\" }; \n};\ndayz_myBackpack addMagazine" !"addMagazine _x;\n_countmags = _countmags +1;\n};\n} count _gmag" !"E\"];\n_lootpile addMagazineCargoGlobal [\"TrapBear\", 1]" !"With\n{\nplayer addMagazine (_this select 1" !"lder addMagazineCargoGlobal [_x,(_objWpnQty select _counter)];\n_counter = _counter + 1;\n};\n} co" !"soldItem\"];\n{\n_object addMagazine" !"systemChat localize \"STR_EPOCH_TRADE_" !"if (_silver_1oz > 0) then {\nif (_silver_1oz == 1) then {\nplayer addMagazine" !="Random;\n} else {\n_item = \"ItemBloodbag\";\n};\n};\n_container addMagazineCargoGlobal [_item, 1];\n};\n\nif (_type == 2) exitWith {\n_c" !="electRandom;\n} else {\n_item = \"ItemBloodbag\";\n};\n};\n_unit addMagazine _item;\n};\n\nif (_type == 2) exitWith {\n_unit addWeapon _i" !="];\n\ncall {\nif (_humanityBody >= DZE_Hero) exitwith {_body addMagazine \"ItemDogTagHero\";};\nif (_humanityBody <= DZE_Bandit) exitw" !="_vehicle = \"WeaponHolder\" createVehicle [0,0,0];\n_vehicle addMagazineCargoGlobal [_item, 1];\n\nif (_isWater) then { \n_fixWaterSp" !"eep 3;\n_finished = true;\n};\n\nif (!_finished) then {\n_unit addMagazine _bagUsed;\n_msg = \"str_actions_medical_transfusion_interrup" !="art\") then {\n_body addWeapon _rawfoodtype;\n} else {\n_body addMagazine _rawfoodtype;\n};\n};\n\nif (_bodyType in [\"Cock\",\"Hen\"]) then" +1 addWeapon !raddWeapon !"\"addWeapon\", " !"if (isClass (configfile >> \"cfgweapons\" >> (_item))) then {_unit addWeapon _item;}\nelse" !",0]] call dayz_NutritionSystem;\n" !"Remove) == 1}) then {\nplayer addWeapon _create;" !"Display 0;\n\n\nif (_weaponInUse) then\n{\n_muz" !"failChance) then {\nswitch (_selection) do {\ncase \"CfgWeapons\":\n{\nplayer addWeapon" !"addWeapon _fixedItem;\nformat[localize \"str_f" !"_wepcounts = (getWeaponCargo _plant) select 1;\n{\n_item addWeapon" !"addWeapon _repair;\n} else {\n\n[_repair" !"player addWeapon dayz_onBack] select 0;\n};\n\n" !"player addWeapon _addWeapon;\n\nif (vehicle player != player) then {\n_display = find" !"};\n};\n\n\nswitch _type do {\ncase 1: {_holder addMagazineCargoGlobal [_item,_amount];};\ncase 2: {_holder addWeapon" !"l fn_chance) then {\nplayer removeWeapon _x;\nplayer addWeapon _rem" !"else {\n_body addWeapon dayz_onBack;\n};\n};\n\n\n_infect" !"\" >> _x)) then {\nplayer addWeapon _x;\n};\n} count _wpns;\n};" !"lder addWeaponCargoGlobal [_x,(_objWpnQty select _counter)];\n_counter = _counter + 1;\n} co" !"WpnQtys = [];\nif (count _backpackWpn > 0) then {\n_backpackWpnTypes = _backpackWpn sel" !"addWeapon (\"Item\"+str(_remain)+\"Matchbox" !"{\nswitch (_x select 0) do\n{\ncase 2:\n{\n(_this select 0) addWeapon" !"addWeaponCargoGlobal [_bcpkWpn, 1];\n};\n};\n};\n};" !"s;\n};\n\n\nplayer addWeapon \"Loot" !"With\n{\nplayer addWeapon (_this select 1" !"\") then {\n_newUnit addWeapon _secweapon;\n};\n\n" !"soldItem\"];\n{\n_object addWeapon" !"then {\nsystemChat format[localize \"STR_EPOCH_" !"DuplicateTool;\n} else {\nplayer addWeapon" !="al [_item, 1];\n};\n\nif (_type == 2) exitWith {\n_container addWeaponCargoGlobal [_item, 1];\n\n_magazines = getArray (configFile >" !=" addMagazine _item;\n};\n\nif (_type == 2) exitWith {\n_unit addWeapon _item;\n};\n\nif (_type == 5) exitWith {\nif (isNull unitBackp" !="ile >> \"CfgWeapons\" >> _x >> \"type\") == 256) then {\nplayer addWeapon _x;\n} else {\n_x call player_addDuplicateTool;\n};\n};\n} count" !="\n_vehicle = \"WeaponHolder\" createVehicle [0,0,0];\n_vehicle addWeaponCargoGlobal [_item, 1];\n\nif (_isWater) then { \n_fixWaterSpa" !="do {_vehicle addMagazineTurret [_ammo,_turret];};\n_vehicle addWeaponTurret [\"CMFlareLauncher\",_turret];\n} else {\n{_vehicle remov" !="ect 2];\n_cross setVariable [\"bury\",true,true];\n};\n\n{_crate addWeaponCargoGlobal [_x,1]} forEach weapons _corpse;\n{_crate addMaga" !="y do {\nif (_rawfoodtype == \"ItemMutantHeart\") then {\n_body addWeapon _rawfoodtype;\n} else {\n_body addMagazine _rawfoodtype;\n};\n}" 1 allDead !"} count allDead;\n\n\nif (dayz_oldBodyCount > _bodyCount) then {" 1 allGroups !"publicVariableServer \"PVDZ_Server_UpdateGroup\";\n};\n} count allGroups;" 1 allMissionObjects !"[_x,2,0,false,false] spawn BIS_Effects_Burn;\n};\n} count allMissionObjects \"SpawnableWreck\";" @@ -45,14 +45,14 @@ 1 HelicopterExplo !"(isNull _who) then {\nif (_ammo != \"\" && _ammo isKindOf \"HelicopterExplo" !"_v = thisTrigger getVariable [\"obj\", objNull];\n" !"_v = thisTrigger getVariable [\"\"obj\"\", objNull];\n" !"\n\n\nremoveallweapons _v;\n\nif (local _v) then {_expl=\"HelicopterExplo" 1 hideObject !"rhideObject" !"\"hideObject\"" !"(_x select 0) nearestObject (_x select 1);\n_object hideObject" !"_object2 = _ghost2 createVehicleLocal [0,0,0];\nhideObject _object;" 1 hint !", \"_postFix\"" !rhint !rtaskHint !"\"hint\", " !"\"hintC\", " !"\"taskHint\"," !"_controlHintButton ctrlSettext \"Objectives\";" !"hint (localize \"strwf" !"'BIS_fnc_hints'" !sched_planthint !"call ui_initDisplay;\nhintSilent \"\"" !"hintSilent localize \"str_player_low" !=" select 1;\n_filter = [\"private\",\"dynamic_text\",\"ai_killfeed\",\"hintWithImage\",\"hintNoImage\"]; \n\nif (typeName _message == \"TEXT\") " !="vars select 7) \n] spawn BIS_fnc_dynamicText;\n};\nif (_type == \"hintWithImage\") exitWith {hint parseText format[\"> \"CfgVehicles\" >>" !="#line 1 \"z\\addons\\dayz_code\\compile\\player_humanityChange.sqf\"\nprivate [\"_change\",\"_humanity\"];\n\n\n\n\n_change = _this;\n\n_humanity " !"layer]];\npublicVariableServer \"PVDZ_send\";\n\n\n20 call player_humanityChange;\n\nformat[localize \"str_actions_medical_gave_wipes\",(n" !=" [\"_msg\",\"_bagUsed\",\"_bloodResult\",\"_bloodAmount\",\"_unit\",\"_humanityAwarded\",\"_timer\",\"_i\",\"_isClose\",\"_duration\",\"_rhVal\",\"_blo" !="#line 1 \"z\\addons\\dayz_code\\compile\\player_humanityMorph.sqf\"\ncloseDialog 0;\nlocal _charID = _this select 1;\nlocal _model = _thi" +1 humanity !="\nDZE_NameTags = 0; \nDZE_ForceNameTagsInTrader = false; \nDZE_HumanityTargetDistance = 25; \nDZE_HeartBeat = false; \nDZE_RestrictSk" !=";\ndayz_authKey = \"\";\nDZE_LastPingResp = diag_tickTime;\ndayz_humanitytarget = \"\";\ndayz_selectedVault = objNull;\ndayz_selectedDoor" !="ndler {(_this select 1) spawn BIS_Effects_Burn};\n\"PVCDZ_plr_Humanity\" addPublicVariableEventHandler {(_this select 1) spawn pla" !="s \"\\z\\addons\\dayz_code\\compile\\fn_surfaceNoise.sqf\";\nplayer_humanityMorph = compile preprocessFileLineNumbers \"\\z\\addons\\dayz_co" !="{\nif (alive cursorTarget) then {\ncursorTarget spawn dayz_lowHumanity;\n};\n};\n\n[_initDone]\n};\n" !="\"_posC\",\"_height\",\"_attached\",\n\"_combi\",\"_findNearestGen\",\"_humanity_logic\",\"_low_high\",\"_cancel\",\"_buy\",\"_buyV\",\"_humanity\",\"_t" !="ext\",\"_visual\",\"_audible\",\"_id\",\"_rID\",\"_color\",\"_string\",\"_humanity\",\"_size\",\"_friendlies\",\"_rfriendlies\",\"_rfriendlyTo\",\"_dist" !="'; closeDialog 0; createDialog 'horde_journal_pages_journal_humanity';" !="t size='2' font='Zeppelin33' color = '#000000' align='left'>Humanity: > \"CfgVehicles\" >>" !="#line 1 \"z\\addons\\dayz_code\\compile\\player_humanityChange.sqf\"\nprivate [\"_change\",\"_humanity\"];\n\n\n\n\n_change = _this;\n\n_humanity " !"layer]];\npublicVariableServer \"PVDZ_send\";\n\n\n20 call player_humanityChange;\n\nformat[localize \"str_actions_medical_gave_wipes\",(n" !=" [\"_msg\",\"_bagUsed\",\"_bloodResult\",\"_bloodAmount\",\"_unit\",\"_humanityAwarded\",\"_timer\",\"_i\",\"_isClose\",\"_duration\",\"_rhVal\",\"_blo" !="#line 1 \"z\\addons\\dayz_code\\compile\\player_humanityMorph.sqf\"\ncloseDialog 0;\nlocal _charID = _this select 1;\nlocal _model = _thi" !="ody_Value} else {DZE_Butcher_Body_Value};\n_gain call player_humanityChange;\n\ndayz_actionInProgress = false;\n" !="l fn_dynamicTool;\n\ncall {\nif (_isZombie) exitWith {\n\nlocal _humanity = player getVariable [\"humanity\",0];\nplayer setVariable [\"h" 1 lbCurSel !"_selectedUserIndex = lbCurSel _lbUsersControl;" !="profileNamespace setVariable ['statusUI',(lbCurSel (_this select 0))];" !="profileNamespace setVariable ['streamerMode',(lbCurSel (_this select 0))];" !"_index = lbCurSel _lbcontrol;\n_selectedItem" !"_selected = lbCurSel _list;\n_classname = _list lnbData [_selected, 2];" !="_friendName = _userList lbText (lbCurSel _userList);" !")] call Z_" !"(lbCurSel 7421) call Z_fillCategoryList" !"] call Door" !"] call Plot" !"[(lbCurSel 12001)] " !="[(lbCurSel 21000), ((ctrlParent (_this select 0)) displayCtrl 21001)] spawn EpochDeathBoardClick;" !"((ctrlParent (_this select 0)) closeDisplay 2);" !="_uid = _playerList lbData (lbCurSel _playerList);" !"_myGroup lbData (lbCurSel _myGroup);" 1 lbSet !"_lbUsersControl lbSetColor [_x, [1,0,0,1]];" !"\n_control lbSetColor [_x, _color];\n};" !"_weaponsLBSetFocus" !="(_this select 0) displayCtrl _idc lbSetCurSel (profileNamespace getVariable [_var,_default]);" !="(_display displayCtrl 105) lbSetColor [_i, [0.06, 0.05, 0.03, 1]];" !" [7421," !"lbSetPicture [7422, _index" !"lbSetPicture [7402, _index" !"lbSetPicture [7401, _index" !="_userList lbSetData [(lbSize _userList) -1,_friendUID];" !" [TraderDialogItemList, _index, " !"_myGroup lbSetData [_index,getPlayerUID _x];" !"ive DZE_myVehicle} && {DZE_myVehicle == _x}) then {\n_control lbSetColor [(lbSize _control)-1,[0, 1, 0, 1]];\n};\n} count rv_vehicl" 1 loadFile 1 menu !",\"MenuSelected\",\"Draw\",\"VideoStop" !"_menu = _parent displayCtrl (1600 + _i);\n_menu ctrlShow " !"BIS_fnc_commsMenu" !"BIS_fnc_kbMenu" !"call gear_ui_offMenu;" !"dayz_inflame_showMenu" !"\"showCommandingMenu\", " !"rshowCommandingMenu" !"menu_" !"use action menu to " !"\"_menu\",\"_menu1\"" !"fn_gearMenuChecks" !"fn_pauseMenuChecks" -1 nearEntities !="exit = true;\n} else {\n_nearestObjects = (position player) nearEntities [[\"Air\", \"Car\", \"Motorcycle\", \"Tank\", \"Ship\"], 26];\nif (c" !="jects \"SpawnableWreck\";\n{deleteVehicle _x} count (_setPos nearEntities [\"zZombie_Base\",30]);\nplayer setDir _setDir;\n\nif (dayz_pa" !="ets,false];\n};\n};\n};\n};\n};\n} forEach ((getPosATL _refObj) nearEntities [\"Zed_Base\",100]);\n\nif (_attacked) then {\nif (r_player_un" !="((!surfaceIsWater _Pos) AND {(0 == {alive _x} count (_Pos nearEntities [ AllPlayers, 200 ]))}) then {\n_agent = if (_type == \"Pas" !="z, _elevation] ];\n};\n};\n};\n};\n} count ((getPosATL player) nearEntities [\"zZombie_Base\", 30]);\n};\n\n\n_buriedZeds\n};\n" !="call dz_fn_array_any);\n};\n\n_vehClose = (getPosATL player) nearEntities [[\"Car\",\"Tank\",\"Helicopter\",\"Plane\",\"StaticWeapon\",\"Ship\"" !="z_spawnZombies = {alive _x AND local _x} count (_position nearEntities [\"zZombie_Base\",_radius]);\ndayz_CurrentNearByZombies = {a" !="{\nr_player_infected = true;\n\n};\n};\n};\n} count (_mylastPos nearEntities [\"CAManBase\",12]);\nif (dayz_temperatur < ((50 / 100) * (d" !=" < dayz_maxGlobalZeds}) then {\n_zombiesNum = count (_bPos nearEntities [\"zZombie_Base\",(((sizeOf _type) * 2) + 10)]);\nif (_zombi" !="te;\n};\n};\n\n\n_nearByPlayer = ({isPlayer _x} count (_objPos nearEntities [\"CAManBase\",30])) > 0;\nif (!_nearByPlayer) then {\n_posit" !="_entityTime = diag_tickTime;\n\n_list = (getposATL _agent) nearEntities [[\"CAManBase\",\"AllVehicles\"],300];\n_isSomeone = ({isPlayer" !="_timeN = diag_tickTime;\n\n_list = (getposATL _agent) nearEntities [[\"CAManBase\",\"AllVehicles\"],300];\n_isSomeone = ({isPlayer _x} " !="_waitStart = diag_tickTime;\n\n_list = (getposATL _agent) nearEntities [[\"CAManBase\",\"AllVehicles\"],300];\n_isSomeone = ({isPlayer " !="lt = false;\n_pos = [player] call FNC_GetPos;\n_list = _pos nearEntities [[\"Air\",\"LandVehicle\",\"Ship\"],Z_VehicleDistance];\n\nif (!i" !="[\"localtargets\",_localtargets,false];\n};\n};\n} count (_pos nearEntities [\"zZombie_Base\",50]);\n} else {\nwhile {alive _projectile} " !="this select 2;\n_pos = _this select 3;\n\n_listTalk = _pos nearEntities [\"zZombie_Base\",_distance];\n\n{\n_distance = _distance max " !="_list = (getposATL _agent) nearEntities [[\"CAManBase\",\"AllVehicles\"],300];\n_isSomeone = ({isPlayer _x} count _list) > 0;\n\n_timeN" !=";};\n\n_playerNear = {isPlayer _x} count ((getPosATL _body) nearEntities [\"CAManBase\", 10]) > 1;\nif (_playerNear) exitWith {dayz_a" !="\n\n\n_pos = getPosATL player;\nif ({isPlayer _x} count (_pos nearEntities [\"CAManBase\",40]) > 1) then {\n[_unit,\"hit\",0,false] call " !="[];\n\n_PlayerNear = {isPlayer _x} count ((getPosATL _item) nearEntities [\"CAManBase\", 12]) > 1;\nif (_PlayerNear) exitWith {locali" !="layerNear = {isPlayer _x} count (([_obj] call FNC_GetPos) nearEntities [\"CAManBase\", 12]) > 1;\nif (_PlayerNear && (_isMine or _o" !="hicle _player] call FNC_getPos;\n\n\n_findNearestPole = _pos nearEntities [\"Plastic_Pole_EP1_DZ\", _distance];\n\n_IsNearPlot = count " !="layerNear = {isPlayer _x} count ((getPosATL cursortarget) nearEntities [\"CAManBase\", 10]) > 1;\nif (_playerNear) exitWith {\ndayz_" !="etPos;\n\nif (surfaceIsWater _location && {count (_location nearEntities [\"Ship\",8]) > 0}) then {\ndeleteVehicle _sign;\nlocalize \"S" !="yerNear = {isPlayer _x} count (([player] call FNC_GetPos) nearEntities [\"CAManBase\", 12]) > 1;\nif (_playerNear) exitWith {locali" !="ag_tickTime);\n_playerCheck = ({isPlayer _x} count (player nearEntities [\"AllVehicles\",5]) > 1);\n_zedCheck = ((count (player near" !="(_this select 1) && isServer && (({isPlayer _x} count (_z nearEntities ['CAManBase',150])) == 0)) exitWith { _z call sched_co_de" !=" do {\nuiSleep 5;\n};\nhideBody _body;\n\n\n\n\n\n\n_inRange = _pos nearEntities [\"CAManBase\",100];\n{\nif ((isPlayer _x) && {_x != player})" !=" {\n_PlayerNear = {isPlayer _x} count ((getPosATL _holder) nearEntities [\"CAManBase\", 12]) > 1;\nif (_PlayerNear) exitWith {locali" !="yerNear = {isPlayer _x} count (([_plant] call FNC_GetPos) nearEntities [\"CAManBase\", 12]) > 1;\nif (_playerNear) exitWith {dayz_a" !="layerNear = {isPlayer _x} count (([_obj] call FNC_GetPos) nearEntities [\"CAManBase\", 12]) > 1;\nif (_playerNear) exitWith {dayz_a" !="\n_ammo = \"RunOver\";\n};\n} count (([_unit] call fnc_getPos) nearEntities [[\"Air\",\"LandVehicle\",\"Ship\"],3]);\n};\n};\n};\n\n_end = false" !="{\n_liftHeli = _x;\n_found = true;\n};\n};\n};\n} count (player nearEntities [DZE_HeliAllowTowFrom,15]);\n};\n\nlocal _attached = _cursor" !="z_fn_array_any);\n};\n\nlocal _vehClose = (getPosATL player) nearEntities [[\"Car\",\"Tank\",\"Helicopter\",\"Plane\",\"StaticWeapon\",\"Ship\"" !=" = false;\n\nif (!isNull _this) then {\n_nearPlayers = _this nearEntities [\"CAManBase\", 12];\n_playerNear = ({isPlayer _x} count _ne" !="ePeople = if (DZE_doorManagementMustBeClose) then {player nearEntities [\"CAManBase\", 12]} else {playableUnits};\n\n{\nif (isPlayer " !"\n\n_PlayerNear = {isPlayer _x} count ((getPosATL _vehicle) nearEntities [\"CAManBase\", 12]) > 1;\nif (_PlayerNear) exitWith {" !="layerNear = {isPlayer _x} count (([_obj] call FNC_GetPos) nearEntities [\"CAManBase\", 10]) > 1;\nif (_playerNear) exitWith {dayz_a" !"arestVehicle),_x];\n};\n} count (([player] call fnc_getPos) nearEntities [[\"Air\",\"LandVehicle\",\"Ship\"],30]);\n\nif (count _findNeare" !"arPlayers = {(isPlayer _x && _x != player)} count (player nearEntities [\"CAManBase\",8]);\n\nif (!(_object isKindOf \"ATV_Base_EP1\")" !="ePeople = if (DZE_plotManagementMustBeClose) then {player nearEntities [\"CAManBase\", 12]} else {playableUnits};\n\n{\nif (isPlayer " !="lot\"];\n\nlbClear 7002;\n_plots = ([player] call FNC_getPos) nearEntities [\"Plastic_Pole_EP1_DZ\",15];\n_thePlot = _plots select 0;\n_" !="_area_preview = 1;\n\n_target = (([player] call FNC_getPos) nearEntities [\"Plastic_Pole_EP1_DZ\",15]) select 0;\n_objects = nearestO" !="_PlotPole select 0;\n_target = (([player] call FNC_getPos) nearEntities [\"Plastic_Pole_EP1_DZ\",15]) select 0;\n\n_buildables = DZE_" !=" == \"\") exitWith {};\n\n_plots = ([player] call FNC_getPos) nearEntities [\"Plastic_Pole_EP1_DZ\",15];\n\n_thePlot = _plots select 0;\n" !="here100cm_EP1\"; \n\n\n_thePlot = (([player] call FNC_getPos) nearEntities [\"Plastic_Pole_EP1_DZ\",15]) select 0;\n_center = getPosASL" !"arPlayers = {(isPlayer _x && _x != player)} count (player nearEntities [\"CAManBase\",8]);\n\nif ((_object isKindOf \"C130J_US_EP1\" o" !="RANGE = 1500;};CA_ZOMBIE_COUNT = count ((position player) nearEntities ['zZombie_Base',CA_GPS_RANGE]); CA_MAN_COUNT = count ((po" !"ayerNear = {isPlayer _x} count (([_body] call FNC_GetPos) nearEntities [\"CAManBase\", 10]) > 1;\nif (_playerNear) exitWith {dayz_a" +1 nearEntities !="exit = true;\n} else {\n_nearestObjects = (position player) nearEntities [[\"Air\", \"Car\", \"Motorcycle\", \"Tank\", \"Ship\"], 26];\nif (c" !="jects \"SpawnableWreck\";\n{deleteVehicle _x} count (_setPos nearEntities [\"zZombie_Base\",30]);\nplayer setDir _setDir;\n\nif (dayz_pa" !="((!surfaceIsWater _Pos) AND {(0 == {alive _x} count (_Pos nearEntities [ AllPlayers, 200 ]))}) then {\n_agent = if (_type == \"Pas" !="z, _elevation] ];\n};\n};\n};\n};\n} count ((getPosATL player) nearEntities [\"zZombie_Base\", 30]);\n};\n\n\n_buriedZeds\n};\n" !="call dz_fn_array_any);\n};\n\n_vehClose = (getPosATL player) nearEntities [[\"Car\",\"Tank\",\"Helicopter\",\"Plane\",\"StaticWeapon\",\"Ship\"" !="z_spawnZombies = {alive _x AND local _x} count (_position nearEntities [\"zZombie_Base\",_radius]);\ndayz_CurrentNearByZombies = {a" !="{\nr_player_infected = true;\n\n};\n};\n};\n} count (_mylastPos nearEntities [\"CAManBase\",12]);\nif (dayz_temperatur < ((50 / 100) * (d" !=" < dayz_maxGlobalZeds}) then {\n_zombiesNum = count (_bPos nearEntities [\"zZombie_Base\",(((sizeOf _type) * 2) + 10)]);\nif (_zombi" !="te;\n};\n};\n\n\n_nearByPlayer = ({isPlayer _x} count (_objPos nearEntities [\"CAManBase\",30])) > 0;\nif (!_nearByPlayer) then {\n_posit" !="_entityTime = diag_tickTime;\n\n_list = (getposATL _agent) nearEntities [[\"CAManBase\",\"AllVehicles\"],300];\n_isSomeone = ({isPlayer" !="_timeN = diag_tickTime;\n\n_list = (getposATL _agent) nearEntities [[\"CAManBase\",\"AllVehicles\"],300];\n_isSomeone = ({isPlayer _x} " !="_waitStart = diag_tickTime;\n\n_list = (getposATL _agent) nearEntities [[\"CAManBase\",\"AllVehicles\"],300];\n_isSomeone = ({isPlayer " !="lt = false;\n_pos = [player] call FNC_GetPos;\n_list = _pos nearEntities [[\"Air\",\"LandVehicle\",\"Ship\"],Z_VehicleDistance];\n\nif (!i" !="[\"localtargets\",_localtargets,false];\n};\n};\n} count (_pos nearEntities [\"zZombie_Base\",50]);\n} else {\nwhile {alive _projectile} " !="this select 2;\n_pos = _this select 3;\n\n_listTalk = _pos nearEntities [\"zZombie_Base\",_distance];\n\n{\n_distance = _distance max " !="_list = (getposATL _agent) nearEntities [[\"CAManBase\",\"AllVehicles\"],300];\n_isSomeone = ({isPlayer _x} count _list) > 0;\n\n_timeN" !=";};\n\n_playerNear = {isPlayer _x} count ((getPosATL _body) nearEntities [\"CAManBase\", 10]) > 1;\nif (_playerNear) exitWith {dayz_a" !="\n\n\n_pos = getPosATL player;\nif ({isPlayer _x} count (_pos nearEntities [\"CAManBase\",40]) > 1) then {\n[_unit,\"hit\",0,false] call " !="[];\n\n_PlayerNear = {isPlayer _x} count ((getPosATL _item) nearEntities [\"CAManBase\", 12]) > 1;\nif (_PlayerNear) exitWith {locali" !="layerNear = {isPlayer _x} count (([_obj] call FNC_GetPos) nearEntities [\"CAManBase\", 12]) > 1;\nif (_PlayerNear && (_isMine or _o" !="hicle _player] call FNC_getPos;\n\n\n_findNearestPole = _pos nearEntities [\"Plastic_Pole_EP1_DZ\", _distance];\n\n_IsNearPlot = count " !="layerNear = {isPlayer _x} count ((getPosATL cursortarget) nearEntities [\"CAManBase\", 10]) > 1;\nif (_playerNear) exitWith {\ndayz_" !="etPos;\n\nif (surfaceIsWater _location && {count (_location nearEntities [\"Ship\",8]) > 0}) then {\ndeleteVehicle _sign;\nlocalize \"S" !="yerNear = {isPlayer _x} count (([player] call FNC_GetPos) nearEntities [\"CAManBase\", 12]) > 1;\nif (_playerNear) exitWith {locali" !="ag_tickTime);\n_playerCheck = ({isPlayer _x} count (player nearEntities [\"AllVehicles\",5]) > 1);\n_zedCheck = ((count (player near" !="(_this select 1) && isServer && (({isPlayer _x} count (_z nearEntities ['CAManBase',150])) == 0)) exitWith { _z call sched_co_de" !=" do {\nuiSleep 5;\n};\nhideBody _body;\n\n\n\n\n\n\n_inRange = _pos nearEntities [\"CAManBase\",100];\n{\nif ((isPlayer _x) && {_x != player})" !=" {\n_PlayerNear = {isPlayer _x} count ((getPosATL _holder) nearEntities [\"CAManBase\", 12]) > 1;\nif (_PlayerNear) exitWith {locali" !="yerNear = {isPlayer _x} count (([_plant] call FNC_GetPos) nearEntities [\"CAManBase\", 12]) > 1;\nif (_playerNear) exitWith {dayz_a" !="layerNear = {isPlayer _x} count (([_obj] call FNC_GetPos) nearEntities [\"CAManBase\", 12]) > 1;\nif (_playerNear) exitWith {dayz_a" !="\n_ammo = \"RunOver\";\n};\n} count (([_unit] call fnc_getPos) nearEntities [[\"Air\",\"LandVehicle\",\"Ship\"],3]);\n};\n};\n};\n\n_end = false" !="{\n_liftHeli = _x;\n_found = true;\n};\n};\n};\n} count (player nearEntities [DZE_HeliAllowTowFrom,15]);\n};\n\nlocal _attached = _cursor" !="z_fn_array_any);\n};\n\nlocal _vehClose = (getPosATL player) nearEntities [[\"Car\",\"Tank\",\"Helicopter\",\"Plane\",\"StaticWeapon\",\"Ship\"" !=" = false;\n\nif (!isNull _this) then {\n_nearPlayers = _this nearEntities [\"CAManBase\", 12];\n_playerNear = ({isPlayer _x} count _ne" !="ePeople = if (DZE_doorManagementMustBeClose) then {player nearEntities [\"CAManBase\", 12]} else {playableUnits};\n\n{\nif (isPlayer " !"\n\n_PlayerNear = {isPlayer _x} count ((getPosATL _vehicle) nearEntities [\"CAManBase\", 12]) > 1;\nif (_PlayerNear) exitWith {" !="layerNear = {isPlayer _x} count (([_obj] call FNC_GetPos) nearEntities [\"CAManBase\", 10]) > 1;\nif (_playerNear) exitWith {dayz_a" !"arestVehicle),_x];\n};\n} count (([player] call fnc_getPos) nearEntities [[\"Air\",\"LandVehicle\",\"Ship\"],30]);\n\nif (count _findNeare" !"arPlayers = {(isPlayer _x && _x != player)} count (player nearEntities [\"CAManBase\",8]);\n\nif (!(_object isKindOf \"ATV_Base_EP1\")" !="ePeople = if (DZE_plotManagementMustBeClose) then {player nearEntities [\"CAManBase\", 12]} else {playableUnits};\n\n{\nif (isPlayer " !="lot\"];\n\nlbClear 7002;\n_plots = ([player] call FNC_getPos) nearEntities [\"Plastic_Pole_EP1_DZ\",15];\n_thePlot = _plots select 0;\n_" !="_area_preview = 1;\n\n_target = (([player] call FNC_getPos) nearEntities [\"Plastic_Pole_EP1_DZ\",15]) select 0;\n_objects = nearestO" !="_PlotPole select 0;\n_target = (([player] call FNC_getPos) nearEntities [\"Plastic_Pole_EP1_DZ\",15]) select 0;\n\n_buildables = DZE_" !=" == \"\") exitWith {};\n\n_plots = ([player] call FNC_getPos) nearEntities [\"Plastic_Pole_EP1_DZ\",15];\n\n_thePlot = _plots select 0;\n" !="here100cm_EP1\"; \n\n\n_thePlot = (([player] call FNC_getPos) nearEntities [\"Plastic_Pole_EP1_DZ\",15]) select 0;\n_center = getPosASL" !"arPlayers = {(isPlayer _x && _x != player)} count (player nearEntities [\"CAManBase\",8]);\n\nif ((_object isKindOf \"C130J_US_EP1\" o" !="RANGE = 1500;};CA_ZOMBIE_COUNT = count ((position player) nearEntities ['zZombie_Base',CA_GPS_RANGE]); CA_MAN_COUNT = count ((po" !"ayerNear = {isPlayer _x} count (([_body] call FNC_GetPos) nearEntities [\"CAManBase\", 10]) > 1;\nif (_playerNear) exitWith {dayz_a" !="\n_x setVariable [\"myDest\",_pos,true];\n};\n};\n} count (_pos nearEntities [\"Zed_Base\",_distance]);\n" !=" then {deleteVehicle _x}; \n} forEach ((getPosATL _refObj) nearEntities [\"Zed_Base\",100]);\n\nif (_attacked) then {\nif (r_player_un" !="erNear = {isPlayer _x} count (([_corpse] call FNC_GetPos) nearEntities [\"CAManBase\", 10]) > 1;\nif (_playerNear) exitWith {dayz_a" !="ss = false;}; \nif ({isPlayer _x} count ((getPosATL _body) nearEntities [\"CAManBase\", 12]) > 1) exitWith {dayz_actionInProgress =" 1 nearestObject !="licVariableEventHandler {_pos = (_this select 1); _obj = nearestObjects [_pos, DZE_isWreckBuilding, 5]; if (count _obj > 0) then" !=" 0;\n_whatIwant = _this select 1;\n_ret = false;\n\n_flame = nearestObjects [_fireplace, [\"flamable_DZ\"], 1];\n_flame = if (count _fl" !="Whitelisted = [];\n_pointsNearby = [];\n_findWhitelisted = nearestObjects [_pos,_whitelist,(_radius + DZE_snapExtraRange)]-[_objec" !=".sqf\"\n\n\n\n\n\nprivate \"_object\";\n\n{\n_object = (_x select 0) nearestObject (_x select 1);\n_object hideObject true;\n_object setVariab" !="\ncall dayz_meleeMagazineCheck;\n{player reveal _x} count (nearestObjects [_position,[\"AllVehicles\",\"WeaponHolder\",\"Land_A_tent\",\"" !="ks.sqf\"\nsetMousePosition [0.5, 0.5];\n\nprivate [\"_exit\",\"_nearestObjects\",\"_rID\",\"_display\",\"_cTarget\",\"_dis\",\"_friendlyTo\",\"_las" !="eenMsg = localize 'str_player_setup_completed';\n_torev4l=nearestObjects [_setPos, Dayz_plants + DayZ_GearedObjects + [\"AllVehicl" !=") then {\n_pPos = [player] call FNC_GetPos;\n_fireplaces = nearestObjects [_pPos, [\"flamable_DZ\",\"Land_Fire\",\"Land_Campfire\"], 8];" !=" \n\n)\nmax 0;\n\nif (_scaleLight < 0.9) then {\n\n_nearFlare = nearestObject [getPosATL (vehicle player),\"RoadFlare\"];\nif (!isNull _ne" !=" call _check}) exitWith { \n_inside = true;\n};\n} forEach (nearestObjects [_unit, [\"Building\"], 50]);\n};\n\n\n_inside\n" !="= _this select 0;\n_ammo = _this select 1;\n\n_projectile = nearestObject [_unit, _ammo];\n_pos = getPosATL _projectile;\n\nif (_ammo " !="\n};\nif (\"workshop\" in _needNear) then {\n_isNear = count (nearestObjects [player, DZE_Workshops, _distance]);\nif(_isNear == 0) th" !="ingPlayer = player;\n_dir = round(random 360);\n_helipad = nearestObjects [player, [\"HeliHCivil\",\"HeliHempty\"], 100];\n\n\nif (count " !="1\",\"land_smd_water_pump\"];\n\n_canFill = call {\n\nif (count nearestObjects [_posATL,_wells,4] > 0) exitwith {[true,false]};\nif (toL" !="d) exitWith {\n_nearWaterHole = [true,_pond];\n};\n} count (nearestObjects [_x, [], 1]);\n\nif (_nearWaterHole select 0) exitWith {};" !="bj select 4;\n_projectile = _obj select 6;\n\n_projectile = nearestObject [_unit,_ammo];\n_endPos = getPosATL _projectile;\n_doWait =" !="_plantOutput select _index;\n_countOut = 1;\n};\n};\n} count nearestObjects [([player] call FNC_getPos), [], 10];\n\nif (count _findNe" !=" !r_player_unconscious && !_onLadder);\n\n_nearByObjects = nearestObjects [player,_objects,_range];\n\nif (count _nearByObjects == 0" !="= \"workshop\") exitwith {\n_distance = 3;\n_isNear = count (nearestObjects [_pos, DZE_Workshops, _distance]);\nif (_isNear == 0) the" !="earestPole) then {_pos} else {_nearestPole};\nif ((count (nearestObjects [_center,_buildables,_distance])) >= DZE_BuildingLimit) " !="_ammo in [\"Dragged\",\"RunOver\"])}) then {\n_vehicleArray = nearestObjects [([vehicle _unit] call fnc_getPos),[\"Air\",\"LandVehicle\"," !="n _rocks) exitWith { _findNearestRock = _x; };\n} foreach nearestObjects [getPosATL player, [], 8];\n\n\nif (!isNull _findNearestRoc" !="modeltoWorld [0,0,0]};\n_holder = objNull;\n\n\n_nearByPile= nearestObjects [_pos, [\"WeaponHolder\",\"WeaponHolderBase\"],2];\n\nif (coun" !="r);\nlocal _uid = getPlayerUID player;\nlocal _nearLight = nearestObject [player,\"LitObject\"];\nlocal _canPickLight = false;\nlocal " !="p = {\nlocal _doors = [];\nif (r_drag_sqf) then {\n_doors = nearestObjects [player, DayZ_DropDrageeObjects, 3]; \nif (count _doors >" !"With {};\nif (!_unconscious) exitWith {};\n\n_dropObjects = nearestObjects [player, DayZ_DropDrageeObjects, 3];\nif (count _dropObje" !"Name) in dayz_trees}) exitWith {\n\n_tree = _x;\n};\n} count nearestObjects [getPosATL player, [], 20];\n\nif (!isNull _tree) then {\n\n" !="ntities [\"Plastic_Pole_EP1_DZ\",15]) select 0;\n_objects = nearestObjects [_target, DZE_maintainClasses, DZE_maintainRange];\n\n_obj" !="E_LockableStorage + [\"DZ_storage_base\"];\n_count = count (nearestObjects [_target,_buildables,_range]);\n\n_colour = \"#ffffff\";\n\nif" !="e;\n_num = ceil (random (player distance _x));\n};\n} count nearestObjects [player, [], 50];\n\nfor \"_i\" from 1 to 10 do {\nif (!_ispo" !="j select 4;\n\n_projectile = _obj select 6;\n\n_projectile = nearestObject [_unit,_ammo];\n_vUp = vectorUp _projectile;\n_endPos = get" !="player;\nif (_vehicle != player) then {\n_servicePoints = (nearestObjects [getPosATL _vehicle,DZE_SP_Classes,DZE_SP_MaxDistance]) " -1 nearObjects !="ratorRunning\",false]))} count (([player] call FNC_getPos) nearObjects [\"Generator_DZ\",30]);\nif (_findNearestGen > 0) then {\ns_pl" !="lders = dayz_currentWeaponHolders - 1;\n} count (_worldPos nearObjects [\"ReammoBox\", 1]);\n\nif (_lootChance > random 1 && {dayz_cu" !="rgets == 0) then {\nprivate \"_objects\";\n\n_objects = _agent nearObjects [\"GrenadeHand\", 300]; \n{\nif (!(_x in _targets)) then {\nif " !="er] call FNC_GetPos;\n_isNear = {inflamed _x} count (_pPos nearObjects _distance);\nif(_isNear == 0) then {\n_abort = true;\n_reason" !="s select 0;\n_sign = _this select 1;\n_near = count (player nearObjects [_class,50]);\n\n[_class,_sign,_near] spawn {\n_class = _this" !="with {\n_distance = 3;\n_isNear = {inflamed _x} count (_pos nearObjects _distance);\nif (_isNear == 0) then {\n_abort = true;\n_reaso" !=" (_nearWaterHole select 0) exitWith {};\n} forEach (player nearObjects [\"waterHoleProxy\",50]);\n\n_nearWaterHole" !="unt _zeds;\n\n\ndayz_currentWeaponHolders = count (_position nearObjects [\"ReammoBox\",_radius]);\n\n\nlocal _vehicle = vehicle player;" !="yer] call FNC_GetPos;\n_isNear = {inflamed _x} count (_pos nearObjects 3);\nif (_isNear == 0) exitWith {dayz_actionInProgress = fa" +1 nearObjects !="ratorRunning\",false]))} count (([player] call FNC_getPos) nearObjects [\"Generator_DZ\",30]);\nif (_findNearestGen > 0) then {\ns_pl" !="lders = dayz_currentWeaponHolders - 1;\n} count (_worldPos nearObjects [\"ReammoBox\", 1]);\n\nif (_lootChance > random 1 && {dayz_cu" !="rgets == 0) then {\nprivate \"_objects\";\n\n_objects = _agent nearObjects [\"GrenadeHand\", 300]; \n{\nif (!(_x in _targets)) then {\nif " !="er] call FNC_GetPos;\n_isNear = {inflamed _x} count (_pPos nearObjects _distance);\nif(_isNear == 0) then {\n_abort = true;\n_reason" !="s select 0;\n_sign = _this select 1;\n_near = count (player nearObjects [_class,50]);\n\n[_class,_sign,_near] spawn {\n_class = _this" !="with {\n_distance = 3;\n_isNear = {inflamed _x} count (_pos nearObjects _distance);\nif (_isNear == 0) then {\n_abort = true;\n_reaso" !=" (_nearWaterHole select 0) exitWith {};\n} forEach (player nearObjects [\"waterHoleProxy\",50]);\n\n_nearWaterHole" !="yer] call FNC_GetPos;\n_isNear = {inflamed _x} count (_pos nearObjects 3);\nif (_isNear == 0) exitWith {dayz_actionInProgress = fa" !="unt _zeds;\n\n\ndayz_currentWeaponHolders = count (_position nearObjects [\"ReammoBox\",_radius]);\n\n\nif (DZE_Bloodsuckers) then {\nloc" 1 onMapSingleClick 1 playableUnits !"for [{_y=0},{_y < count(playableUnits)},{_y=_y+1}] do {" !"typeName player == \"OBJECT\" && {(player in playableUnits" !"AND {((alive _x) AND {((vehicle _x) distance _obj < 150)})}} count playableUnits)}) then {" !="_local = { _unit distance _x < _dis; } count playableUnits <= 1;" !"ManagementMustBeClose) then { player nearEntities [\"CAManBase\", 10] } else { playableUnits };" !=" = false;\n};\n};\n};\nif (!_isOk) exitWith {false};\n} count playableUnits;\n\n_isOk\n" !="lose) then {player nearEntities [\"CAManBase\", 12]} else {playableUnits};\n\n{\nif (isPlayer _x) then {\n_friendUID = getPlayerUID _x" 1 positionCameraToWorld From 8c463674b7c65fd0b00a964675bc66295ea8dd42 Mon Sep 17 00:00:00 2001 From: A Man Date: Wed, 18 Aug 2021 18:59:17 +0200 Subject: [PATCH 24/40] Add StaticWeapon check on hive start --- SQF/dayz_server/compile/server_playerDied.sqf | 3 +-- SQF/dayz_server/system/server_monitor.sqf | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/SQF/dayz_server/compile/server_playerDied.sqf b/SQF/dayz_server/compile/server_playerDied.sqf index 8fc0896c4..edad31b5a 100644 --- a/SQF/dayz_server/compile/server_playerDied.sqf +++ b/SQF/dayz_server/compile/server_playerDied.sqf @@ -85,5 +85,4 @@ if (_playerName != "unknown" || {_sourceName != "unknown"}) then { }; _newObject setDamage 1; -_newObject setOwner 0; -//dead_bodyCleanup set [count dead_bodyCleanup,_newObject]; +_newObject setOwner 0; \ No newline at end of file diff --git a/SQF/dayz_server/system/server_monitor.sqf b/SQF/dayz_server/system/server_monitor.sqf index bf06e38ad..27342b672 100644 --- a/SQF/dayz_server/system/server_monitor.sqf +++ b/SQF/dayz_server/system/server_monitor.sqf @@ -102,7 +102,7 @@ if ((playersNumber west + playersNumber civilian) == 0) exitWith { _damage = _x select 8; _storageMoney = _x select 9; - if ((_type isKindOf "AllVehicles")) then { + if ((_type isKindOf "AllVehicles") && !(_type isKindOf "StaticWeapon")) then { _VehicleQueue set [_vQty,_x]; _vQty = _vQty + 1; } else { From 8422133a7d53d987ba8394a5f281aecae5ddf670 Mon Sep 17 00:00:00 2001 From: worldwidesorrow Date: Wed, 18 Aug 2021 12:25:29 -0500 Subject: [PATCH 25/40] Add sound effects for Bloodsuckers --- SQF/dayz_sfx/CfgSounds.hpp | 65 +++++++++++++++++++ SQF/dayz_sfx/bloodsucker/attack_0.ogg | Bin 0 -> 20512 bytes SQF/dayz_sfx/bloodsucker/attack_1.ogg | Bin 0 -> 18646 bytes SQF/dayz_sfx/bloodsucker/attack_2.ogg | Bin 0 -> 20711 bytes SQF/dayz_sfx/bloodsucker/attack_3.ogg | Bin 0 -> 16968 bytes SQF/dayz_sfx/bloodsucker/distant_growl_0.ogg | Bin 0 -> 18197 bytes SQF/dayz_sfx/bloodsucker/distant_growl_1.ogg | Bin 0 -> 49386 bytes SQF/dayz_sfx/bloodsucker/distant_growl_2.ogg | Bin 0 -> 21210 bytes SQF/dayz_sfx/bloodsucker/distant_growl_3.ogg | Bin 0 -> 34155 bytes SQF/dayz_sfx/bloodsucker/distant_growl_4.ogg | Bin 0 -> 17559 bytes SQF/dayz_sfx/bloodsucker/forest_hidden_1.ogg | Bin 0 -> 18661 bytes SQF/dayz_sfx/bloodsucker/forest_hidden_2.ogg | Bin 0 -> 17559 bytes SQF/dayz_sfx/bloodsucker/forest_hidden_3.ogg | Bin 0 -> 22478 bytes SQF/dayz_sfx/bloodsucker/forest_hidden_4.ogg | Bin 0 -> 24385 bytes 14 files changed, 65 insertions(+) create mode 100644 SQF/dayz_sfx/bloodsucker/attack_0.ogg create mode 100644 SQF/dayz_sfx/bloodsucker/attack_1.ogg create mode 100644 SQF/dayz_sfx/bloodsucker/attack_2.ogg create mode 100644 SQF/dayz_sfx/bloodsucker/attack_3.ogg create mode 100644 SQF/dayz_sfx/bloodsucker/distant_growl_0.ogg create mode 100644 SQF/dayz_sfx/bloodsucker/distant_growl_1.ogg create mode 100644 SQF/dayz_sfx/bloodsucker/distant_growl_2.ogg create mode 100644 SQF/dayz_sfx/bloodsucker/distant_growl_3.ogg create mode 100644 SQF/dayz_sfx/bloodsucker/distant_growl_4.ogg create mode 100644 SQF/dayz_sfx/bloodsucker/forest_hidden_1.ogg create mode 100644 SQF/dayz_sfx/bloodsucker/forest_hidden_2.ogg create mode 100644 SQF/dayz_sfx/bloodsucker/forest_hidden_3.ogg create mode 100644 SQF/dayz_sfx/bloodsucker/forest_hidden_4.ogg diff --git a/SQF/dayz_sfx/CfgSounds.hpp b/SQF/dayz_sfx/CfgSounds.hpp index b3d11f294..28789e28c 100644 --- a/SQF/dayz_sfx/CfgSounds.hpp +++ b/SQF/dayz_sfx/CfgSounds.hpp @@ -841,4 +841,69 @@ class CfgSounds { sound[] = {"\dayz_sfx\effects\switch.ogg",0.5,1}; titles[] = {}; }; + class z_bloodatt0_0 { + name = ""; + sound[] = {"\dayz_sfx\bloodsucker\attack_0.ogg",0.177828,1}; + titles[] = {}; + }; + class z_bloodatt1_0 { + name = ""; + sound[] = {"\dayz_sfx\bloodsucker\attack_1.ogg",0.177828,1}; + titles[] = {}; + }; + class z_bloodatt2_0 { + name = ""; + sound[] = {"\dayz_sfx\bloodsucker\attack_2.ogg",0.177828,1}; + titles[] = {}; + }; + class z_bloodatt3_0 { + name = ""; + sound[] = {"\dayz_sfx\bloodsucker\attack_3.ogg",0.177828,1}; + titles[] = {}; + }; + class z_bloodgrowl0_0 { + name = ""; + sound[] = {"\dayz_sfx\bloodsucker\distant_growl_0.ogg",0.25118899,1}; + titles[] = {}; + }; + class z_bloodgrowl1_0 { + name = ""; + sound[] = {"\dayz_sfx\bloodsucker\distant_growl_1.ogg",0.25118899,1}; + titles[] = {}; + }; + class z_bloodgrowl2_0 { + name = ""; + sound[] = {"\dayz_sfx\bloodsucker\distant_growl_2.ogg",0.25118899,1}; + titles[] = {}; + }; + class z_bloodgrowl3_0 { + name = ""; + sound[] = {"\dayz_sfx\bloodsucker\distant_growl_3.ogg",0.25118899,1}; + titles[] = {}; + }; + class z_bloodgrowl4_0 { + name = ""; + sound[] = {"\dayz_sfx\bloodsucker\distant_growl_4.ogg",0.25118899,1}; + titles[] = {}; + }; + class z_bloodforest1_0 { + name = ""; + sound[] = {"\dayz_sfx\bloodsucker\forest_hidden_1.ogg",0.25118899,1}; + titles[] = {}; + }; + class z_bloodforest2_0 { + name = ""; + sound[] = {"\dayz_sfx\bloodsucker\forest_hidden_2.ogg",0.25118899,1}; + titles[] = {}; + }; + class z_bloodforest3_0 { + name = ""; + sound[] = {"\dayz_sfx\bloodsucker\forest_hidden_3.ogg",0.25118899,1}; + titles[] = {}; + }; + class z_bloodforest4_0 { + name = ""; + sound[] = {"\dayz_sfx\bloodsucker\forest_hidden_4.ogg",0.25118899,1}; + titles[] = {}; + }; }; diff --git a/SQF/dayz_sfx/bloodsucker/attack_0.ogg b/SQF/dayz_sfx/bloodsucker/attack_0.ogg new file mode 100644 index 0000000000000000000000000000000000000000..296c477453dd16c478d97cf786c285b650668b52 GIT binary patch literal 20512 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 literal 0 HcmV?d00001 diff --git a/SQF/dayz_sfx/bloodsucker/attack_1.ogg b/SQF/dayz_sfx/bloodsucker/attack_1.ogg new file mode 100644 index 0000000000000000000000000000000000000000..a8b6b8ecaec7ac39b7b0d2fb494deeb86b4f9829 GIT binary patch literal 18646 zcmafaWmp_dv*_SX@ZiCn;O-h&+}+*XHMqOGOK`Vf2@b*Co!}vO2yi!fKRM_AIlVpe z)Rc91byasw@2-M{g$e)({C~wnyvYWF7{cAb+1SeE4-G=R`X81+Ziv4?JA}d?$^TXU zQ0gXr#Gy*R{*Uqz>K`>kV5+8-qvd-AXA2TrD`WM)%1NY2SecnQnAw=w|A^y)FDUQ@ z00qJTFd_;7fkFTY_ydrLLcsi^h)h&W9RdK8DO_;rBuiazLeTI<74h~6MJH{}@I+( zn*@&~m?{EK6tc(6jU0Ty{XiHZ!J~-=#(gIVc_Z4M6kD9_-(F z0Cyu0J&JiC@ZUxb#08-iA=L0}1?z4(6Z7itdiI?CC);q%d^6nS=HpmcM*|jSL>IFj`ow(K;>s?2#pj zB)Ty^>#@lFcV-0q;2hDDneUb*DZKEMsZPou>VFIl2?)cJhGHp8{rhGdK^lhZJVsky z5Co#DtSE|M9cO5o_pt)-i--TQ6*kE#dvcZe7Oz?(!)n?y#Nw8tGsAuVh%r1vTDTgVcfTg#DDY1~s{*9eONmWe_OKw3`O$$d(Esau+O->F=O$Adz z4O>kmO-`-FY>M4(MOAGBM{S|iOy|x|Bh77tO>X7SBbe$2e$;EV+erV9Dzzn5wKYyK zl|#u@Pf5*83#{2)Pisj{W6=++c|k>P1zSxmO>JetOfAjLz*TKSU2kPcO>5C_Z86kf z(eF#er%wB^+S;nd>Ziu{Po3wdDbjPYe>$`vuB0ZX(PF3KW~YNGv4pL*kS3wx2G-(d z;AXb6BtGLNp_Xd)r^!?^Jr6UDHn51Dn!DeYtDauEo1Uh*&VA^do10#$*_MWx*1ehD z@S@w+z3g18+|q*EoSNI#qT4~H-P!|K%uOvV)Bw!46uRSOzwtItNzH8|Mb7{%_SW8j zYqiIozs}BNO|Y?!9Qi{}J%ipFXJ?OGhTFz>0`i#AHPxu!6x$0c}Wv@&Ing1P?8q zi?S$fWvH@pG;VML4;7`0Jcy>SR1qXo7_ulz+YqX(ZCkUDr5()?GOJBf+M)=Gt}MmZ zvEh)65gExzPU4|1P5Dch;GxS61}~xDg-)A+c2JXtnld;J1V>t$1d^pJ#TBD#NKG*Y z6PC4YI|egcXi5i@K(>^nnmV#Pt++06e;TL$+jwb>CaiMJyRhFidDDhj2`4Yg+Kd zX#Z(^0mr1K`%mMPLrI|6KaIzBfR{u0hJ!5a>W;x>8@rC%ESKrZ7Ht*Tjz7KXfYEZf z=nkF+k9<%O6jRfptrNo&{;$TPTEMDo8t%XZuqqi4M=P#P9LHUjb`_XlW8H9=<#Ne# zxU6Es(S~aSZbKWa>TuBnob^DVf|m!Xl#k%Jhx`-w(4-(1*g}yAmZK7Oc$UMQlqi-X zk`iT>L&6Yc)+3UXB;`MlGGb{-lCn)II@WTV!+X7H~tUC&28f^kD8mF-o3aI2iSqZ4lV$e0%Nr9{N_~u zVp>BD*wr+^m^8C3O}#%nt!_HF>I;7`b~;>PI!kUF_n}5SylwWUotIBvuK0!l;0H7u zPyk7w{(+koABo{_ufT~Lcy2|cNQ2S9TWKkpG6=jj;yQxU66Qi=Ec`|cAOh^G@QL6p zGB)MUKKTbKO~Lq2ZuZ|S?SDZqz=Hxe@F28YK-<7ATu4d}5eQb=hg+KAjLeHb%Mrr^ zTbPmpwv_@(za^bd=q#e2~liV(02Lp zCz*_9xnB?d0ZuS=V|b2;Lw@wb83BMtFccsj6w6jkk&7J%`}WUh;Sm55G-L1t=YZo7 zJZvyGA$W79p;Z2hLluRmH2pWOG$rOAK7`Vgq<`^&^9a_X0e^KR9LOf8)SY^)J2@Wod887?>gz|~;=c-`Uf+h!EmDR9hZH!40f09EFbso+K0_!O zHU#@2d>Bp&oDGA^2+#)y^pQe}i?fF(7B=+H>|8-$fRmJe6=-PazYy3D0chxdUUT}C z|4juiqF}Jr1$lxPB6pybj**^%jEs?iadKp2=9W#y|D*Taoa{ z==8|zfp52LOl)K4PgCd9P45LHw9J_-Ko`c4lq?A1^1*}Gz6u2c zIXkvgw|c*hlL9MHyZ@TTkc6YG7vuXacE*O9H$``zd#y4W-9r)5OYOFnKP}M?>lRPv zoidL07su~9Z9$#2A_{$w-gg=Am8A{G=`2>VJWnpQsjG97Uh6|h82YuNA+KAs3>R+V zKKMEW&w3pV=Sps&7|RovVR;NiAebJXtLh8Q7e9PoYF@hdgO$;1f&9&5(p6rN5~{ z?Dg2U&0GdUFmi%6s+7;S2JY1HWrKDzg0Ym4D3@leWC>2<=qpxQ@0SMq zCq{=mjV?clC%U$rMrAxEQM4_cQnaaM$+Igh$Wg_E}H-NU}`EM8_+oi-)mcgxo%E6A!4kEyjrbP%_&qNMp$P{&e`N!>mFpny;VO;_`DI=x?2y; z3&_jvdTM^{fMd^+fo+C>>1vDS){Bvgg&M?p3@^PS3^g?yIc@g`A|~Iq&1dGVD|=YPk@;2LZQ*HTw7c zZV-|BrZV)MIX#6WZ6!Nrm87S8*MiT`Lw5#|Oj-{tCd`;_kXN2IO6DGy?yGOR^o=i(jb@;Zv zA3@r)O5`G4AfZ>;K8u9P$px)iWZ4>VNRo+he7#GIztL_$wxD%Ib+UX*@&J?iBgv6_ z+(x!Wj<3_dMQnd%JWCh!Llof@z*l)ob7E8>5jwz7bkwlZol5Oc-m=qZ3-O}s-U#ys z*!Q~*LC%e-_cO%;6fLg!O}d!znKNlkvN#Vr7C+r0mkqn}6ybZ7snW=qIj{AmnQNWC zn{k`#9cyB^HjS^>ueM*k&I~WXm@{+S<<7sf^M6O~%*&0m)7C{Uu67mj3S|`H^wBl3 zav|4>d86(oa}b35B=lAJ4G zl@G^p>vGfwN}@$w(+JDG^?&-_vwt=9<-+i#q6iAWU55fT32};se1bwk8GJHLHob?4 z!z`&IVQ*sal*ba?nbq{=yL2yEnD*}Aq%&{Tl0vnP0=<3*%uXCb(k+!x%U0ZVKkNHj zm`fF0HDj}EWEvFxtdFFTD&F&*GvnK67Nq4pei(^ZVwxUi&ujDZvJEArU#6GaPc~@F zxqKAI%^6kM=sf=r#?FehJo}PRGiJ{0R^{n+EWRD`Vm>!9L(^0?dtfd&j! z#&C*}&Z*}4Jw+5FkzdZG(zu&`dP`0de=>#)n_MVrCq% z@7_s#d1vS5+*s|>eNTOtwIyUQH`y_hb}^T#SZ?i{eU^A@D(W`!xMCbNqQvsHP3rOc z5|m-f>%6CKPN^p&NI3AZKYCx9&7f>|s*z{7`nlSr=~7A*>b0wItHhGdQx!MnO4g*u zriX=(@>{c$lRv#6M+6T+bh7NzD#LTFXP0*GUaOSjMH|^}d6K^iT_|l#_S$E*JbcXC zNKW^RuNv8gEoyXC0I}R1OQ@kPNodw`C3T}o*)Z|p2=5WJRB5>dYf7J;VyA|6-6X|v zquiib$DBWXQ55p)}e z3R|Nf2n#Wz@lj3c9mhfiVnL%L(hAqEV%Z|LT*PbwlDxhV6;8NMB}#Zir5m%io&cY7 zVF?g|+ka2q|fGs5_lF7|?=4p;Zs--hIL9__%(~!2o z7MYLz)h$0aOBkJobE3=V*rtLfFF=oNGHAl{E;S%fBf%g?NS>St>lYoa@O?Irs~9n& z7>p#Dnj?Z%907!2?0Xi8Twq)1Acx1g2)t@AOv{87IvG>fM~#0T3Tr7f`>G+xLE*8q z@tE_-mA^L1FKosX#D8j}-Efa?jsxK|`M&f=6^8~VZ-JDOH;EbX*IKloN7o8^(><(h zmt9Y;l(;(WjnvE$>eXM`w$+3NY=Oi{<^2j)9Pq!Ab{C*eltfv4HL$L3#>oy$7m;FB z#l6Jr;kVSH+ZvmNy#~$7&L+2?3Jy!%=Ws6bvRff0UlzXv9J60-L+k6+vIOl=y8|1U zI%m2%QUpdcj^j9lA0af?S{E< zy{=I7%k=J1ccHjS#$doTdSJ?AMlRAq;N)btc-^;sxG1*x@)MtZns|+r1 z2K6nnq1Mr}Z5PQ2sDv?n$Ixqy<@weu{KZO_g{xK$XY)n!)7JFkiDZ)f?PcspAv4@Bc-WZ11bIY>}!sag?Qf;F4_@H+KM z$N+I{Tq!IX(CKr6CZ#Y|dn#Ns*DS(M?TrM4M8F4%=oc@Glk$(6r*I#)w2{8c%B90<|V)=KQRODZacvWlg8Hu_;Q0BIYT^l|jP}KL9j` z>rSW6p1v;Y>y9zQ!SmmhKXjV6-+bnfcjlXK6IwyA))aPK1-|ytZmzzYf6ydkz9q+=W}%8(=<$K(5xGX z;?qw!Doi|TBRVl(IOhpyvUMD}5eX%S*}S!O{kp7okqI0n1`D9RVPdb1AO5MLhXAkV zcr!|9B_q1syH4jhKX+i3#^0}&7UGY~@JYh+5}K36pywvsB(WEh@xg=Qp27Rk@omcT zR*TX}mpjgyoM9HP$VIqu^ABD7E_pht7U{T}@MIwbbc?||j+4_2=vb_)m4Ve0S`vI` z#A`JemHBELRf%O4vR=X=@qHY(WIuZWHimgJanuU#6ZNufV{1DvBXnN@rT`xmf@9`) zMnp3wt_xfc6;dv!f!u{)@;?sW* zD*k+tS`42ggwx*I+1uCM+txeqwRftgd+6)nU{`;)zQ6@7*B-S0GLu)t|Qto&0jHmt_=d^=kW|v0mDkQODP()VCDqt&7g_(!cI^u)H*n zm<@R_?Q?4`^)AZmM@(45r!jbQclMxN59Ja#g<|R&?;$C*JIh-fr^z`agVJE`f`iY?Cz=GM@KtS$TV?>KgU~J&e8j%D zo?|ec(o!8jY$s0%;R{UbFH&0#A$)mH%b?kUd8_guTE56V7bla8@|Dluk84!aVDSetq!A1r-b*z%sZzT+bBMZkW~{eHtK1P zq;M@f=E!7_b5uj>>%FgpyaGs0D#%wx zi==Rs6UB&W%-DKTG@o<_nVYr{9XONL$mcGf4 zGW172ZoAkHWis>b`|{jRiVMEa0(8h+jeA$zTE@(exuOuu(qm7;x6QCK)P>pOHKsMS zew(!%=0i_XldSQRb~yS8@1;%u;;+$oGxNEI;Dh0Tex!D>(UlGl%*O9Q{|pp=zdYj* zG$AXP@2!&vlF_nW;ra25HK<)#K&o99T~195wcM|2d<2CN#iotawTFhkkbWwa(>}0<{C#ke+>?yC z7(eLGdnA3?sf`;}wK&X**fLb<=&4$Jj>FZ3so~*HCtdyy@h#J;U+Ws0&PbwCt7iiS zuBp46^#H5Ag`I4@cCg9FoHx&O=h~MX83U`~&((LZo3`&~f^Xi?3ws!xST?rUE{Qj; z0Nv>c-WaCPr61U0kGT>(#x{>+{7#YY{9L$G@CDH~TlHtBxXI z-c05l%-JYm(Ar>{nZQlL&9ZqekYv-)T^W*H-V3xS%sYFmbvxr7;>Zp3{mN1#>&Y7F zEpHz%{;6Rc3X9iGyUB^OTuPK!S2(pcOSWbwScbE|Li;S-e2n%v6R$;>8Sy%eLrsh3 z%<(iVqt49DFZ?n4(&9x|o)+R4IQ6{E8%elJ;K2L>LE){$F2G9xpW?RO6|*tH;WOrC zlGxfZo{FK8BwKlUxx?d)hbw7)HDIj1x{reU#(Ygzf7ZN{s2-z-CN)y~#)E^)PGoMu z@kui0dXjw*r{?j)IwQ3Gn*du3@`cn$qPK$=GLsq|-3sg)gHp8O?B()WcrgA)zp+qO z`}xDOR(>Xw8IRFY8w`?tO|2?2q+u5W5qz4KgJgC0{$5h{UKKQglxr79o7i7d0V$|w zPYZbkA$%F<<8DhlQQQ&&Xit$bt)fMV;9;Q7AWq%*PApPZhc~Q&7Va1Lj1D5fb~J`w za(EtCdH)3^cKIoS_JO*4iNh=^ot$`06ZC29SwxU7kvBIcJr!!$$9ap}^|XbVxJ{*| z4ZgiiXaSXeuR3z4RKwJwaF}HigfKu;3ZpOo!f>evy<^#$_}wweD$#aJLq^WdeYPs9 zT~FWCwfp=S5YZtgyq3$>$rG=tf0hHkcD>((dI^HRc~5@WV9$*qV+p|w8p=~m5?(p? z+IP+SS?#k||0$*^?l5|$mYnDN(s}L-1<75Z!b%B zL9QT5P9`>FOJ$;*b*tRr^G!vTH;GY2S_Txjh#(+q>^dcx#p8rytkU_#aQ2j2e4nMb z{dMf}oYOq`Xt`=!Jm6I~!TOc}-&*eFX;eV7)|}FdB0`Z;mj2AP2cW{K0_gk6#{0|jS=$L_e-?e5zJ>mwY_|CEp+cHdE<0;zP zI4V5%qp7l1uXy5E{m_pS&rxb{qn@dU%3ipk-ZXn~Ux<@3v#tLMLN)TIvS{rh-pFJq zWmd&r4MnOCxw8tJs`Odzrnk8qwkO?x0a&)^fbP(#hbjt4VXkTa+tpB{1}G|S*XNb1igZq;Pp&C%A>I=rQq zQbk4PfZG@lWvIkOIdwk&84(j(2XXZ4)Fh_#lABu7i9V4BZikNfP*c2tYE_u=v*&f# zN?WYHYLC;3BYW3i*;0euySy-l3wv_PO3`q*em<9;&Ih!>GJza4Eh*HAEG_l%AF-XO zL6^2NZLu7dD-~$$N)D{o8}%H`BplzY&dnbSJ2YRZ!CzJRucr<{odMH)CV9i+WoI93 zJ}yw)FnjBVCDBx{6A3I{mW}pS-bO#AsM%IoiYFbxbsuI8vSy@&vg^D)1qzO$8P6+i z7bciae4UAu;Jct*`IY>ERAPq7|7|SDwu`nm&!~-L9)F!GN&M~PFXRUQAB!|dnbOy8 zqaLUNWG22OvoI6I=*H^Z;ftvZst~vOtWKDqdhVi!jh0-TvNOfYU(af$+dC)w0mY@M zM-wVNKCM2c8_YAG@5i@}96&%GL)@zHk3>NV)es*IgTl=bldqF*wNfae1a5EGY@}gT z@825uKVCGRZ!0>OxB6bpuUW;x`qYT{oWZkJ zQrL3fR=hYiJ-TP!{R4CLx1=2@R29_$iL(1rH~nYcy(FDbO<3(ZXE`HfzfHVGdg2K^^OZ%R(cW}oY7Mb7 z$mol%$h_v&1?A&I#!TC9u|G?TX0;Kq##_zAo9tDxx$=4t(HlAB_8OU2BnkI3Z4lTD z_yzTdyHSILAy&ufiEJcHjW=-uV@KF$JR5_Q3Vyb<%`+Uy4o-=@aktyp)3C}a^EdbS z+5H5OX5b-@s!~u{(=$KKVC6LxVN6ilwLdcT7W*;^aUnA3(4*5aTi#st@uXDyBg6pL zG_qB{*ZN?h2cZ93WlTINbULKGlmCh+s-zV9BEUfQc$p#4S!w?>nSy@MA$-?@{20&p zn-5V%`VN~Zz_1(HCo?aC%7|czsmKS|j67Z$tP(LqLjba%HZDin$(qDD%N*5yW$MGGccb6V z_-6S!kD@pAY@&*EtQMk_|E~0OBIu_Yz0(bZNEJ) zMNUL_vr(-z{eow9QN6*Cr-nA~j=Vl0e5m!ZGWz;scH>|&+?CA#Y*->z^6c1HM#!o> zEmS+{PC>kUhwuI=5VD8RUK{uchhTCu>AT!{Tj69YG%b0OMjku6j94k`RT@wGVRP@a zYN$_M@bqwB=KynJQ|D;iSLnWdgN_GE)$G{s61`pX@NQSNpx-1ut?h)~S~mZ?R^W`GU{%gRS>TbmOD!f}neC6>kZlUrY97 z`&5Pqqt+_ubQ0U3iK{A7J}t_aIBB}ol#wXh*@8TxS22RdXAMEQcM|L1qwXZ?NG2iW z_9cU4>#2kHJevZ{1GJHR1!%pRr z%!0EEmV5f_DSM~wv%6j_!SwPg3|nZ%>~JRR=H{pS?zz!%c0R4erfJB_iI0_|Pii|6 zL6m039W(J;5!$gK>!Wzu>~B~0nv#t_3~xW+x@2gJLy9gI)nI{^QUv|7K7Kjg|dL>m+Kop>`0f7 z50^^gvY&V2n#8h+_~5IsysmkZ;@9dGb91g)Z^Y74=utqy7mp1_zGyd*QC3_B<}SZT zH;5Y>7i{YXm29%x4$@akE0{^YY1$yOLWZ?w`^X!deY=k=5I|4yu&VirBMZ;yQe$gu zw76)N>LIS^P;AnxIki9y?UhEae+VevVQ_X?4ImXR`aMa=DX%krnR&fShh0#yE{ySX)+s+()N zkJis?s$-G?Cl5{b+=Mb81cpU#F3ZLj^9JU67OVRqwZ3XkPOq{xQWP1p45V*~;dkz4 zS7|en4nf?fX%|+E9xsa;=AY&dAd{<3Yj~+1D<;~ZI903-)tv$s&%T@|<8CQUO*p%I zgbf%vD!us`)&!mR`&<<6BZ;B#r6jQtaeK*xFx0XvX4$^9h@w4<&(dS)er$_1gIq~B z=mjKU(wS7QBB*!Q`*;)?M(BMFN#wumSRJ1E$@7zO7hB7WwE4@Mn3_}CaFn<8ROG93 zWGN!Bp(^U;U1f0#q>LoOJ2gRHDh-=-=-)j$e4+g^k-s3rEop+2^ju2HW6<&Jbm*n! z63%adO;T}>K;sE5@Tiy}z7ZYBb9uKR!y_6X!1VUrZy+|1sI-a7VmIc_Hhj}ubn<@j5PY7|A_DCV>Uq-u@s?S{-a*iP>Kl^1 zI5F$5fp=LHxR^dAkUCq6mn(aFh`y-Hq-O8KRqou3UE{QVe!Gf66rl{8gEQW^oS&;- z$$8uKG~Y6lL6)gh+(Z6eoGLB7f@GPJ7&$K~dT{z9#+IE%`zXATO)j1`WCbvRV0D8m zAVK%>lltK}`IMmF=+3D1@Pl!+eeL)KB<77pdcOoKUpbOlnLOpNXifyp~kIyGR zH#P9SS_jbbE4Hxy6e~ua)(V+yDZI*GrxIts;5X=vh=oXeglI^-khRV@DXXF&L-rUd-5^Nc6*OAN{L^%IA zLgo{%o5<8i-t8#fsE+Z2>|o~rA`h_5TdU!oBs78Yd`l2_N+DL=mnaEoI)Q7aglP(e zlYhv(#WU6Hz2ZoZFv``opk;xPEGI`XP!cFPzn zI$f;l+uGZ#ALJ&$hfrN}9jBGQcB!fSI7er$B=-yVn41y@Df{zh-?ro)X-H(Nv9!tQEwoQ*`P(`G%bW~3wX54B>#gZOIo z*k{&2UKNpB7JWa!yk)7AZ&8#;YUxheWSV8nPmaj$H=f0*_4OB#d7imdczN%cK&nkl zdQT0@-U^kDVSiav&PWNzDV+J|S7ee%EiK89ib~-(RvwwsM>aa83pqO}YKu_E#U$cL z8DW{S)NraoYl8PtpIG!Xtu*n@Q3Bi1nWKyk*FH)+J6ce^lcHUSX2Zd~mDX<&<+MZ-<0S`_hk(D-S{q_P5&*RzKY!m^WG3f z9SAfb*UYXlvj{80!4`vZFL1Pj43W5Q`gOTK!G&j$oS(J8bdqoB%+hnG0cA#m_>$(J z`-6>lyxn`4^r&9XX3a@q?6gB&{pE_GsRoB@mW(vQdfa$N*~IT+pO&prIj0p}#5Ybx zrP^xg0ksoty7A``p?}ra(p{`s8&FGRtiNT-%ETxag zpL=F7Iu76ukl~MD()Jh8I&>G^DP3HgL%T}vMdko;wRTb0-ZF9s9zeK# zOt#!|pM0C|1D4@Dq^TLx1IrJ%Ks10Gveq`SCsJxe zJSQ#=kCU(~cWx9X5#83?jV1Kr$i7drsX{=p|05*el{Jf<7ExD6Abpjcu6hu5`o@9C zrfH#zn>q}nso5` z{Z2em#76=0vh{T0*^=}%7j^}XPRLw>V@A%>v>;7Kr(H4ogCqKyLJ;5EYzB~QIVq@& zo(0{IjGmZE!obU=+Ow){e=7TRKo%MsRH^n8|4@oEcrqddtTyaorAZ|Ii zWIrFASe5F_U?-oI&`=>SEV}T3k0E3t$Fxp_vd>jTY1h*Hsw3Uv+D1J3teqn)xHR6{ zHBAEth`?slxm{+ApxcL^MJ*|@PlGvEd%-*Pt@=e@A#NscQ)JN~wkQ2VifdA{x@>^4Z%uUA$UNgxiKe1AvIfHz+wtBi|V2bsz`lXmUr0a7K_ zcOkL9nEhRTWE}oFCcr8qi4TGY zc98ETX5DwMH?7{kx>P0Jt@Tcka@lvht`bMGDf;mV`bxDtD^Wo-iH5&kP{N5X#hWLh z)h@^pDr3H#>x#dndF$=rZb3IKL>F5#hpxvUZ9io4_^r0?S?TnJH%kcJ#Jk^X7fm{eIZGJv3nr2V0L$>m85%yB@u4E z$8yJe1vC4yGy=n!m?SMM1W{(dO2!r=y`eR6ogh}gH~YwFW-97b1OO>W_os0%Y~$^_K+BfjoL*zch+m=CCam#eNs_ z4KI)Z<>f5fypiDpMw4RK_}PVM*Etb~Z)*lUAGf|#z=Q`g&JB+fJtz2GuJuM@7s`H& z8Jd+Dx(q=@0ye9##X-0Xj zhtK2lutt%p#N&ohAVLKal@A-6%Xf;n0LZ??uWA>;k_uzCyArvBGT0Fr#TQNS*=sHBHfk|jug(V>l$4}ruWw&{MLwPnIAul;~~ZO7M}Bgs5Z zVj%gx;GUsSZ!QA<<}|fp!%w)-AX1zM z)n`TZXllApLVvdd%@O`B?{tEvEex-=EaHOjEvs8`w`AGU>U$j|3{o67N&yEIOD>|D zDys`K8LJGv>VvO>AQ!$3>9bBp6=kCNyA!?d>^F$U%k(b!dOs9WUd(aZ^lE1AGGI}KkPtW_CfJGg!On#4-(uSo0mC-N(ih`!qoB7H`kZ7%-Ai7%&(YP^{{l_2_vCqah4-(&kLmJ2pghX&z zbQ??ACCR;90pVPtERT*p5-?RRa6N6ElJIn;)&Y2aIa{$Ue2(U;Bzu=-Z}I-U z4U4QY0^9+;)iv!DKBN^A^LHK^Y^mW~^^XBJl|~(BpsmSF8!x z8yKmaL~H9xn-?jgOndfZL&AuP+vN&KHrBjrV=dAz^p+`LI`y+=jH9@qA>6X_kR$zc zW~GJsE&tJcUn!|3(i5A2hl!>icP*129~K~{tMSh_spGY(F^FfryRW=HD4kez?z7K_ z_$bI)X3ZmR$g+cviC?*eOW18LVAF%Sl<&Q^IsKq~X(Nb-Jrj7VTr?w*rA4?IoNie~ z&4D74Zz+X6<{50*pt+Vf_iabf5aQ^1Pdjdtc~$FxB0asUZ}K}ktH=UtA87UcXB6t% z-HumwNuD#BJATWF%*+r6w(n&fT-ZEqwOY$UrS_H10b?z`o7l~cscib}e5uqx&5DS6?mQQhmp`7Nf{RZleYpnn)=W*1Q{K)LAx)m&3BE4 zR17sdqk{Ljkn;U1bI_QEOc|%&V#c56`?<^@UJwLsFIQYDjqfWZCVLO}diz;emPlDx zC2KxPUh1QzkO&8o0)U1o*YS0mNyM`I*K^;uD`N^zcRqnym8W-BDiLU^-V0J){U&iG zU%Z#`!{H#v#%Idb`ZooyG<(afxv9L+KuWuK5;G&U$o-*FDWxCS4I#fha|1stfIPa~ zwb#4_ntjVO9`Ax>eBQ^#?mFr-hPThkBGAHYvJpTt8W5Ns#yzGP`GGLl4I;EraA5g!}-BJj{MDy5Bq;8RDYIsNz%-I96 z`%!9g{*+O=uibP?;+DVGOP$kFG9-P9BuNMOtYiIXRmP z!)3Sz7LxnFj85-!<)Uv4W2Anet(GVg4;5Ru7mGq0Ay7N1s zfY|Ga)Ua7%^AVgNOgcvw8`PpCIO=Ehfys7)E6svmb&1zPGpZ9MeT93!x`3B$9sg(twGPR~UiPNxsWcF%LH4Rgb&r z`d-+7&CJu2jRZ)+uVat^`iKH$0mN{s`4Jns8+FmXKjm7fQOV#??wtU2S`|Rp;yYRn zIx4|SHhsyFP3E}&sm!8f}Ae5aFkqNg zBct}MjC46)-*SlNVWuXLfftu+cf(Du|GwrAMppD_TgG_J?ROg<)BvuSvkj+EkCj#6 zz9>`E+z++;IY$^zfEYjbN$8Deg}sOJro0lzFqMhH2?Rk*o`@tQ8362Y4bOBPb7rUu(SRd+u%tm!PM{EA>0#@N<{YbS;;U8Bbr=N zD(b`N=FYP2I0%;uYC2daIl*nm0Gf|0BZD{1U>bO{jpb@2+BJq&5e&Op(BiLzkCV5O zbMiW2Ms?EVA=~I#E1PG6W8X(8?EvhKC?Zcr0QD&d5b}gv-Rk>tYuT7V8nR+-yZum6vkR>EAIn<0KyFL4|3-o| zy_HS#fYxa=XL(U?Q_O@yzR||2^2eff$J&9Fm03 zuS6VU$1U~`bTV;M4Q2sMCPW`r(^hwY8)h*YYDwmTS+Q`fGOAi>vGsp$Uu<`L` zg`g7Wjjpc+49nG~eU165JmvfuXQzzoFc%KICsRX=Fe4XZrlJ9pFRz6^XW#rb@S36r9x&wk8{IiE}4Q9_h&GR{(lp!tw1;b9&w#)T7kZ1KKuCj%=0L9EqoY_>~ z{^njD66UKZ!EvqMXa=@2CfA-3N0iob9~9MjPe$Ma-mk53TT&mMi7$d#e7;+}t>$-n%MXe99Cz#1Ub{KB1b+23co{_o|-uM2k{YfHcv%M`A;9VX3 zK57s?V;$A&c$a~3?J-vR+wV>__}N`|Hhb|XtMO=UmyHmgSC=imFFBkUa1+%w{T_6U zh)=D;v#F*6O6oLpSy3+kFD3=q`g9)&H`5DW5f4Yn`gQDVMOR~K;}eu2j&QVFs!S5! zM)GBPvsK6$nj^#t)8{Iu>R&u*WKrJNkZaT#M5EfNam=2_2;xHRJWXeCwRbI zQDY2169CEF{>;^F?M`443ksG=Jn2I(wEl3GAYhztBdByH{`xFLHomm68V9tQN!JPJ zNsWqQ)R!V3kZAX4tlpAkODHY(<)VD;;z&EAM)V*zGy!AQX=U=c{wX{Sx6L?qYsqb= zc_gJhFh^Gqx2^^T$8h%v@K6BWn7o)@5reR)v5?a{zmucRDQqKiGix+L$_%4|lE+}c zEAn#B{cH?rk885ccdd;7zGj2jw!n+{Uut`)Mr#{^T(=c zG51M(+P#q@u-JQmA;S!YEQt|VQW?j1=W5q)ICtJE_diIr68}1DVMTVu{I0_{PF;jE zQfF%F;ge%Zdea`yL)h8wIu+Zb_x@e~WzOCExP&^eG7ez}a$g+0KmT4u& z?@g)8-nzvcSw_z}p;6c!d-TuXX@`+1+;b@tIq{WiUDn7p6oIT6C>+B;zr~KwTY3PE z1^`}|+}p3YNWvZTsrZ_usqS}4&mTkQVrRy#Bl>;geR-i6UQ8c}F3)V7!(=hrH&Xp*?-j-bCduFZ3?_P{;xvp-~cfW4Be6npM1N7WrL&hEr zbrORCXZq_)lA_;qNzFG-e?8>?;-N1#^D(j}wDR&Z*NB11un9T48eZ~CG`IQul2x0h z%v%mc(|&{g7$tzrm`X_u2CUPyg~ij6rsi`$WA^8(1_YkuZ7uag z)t)1}@M28B1mKDFwBd*^W(bP8}I_IiV%u=8A{whO{;jjx?Pg8Jlwb` z=PVZA%=>Qjw9J9Y9NaZlZ!mfZ?Mi}NG{_Eb>-+Eg-BlKFgZ<6aoG~C?3~AE0llPi0 zzTEcNT50824o2B%13(8}mOPjH!KYf=BBbf7v?Q=M=;H)C2Qp)58A%8R7^`0;=_i`B z6vz4dH~(fZl!xvV>+a?qqw?4rW zmPHRBWR}$#A$N`?EzA`T)1mU8h*bmr2!slGUT)+~xdD7$nA}i3Y|UkOZL$e@_oA=K?c>*d!GLVYv@W__1ildtOAnM{`;8xDF64ppPahy5$=E&C#pJYU#Wb}??JV+~^{BPY0|3)`b`?oUx6_*46MI|ILM=ZF%awY%(pUW9hq#03U z5wRZ@4IdOz4hi@H05rH8RuL6miA2$#s%rC%w#)yc>Li=u{S^n>5N*oRtQ0nk5eg6X z?>c~o;fEf<*z5PNk^OL`QSuQgxYjebbG1;?rE9o|G9?>6#b-n`bM0q3j}Pr-GL3_w z{7fyRbTHq3W^b+*;y(~&&8LZUnm;(l@xzaq=>1@bqT*9*dQ<}#f~l~KPM4_xLz2y( zlrv=h;GF-c`r91!9TH|@{<$q_YfjFX=mSFv{fBFrX#ZvT%lFsF;Q0!og+v*yP{U8{ zTabvO8{sn_3f&zrBH#yR3Li}#SQI95!;>dDDoa!TV{k}75S}y`OIh;Y#wd(51lMVp z`fF~0G)-wqekAhlul-2CwikxQGl^CDquD5o`fH{WB2CFZ<|O&EGytIRi*OR1=>OJB!k_5mN*Lfu zKh4ZGtsuTS)>GoJRbn@tX46w)*Hcrs z)kwD0X>?sqF-r)6u`Xc`6G+U7Ze)t}pE*uq@_`Mi;quR>@t*|% z0HmR6tdU7VISleyWqLIg`dMYMSrxVaUy++;mBR!Z7U568PG~!iR-{A=9h9dGQWfUT z%X94&&W}Ift@&P791)XybR zS}>y|T~n;hBVE*}YQ3Eaz8$72(v~SBDpIxnRs$9S;K0|Lyop$B2th0W@JCWcqz+Cr z8mHcmRUYQrBQ%QO`kHAx&PA1#ILt+vm4HEA1iq!-&rBSb+RIFslA;3pM<)dM5~gA` z5d+XDfei;jxdc`@EOI$aF$FBWc}%g{B-SxjHYHUxIV`zZRW&UfIkjYRITkrNEHxEO zF*R&8m1H@!2GgIcwu`E2t2k=2jix%cJ{rlct1NPhe{R84SMaS~qwQ+Se^sf?tEw%t zgQ;vvE_zC8rdnXlZhBhtY8rDsV9m2Ca*Nn%YRPJgv!-gvt_Ch@tLl1-^J-diKFf2# z26H~$CEr@?hAS(}YReyMKRmXa9w$mo%l;YAtf-QjoJNDKimR;-rr12T+HA6ziYr)) zkAbV{;=JgjtC(7n>7Oo>O!eGNHJZR8wrXxZ>n?hFDXw~&W;%Dl)2^<1Nv7)>rdoHV zdINK=>vyu#jdJs|uG4C+>vOKVX|~J1!D6mz$-xF-zWLzIPj;(svz63bR}=LNz+!Lh z3^utgMR$cTAQe0Opj$0H} z)$}w>7w^w$5orZ1DiZ#HaW}i&Zp??O_Ew;Fn9#}skVBWzS{>+?aVH& zI$+tF(e_H-R!5f*esIjg5&{6EEEQC6NI5*P1r6W^Ws1lOg<%DPw*u;*Smj>apiwSr zJZEKL>e66kFB!qhdv%Gx#+v+3Gj*n+0CsfrpDrN5LG z;p>WCen^Q1C{lO-J3Q$wf&X7%dG)S`;rWOJ0O4LQ|8J zXapuKXxlXRr8-j;^~FoukQZs{$Z|E}I!FKMobqqyMGeZz)=AFFU{$6l(llUI($Y-e zQGr#V2up)isYruIWkgFot0`?&16C!&G^eQi1x%2UW&*3StJ$3svY;=-Fs35!$1$#~ zXuubt{-^U<9OH_%Kb@2J$4f{3={%|#ydBEd?51m%H}@@A+cw{%J5Q80XsgIJ{~1*? zjF$6RTi^tE=6#CNkrfTvI+0wV|LHuU0j$cp<`zry&$O4B z7{RnpQmD+dM;N5cyibxCulxs6Ml33fSGLYeR93dC0LMM#pSUMrCC7mShb=h}iwJyl zARPI{tHi3d=tehmB|6Cpjx3_T7;yC2j{JjhbzS|-qvooocPFaE26kYugY$ul= zTtLGCxsU|v5}efdZ|MGx3Y@rs*H%c9G!PAZlop{WOM~}DTnBJk!kCAIg_u^X-?buye(zUsGMzoB@nH<9?Q70`F6wWoVroldW`QkNswaA zthV#TpJeh2)7?to1vtUfjpW)V4!Y=qGXwzlKqx>oAd00Nl!YA)`}WUl;Sm55G$Zf= zXM*DpJZ&&HA^32nB3J&4LlK52H~AM=los3-_cn(7Z9*tTfG;O0M8{udYjU!1b?zc}zx{f946Sqhwj5^{oF z6<3H7PYuVg0O2jM-(UX~1OTjFb(Qcep;0FDQc`%Pl2T!5>JTQ8VUl8M6-3ftQs)R# z$hZ*)X^a0-bO`Cn=<;C~Ih3UQO5J<|PCMI7#_Wfrf_u3xWL*fQJ6( zYmT7ozf|xh3I-YAQ4m-mARq`y-jh+%P|}f+QqoY6y{D$8CMADQMNLZuqNbS~ANkSL z-!m~l_WnJHmS(JbxVHx!6oB_&fmFxyFK!4365yk;(e(?FvlvHIcu(+KD&&)Xsk?#$ z1GYF;NO-`Zu}@(7@+>Gt?0c83yAj6OB<0ii;aoVofS(|c`w6H*lv~M@Bzd36EULRk z6tqsX7JrEW{Znawat}@r1#mze%w6I5epDV?aERAxt>o6-l(~J0QULKZYVo{*DkuWv zxL>) z{T-1iJIu*w$g9B)+#ukm21$3l!V|c|spL?$9Ao%u$W#_KHQf?6J)G0VY-+-V2!Iw( z54R&B9ku~r3}zuEGpJ@MCJs}bGE)6Z^?h;6TsQ>`>vGhFM$PLt7-&gA@S%d)-CEQ= zlE)tRkl;uCm$)`=fOXO4d7>K5Zw2tfxH!i2G-eU0i&i}D*nM7o{&oJD-r{@+>SHt{ z-R9Wg{S$ylhXk;a$NIW(+&0oSgmPfj-z8LdDk!WJywFI5oXRzK;D{P9JhQD;`AS(a zc7B8aV!wrNHr@t2c`EOR1wOYJ#Ork2AJ74^s~MF7L#QN#KrWddtnJSk%UvmSroO&S zm7X$hD2glDTnO3SjKiEUxLhGfz!N6ce+`6A{-)rfnqUl`%W%?N1Kt`Dw5qp}{w|jY z-~cw>_;GnjJf;R5)xY1A=2Z}4SZ?N`LE7p2#8(o4&brC!Tz?4#(!>QUU@xA%`(w9@ zB?%u`;F~B}MMsR>EV3Ca1D}ZN;AM@Ye5Lwpmw~W*BqkMB%HB=(CMA3DZUEjSFT6;Z=O-II=13Hl@xN;7M#P;U1 z?)9RFwJ+Vb&&sPL1YMzI_eFMNo&ab_VD`qp{gF6cc-;(c#St$OCpovat;5!(iWow5 z*LF7NHx$_U@BC!lQ@R^csWSb~4TA35;l?qe>}-49_rS@nPZohqBGM1{4D3Pp;X9be z$oB|q@cR}Vpm9ZS!?dQ~pJkzn;2#IStVo&Wt2f}Q8uLFAWRZCqKe3Qs#U_VWgfI$r0*ZaT}^ZR|+F z?_%vUak7f$MkW!&#cD7aNH0>puqvFL!qww3-=pzUz9jk??~lCq& z8^$$y+8`V{O=E2y(_k!)NJ;KdGULfmm?y9UX-IUjCaE_+h!q;t4;!}5MC~Y8w>@&b zL{Y_!eY-tb5!EQGuGl%}Z0(rXeZ}YoLGZHyFFX_rL3wsi5M5JeG_<1gr3u^05^%AT zgK>wZA@QB#Cfnbb+L^SeY!tj|DVFfs)GtGqs3Smh?F&o@lv@u5VuH~E>(lV5A9)*~ zRaz3l4W-3D^{?8TFNwj&FZFhN{5pu{v8dHgxn))ON(EEsaB#bGSiq8BXf!Uvv6oI4 zl_G-Z{QXy$7O4X!{E)5;$>8{&V7e{*GJ0b7Wm`+Ut~>2aH=Gmer7O8r^qji7TsAyU z_i={3IBV_tlN}7h)YI5?xP3a_6Q>Z=i}!6U$z~(O!Rj+MQt~Pp(Lg2%LJQWC6g3Yl zTl_NXm;N77nOr{vskmHPapfRdK(>!tqfS364@mJeA{D4;&*6-!00YU-W!aQBsReWQ&e3Bq^T&~NVT zcHMZgn6Et;vQ&1woVb_=wcF)&$23RN9cUY=4$tZ!S`hS0N{8@`%>&9OWg8n3xpLTT z+vCr0D2StOTLkYyy&h@d5oE|eyucFC`=TNz-;N+07`cdyG=NVQa2 zPB@B_CMeO<9C*0TrD&a%2+CnU$do7BvDH4GKj%V3!c+6DT6H@p)4sa&)WZA!Y@2Vb zFm%Z1#Xqt)eXwD)R>D9wQ=WX+3crst<@1K(#~uIJWz>0dGErovo{e69mNYtRWb*jb zP;>*U?Z|LRN(jvlyJR!Rw7MEhZ9Y)F-Yq7Im+U?Q;Hz6)8!-0;PB4cfr>gv0c$sA7 z1c?wH1$GoT4D!`pB^qdNe$8C{2=y<}O|y1Sv~*+S5}41eRfQsLP#NJFhF({G?`Cl9 zg5A2Crj?G!)f9ZwKs3pcwU)7r96EGXIWL&i%p&J9>6>MS(%pJ+q(GV?@lyGE}GQlZ)p4!D3 zsY^^*CuVxs%PHh#x2uBFG`7d!4F`m;O>s3;JCxv6^2kV%rmJL`+0NS%X9CMSb4{tz&JWFeH#&^HK{T%zD+unwDcppIVwB{@H9qXE-8qg^v9e zIqfkQLa$tO#N8f_&YQvxMsa_Y+%C!F*iuLR$f#`4GmEA2!Sn`aM2QT~MTJ1o#vu*U z9fpdc*X~g8SP@G73&lri*h0wP8i1cQFM!ilGnJZ}56QA42P4R5z)QDP*M>ds@BbKc zoiyIbR%uRnFBBr9Qy|Enrd{-QQ%FI7Kx*G65XU;~x^gt`mb;LPBNn}Xi+S_;e7oM+ z*1iR6^uxENhOTbG;)8Cdk^uG7L27CigmT`4!Pd8Aq~yI1^Lu%`yxJ!$9|x%Rc7>I^ zLC`tOG3=++NRBp+-!s@Tf0w(8C_JhuG+c}8G3=MFKw9H#wI+Z6jo3w2_uBYC$HFXd z?F9rGR8k^7)_eMi0=cio=_d%}zU`$3M~qSOG?sXM$5Yqcwuy!z-M7#C+R{P5g}5~t zGNjpNYd4co1`E-nOCoMu$tzbK@f_UN>fu-v(AC9y5P)4YGD5{<&uD6W2%Tcu#F_@2Ulo&_ zu!g{u7JDLt!PL!bosZ3!yk=`nN&nNg)4L&$u>xi3uS+JxEZb2FlnjoC540C6E&kNw>de`x{5+J;vFY>cpN|JSai6G>ik{v&k_5=>Q1EqP@#y*&);WSd z+Z)f_S6DunizL0~gb$rdIR8SB@xs#?DZOHA)?x`w`h24b*DV~7uTHaSko(JrR8x?v z=<*hK`X!iU)t!Rpl5BOUMf>Z%zNx(e3$~?9Tk;jU*%XUXM~tqD*RO*EN88oz)Q=C& zX89M*R98M&J2;w9`qh>?&HO*9Vw=u3bE*>RA-z;1mfS#Jv6L-upzq6Nc)mrkNYA2P zx|B*qwUwull}KF0jDp9LzR!5jwzC^`Kd9;!0+%Jk35_ZMyr|msX>F z+~Cu&p66-85NcMDnQf2xk^i7SvwY7LPMpnUni(Ixb{MMT>O-`}oE)CNf6;rTfO^vFW z@Q5Vmmgomgz}}Ra0#Rh`0DZhGg4}%EYoly=rg4FZLUT+cD|(SjyO!W17EBs1;LD4{ z9XIs5#&5=DUF42)EROYui8zH{d|zK-JmEs*?b=s2P-f5$Tip5Q)IPeLvd0+(S+9-A zrTD3I$2331b4Hbwj;v&{JnF>so<2EIt*Bbn5(+acR}~Ixqg_=)>rw_5GseNi^UdAe zB5ia_o`kN(9sI?}+Z&qJ)N&|c^_|_pRZObmgSa69LiH+zecQtFH;ofyEvUz)jQ4~; znTZGBThejrnU^zHTxEWZn8_k7j}{c1nkhCDrXUENWqG%j+pHHL`A&~ zDl&UX*L;WJEey)oE$PG(<&N&?eB)zovnY_7jlnI01AgHlV7KWYbK+Pj6C##BcjFT} zesj4;b|U}z6?Ra&^K{lJKt-pQYl` zr5!j`p7J7}2TZd?Y|1||{$Ok`qFdL%=jSz>5OWb0O%!(DAG%?y>g4V(6@?P#l#Nk> zMkt>GUGX_yab%=iwS5{8#trHyBHDP&S1^OnXx1&Rygo&?`1<1uwC`J5uEyebpJiCt zc+a#DhzhJB$MoR7$V-*!kOg|HELnPa`kZ^d#fC9)_3P>d*a*d?wo^E1BITN;)A74*6vKv}l zCL`3>Q-md2joHlTzYhD{hmNFIv)eVK&-*;UMI3(i5$m;WXvw*FR`QRMbN8OnC;ZIm z{ffC9u}IX5?n|04cKf`Vy!}1BSVdy6C#k@gK%&G6G~Eg9PerL=utZ0nNc*)o5S}Ot zgZ-VJp7!FYr;W-@D&N%;@uNk|jq)#sB1dZ^v3r;fStnG+3VM+W9LZHcqb3HD-)3%< zNC*P&g`kj{3l4b^goBG0X(%fNX*y(-pr##Lb;A?gI)5en?ThOOkrn7UX$ztYkpj+6 zG3`UX?1F8Ei?914ta&);a&xhWnU&5CLAxyZ^zm=UbI}IZ>=+_}j*}M(HDcqh2$B)X zIeu9Z4Q*;=V?WyK#03R9J`97HmXAt@H>lM4%%U(7P)!zsNy^~x3+61ETBD-gL`EbP zYk&4kUJCl@dzTf7C~W)b$K!oFsm?q0CIRRPHmR2#xHVq4{ytbTQkgvW881~%=Fyqu&i;b$sMc$wT}J ze?^7oPR3p5!27{hMO~xs5f2@1zynzwr^Tu8xoB-DeQI@!F892Hv$`!w9C10e;*2w3 zNuiBjbZ!?C+43?j?9%N6U!E0RBLt)kcQKKiNVPpzPLu|9Q0P_b=?LPzC%>I^Qtua_ zhKDqN=N*nt8TAsuc?5yZZ)9S==*dtcRg+T7n8!GUSSFkL8cDzGG$wo{QfkeZZJjGw z-pr})v`Pb=Tjq3%t=vy#rx$1<_!qltqI~O}45@-JG3&m!x5VB-Da*!-G!EaKR~pa-7b`YcczR}$=dlmq@f?%wet zS)C8S+QIq~78m!rh>9i&yH9$ZqPR+DM6*Fcy9l(#lQU7(oJ-CX#2DJVm*6q?P$<`$ ziLtS{xxOF%F_qxUctQc)@AbroWx^wyQfqZhmZaJ;!e(s3xqU$LlXlCwcWW&d5XM%# zBc$BJlecA}V}PPfJtg2yZr#}Xihtum4bUk8C6w!^I_F#Ed<)T6jjwybO#|i6+n_H# zagDs1Omp(0Zdp*-RqqJB;FFx{Gxm7WN;1@MZMb9wB>X)=m?zLI>Ol4rn|P?8U)0B;qDhf=(G5+JTO8&(lR6zSdtR zwYi`1R(Oh+VV?6%3nRw9oSwoaDQ+g`@yv^fFC5{k6zF*)G^uZektfO7)K~hlrA?Hs z;^~A&(3jJn2Gz~CDKz@0++g;7al*%dKoA|mYUzCYaFkh+jE`~8rlN!xWzuhxeNJRG z8^GpVHP~EqxUT+DrMY7QN__Gssv;CnxnBqn)0vI-p(CmujN|TM8e>G!MdIN{CPu#9 zB@CpAe4MSx=ZTshlzrCDtX z??aPF+?j?`pXq3IDph*x8yXk>D@rmOUtI1v$mPRkkXA*1LE&%a1(k_**Y7*kGIrGq zDl%X9^hS83cF3;N-K)pw2}>QDO6CTzmpsq;6OnrkTFtN-bXxag8F`o3}bc)y3k%W+d)#coCeS59IH8$pQXstoKbSfoSwbOG2?|sp6Yfp|F z-nH{HFSpJbbaUUd7hp7G7R)w7J{Fgsf>?dtyu}b6_045icD+DfmD*bp&%zpGa!M{>Eiy=8so(*=a$4b ze+6q4jW1G@->>g%3Rq|)LoPeJqmx0hH5NIzR(R%@u{47mY3&Aa_;GOE2mH|6kNfk>rr41}(YZSR~LQu{K@DC2}1aB$_^83pM3>IB+t;$Haqa;iL}ZlL9)EOBhr7DmH4 zl;CjliSEkg*|%J)tRT>F0j-G!8UY% zfg~z+!L8W|fv13N%c}r31|s~<*5_@G3w)7qx&!BXNXRGjoK5)NVak;^dI2BfCf?*u zOqiG`!6t=#mCAy<58uP(FObQ?m|pie!iY`1ZAA!!{krp3yT1XJdyf~MDNATkO~L?T zI`(*jyU)1cO>JneLf6ual%w->uVQh`^2{gr7DwBR`S~)aV}w@9d~~OiP%ilaA*04a4U1DdSEi_7S`mG@L{H%*phv{FG$-k;thOrI1KZjL%tyEPWex zwu>8I{j58lr3IYtcDPbc;jQH1^}9xboegJ$1wM1|Msc3DuXxb$fNI-`?A$Ynt2!2; zyxI*>2;AuDUqX@vD6MP4{cvRJ)neU>WXBOBsqP(9NoE!Z530*fZ*yxR z8xA^(Ii^6(BBU6smEf~Ti<@Yc zI}LY4mekEL`+Zw&$v7sz9D}5dbZ=0Oe|Q;2<7oO38M+ce|B0>J?;=AT9hCoWO=yPT zie#{0KYCnN&`gdUPg+*U)#v;wn?)|B@dkcRVCypYBcZEN`ZxCQ(w6#gvS`HxkzN|$-5hNNrcXKSdZGMyg49VqZU92D z_G?z2Cgd#dJa5J3F!EvP+?oBG0nc~Xy<@9lIx3pfN?Wn{?KW^!>rGwjp;1i;s`geyUhpemWZx3Gn` z&v7-F{%Yg=ns69ayjCZhlW3OguKf=`&BFsHqTx!O76S+IO#J8g6cBj_w%na97K>iohwwJ+ZC>y^_aiCsC zl7s`U3BFKC7Q;3j6Ag^KQV6k475n`e;&=LKxt{G6W$I2C3ayVuBJn*pC{dw9yE> zIWDB*rf10rzhunl$rPWLy0s6T?KD7hliB^wI0v@V)ao#D0P!fBxbPW=U;Xu|llr;q zR5=Bq1}x42pRrjXo&UGqyDs-@I+2e0=i|6^m3jNmNhem$sTWW3WwTysnP(fxF|3{# ztFwkeWFosPA*UtyyU4oVm-#&6|_S4HZe$4i<(y6J19=|FMK85#T#ffB| zN>xNboSBgyF6w zIgy=H+OEs_=oNmOI2k)hSI}~#ma`?0VAV7=)g8)Ui-#>$<*GgM)Jf9?sPe@>rbxd$ zNoX}zu|=9AH`k@v_+-rwn*h?IJie#%*yIsSq7iak}S$_Fjl+> z_Jsqo%lAGYjMv!c@ws!BIrHD;)9L1)*(7Y$Gs&l3C54JX{`J$@@XGuRKco`)uIb$J0z$%XS%Sg7$cw*$Brq<(;{mQe$lNW)ZHh z;ukDQBX+nP1UBRZ56WV8jdJ3407DA@w;EBnpTd2*Gvv(JG!_2w`VbEtZy~EG#a0U-EPN&3Vhy_xO2yfB+KyNEC^=J!1LZ}>^?9mj1{3n{W}{xGKrdOy6YB6)sM3rWd{_i%0_gP8 zd?dOeS3_K%m(-@oSd$9*X`sv4tFa&H%DPDkzmo0+FRQeki9O=^A{x!@-@D9VNz-Fr zYRfdnGnj~5hVY=))5ypwg;2~IYb4TRJA!m0rQMcZE@DqS;81u=bYJn`9DlkY=>^YW zc1;B59f?p*3Yq))yE5|wWn$p^T3DbM1k1K0`ZhUJWIF5XebiIA06$Ws&~i=>vCGj$ z(vUC7x;lHQD#^kPdhMWkLp}uyQOT5<0~bXNHec>SHwjd?5|J3Pzx3Ac@nM39^mUbe zdBsFrnpE!V^YnHUf{p4T!b+YO*{P?%eCn+edi@>Fo;4U;{1fKmsYu)ay5sC0eF`l+ zS0E%ZKe>`&LYZxow!WIsX1Bczg^S#+NA;nb=$!Jq6?gL_l~uk!#EeA%atBYq@^|04YdKAwnjE zI81OAZG5kjL0nVnEp#-tUijWN%kpjlPd~Wc&#N#j%hu@`N9g$|Dr|N4;|V6}&u)2) zcyZ9HMxJJaJFY_WdsQAgTbyxkO8OncKf37LT01+)a;knD(PsPQ zD3T~&3HE4fJLjE{wl3Cl9L{sZxfWGW>4^`@`I*i9jGyF&VMD(M3J0xQ+|LT@^yq%Z zrC%=xbIkJQW;Pa`DRt|H^3q}tqQ?ZS#94yyrj}A{laIVEP}uD`)I& zOIkM&nU|`p_~~8$p50D4PTA^BvCmy{{iS&3mZ?yx?<7fHEvDwE-AgAh#kU#e6+A;U|>zW|lO)r{@pvTM^3GoIwDaa`vRMRLsIhpK-_+3_X&y^6&jv{&N<7!!FjO$MGgFqDDqHEW zjoa}sAjA1Tr_p+Hk~m>};s?HAvD}d`thQo_Ja#JNv?x4e^r)JQ#JqK1&zgtF=dKtv zI~j6flS}>~@A}?(**k{hjn-FR?MizdvgvdlN_05Nf!|*txNkH->d{Cj*ydjl1{bp_ z2CBiii5xi$d92@>mz#wNU3B1qN>@O((T%k{Q?g<f1*#fwi@ zZ@psw%?~8|+mZ=bsiYNVW2CDqdY{AW!{(`jBmzRteme4HVdl7)J-bDSwG4W0*jUJ1 zpQ;KKyG2rm1%7~v!qYO+gs|l3x`()K&eEvQ8pmudwkTy^gy2O5dP8NB5@0D3;V({; zce#0JYh8CfkCJ+;Ct92kwP?q6S^^7$oc zogX?{9Ag~4SrJsC-`QX0?WxWN6d?9sWByRD_{3AP*_r;UCO&DZBZDHn#(~~05T8^_ z8lr$~1mX85x$lc(=&-G?J2j=v4JBuz#`=r0a~y5XZ);|XK{W4`@2`B(5N)cPk5m$A zHA{95wS_}EJHt`lIxXazw`a&v1fu~5YfS9@gUzs;iX%{6Q*~Y+qCl{w9rVjFZZ;Ja zE!!=T#^slWDeOhu75MT3Ys1B9A|ox&KkoU-#~#fp@a zFah&4Z1%C<`~wC!wFrfpF&QmTk2(#izVk<(QNCtc&-pH?IE2l{R2U1A43(QocMVcI zzi_nV>mf&3LD9x2v;h^vHTpw`ABpn{d~e5)4^c(Z*YDi(MStrM*VL=&zXN45l5Po9 z125cB-4Nc9YF(UT^J#Yd+571Ad?A_iosbjAgIh%sVrfE_%W_!AcW*4u&&#ypPwca6 zKi-DA3w@gUXv@ms?6e%3aeu4f2t@`z3j<~Cd={x1zhx34dVV(8KbIM^=OwL@eY&Kf zRl4)CUob?$oG__i_TCB7YWY}F@CQ?;;L1dMvAT;xq^>SG#H5JUVC4Q-+KRVM#$)MLxV?$1UzPF_{(;dt>rsU-BQ@@+bts3$O!=mgM?ruCL2~R z2I<;C4aRK~OkWD9Mp$#jlHOAN3i1!14Uy&La-`terCqtl93T-as`Nc~Q0A5z;P?FE zR$1^8F#~_~(k*0%bhT7&CWW)-JkOg>nks4Sc1pjywP4j{Y=}oFn;Xg4((d}@*SBcv znx;A9a=OI}^HB}otli;<{A%mS<>`t=d3=0}f=|@<3l}>ssSo_AV{N`5?6}mmogE>l z@whVwO6^vdwLB(;z3_M5^O4_xGx6b_pNz2unMJE!@f+gZpc7aQxog(1Z#_GVynV>f z;Mi#mji@^kmzLP^xtHWRoS=y__$K|%(s7k8H*LIFJ-_|!= z<#2u3xVe5`5Dxn~{WGcUdJ(?+%33HQQ)ILBcJVDUKUrPQv;-M{%o;aW&Mo}a^l`Ro z%~}ph-qTvAZxWs>oZ(4~&hrPKQ@3)%QYBE+Fx|NB=X@^_BgxF^0iIOGPvuH0hIjA< zDo~c&4~?F>hx_|F)fsYH;&b0}nk3kM%r0wQ_UG_lt~EwDAPaq%dyT8h7Six)D)%oF zvVmHYmMacoL=$|_D?ezt`vG&5jKPSTW*Hf%3_nb~^>zKzys7FOv*r1ah0+)6nfgTU z9DL=lm{if(&e#SCTyB2y)su)XsB^=7#Sw9`s|kEU<{z$A-;Q}KThV{-7m$zO(eAQg zq}e$(CK=9u;%T?gX>~j}QB-;C(QIQdU(RMifxHgZ8Z|B%hvay*MQVR!>INMCMx(IKJKx1H`y zbVs$CBi=}O%G1ebrl}OtgwSskOuM{d$r%RX&n4H_1p{_K&Uxk`Eu%=BUCNqG`7sYzgYGznPZ#}r83N;!^4d8oF z7`x4}zPYC@b)X&=Tx@*_8ZytjRmm^JI#IvTyFNK=kh}rw+`IG3A6-` z+Apl5q;D3YbW?mZ(22b}0Cs4KUZ1Jbwl+6!J^%LiiO;|32sI;?hw9?Kp3BeS50`X@!8MM_*wxU0&;jQ7}a=xPbZePvjnCX)Gqf1 zg*oA~evf_=!?`Ti6x%|-;~Mm((NcQY0rlGr+GYs;B|@Qad_xt+-sMn=Tc^UEgHJfnzb+pf9VZ7dYDQQ<+%JxEB?gU2p{i}!{#jVY__PZ`m z&h`7>Os)he^c2R@F$hrRo&8c8pK@~Qo}!6jf_tZ{(_1y>!`4wxN2X6V1In6LQGL=i zoTgUFLXTNAa#UC3IQ~_k7MB)eOlEc5Ku=frKtN5VP8XphVuf?ZLU*>}bbw-{qRcY%?8bmA$UAb)5(D!Z;n#LbNi$dKzWA*pq+F znz&Lf<@iuhJ!Z7{jXwy`)UPU(t(7=7F5`XqcNk6D&)hy><)vcbn~YywnX8z;@A8#Zr_Dm zDHsWRqVh%t|ROcR0gr8(V;?-5d!owxl0%`uV2B}^DJ`(}`pcUqNNB?O7$ zcK6w*2V`z!F1cJo;f``Rve-wLf5OJLhXWmh;i2qeMp%C}P>`0Y(tofVfsZ-a?oYwG zxw>;J?z#7BGeb4$KcDGs&to_2cN1T1#nP%htV-6^YI8p)wEi2HEV07Z{xv8ZnU@4y3^cJwfoAURF`hLu*hu}58J{S4gu^}piVeeQ*2S65nrek{3LI&?R1wh3dzgNc4i&#> z2q63Z$G5lSepo)8Ib|}G5fA%u#5y#DMz$_Cz{E8QK_VIwz>jJ+>=csPoBF}lXPc8t z?%dh)nZxDl^`*mW?NmWrmF@8740-T>{wk{XV~`m`3aircgP<{=uZroI{Tv}06kDbdROfyNQw){V(!k{nQd)?9zT6u z+?&saNtGiNl%jRWK>Of_VZOrQ$V7?IS$cHOEtHUuaN;E!j^^-w@{wS(V96L~Ohg-% z(qRF1{%FTTbCU-d*naoV|6kL&tUY2b0I$Z z(WUd`$#gg+P*y7SIZ*zbZ#W3I22_}v($Z3+tqG8e0^dgzWX^bAUFCiVENeY^C`^Cg zd$*;-yyHXn#kT9c`n&mAO1AZ?#DwdC?ZN%#K$xR(520jh`X`csQ(`ws$uXph7dKMZ z-i+Vn1^4+c zLD9{Eosf;+Wv_{vEiv+5Fca|`6rS4gL3f&JtDA+7paaYE_2 zzq`|$@-WSf)Vg&S4`m|gPrkVx}o|| z)$Dfu%uq4w{}VwCzVZ%bakbm6{pM%}6g&VD49N|j5;6-vbt(uN0f4_SJx89!Q65v; zc>>w|J^ZMU?-|s{`}WI**9VXU08j(w>ASZ@#<}{*XJ0ty^+R~w-(3N*%JCoMiMtmG zl@$!jO};he!cUIKh!w(+1OV7>rKh7L9#)T0=I?Y72jf%(T^|{d1OeK(O!%{(EC~-g zzXN6WG3oD{tBixczg?{=^B{N3)(q^*k{LoFBLH~V62nM8PtPQ+TKXRIJjPUMQ-Z*F zLJoG?xpQWes)$23nyP6jyeEHA0|>=-6MU> zZ1}a2CA<{(=9f{(4BN0hW4T`@fV$e|MkY$!ZurmNcg??Im}YZ+{cOdwO`g(}-^@wT zxZEqlg$a!W{+L|3SMzO>@DdyjF}?cG>WFe~=me00%(N4kLIwlQlJ!c@UQM6dGyEo9 z+97gmWBzQv#-yWvQq8{OY8b4HMyLIe7l<;SASsd)P2W{#14!}xwlR762NHGlhi!lI z=}QUp!uXJw_;R-vlH@wAydAIDPP0xO-N>OF4TaH~(6yN5HiJ8byJU+Kj<|Ze<`fB& zi=bwi7jxNSiUayiq-b&r@Y%BfUYXqDXYMg6zx3VHlr={6j_6+ckRh=e&_Win-62a1 z2FT6!jMBnkjwAiHiNl^a?QXJ5v?-w z?+Lu8{V?&_7fJdSS@>D&pHt`_MJ6q)T74U|*$C-Z9!8T))iXtj)qFS61mLFiW#SjU z2FP-G#iq8vw%)C!c?%;}^}Auo3oFz|kwTr$TOOM!jCM0S8UQ|-JlHEWBxRMCThFTb zP)y(T_MFj#E=we^EVB4vM=CKGAg9%1sqbnG=l-qoOPU5F(ayYn0(-aMVF8Tnel6X` zh@*+8GC3hB#lcWXGWuziit^83&(Im`^+@qy7yyfg&!bO5(1Qh-uRK3>Sj^ozQ5DY; z>=zAD6WJaaA4D+K70v=j(LbF=h1r@!-7=8^4E{XA*5jqv_QBEIVn6)R7_ghna}oQy^v!M7OZ8kz zN*2>1F`ul-bj38ltnkpW%-oW^r??GHqNC5!en4IWmx(syEa$FZ0$9#1*ov+0V8(6@m>|WS0 z3NjebY1i6zIZc(Qw7;(-p2?i9nujidIzQWpn>G;tIKv)>5wVu>TI=>hXf80g-A_;> zUYhQ7OAH1`Bp-yVrwCSG#9Ux0GYGez?Gx!$8ecTE7D4>brJS+fg#zybvqZpUIRuKh zOUam14Jyi}GNjx6`Cu1*+s&s9ErX-4Zry360V{0uYoH_u2E-#6Fa45S8qT~--F@^)`YWxeD(!d^4yjEar_es5I`yAP;y1NzYeSL z`)D5-?d{fr)pAn}kL>T8dXdE$h()%I8h?R<}6@H^sGxqNel)Y@}<6<(~bK3?3r$|q^cUe zuo98_c}r)WSCNOwmzX0l=l??W3io~Hf64wXHnQbH?4B@F$T&`Lr+b_^L} z>wJ|bLF$EWm1ht3i`F=e1{OY;tl%R%LA!)yt42D)v}W%Ae1|XLR&#T`keg_?bwFPg~z>Kzr{9Gga^y zDBSs}p1GF#L#gOc)>eWKBA)MO;ET5!Yi%P7^-1KRM}@fJM8JI=Wy;86le7Id1<|b2V$(gOqpLPravX7%q^b>#rKA4<|kL=0uFuLgr6X#&x z0loE{5P1S5Aj4qn=s__U@SB+>n1AsF!cCW+y&3N&MJpqr1yye_`mruwR3FAx_0*-` zyLt{8--VCFT}v`~sK2IE00MRO3U{Op3ko)4BTE&9=%x0i%3-ziLhp$S-nh{zU3IXZ z`4c|&rE_cFXLte@wP`uHV*+}Fw|>amI`K(sH&t-_)!L8gy4ZykdqT5q9xGZ|764wC zoYhCp=y)i38sy5bUPO@jax82Qu=H5;?5;ye2nIZEZhe*4`K|P*ErjZKKKp<3(=bNT zS3}iP$Zj9r)Ns5KlJ#Qvfyn<7cd#4<^_?Hgd{H780co_zXWf-OfP5Z5BQwlg+Ra)f zq}Z}kM9m7bdV#L}%6}YfS_K(*CX4^_u^^$2Oy$J@j@b zK2JVuhhB=ZR5T4FUYFdtOU`BBgR-qlPlo-i!y)G|4BT4{n2{OA5S_$ez^WvRm9-zK zzHgfBG5O7Bs?m;p$=DzN2Yv7dOYdyWDdo+!9Y#F?SO_(|tpObW3I1YGUDpa-!2Z>~ zO(wvCe(Mqnk1On0e}Azn55Sc(Z+{?JD}UEKa$rVLyDW@8PR}6hN7_7dS~uKPA-!n1nA0 z8!ZA0AV_Ic#q7)|hR!(WxpMm)+JO-a01E`)-LrJ7Z(nM|t$=;@>Ap|~%V0tv3$-bW zskP8^dSba~?KDJ$pXwT;j!h&1FCQ;q$C|ZkV3H@mC_DgOmK4fYc?)A)#_vOp5WBx3 z4$AwvAY=+PfRH_jHAF!M1B#xPwkBu#hn9MQA zsDb*5pOeynLZSnnmOPb9)EHrvmu8zuy1#{39pWZ6g8&xvVyv23VlY5bvB5{3M@##y zb7|}G>tcw@>Hs>_w#c0M7#Ti~ohn9z=%xEDK;IeGrA0ltx9fDEoTa^axFq6$uc4oX zpFIdV!cNOc8JgPXmnf|}$!WVS-L$=eM?S(4y{l1BaS6|^kAAWa_xz}^c85^OVq{yk z*?r9(ipD2b-j`P$^G;bxx0((B-j!UHGnE{aI5l#v@)qQ1BNIDE1Ry0D+Ad@$Mlj%+ zRxZ~^T8n8ID>r?CnmQ-LM$b6gZI0QUA+7XmV!g7ReEBq}ytfVZvh4@uA!U*?0i4;j z&F1?MG#3M?Ef-CcgQ%2W0W!YflBqu25<2%gAx0hn?ju=1kfDjup~PT- zN^_Netaa2TF7X*7GoN13T-6?jW5dLXi?|87BoxiEQ2CuUi-dGmEU)brs@Ol4qSXM2 z`(NlRShqu^M~2#8gHUZEGa;d*{N@aq@64z0yQM^A+yIG0Ir`1EsTFr)?(3Odf-mKf z-?C)SeXiwUJIzC-w&hI}XO@(|ytZu_G!HaSXJ=CY1jl3n000000000000sa60BPie zw*s9O9+rIjRl*$w)wVXs24Z8LVHD${BryU2w3$<4`oc`jmYDx1@5j;Jx?5Y<*G-%6 zKR&k6@g7h;@z7aqlC?486EjEeM3GhFL;i6sQqBWA4r{jsC9IScVBwT7m|qIZ^c`Cc z?S*7>F3(i>-Zihw@gomI`x>6UILy!6_bs_>i@mCj!_u-j?1x$H(w61Zbbf~HxrugD e3Iw1706v!d?<`-s0B!&b000000000001g0gRPvMn literal 0 HcmV?d00001 diff --git a/SQF/dayz_sfx/bloodsucker/attack_3.ogg b/SQF/dayz_sfx/bloodsucker/attack_3.ogg new file mode 100644 index 0000000000000000000000000000000000000000..06fd4163aa33d6a139001e506914dd81cf202d42 GIT binary patch literal 16968 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

hwi%e#H6<;vl~Zu_F`85&VR!} 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 literal 0 HcmV?d00001 diff --git a/SQF/dayz_sfx/bloodsucker/distant_growl_0.ogg b/SQF/dayz_sfx/bloodsucker/distant_growl_0.ogg new file mode 100644 index 0000000000000000000000000000000000000000..5e13b69f1eef19e328ac009e4c12888bd97e2b61 GIT binary patch literal 18197 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 literal 0 HcmV?d00001 diff --git a/SQF/dayz_sfx/bloodsucker/distant_growl_1.ogg b/SQF/dayz_sfx/bloodsucker/distant_growl_1.ogg new file mode 100644 index 0000000000000000000000000000000000000000..b4ff7de315ca42a3f1d216495227867641d79082 GIT binary patch literal 49386 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%0DD01H?L2x^G@ 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 literal 0 HcmV?d00001 diff --git a/SQF/dayz_sfx/bloodsucker/distant_growl_2.ogg b/SQF/dayz_sfx/bloodsucker/distant_growl_2.ogg new file mode 100644 index 0000000000000000000000000000000000000000..8f643dbc420e6a47eaed07e9056935c391ac65c1 GIT binary patch literal 21210 zcmd42byOWq*Du((2ZDQW5AJTk-6gmMm&1YJ?h**@?(Qx@gA?2(Sa62~0?grg-fw;P z&fGh*X3alStGc>m_pfX3+Pivpb+xjUl{x?o{GYU27!esIEc}m!=l0W=&ug_nO0ym!)>an5ZTvjzI1DhJT+}JywoRtThu<(UhEQ z7FFi@RqlYwTtQrhKIE$$LXo=)#g;>~2iXo1slny>xr6~!Q| zM+Q^?03$LFKN31Pv=SO%2LRYyy4as|v6OsY&17-^A%P491_1OrVavv2kJM4g&oIf) zN~&u5%yVmM-hmAkUn3c(InFDps7y&(5g}P0syRL)nl9X{i~uRRJ`9-u5)WWX#}`i1 zxbF>$4YK6>#4xz;>O?WWFYCatzn=-3la%9?fSi4eUzzToPF#y zIj(J(q+#YQ&URY?{|Gt7<#Qw0$$9XI<5_AV*&W8D;u^0�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 literal 0 HcmV?d00001 diff --git a/SQF/dayz_sfx/bloodsucker/distant_growl_3.ogg b/SQF/dayz_sfx/bloodsucker/distant_growl_3.ogg new file mode 100644 index 0000000000000000000000000000000000000000..903ce159e9d0c4684f5a975c32687ef066e5c6f9 GIT binary patch literal 34155 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 literal 0 HcmV?d00001 diff --git a/SQF/dayz_sfx/bloodsucker/forest_hidden_1.ogg b/SQF/dayz_sfx/bloodsucker/forest_hidden_1.ogg new file mode 100644 index 0000000000000000000000000000000000000000..8a83653e530182752f81a7258827d7f418133d3c GIT binary patch literal 18661 zcmagGWmsLY(kQ%eE$&5&YjM~(6ff@XuEniLixh`a+>1L!i$igDcZz!{TJ&4A=e+m5 z-=CW&dp%i`$xJfIB$G+jRt`5-*nb}q5GycO6pwNX<+yxsKfY;EL!DcUNp@l=LqnA7OKQ95QXn4&57icO8G15@|GpWCigPwijbnNHXqSnU5wDBG=rP#Z_nvU^5D1Y((3K?v#2u4Vh@iIN) z|;7TRsOeLj4C7}W){z^9h^;x>aU2Iem&P+p-od4Q5fh`CMRMYj}r175) z007j1Z#Y8}#PV3wGb+sLs?0Mg5;Lmm|F0lF#VL;s3Kr>EVaIh`hRc(pMfb{*`swnr z=M*42d2_>bAJca+*i4iARM_62_9lu3#lwL@g9Vg9y<+QU>n3&{l{ui27=8H#B~@S{00I1=d>xO)g%ZI5fDfoD$n?SS zCZqJbu_}X*9b%JkNMX9^D1YB5@AmtfV`2}2c^+ffB8FTeSH$zwT6%GA`Id$z>-=*1L z!&%?XqLLax3Pmb<3o!+4n~x#tSah%2khYu4GTy4mYuOU&V_&m>Byx`9-D z4c*Ka=ENu5B-9hkpIIiD>wB1Meg})#tGoNIx$5gDx#??J=w1g;xw+{ln6GJ?YhRn| z_szPkUCT|?%g@cYO{u%B&AM%;*e~6H#oW{rgAGBvx!?^ihZX!xWp%feczr{#7`}rc z&tjW{K&8Ful2COeC8|{0Hzxfh?xr^RWVe;Qmv1(BLO7>t?Lm4guKI>aZYx%YO-gF& z`kLko*Xo*AzF;Lbu6)-B)aR~2k%!DAW*A@l=AWP>sMiOBHP}tI*Vppf+`DgMcXiVR z%T^7yRR}aYxrPXVIuB0_0MK%DFu@^Zh`>)+fFLOSjhtvGP9QiH&Q% z(8OdxQmV3GtxOo{XS8H(sz6e2*=ChgBEXEdvTPtJhpO#aQ7h&=EK@q_UOdx^@;ah7 z^#7R8;F*@UJ~OB8jgyUfW**fDPKOFr+o?KbjXm?W_KlaRF5|^@I;wJw&$ViV({?#& z4IBqs-lHTNSzf238wvUJALik8ASv6bD=-5j^;VXvp1?Mm>nc^J6wI)-soF_(Ic3|K zSGDE(PGAf2&;d#9%$kB$4-6VOJaV0)YJVa1 z!G@gbnjj?6d`(OL8K>S&mq26Y8Dg)?6QVokwsIY84B`9kaM*Nu*LlX@2LQid5rAyy zml{&M^h793e`^IAZeZVvN>c=4fJn`Gl_{>9Hz`XGR8o;G?;$b;$JDG&S=DSRKR9mjY|9|?#In}R zy;?4#t=F+CwrsOHE~l+YvnFL+yUT$XowYco6^&QxKBx5cI<_N%H{?M|RWmv+zn+cB z2)66xz+a$&sTT>^B@O!Z1Hl*oJOW_=@sCj)WmFls(eU`stwlrv$T3X74o(O45NtMx zO$;v1bkr(;VQ6BA)Mo#M<;O??ec-0Fw%Y0+ zBnl=8$DNm1p(-=UUr|z$lhe`CQM{sf_39NZT}4iAURF+aNny?_Dq2Q{;`BY`S~*j;+ThY1*aO-Wlj`@I|c!?^Y2t#mLNdJ_UP@dPdNCaDN$Bzi(8H;oe9IjIekHcEA9 z&B5pf^9%4%%@m$|C3}1;@evw;3h)trQj@oKJXGb}Jlt4Qs9KDb25{zh_T_}&wK}Yx zdv^~?q+35%>YgF`9x}}QT5o==WB|aKDU8&-0g%D`Hmn=l`<6?oSKZmmqw!|=8oPcs zq_rpj)xwOJn-H?mGl}>BuL?qEii*0%N;!pHNhp>`Ul^vD!eInYfEW=-NBFi1`I=ac zvGJ{nDF2?6!I5BwkcMh*^BnULfbW0`7zXDQ|-1ffj^rz*T zG8EMevLEfy>Y!v=V=^-;9smrWHzr?=LkjhY+&hGYIdu8MQHrRMaFogR8e|%T0-!;H z(SXfjv=}2+s=K|7`>8HYUR*G@jxIXO5E_6gkACmMaX%Cehl~M8CrT)sD!$KvRrS3z zi;6CY(9KpvopJk_Cy1O4zyjVdw+5*M=7FIanls4$skDb#ivCCd3g?{9q|ERm{)`By zaUIROW5pbT3db*xOIPnBTLlq~0Z!fa7R?YwWRZ`szExnsYCoCOaF?YgCX z<%a?ZX})fsLt1K|UW_v`28{Oql$H0%k0E^SJ%}k~tmI=5BS!x{#|!|AGRJeIM=%Rh zRJv8TfQaDKPCTq2WjP$FI4iKO;R1tLL0ZTY?dP{r)4vtfS5dwjb+|0mzUjMe_3EkY z&$je6Ws3G{bdWk*dd5V6VU~!V{tRy`cM4*k;Al_l-0DYUIUCyyyOF5(`A5ZYxQ=Vl z{SpYrn}kC?{k?IGGxO=gsZ7y4x#?zHD^h9L;nw~O78<{OQ&>H}zreSBEf)M<-4reW ziM7h#IX3Vx7BKM6U@@=Wr`YSAD$_PeGOYA)*a!_s$%c~kX0u0oMF3#zdN46g^m0~S zw;5ewy3Cor9Y0iE#M{p8lgY=hCB(OJ?>jaeXB@{)m_#=#ggtx_H(T{fqkO%Z1$<5-@PtfY;YG&;Ql#NF05V7hb^` zouk8JLXr$VAiu!=wHy*4)SPkZrg9#c2&agmgmgviT^h89Fczray5=~;`N=ePT4&JJIwG*j628B^e_1| zG8L9M^7n8zIGL|Ggf+g7wO1hl$pJ`h-sRtgu-(OR`;=$3<4zaYa^7gAkQ4@r%#m{x zkf^ATgMO{WhkCc-U9ZUNPoi;GjjLG|gYB7+WMU!~hgeE;zck|9@dkrCwQdrw7qgR_ z{x76vdKL;-m{#?IDl1pNTQVT7UPVw;pzOFNu3bVD>vD#Mu4659<8BL1GNl2g&CMDI zo587)aFINSPr9uut)vC4ve32;QligVB{!)qQw|JiORHZbMRWFTj`rk|X5Yle;dQG8 z<~qS~?a6UzLMULpmaj7X%s-@}bmZZ_^z!G{1Z4UgU9CbI@-u6r)yO zv9buGCVZPOrPZOY+%@f!3Sa}M%~Q}VYv6w#IIZ0>QlLCG>#uUnqpLlQYY&tk(koDo zM`Rj=WQu~`1j_fbR9>w40!;oTBfS%S9E*na5}*2q=IQQB1c~v5?ENEynmWAd-s1PQ3{B}S@HEM8_5RR;2=gErQuOXaw#Y?`T zhMj*P&v5=EuP_9qz6>>8G>*!Z8KD{U`AOHm4=OqM47DkxF4O+trQe-=%;YO!EQru& zoil+1>^D%n2^mbzq81jYKS~kdfyZMF%(pjo!e4G5-8^pDlg)H+nsi#QgerxL&GF^+ zmviIeX^vCxzjuFerk>@`{CH_{xa`TY(-a|w;GjX_^xP?lr$<-%X)jKGFnq0fX% zrYCte#vlM%Yv}aS@7JHOPl!J7oD7%bC(WlqL;mU4P3m|Wi33Atuts745zvNWV8CWZ z8QLaIxr_{uS4-GJrTIxFnJEPVz&AJ`5<~V%_fhzml8U1(-KOZ+;G<1CbHlWHNsKoV zjxYW}1eKXAA6m=42b|S$79)9nRN70zirn`{rtC;Q%*8rJFHM+uqIuU|i=?M;O+lzb zy=bu#vA<7tk9Qc5d0Pu@nH??{3@dhv**;G8>2N8?5yN+qco9*PaK^q(6REtMI+kwV zYZm$mO^O7x9qPXpG9e%=dmPvPx+IKW16}Uc`@@|(WPAmsE14$L2*4naN^CFKu{5JH zX&CyGA+$&tQz5{XF~B?QcGyU4QYlNC_GR702f1X0balFUxl9W&L6e2X;1-5cS&C+o_O}ZU?4IJRYbSgXp`44#1BOwd4j4!q znT;>DX*4y_wM-E*#8e5caA<&f9qy%RBS|`vcn#3?`^NPZxkWOYIRyax&SDJ(Bu8#y zx@k70d2P3zuJcF2+V8iQKM9{XC56}fLjqHuOmr~`L5Z|LX5w`KmE315C zEn`&nrW}z$?3C>TWC4xT1I{R4Pi_Gd(A!oYM=^bJtOMZbM>_ z$QJDg!L^NO$H7wofFlRS<=2Jboh1g;w~$+hMxu7uDf@PB2B4B(P-$X&5Rj6sldoF= zSin1&ag1Y?GKW;Rbup4IIoep>*L`U+u=j9!hUlkhzvkN;Oq=VBN};5Ij@upW%R0Xn z^&q9)L#V^sl}x#shik(xN`RcH;VEU1Z$S1N07O#^;Jg3^zZQQEe;dWGxVoxoi@x|C z{d$S%@)}C#FhLW4%U{HGoaqN6&`}`L`spM)MhV&YBWMw1uJI!VydUIFtv8qdQ*C{w zIai3Ppm|DQdrY(Wl9t#`aPP#FNJj|~zoaa#{xmw+@?&8^|1{llYj$2BdG3_p@hyCV zOW^yfFQ?}iU=I*~|dQ?5s-Qfa4hjDv!ysth{r)%(A;2&Q@ER&Ke^f_>2ex)(DC=g2qM~dGG&uVeRh<|%4b2}%zYGwO5OJBi_Fq*#**N!X(V!P&)}j8a^=bgAA{lHw?G2m<2`HPb7v@62DCg?J+zFM^hL zXG*S)`SVh6-+ZblOH3Ig8}#RAOY^Wwt**7}?c)#9BLWirtG(T8bu?grM4}y9k{k4O zBs_OGfSldfgE=Lzgb@}LV@8%?2Zr+OpmQXTcXc%L)ZxnAm>zR0dbPQKrA1P?jz&pT zgoJpSFdKXi9;26i_Ibtqn(5Cl`@YeJjuR@bepus|-Z40(s?rA$kkZ$5N>eQ6{wpz} zJ)R6qgP{tH1-X~^T(Jpw+6N?fF`rQBtxK315}yD);cFXR3q^ex0h}SG`HPkx)16fE z84~Y20daHHTN(i$09gdc)&X?PBa0c8`Uh1!-pa|{3rp|W+FNa70Cw9HC+q@CPXYnZ z7yxhP3)7476pv|b{c`->wy#mG0aLR779xQ zSVy$tE7g&oq!Qb!5j^y|{%$~)bhuslz~04%C|ITA_&oGt^xqhAZDdhRmzzF5fAE^H#z4`;u) z6|iWc{R?PsnU;cyBl2hTxSUnh0@gZdV2uePN-Cd7DI#hk`TW0W0v(LN>fsDNVaOAF zPNjt1@REXtTV+j+t`xn2D-5atqAc*sXi+VFWMxpJt+>1NaA9m4iEN!jWrY6%_z6vta93t+ls`5cGF<4zL)=U>g=gfD0p2ulU z7)dnDCRh9+^b7UC*7}R~v0LinEvqZ3<0I8~_HyIS&!+D{Bew7F zuE*(|*Gzt-bqUb~n0eBym~?vVOE(@W=}{hX&k19^34EFI=?yw%odwyVo~BQC-FVpv z8Z}yZm{$3FE1Jp=w+C?&>DHk{{p{A7iMcBm z1ts}kE6Z~7bBePIi)tQGxRc^zpR9;@OK=4XRhI(EI~`oV;Jv(vvlgI$g$bY=PMI5j zbnl*n*>BLq&zk9tGj*88a=f%9VUMKA$J10b?G66?)?k#8)3)RH1lub<>IimG>Bv#$ zM-xue;s@~|v*EE%63JZT`9H%xy0~YaD6ptURj>RAFy$7^#aY_<1-({w{Ks zCExF-qYtNxc#4NG?Ko?G7kVJfvG0qa1fc!^ZUukdAKv@vbNMtfpj5*c(_LS|p-TVO z2ryc;SPH;<0xsT$?3k_PB?z<6=BK5;XRnFzQN$Oz9oCPiG8JmJ_P6C}kbZYKwaU;H zLuQbr;%H8eM&m!`na4S*fM+}lTRRc5{PI__O5>}W3fv<0B)3*Q;`zQ@!UEnCN-Vzb zmuvV8x)0y)q~r?Hs($LUyMEa8i1Vla@O}1ZEGs!qn8=m`@T42pTM(1Bp4!4Gw?_a3 z*6=RmJqf`%11jKkM<6|1`NJaj{j#Bvh(=qlyQxBo8C0|!_xIg0<@f_@w=c^ z!(vVp3o2wLRG>vUZOxo5B2{Y1E`Dsuqwwz0TY2MM_3YeZE}*vmut9SK6N%O=0uAsf zX8#VG(L23S;=092c`RU8c535R3>op5RP4mE+im{s(n;Deq5qP9A9RBN0caxeHoK^I zvV2gZnKP#BYH>9V+#y1`dX~q3-ff)yb>0ZU(5&k2X-@wHQm13AE7>Sf>;3uuZ>VkoA(Y21<;92Kd`hlA|2YcKRl|HOHs|t+H`Hfpypu! z{7^P1x`u7;jdkKZVTbbM28(cP^-A~)F5TOCF8WAzS~bxK0^bkWcig)8fGLQzYFpVgpf5t=QrM_?$N?ZbL0n!;=H5Spxwp&wX(D^A@%U`rQpiI^ zCVjkA!HBCOD#)44XWV*zIsSC;%X&9cSfb(|4+0gA{13VZS4Lo-grF2zqTa%-f#f&L$nAS8^-RQQ4LjwF7zJy_SHCdxy;KRLhZ5 zt6iV2)Ls(fx;QVA*6&=OoDJ1xiPnj{TYLi%YW+6RJ|iB$-{gnBV3R{8mMWb}mE1zH zwlDm6V_LvI5-Rit1)H1bE&i{HUoNW``*7BwZI@6nG56oN!?zmdbIyu`U~H=l`Dcww zgGfmR@)O8Em(Yz(T)-SY;)>2g0VIGBDt8jzm#2v$v{c;Y#|rn(E22+)uF|kd>^_{~ z;8ytfs)1DKIBjU95>k^AC1EqbcZvfF;U<{K3$C-+i~{S!c<(6dl~ssHr}o^-<0$U-JR_2v(^U z$E@7eQ(KzAAJCV0Uw^nNI-HrAhWWpDTAJmVdKDMAMfJlFU*uEHSJ3w&$L)jq=T|`E zkJIImTs@Vcx-gi}By=euf>WTuDG*)RW+ZUc+>*P$V4~Nq`tx>s{r>!?z-W|}6je

qHME_&#tbCqlV$|&BA;vBz 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 literal 0 HcmV?d00001 diff --git a/SQF/dayz_sfx/bloodsucker/forest_hidden_3.ogg b/SQF/dayz_sfx/bloodsucker/forest_hidden_3.ogg new file mode 100644 index 0000000000000000000000000000000000000000..0bc0874ff72e63eb3e47d1bcab2c5edd7deaf93c GIT binary patch literal 22478 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 literal 0 HcmV?d00001 diff --git a/SQF/dayz_sfx/bloodsucker/forest_hidden_4.ogg b/SQF/dayz_sfx/bloodsucker/forest_hidden_4.ogg new file mode 100644 index 0000000000000000000000000000000000000000..7f889a360a3e52c825948230a0989623c59a811e GIT binary patch literal 24385 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 literal 0 HcmV?d00001 From cc1babf570f0a5417f3b0fc0a025d7eda863677b Mon Sep 17 00:00:00 2001 From: worldwidesorrow Date: Wed, 18 Aug 2021 14:19:44 -0500 Subject: [PATCH 26/40] Add config for mutant heart protection --- SQF/dayz_code/compile/mutant_findTarget.sqf | 3 ++- SQF/dayz_code/compile/player_zombieCheck.sqf | 3 ++- SQF/dayz_code/configVariables.sqf | 1 + SQF/dayz_code/stringtable.xml | 2 +- 4 files changed, 6 insertions(+), 3 deletions(-) diff --git a/SQF/dayz_code/compile/mutant_findTarget.sqf b/SQF/dayz_code/compile/mutant_findTarget.sqf index c89269571..a5dee71f2 100644 --- a/SQF/dayz_code/compile/mutant_findTarget.sqf +++ b/SQF/dayz_code/compile/mutant_findTarget.sqf @@ -16,7 +16,8 @@ local _target = objNull; local _scandist = 200; { - if !(_x hasWeapon "ItemMutantHeart") then { + local _skip = (DZE_MutantHeartProtect && {_x hasWeapon "ItemMutantHeart"}); + if (!_skip) then { local _dist = _x distance _mutant; if (_dist < _scandist) then { _target = _x; diff --git a/SQF/dayz_code/compile/player_zombieCheck.sqf b/SQF/dayz_code/compile/player_zombieCheck.sqf index 40dc832fa..b15d05ed0 100644 --- a/SQF/dayz_code/compile/player_zombieCheck.sqf +++ b/SQF/dayz_code/compile/player_zombieCheck.sqf @@ -60,7 +60,8 @@ local _cantSee = false; if (_isZombie) then { [_x, "zombie"] spawn player_zombieAttack; } else { - if (!(_refObj hasWeapon "ItemMutantHeart") && !_inVehicle) then { + local _noAttack = (DZE_MutantHeartProtect && {_refObj hasWeapon "ItemMutantHeart"}); + if (!_noAttack && !_inVehicle) then { _x spawn player_mutantAttack; }; }; diff --git a/SQF/dayz_code/configVariables.sqf b/SQF/dayz_code/configVariables.sqf index c13658460..0555d3115 100644 --- a/SQF/dayz_code/configVariables.sqf +++ b/SQF/dayz_code/configVariables.sqf @@ -301,6 +301,7 @@ if (!isDedicated) then { DZE_BloodsuckersMaxLocal = 2; // Maximum number of bloodsuckers that can spawn per client. DZE_BloodsuckerScreenEffect = true; // On screen slash marks when the bloodsuckers attack. DZE_BloodsuckerDeleteNearTrader = true; // Deletes bloodsuckers when near trader cities. + DZE_MutantHeartProtect = true; // Disables targeting and attack if the player has a mutant heart in inventory. }; // Garage Door Opener diff --git a/SQF/dayz_code/stringtable.xml b/SQF/dayz_code/stringtable.xml index 3e7149d27..4cf4780aa 100644 --- a/SQF/dayz_code/stringtable.xml +++ b/SQF/dayz_code/stringtable.xml @@ -27350,7 +27350,7 @@ Mutant Heart - Bloodsuckers will not attack a player that keeps one in their inventory. + Mutant heart Combination Lock From e6eb94197dbf64efd9e80f6255e85382cfbe6297 Mon Sep 17 00:00:00 2001 From: A Man Date: Wed, 18 Aug 2021 21:30:48 +0200 Subject: [PATCH 27/40] Add toggleable vehicle key changer by salival --- .../Configs/RscDisplay/vehicleKeyChanger.hpp | 315 ++++++++++++++++++ SQF/dayz_code/actions/vkc/vehicleInfo.sqf | 68 ++++ .../actions/vkc/vehicleKeyChanger.sqf | 175 ++++++++++ SQF/dayz_code/compile/fn_selfActions.sqf | 39 ++- SQF/dayz_code/config.cpp | 1 + SQF/dayz_code/configVariables.sqf | 16 +- SQF/dayz_code/init/compiles.sqf | 6 +- SQF/dayz_code/init/variables.sqf | 4 +- .../compile/server_publishVehicle3_vkc.sqf | 205 ++++++++++++ SQF/dayz_server/init/server_functions.sqf | 6 +- .../DZE_Server_Config/BattlEye/scripts.txt | 14 +- 11 files changed, 833 insertions(+), 16 deletions(-) create mode 100644 SQF/dayz_code/Configs/RscDisplay/vehicleKeyChanger.hpp create mode 100644 SQF/dayz_code/actions/vkc/vehicleInfo.sqf create mode 100644 SQF/dayz_code/actions/vkc/vehicleKeyChanger.sqf create mode 100644 SQF/dayz_server/compile/server_publishVehicle3_vkc.sqf diff --git a/SQF/dayz_code/Configs/RscDisplay/vehicleKeyChanger.hpp b/SQF/dayz_code/Configs/RscDisplay/vehicleKeyChanger.hpp new file mode 100644 index 000000000..96e4868d5 --- /dev/null +++ b/SQF/dayz_code/Configs/RscDisplay/vehicleKeyChanger.hpp @@ -0,0 +1,315 @@ +class vkc_RscText { + idc = -1; + x = 0; + y = 0; + h = 0.037; + w = 0.3; + type = 0; + style = 0; + shadow = 2; + colorShadow[] = {0, 0, 0, 0.5}; + font = "Zeppelin32"; + SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + text = ""; + colorText[] = {1, 1, 1, 1.0}; + colorBackground[] = {0, 0, 0, 0}; + linespacing = 1; + tooltipColorText[] = {1,1,1,1}; + tooltipColorBox[] = {1,1,1,1}; + tooltipColorShade[] = {0,0,0,0.65}; +}; + +class vkc_RscTitle : vkc_RscText { + idc = -1; + style = 0; + sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + colorText[] = {0.95, 0.95, 0.95, 1}; +}; + +class vkc_RscShortcutButton { + idc = -1; + style = 0; + default = 0; + shadow = 2; + w = 0.183825; + h = "((((safezoneW / safezoneH) min 1.2) / 1.2) / 20)"; + color[] = {1,1,1,1.0}; + colorFocused[] = {1,1,1,1.0}; + color2[] = {0.95,0.95,0.95,1}; + colorDisabled[] = {1,1,1,0.25}; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.69])","(profilenamespace getvariable ['GUI_BCG_RGB_G',0.75])","(profilenamespace getvariable ['GUI_BCG_RGB_B',0.5])",1}; + colorBackgroundFocused[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.69])","(profilenamespace getvariable ['GUI_BCG_RGB_G',0.75])","(profilenamespace getvariable ['GUI_BCG_RGB_B',0.5])",1}; + colorBackground2[] = {1,1,1,1}; + animTextureDefault = "gza\scripts\gold\gui\normal_ca.paa"; + animTextureNormal = "gza\scripts\gold\gui\normal_ca.paa"; + animTextureDisabled = "gza\scripts\gold\gui\normal_ca.paa"; + animTextureOver = "gza\scripts\gold\gui\over_ca.paa"; + animTextureFocused = "gza\scripts\gold\gui\focus_ca.paa"; + animTexturePressed = "gza\scripts\gold\gui\down_ca.paa"; + periodFocus = 1.2; + periodOver = 0.8; + class HitZone { + left = 0.0; + top = 0.0; + right = 0.0; + bottom = 0.0; + }; + class ShortcutPos { + left = 0; + top = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 20) - (((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)) / 2"; + w = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1) * (3/4)"; + h = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + }; + class TextPos { + left = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1) * (3/4)"; + top = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 20) - (((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)) / 2"; + right = 0.005; + bottom = 0.0; + }; + period = 0.4; + font = "Zeppelin32"; + size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + text = ""; + action = ""; + class Attributes { + font = "Zeppelin32"; + color = "#E5E5E5"; + align = "left"; + shadow = 1; + }; + class AttributesImage { + font = "Zeppelin32"; + color = "#E5E5E5"; + align = "left"; + }; + soundPush[] = { "", 0, 1 }; + soundEnter[] ={ "", 0, 1 }; + soundClick[] ={ "", 0, 1 }; + soundEscape[] ={ "", 0, 1 }; + sound[] ={ "", 0, 1 }; +}; + +class vkc_RscButtonMenu : vkc_RscShortcutButton { + idc = -1; + type = 16; + style = "0x02 + 0xC0"; + default = 0; + shadow = 0; + x = 0; + y = 0; + w = 0.095589; + h = 0.039216; + animTextureNormal = "#(argb,8,8,3)color(1,1,1,1)"; + animTextureDisabled = "#(argb,8,8,3)color(1,1,1,1)"; + animTextureOver = "#(argb,8,8,3)color(1,1,1,1)"; + animTextureFocused = "#(argb,8,8,3)color(1,1,1,1)"; + animTexturePressed = "#(argb,8,8,3)color(1,1,1,1)"; + animTextureDefault = "#(argb,8,8,3)color(1,1,1,1)"; + colorBackground[] = {0,0,0,0.8}; + colorBackgroundFocused[] = {1,1,1,1}; + colorBackground2[] = {0.75,0.75,0.75,1}; + color[] = {1,1,1,1}; + colorFocused[] = {0,0,0,1}; + color2[] = {0,0,0,1}; + colorText[] = {1,1,1,1}; + colorDisabled[] = {1,1,1,0.25}; + period = 1.2; + periodFocus = 1.2; + periodOver = 1.2; + size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + tooltipColorText[] = {1,1,1,1}; + tooltipColorBox[] = {1,1,1,1}; + tooltipColorShade[] = {0,0,0,0.65}; + class TextPos { + left = "0.25 * (((safezoneW / safezoneH) min 1.2) / 40)"; + top = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) - (((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)) / 2"; + right = 0.005; + bottom = 0.0; + }; + class Attributes { + font = "Zeppelin32"; + color = "#E5E5E5"; + align = "center"; + shadow = 0; + }; + class ShortcutPos { + left = "(6.25 * (((safezoneW / safezoneH) min 1.2) / 40)) - 0.0225 - 0.005"; + top = 0.005; + w = 0.0225; + h = 0.03; + }; + textureNoShortcut = ""; +}; + +class vkc_RscListBox { + style = 16; + idc = -1; + type = 5; + w = 0.275; + h = 0.04; + font = "Zeppelin32"; + colorSelect[] = {0.11,0.686,0.831,1}; + colorText[] = {1, 1, 1, 1}; + colorBackground[] = {0.28,0.28,0.28,0.28}; + colorSelect2[] = {1, 1, 1, 1}; + colorSelectBackground[] = {0.95, 0.95, 0.95, 0.5}; + colorSelectBackground2[] = {1, 1, 1, 0.5}; + colorScrollbar[] = {0.2, 0.2, 0.2, 1}; + arrowFull = "\ca\ui\data\igui_arrow_top_active_ca.paa"; + arrowEmpty = "\ca\ui\data\igui_arrow_top_ca.paa"; + wholeHeight = 0.45; + rowHeight = 0.04; + color[] = {0.7, 0.7, 0.7, 1}; + colorActive[] = {0,0,0,1}; + colorDisabled[] = {0,0,0,0.3}; + sizeEx = 0.023; + maxHistoryDelay = 1; + autoScrollSpeed = -1; + autoScrollDelay = 5; + autoScrollRewind = 0; + tooltipColorText[] = {1,1,1,1}; + tooltipColorBox[] = {1,1,1,1}; + tooltipColorShade[] = {0,0,0,0.65}; + class ScrollBar { + color[] = {1, 1, 1, 0.6}; + colorActive[] = {1, 1, 1, 1}; + colorDisabled[] = {1, 1, 1, 0.3}; + thumb = "\ca\ui\data\igui_scrollbar_thumb_ca.paa"; + arrowFull = "\ca\ui\data\igui_arrow_top_active_ca.paa"; + arrowEmpty = "\ca\ui\data\igui_arrow_top_ca.paa"; + border = "\ca\ui\data\igui_border_scroll_ca.paa"; + }; + soundPush[] = { "", 0, 1 }; + soundEnter[] ={ "", 0, 1 }; + soundClick[] ={ "", 0, 1 }; + soundEscape[] ={ "", 0, 1 }; + sound[] ={ "", 0, 1 }; + soundSelect[] = { "", 0, 1 }; +}; + +class vkc_RscStructuredText { + type = 13; + style = 0; + x = 0; + y = 0; + h = 0.035; + w = 0.1; + text = ""; + size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + colorText[] = {1, 1, 1, 1.0}; + shadow = 1; + class Attributes { + font = "Zeppelin32"; + color = "#ffffff"; + align = "left"; + shadow = 1; + }; +}; + +class vkc { + idd = 4800; + name="vkc"; + onload = "player setVariable['isBusy',true,true];"; + onUnload = "player setVariable['isBusy',false,true];"; + movingEnabled = 0; + enableSimulation = 1; + + class controlsBackground { + class vkc_RscTitleBackground : vkc_RscText { + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"}; + idc = -1; + x = 0.1; + y = 0.2; + w = 0.8; + h = (1 / 25); + }; + + class MainBackground : vkc_RscText { + colorBackground[] = {0,0,0,0.7}; + idc = -1; + x = 0.1; + y = 0.2 + (11 / 250); + w = 0.8; + h = 0.7 - (22 / 250); + }; + + class Title : vkc_RscTitle { + idc = 4801; + text = $STR_CL_VKC_TITLE; + x = 0.1; + y = 0.2; + w = 0.8; + h = (1 / 25); + }; + + class VehicleInfoHeader : vkc_RscText { + idc = 4830; + text = $STR_CL_VKC_INFO; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"}; + x = 0.47; y = 0.26; + w = 0.42; + h = (1 / 25); + }; + + class CloseBtn : vkc_RscButtonMenu { + idc = -1; + text = $STR_UI_CLOSE; + onButtonClick = "closeDialog 2;"; + x = -0.06 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); + y = 0.9 - (1 / 25); + w = (6.25 / 40); + h = (1 / 25); + }; + }; + + class controls { + class VehicleList : vkc_RscListBox { + idc = 4802; + text = ""; + sizeEx = 0.04; + colorBackground[] = {0.1,0.1,0.1,0.9}; + onLBSelChanged = "vkc_charID = (vkc_keyList select 0) select (lbCurSel 4802);vkc_keyName = (vkc_keyList select 1) select (lbCurSel 4802);"; + x = 0.11; y = 0.302; + w = 0.35; h = 0.49; + }; + + class VehicleTitleBox : vkc_RscText { + idc = 4804; + text = $STR_CL_VKC_KEYS; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"}; + x = 0.11; y = 0.26; + w = 0.35; + h = (1 / 25); + }; + + class claimVehicle : vkc_RscButtonMenu { + idc = 4850; + text = $STR_CL_VKC_CLAIM; + onButtonClick = "vkc_isOk = true;closeDialog 0;"; + x = 0.1 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); + y = 0.9 - (1 / 25); + w = (6.25 / 20); + h = (1 / 25); + }; + + class changeKey : vkc_RscButtonMenu { + idc = 4851; + text = $STR_CL_VKC_CHANGE; + onButtonClick = "vkc_isOk = true;closeDialog 0;"; + x = 0.1 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); + y = 0.9 - (1 / 25); + w = (6.25 / 20); + h = (1 / 25); + }; + + class vehicleInfomationList : vkc_RscStructuredText { + idc = 4803; + text = ""; + sizeEx = 0.035; + x = 0.47; y = 0.3; + w = 0.41; h = 0.5; + }; + }; +}; diff --git a/SQF/dayz_code/actions/vkc/vehicleInfo.sqf b/SQF/dayz_code/actions/vkc/vehicleInfo.sqf new file mode 100644 index 000000000..e430206b3 --- /dev/null +++ b/SQF/dayz_code/actions/vkc/vehicleInfo.sqf @@ -0,0 +1,68 @@ +private ["_backPackCount","_backPackCount_raw","_backPackSlots","_formattedText","_gearCount","_magazineCount","_magazineCount_raw","_magazineSlots","_name","_picture","_price","_text","_typeOf","_weaponSlots","_weaponsCount","_weaponsCount_raw"]; + +_gearCount = { + private ["_counter"]; + _counter = 0; + {_counter = _counter + _x;} count _this; + _counter +}; + +if (vkc_action == "claim") then { + ctrlShow[4850,true]; + _text = localize "STR_CL_VKC_CLAIM"; + _price = vkc_claimPrice; +} else { + ctrlShow[4851,true]; + _text = localize "STR_CL_VKC_CHANGE"; + _price = vkc_changePrice; +}; + +_typeOf = typeOf vkc_cursorTarget; +_weaponsCount_raw = getWeaponCargo vkc_cursorTarget; +_magazineCount_raw = getMagazineCargo vkc_cursorTarget; +_backPackCount_raw = getBackpackCargo vkc_cursorTarget; + +_weaponSlots = getNumber(configFile >> "CfgVehicles" >> _typeOf >> "transportMaxWeapons"); +_magazineSlots = getNumber(configFile >> "CfgVehicles" >> _typeOf >> "transportMaxMagazines"); +_backPackSlots = getNumber(configFile >> "CfgVehicles" >> _typeOf >> "transportmaxbackpacks"); +_name = getText(configFile >> "CfgVehicles" >> _typeOf >> "displayName"); +_picture = getText(configFile >> 'CfgVehicles' >> _typeOf >> 'picture'); + +_weaponsCount = (_weaponsCount_raw select 1) call _gearCount; +_magazineCount = (_magazineCount_raw select 1) call _gearCount; +_backPackCount = (_backPackCount_raw select 1) call _gearCount; + +if (!isNil "sk_dualCurrency") then {if (z_singleCurrency) then {_price = _price * 10};}; + +_price = if (z_singleCurrency) then { + format ["%1 %2",[_price] call BIS_fnc_numberText,currencyName] +} else { + [_price,true] call z_calcCurrency +}; +_formattedText = format [ + "
" + + "%2: %3
" + + "%4: %5
" + + "%6: %13/%10 %14/%11 %15/%12
" + + "Price to %16: %17
", + _picture, + localize "STR_EPOCH_NAME", + _name, + localize "STR_EPOCH_CLASS", + _typeOf, + localize "STR_EPOCH_CARGO_SPACE", + "\z\addons\dayz_code\gui\gear\gear_ui_slots_weapons_white.paa", + "\z\addons\dayz_code\gui\gear\gear_ui_slots_items_white.paa", + "\z\addons\dayz_code\gui\gear\gear_ui_slots_backPacks_white.paa", + _weaponSlots, + _magazineSlots, + _backPackSlots, + _weaponsCount, + _magazineCount, + _backPackCount, + toLower (_text), + _price +]; + +((findDisplay 4800) displayCtrl 4803) ctrlSetStructuredText parseText _formattedText; +ctrlShow [4803,true]; diff --git a/SQF/dayz_code/actions/vkc/vehicleKeyChanger.sqf b/SQF/dayz_code/actions/vkc/vehicleKeyChanger.sqf new file mode 100644 index 000000000..dd003f4c0 --- /dev/null +++ b/SQF/dayz_code/actions/vkc/vehicleKeyChanger.sqf @@ -0,0 +1,175 @@ +/* + Vehicle Key Changer by salival (https://github.com/oiad) + + This version adds support for both single currency and gems (from the epoch 1.0.6 update) as well as the original epoch briefcase currency system. + Instead of pricing things like the original way, prices are now done on a "worth" similar to how coins are done. The price value of items are below. + If you are using coins, I would recommend using the _currencyModifier variable since coins typically are 10x the value of briefcase based currency (1 brief == 100,000 coins) + + 1 silver = 1 worth + 1 10oz silver = 10 worth + 1 gold = 100 worth + 1 10oz gold = 1,000 worth + 1 briefcase = 10,000 worth + + Please see dayz_code\configVariables.sqf for the value of gems (DZE_GemWorthArray) and their relevant worth if they are enabled. +*/ + +if (dayz_actionInProgress) exitWith {localize "str_player_actionslimit" call dayz_rollingMessages;}; +dayz_actionInProgress = true; + +disableSerialization; +private ["_amount","_characterID","_control","_currencyModifier","_enoughMoney","_exit","_foundPos","_index","_itemText","_message","_moneyInfo","_name","_playerNear","_position","_success","_typeOf","_vehicleID","_vehicleUID","_wealth"]; + +vkc_cursorTarget = (_this select 3) select 0; +_characterID = (_this select 3) select 1; +vkc_action = (_this select 3) select 2; + +vkc_isOk = false; + +player removeAction s_player_claimVehicle; +s_player_claimVehicle = 1; +player removeAction s_player_copyToKey; +s_player_copyToKey = 1; + +_exit = { + vkc_action = nil; + vkc_keyList = nil; + vkc_keyName = nil; + vkc_charID = nil; + vkc_isOk = nil; + vkc_cursorTarget = nil; + s_player_copyToKey = -1; + s_player_claimVehicle = -1; + dayz_actionInProgress = false; +}; + +if (isNull vkc_cursorTarget) exitWith {call _exit; systemChat localize "str_cursorTargetNotFound";}; + +_playerNear = {isPlayer _x} count (([vkc_cursorTarget] call FNC_GetPos) nearEntities ["CAManBase", 10]) > 1; +if (_playerNear) exitWith {call _exit; localize "str_pickup_limit_5" call dayz_rollingMessages;}; + +if !(vkc_cursorTarget isKindOf "Air" || {vkc_cursorTarget isKindOf "LandVehicle"} || {vkc_cursorTarget isKindOf "Ship"}) exitWith {call _exit; localize "STR_CL_VKC_FAIL_CURSOR" call dayz_rollingMessages;}; + +if (isNull DZE_myVehicle || {!(alive DZE_myVehicle)} || {!(local DZE_myVehicle)}) exitWith {call _exit; localize "str_epoch_player_245" call dayz_rollingMessages;}; + +_vehicleID = vkc_cursorTarget getVariable ["ObjectID","0"]; +_vehicleUID = vkc_cursorTarget getVariable ["ObjectUID","0"]; + +_typeOf = typeOf vkc_cursorTarget; +_name = getText(configFile >> "cfgVehicles" >> _typeOf >> "displayName"); + +if ((_vehicleID == "0" && {_vehicleUID == "0"}) || {_vehicleID == "1" || _vehicleUID == "1"}) exitWith {call _exit; format[localize "STR_CL_VKC_FAIL_SUPPORT",_name] call dayz_rollingMessages;}; + +if (_vehicleUID == "0") then { + _vehicleUID = ""; + { + _x = _x * 10; + if (_x < 0) then {_x = _x * -10}; + _vehicleUID = _vehicleUID + str(round(_x)); + } forEach getPosATL vkc_cursorTarget; + _vehicleUID = _vehicleUID + str(round((getDir vkc_cursorTarget) + time)); + vkc_cursorTarget setVariable["ObjectUID",_vehicleUID,true]; +}; + +vkc_keyList = call epoch_tempKeys; + +if (vkc_action == "change") then { + _amount = vkc_changePrice; + _message = [localize "STR_CL_VKC_CHANGE_MESSAGE_1",localize "STR_CL_VKC_CHANGE_MESSAGE_2",localize "STR_CL_VKC_CHANGE_MESSAGE_3"]; + _foundPos = (vkc_keyList select 0) find _characterID; + if (_foundPos >= 0) then { + vkc_keyList set [0,(vkc_keyList select 0) - [(vkc_keyList select 0) select _foundPos]]; + vkc_keyList set [1,(vkc_keyList select 1) - [(vkc_keyList select 1) select _foundPos]]; + vkc_keyList set [2,(vkc_keyList select 2) - [(vkc_keyList select 2) select _foundPos]]; + } else { + vkc_keyList = [[],[]]; + }; +} else { + _amount = vkc_claimPrice; + _message = [localize "STR_CL_VKC_CLAIM_MESSAGE_1",localize "STR_CL_VKC_CLAIM_MESSAGE_2",localize "STR_CL_VKC_CLAIM_MESSAGE_3"]; +}; + +if (count (vkc_keyList select 0) == 0) exitWith {systemChat localize "STR_CL_VKC_FAIL_KEYS"; call _exit;}; + +if (!isNil "sk_dualCurrency") then {if (z_singleCurrency) then {_amount = _amount * 10};}; + +_itemText = if (Z_SingleCurrency) then {format ["%1 %2",[_amount] call BIS_fnc_numberText,CurrencyName]} else {[_amount,true] call z_calcCurrency}; + +createDialog "vkc"; +{ctrlShow [_x,false]} count [4803,4850,4851]; + +call vkc_vehicleInfo; + +_control = ((findDisplay 4800) displayCtrl 4802); +lbClear _control; + +{ + _index = _control lbAdd ((vkc_keyList select 1) select _forEachIndex); + _control lbSetPicture [_index,getText(configFile >> "CfgWeapons" >> ((vkc_keyList select 2) select _index) >> "picture")]; +} forEach (vkc_keyList select 0); + +_control lbSetCurSel 0; + +waitUntil {!dialog}; + +if (!vkc_isOk) exitWith {call _exit;}; + +if (isNull DZE_myVehicle || {!(alive DZE_myVehicle)} || {!(local DZE_myVehicle)}) exitWith {call _exit; localize "str_epoch_player_245" call dayz_rollingMessages;}; + +_enoughMoney = false; +_moneyInfo = [false,[],[],[],0]; + +if (Z_SingleCurrency) then { + _wealth = player getVariable [(["cashMoney","globalMoney"] select Z_persistentMoney),0]; + _enoughMoney = (_wealth >= _amount); +} else { + Z_Selling = false; + if (Z_AllowTakingMoneyFromVehicle) then {false call Z_checkCloseVehicle}; + _moneyInfo = _amount call Z_canAfford; + _enoughMoney = _moneyInfo select 0; +}; + +_success = if (Z_SingleCurrency) then {true} else {[player,_amount,_moneyInfo,true,0] call Z_payDefault}; + +if (!_success && {_enoughMoney}) exitWith {call _exit;systemChat localize "STR_EPOCH_TRADE_GEAR_AND_BAG_FULL"}; + +if (_enoughMoney) then { + _success = if (Z_SingleCurrency) then {_amount <= _wealth} else {[player,_amount,_moneyInfo,false,0] call Z_payDefault}; + if (_success) then { + if (Z_SingleCurrency) then {player setVariable [(["cashMoney","globalMoney"] select Z_persistentMoney),(_wealth - _amount),true];}; + + vkc_cursorTarget setVehicleLock "LOCKED"; + player playActionNow "Medic"; + + _position = [vkc_cursorTarget] call FNC_GetPos; + + [_typeOf,objNull] call fn_waitForObject; + dze_waiting = nil; + + PVDZE_veh_Upgrade = [vkc_cursorTarget,[getDir vkc_cursorTarget,_position],_typeOf,vkc_charID,player,dayz_authKey,if (vkc_action == "change") then {"changed the key for"} else {"claimed"}]; + publicVariableServer "PVDZE_veh_Upgrade"; + + localize "STR_CL_VKC_WAIT" call dayz_rollingMessages; + + waitUntil {!isNil "dze_waiting"}; + + if (dze_waiting == "fail") then { + systemChat format[localize "STR_CL_VKC_FAIL_UPGRADE",_name]; + if (z_singleCurrency) then { + player setVariable [(["cashMoney","globalMoney"] select Z_persistentMoney),_wealth,true]; + } else { + Z_Selling = true; + _success = [_amount,0,false,0,[],[],false] call Z_returnChange; + }; + } else { + {player reveal _x;} count (player nearEntities [["LandVehicle"],10]); + [format[_message select 0,_name,vkc_keyName],1] call dayz_rollingMessages; + }; + } else { + systemChat localize "STR_EPOCH_TRADE_DEBUG"; + }; +} else { + systemChat format[localize "STR_CL_VKC_FAIL_MONEY",_itemText,_message select 1,_name]; +}; + +call _exit; diff --git a/SQF/dayz_code/compile/fn_selfActions.sqf b/SQF/dayz_code/compile/fn_selfActions.sqf index 457877bc4..6c15df26c 100644 --- a/SQF/dayz_code/compile/fn_selfActions.sqf +++ b/SQF/dayz_code/compile/fn_selfActions.sqf @@ -234,6 +234,7 @@ if (!isNull _cursorTarget && {!_inVehicle && !_isPZombie && _canDo && player dis local _weaponsPlayer = weapons player; local _hasCrowbar = "ItemCrowbar" in _itemsPlayer || "MeleeCrowbar" in _weaponsPlayer || dayz_onBack == "MeleeCrowbar"; local _hasToolbox = "ItemToolbox" in _itemsPlayer; + local _hasKeymakerskit = "ItemKeyKit" in _itemsPlayer; local _isAlive = alive _cursorTarget; local _text = getText (configFile >> "CfgVehicles" >> _typeOfCursorTarget >> "displayName"); local _isPlant = _typeOfCursorTarget in Dayz_plants; @@ -568,11 +569,12 @@ if (!isNull _cursorTarget && {!_inVehicle && !_isPZombie && _canDo && player dis // Allow Owner to lock and unlock vehicle if (_player_lockUnlock_crtl) then { + local _totalKeys = call epoch_tempKeys; + local _temp_keys = _totalKeys select 0; + local _temp_keys_names = _totalKeys select 1; + local _hasKey = _characterID in _temp_keys; + if (s_player_lockUnlock_crtl < 0) then { - local _totalKeys = call epoch_tempKeys; - local _temp_keys = _totalKeys select 0; - local _temp_keys_names = _totalKeys select 1; - local _hasKey = _characterID in _temp_keys; local _oldOwner = (_characterID == _uid); local _unlock = []; @@ -598,9 +600,18 @@ if (!isNull _cursorTarget && {!_inVehicle && !_isPZombie && _canDo && player dis }; }; }; + if (DZE_VehicleKey_Changer) then { + if (s_player_copyToKey < 0) then { + if ((_hasKeymakerskit && _hasKey && !_isLocked && {(count _temp_keys) > 1}) || {_cursorTarget getVariable ["hotwired",false]}) then { + s_player_copyToKey = player addAction [format["%1",localize "STR_CL_VKC_CHANGE_ACTION"],"\z\addons\dayz_code\actions\vkc\vehicleKeyChanger.sqf",[_cursorTarget,_characterID,if (_cursorTarget getVariable ["hotwired",false]) then {"claim"} else {"change"}],5,false,true]; + }; + }; + }; } else { {player removeAction _x} count s_player_lockunlock;s_player_lockunlock = []; s_player_lockUnlock_crtl = -1; + player removeAction s_player_copyToKey; + s_player_copyToKey = -1; }; if (DZE_Hide_Body && {_isMan && !_isAlive}) then { @@ -809,6 +820,20 @@ if (!isNull _cursorTarget && {!_inVehicle && !_isPZombie && _canDo && player dis player removeAction s_player_fillgen; s_player_fillgen = -1; }; + + if (DZE_VehicleKey_Changer) then { + if (_hasKeymakerskit && _isVehicle && !_isMan && _isAlive && {_characterID == "0"}) then { + if (s_player_claimVehicle < 0) then { + _totalKeys = call epoch_tempKeys; + if (count (_totalKeys select 0) > 0) then { + s_player_claimVehicle = player addAction [format["%1",format[localize "STR_CL_VKC_CLAIM_ACTION",_text]],"\z\addons\dayz_code\actions\vkc\vehicleKeyChanger.sqf",[_cursorTarget,_characterID,"claim"],5,false,true]; + }; + }; + } else { + player removeAction s_player_claimVehicle; + s_player_claimVehicle = -1; + }; + }; if (!_isAlive && _isMan && !_isZombie && {!(_cursorTarget isKindOf "Animal")}) then { if (DZE_Take_Clothes) then { @@ -1123,7 +1148,11 @@ if (!isNull _cursorTarget && {!_inVehicle && !_isPZombie && _canDo && player dis player removeAction s_player_bury_human; s_player_bury_human = -1; player removeAction s_player_butcher_human; - s_player_butcher_human = -1; + s_player_butcher_human = -1; + player removeAction s_player_copyToKey; + s_player_copyToKey = -1; + player removeAction s_player_claimVehicle; + s_player_claimVehicle = -1; }; //Dog actions on player self diff --git a/SQF/dayz_code/config.cpp b/SQF/dayz_code/config.cpp index ad7d12120..b7ce25c89 100644 --- a/SQF/dayz_code/config.cpp +++ b/SQF/dayz_code/config.cpp @@ -130,6 +130,7 @@ class DefaultEventhandlers { #include "Configs\RscDisplay\doorManagement\doorAccess.hpp" #include "Configs\RscDisplay\zscDialogs.hpp" #include "Configs\RscDisplay\remoteVehicle.hpp" +#include "Configs\RscDisplay\vehicleKeyChanger.hpp" //#include "Configs\RscDisplay\tradermenu.hpp" class CfgTasks diff --git a/SQF/dayz_code/configVariables.sqf b/SQF/dayz_code/configVariables.sqf index 0555d3115..c4f9b10a9 100644 --- a/SQF/dayz_code/configVariables.sqf +++ b/SQF/dayz_code/configVariables.sqf @@ -36,6 +36,9 @@ if (Z_SingleCurrency) then { Z_VehicleDistance = 40; // Max distance a vehicle can be sold or accessed from at a trader. +// Vehicle Key Changer +DZE_VehicleKey_Changer = true; // Enable Vehicle Key Changer. Create or change the key for a vehicle. + // Plot Management and Plot for Life DZE_permanentPlot = true; // Plot ownership saves after death. Enables Plot for Life by @RimBlock and Plot Management by @DevZupa. DZE_isRemovable = ["Plastic_Pole_EP1_DZ"]; //Items that can be removed with a crowbar with no ownership or access required. To forbid base take overs remove plot pole from this list and add it to DZE_restrictRemoval. It is not necessary to add wrecks or items that inherit from 'BuiltItems' to this list. @@ -100,6 +103,11 @@ if (isServer) then { // Safe Zone Relocating DZE_SafeZone_Relocate = false; //Enables relocating of vehicles left in Safe Zones over a server restart. + + if (DZE_VehicleKey_Changer) then { + vkc_clearAmmo = true; // Clear the ammo of vehicles after they have been rekeyed/claimed? (stops users getting a free rearm) + vkc_disableThermal = [""]; // Array of vehicle config classes as well as vehicle classnames to disable thermal on when being spawned. i.e: ["All","Land","Air","Ship","StaticWeapon","AH1Z","MTVR"]; + }; }; // Client @@ -240,6 +248,7 @@ if (!isDedicated) then { dayz_matchboxCount = false; // Enable match stick count. After five uses matches run out and must be replaced. dayz_waterBottleBreaking = false; // Water bottles have a chance to break when boiling and require duct tape to fix + // Bury and Butcher Bodies if (DZE_Bury_Body) then { DZE_Bury_Body_Value = 30;// Amount of humanity to gain for burying a body. }; @@ -290,6 +299,11 @@ if (!isDedicated) then { ]; }; + if (DZE_VehicleKey_Changer) then { + vkc_claimPrice = 1000; // Amount in worth for claiming a vehicle. See the top of this script for an explanation. + vkc_changePrice = 5000; // Amount in worth for changing the key for a vehicle. See the top of this script for an explanation. + }; + // Bloodsuckers DZE_Bloodsuckers = false; // Enable bloodsucker spawning. @@ -439,4 +453,4 @@ if (!isDedicated) then { Variables that are map specific or frequently changed should be included in init.sqf by default with a corresponding if(isNil)then{}; in variables.sqf. -*/ +*/ \ No newline at end of file diff --git a/SQF/dayz_code/init/compiles.sqf b/SQF/dayz_code/init/compiles.sqf index f3a1078a0..0b59c812c 100644 --- a/SQF/dayz_code/init/compiles.sqf +++ b/SQF/dayz_code/init/compiles.sqf @@ -208,6 +208,10 @@ if (!isDedicated) then { locateVehicle = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\locateVehicle.sqf"; }; + if (DZE_VehicleKey_Changer) then { + vkc_vehicleInfo = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\vkc\vehicleInfo.sqf"; + }; + if (DZE_Service_Points) then { execVM "\z\addons\dayz_code\actions\servicePoints\init.sqf"; }; @@ -217,7 +221,7 @@ if (!isDedicated) then { player_mutantAttack = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_mutantAttack.sqf"; mutant_generate = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\mutant_generate.sqf"; mutant_findTarget = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\mutant_findTarget.sqf"; - }; + }; // Weather if (DZE_Weather in [3,4]) then { diff --git a/SQF/dayz_code/init/variables.sqf b/SQF/dayz_code/init/variables.sqf index 3f2605696..4d572ea42 100644 --- a/SQF/dayz_code/init/variables.sqf +++ b/SQF/dayz_code/init/variables.sqf @@ -211,7 +211,9 @@ if (!isDedicated) then { s_player_gdoor_opener = []; s_player_gdoor_opener_ctrl = -1; s_player_bury_human = -1; - s_player_butcher_human = -1; + s_player_butcher_human = -1; + s_player_copyToKey = -1; + s_player_claimVehicle = -1; }; call dayz_resetSelfActions; diff --git a/SQF/dayz_server/compile/server_publishVehicle3_vkc.sqf b/SQF/dayz_server/compile/server_publishVehicle3_vkc.sqf new file mode 100644 index 000000000..0c0070fd1 --- /dev/null +++ b/SQF/dayz_server/compile/server_publishVehicle3_vkc.sqf @@ -0,0 +1,205 @@ +private ["_coins","_activatingPlayer","_object","_worldspace","_location","_dir","_class","_uid","_key","_keySelected" +,"_characterID","_result","_outcome","_oid","_objectID","_objectUID","_newobject","_weapons","_magazines","_backpacks" +,"_clientKey","_exitReason","_playerUID","_isAir","_fuel","_selection","_dam","_hitpoints","_newHitpoints","_damage" +,"_hit","_inv","_action","_clearTurrets","_message"]; +#include "\z\addons\dayz_server\compile\server_toggle_debug.hpp" + +if (count _this < 6) exitWith { + diag_log "Server_PublishVehicle3 error: Wrong parameter format"; + dze_waiting = "fail"; + (owner (_this select 4)) publicVariableClient "dze_waiting"; +}; + +_object = _this select 0; +_worldspace = _this select 1; +_class = _this select 2; +_keySelected = _this select 3; +_activatingPlayer = _this select 4; +_clientKey = _this select 5; +_action = if (count _this > 6) then {_this select 6} else {""}; +_playerUID = getPlayerUID _activatingPlayer; +_characterID = _keySelected; + +_exitReason = [_this,"PublishVehicle3",(_worldspace select 1),_clientKey,_playerUID,_activatingPlayer] call server_verifySender; +if (_exitReason != "") exitWith { + diag_log _exitReason; + dze_waiting = "fail"; + (owner _activatingPlayer) publicVariableClient "dze_waiting"; +}; + +if (!(isClass(configFile >> "CfgVehicles" >> _class)) || isNull _object) exitWith { + diag_log ("HIVE-PublishVehicle3 Error: Vehicle does not exist: "+ str(_class)); + dze_waiting = "fail"; + (owner _activatingPlayer) publicVariableClient "dze_waiting"; +}; + +_objectID = _object getVariable ["ObjectID","0"]; +_objectUID = _object getVariable ["ObjectUID","0"]; +_location = [_object] call fnc_getPos; +_fuel = fuel _object; +_hitpoints = _object call vehicle_getHitpoints; +_newHitpoints = []; +_damage = damage _object; + +// add items from previous vehicle here +_weapons = getWeaponCargo _object; +_magazines = getMagazineCargo _object; +_backpacks = getBackpackCargo _object; +_inv = [_weapons,_magazines,_backpacks]; + +if (Z_SingleCurrency && {ZSC_VehicleMoneyStorage}) then { + _coins = _object getVariable ["cashMoney",0]; +}; + +{ + _hit = [_object,_x] call object_getHit; + if ((_hit select 0) > 0) then { + _newHitpoints set [count _newHitpoints,[(_hit select 1),(_hit select 0)]]; + } else { + _newHitpoints set [count _newHitpoints,[(_hit select 1),0]]; + }; +} count _hitpoints; + +#ifdef OBJECT_DEBUG +diag_log ("PUBLISH: Attempt " + str(_object)); +#endif + +_dir = _worldspace select 0; +_uid = _worldspace call dayz_objectUID2; + +_key = format["CHILD:308:%1:%2:%3:%4:%5:%6:%7:%8:%9:",dayZ_instance, _class, _damage , _characterID, _worldspace, _inv, _newHitpoints, _fuel,_uid]; +#ifdef OBJECT_DEBUG +diag_log ("HIVE: WRITE: "+ str(_key)); +#endif + +_key call server_hiveWrite; + +// GET DB ID +_key = format["CHILD:388:%1:",_uid]; +#ifdef OBJECT_DEBUG +diag_log ("HIVE: WRITE: "+ str(_key)); +#endif +_result = _key call server_hiveReadWrite; +_outcome = _result select 0; + +if (_outcome != "PASS") then { + diag_log("HIVE-pv3: failed to get id for : " + str(_uid)); + _key = format["CHILD:310:%1:",_uid]; + _key call server_hiveWrite; + dze_waiting = "fail"; + (owner _activatingPlayer) publicVariableClient "dze_waiting"; +} else { + _oid = _result select 1; + #ifdef OBJECT_DEBUG + diag_log("CUSTOM: Selected " + str(_oid)); + #endif + + _colour = _object getVariable ["Colour","0"]; + _colour2 = _object getVariable ["Colour2","0"]; + + deleteVehicle _object; + [_objectID,_objectUID,_object] call server_deleteObjDirect; + + uiSleep 3; + + _newobject = _class createVehicle [0,0,0]; + + // switch var to new vehicle at this point. + _object = _newobject; + + _object setVariable ["ObjectID", _oid, true]; + _object setVariable ["lastUpdate",diag_tickTime]; + _object setVariable ["CharacterID", _characterID, true]; + + if (Z_SingleCurrency && {ZSC_VehicleMoneyStorage && {_coins > 0}}) then { + _object setVariable ["cashMoney",_coins,true]; + }; + + dayz_serverObjectMonitor set [count dayz_serverObjectMonitor,_object]; + + clearWeaponCargoGlobal _object; + clearMagazineCargoGlobal _object; + clearBackpackCargoGlobal _object; + + _object setDir _dir; + _object setPosATL _location; + _object setVectorUp surfaceNormal _location; + _object setDamage _damage; + + if (_colour != "0") then { + _object setVariable ["Colour",_colour,true]; + _clrinit = format ["#(argb,8,8,3)color(%1)",_colour]; + _object setVehicleInit "this setObjectTexture [0,"+str _clrinit+"];"; + }; + + if (_colour2 != "0") then { + _object setVariable ["Colour2",_colour2,true]; + _clrinit2 = format ["#(argb,8,8,3)color(%1)",_colour2]; + _object setVehicleInit "this setObjectTexture [1,"+str _clrinit2+"];"; + }; + + processInitCommands; + [_weapons,_magazines,_backpacks,_object] call fn_addCargo; + + _clearTurrets = { + //By denvdmj (probably, I found it on the biki) + private ["_weaponArray","_findRecurse","_class","_obj","_turret","_mags"]; + _obj = _this; + + _weaponArray = []; + _weaponArray set [count _weaponArray,[-1]]; + + _findRecurse = { + private ["_root", "_class", "_path", "_currentPath", "_thisThis"]; + _root = (_this select 0); + _path = +(_this select 1); + _thisThis = _this select 2; + for "_i" from 0 to count _root -1 do { + _class = _root select _i; + if (isClass _class) then { + _currentPath = _path + [_i]; + {_weaponArray set [count _weaponArray, _currentPath];} count getArray (_class >> "weapons"); + _class = _class >> "turrets"; + if (isClass _class) then {[_class, _currentPath, _thisThis] call _findRecurse;}; + }; + }; + }; + + [configFile >> "CfgVehicles" >> typeOf (_obj) >> "turrets", [], _this] call _findRecurse; + + { + _turret = _x; + _mags = _obj magazinesTurret _turret; + {_obj removeMagazinesTurret[_x,_turret];} count _mags; + } forEach _weaponArray; + }; + + _isAir = _object isKindOf "Air"; + { + _selection = _x select 0; + _dam = [_x select 1,(_x select 1) min 0.8] select (!_isAir && {_selection in dayZ_explosiveParts}); + _object setHit [_selection,_dam]; + } count _newHitpoints; + + _object setFuel _fuel; + + [_object,"all",true] call server_updateObject; + + _object call fnc_veh_ResetEH; + // for non JIP users this should make sure everyone has eventhandlers for vehicles. + PVDZE_veh_Init = _object; + publicVariable "PVDZE_veh_Init"; + + {if (_object isKindOf _x) exitWith {_object disableTIEquipment true;}} count vkc_disableThermal; + if (vkc_clearAmmo) then {_object call _clearTurrets;}; + + dze_waiting = "success"; + (owner _activatingPlayer) publicVariableClient "dze_waiting"; + + if (_action == "") then { + _message = format["PUBLISH: %1(%2) upgraded %3 with UID %4 @%5",(_activatingPlayer call fa_plr2str),_playerUID,_class,_uid,(_location call fa_coor2str)]; + } else { + _message = format["PUBLISH: %1(%2) %6 %3 with UID %4 @%5",(_activatingPlayer call fa_plr2str),_playerUID,_class,_uid,(_location call fa_coor2str),_action]; + }; + diag_log _message; +}; diff --git a/SQF/dayz_server/init/server_functions.sqf b/SQF/dayz_server/init/server_functions.sqf index 741f7d9ed..9835508dc 100644 --- a/SQF/dayz_server/init/server_functions.sqf +++ b/SQF/dayz_server/init/server_functions.sqf @@ -39,7 +39,11 @@ server_verifySender = compile preprocessFileLineNumbers "\z\addons\dayz_server\c server_swapObject = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_swapObject.sqf"; //Used to downgrade and upgrade Epoch buildables server_publishVeh = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_publishVehicle.sqf"; //Used to spawn random vehicles by server server_publishVeh2 = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_publishVehicle2.sqf"; //Used to purchase vehicles at traders -server_publishVeh3 = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_publishVehicle3.sqf"; //Used for car upgrades +if (DZE_VehicleKey_Changer) then { + server_publishVeh3 = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_publishVehicle3_vkc.sqf"; //Used for car upgrades +} else { + server_publishVeh3 = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_publishVehicle3.sqf"; //Used for car upgrades +}; server_tradeObj = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_tradeObject.sqf"; server_deaths = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_playerDeaths.sqf"; server_maintainArea = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_maintainArea.sqf"; diff --git a/Server Files/DZE_Server_Config/BattlEye/scripts.txt b/Server Files/DZE_Server_Config/BattlEye/scripts.txt index c04e6ca55..d6a9b25f7 100644 --- a/Server Files/DZE_Server_Config/BattlEye/scripts.txt +++ b/Server Files/DZE_Server_Config/BattlEye/scripts.txt @@ -14,14 +14,14 @@ 1 callExtension 1 camCreate !="_camera = \"camera\" camCreate [12222.323, 3415.7791, -0.059190542]" !"kdy = cos _dir * _size;\n_kdz = _size;\n\n\n_camera =" !="getPlayerUID player;\n_sourceID = \"0\";\n\n\n_camera = \"camera\" camCreate _deathPos;\n_camera camSetDir 0;\n_camera camSetFOV 1;\n_camer" 1 cameraEffect !"cameraEffect [\"Internal\",\"TOP\"];\n_camera camSetTarget _deathPos;\n_camera camSetPos [_deathPos select" !"r_Simulation\";\n\n_camera cameraEffect [\"Terminate" !"cameraEffect [\"internal\",\"back\"]\n\n_camera camPrepareTarget [6433.5" !"kdy = cos _dir * _size;\n_kdz = _size;\n\n\n_camera =" -1 cashMoney !="false];\n\nif (Z_SingleCurrency) then {\nplayer setVariable [\"cashMoney\", _characterCoins, true];\nplayer setVariable [\"globalMoney\"" !=" (Z_SingleCurrency) then {\n_wealth = player getVariable[([\"cashMoney\",\"globalMoney\"] select Z_persistentMoney),0];\nplayer setVar" !="ctrlSetText [13001,format [\"%1 %2\",[player getVariable [([\"cashMoney\",\"globalMoney\"] select Z_persistentMoney),0]] call BIS_fnc_" !="le [\"bodyName\",\"unknown\"];\n_hisMoney = _body getVariable [\"cashMoney\",0];\n\nif (isNil \"_hisMoney\") then {_hisMoney = 0;};\nif (!(t" !=" (!_canBuy) exitWith {}; \n\n_wealth = player getVariable[([\"cashMoney\",\"globalMoney\"] select Z_persistentMoney),0];\n\n_enoughMoney" !="if (Z_SingleCurrency) then {\n_coins = player getVariable [\"cashMoney\",0];\n_bankCoins = player getVariable [\"bankMoney\",0];\n_glob" !="l dayz_rollingMessages;};\n\n_hisMoney = _body getVariable [\"cashMoney\",0];\n\nif (_isZombie) then {\n_name = getText(configFile >> \"" !="wCurrencyUI) then {\nlocal _cashAmt = player getVariable[([\"cashMoney\",\"globalMoney\"] select Z_persistentMoney),0];\n_string = for" !=" = [false, [], [], [], 0];\n_wealth = player getVariable[([\"cashMoney\",\"globalMoney\"] select Z_persistentMoney),0];\n\nif (Z_Single" !="= [false, [], [], [], 0];\n_wealth = player getVariable [([\"cashMoney\",\"globalMoney\"] select Z_persistentMoney),0];\n\nif (Z_Single" +1 cashMoney !="false];\n\nif (Z_SingleCurrency) then {\nplayer setVariable [\"cashMoney\", _characterCoins, true];\nplayer setVariable [\"globalMoney\"" !=" (Z_SingleCurrency) then {\n_wealth = player getVariable[([\"cashMoney\",\"globalMoney\"] select Z_persistentMoney),0];\nplayer setVar" !="ctrlSetText [13001,format [\"%1 %2\",[player getVariable [([\"cashMoney\",\"globalMoney\"] select Z_persistentMoney),0]] call BIS_fnc_" !="le [\"bodyName\",\"unknown\"];\n_hisMoney = _body getVariable [\"cashMoney\",0];\n\nif (isNil \"_hisMoney\") then {_hisMoney = 0;};\nif (!(t" !=" (!_canBuy) exitWith {}; \n\n_wealth = player getVariable[([\"cashMoney\",\"globalMoney\"] select Z_persistentMoney),0];\n\n_enoughMoney" !="if (Z_SingleCurrency) then {\n_coins = player getVariable [\"cashMoney\",0];\n_bankCoins = player getVariable [\"bankMoney\",0];\n_glob" !="l dayz_rollingMessages;};\n\n_hisMoney = _body getVariable [\"cashMoney\",0];\n\nif (_isZombie) then {\n_name = getText(configFile >> \"" !="wCurrencyUI) then {\nlocal _cashAmt = player getVariable[([\"cashMoney\",\"globalMoney\"] select Z_persistentMoney),0];\n_string = for" !=" = [false, [], [], [], 0];\n_wealth = player getVariable[([\"cashMoney\",\"globalMoney\"] select Z_persistentMoney),0];\n\nif (Z_Single" !="= [false, [], [], [], 0];\n_wealth = player getVariable [([\"cashMoney\",\"globalMoney\"] select Z_persistentMoney),0];\n\nif (Z_Single" !="(Z_SingleCurrency) then {\n_wealth = player getVariable [([\"cashMoney\",\"globalMoney\"] select Z_persistentMoney),0];\n_enoughMoney " 1 clearMagazineCargo !="ddWeaponCargo\", \n\"addMagazine\", \n\"addMagazineCargo\", \n\"clearMagazineCargo\",\n\"clearWeaponCargo\",\n\"endMission\",\n\"failMission\",\n\"ti" !="rclearMagazineCargo = 'clearMagazineCargo'" !="rclearMagazineCargocode = compile preprocessFileLineNumbers (BIS_PathMPscriptCommands + 'clearMagazineCargo.sqf')" !=", \"addWeaponCargo\", \"addWPCur\", \"animate\", \"callVar\", \"clearMagazineCargo\", \"clearWeaponCargo\", \"createDiaryRecord\", \"createMark" !="rclearMagazineCargocode={diag_log(\"WARNING illegal RE rclearMagazineCargocode with args:\"+str(_this));};" !="eeSpace select 5;\n_normalWeaps = _freeSpace select 6;\n\nclearMagazineCargoGlobal _object;\nclearWeaponCargoGlobal _object;\n\n_retur" !=" {\n_bpMags = (getMagazineCargo (unitbackpack player));\nclearMagazineCargoGlobal (unitbackpack player);\n\n{\n_count = ((_bpMags sel" !="o {\n\n_ok = false;\n_mags = getMagazineCargo _firePlace;\nclearMagazineCargoGlobal _firePlace;\n\n_fuel = [\"PartWoodPile\",\"ItemLog\",\"" 1 clearWeaponCargo !="Magazine\", \n\"addMagazineCargo\", \n\"clearMagazineCargo\",\n\"clearWeaponCargo\",\n\"endMission\",\n\"failMission\",\n\"titleCut\", \n\"titleText\"" !="rclearWeaponCargo = 'clearWeaponCargo'" !="rclearWeaponCargocode = compile preprocessFileLineNumbers (BIS_PathMPscriptCommands + 'clearWeaponCargo.sqf')" !="addWPCur\", \"animate\", \"callVar\", \"clearMagazineCargo\", \"clearWeaponCargo\", \"createDiaryRecord\", \"createMarkerLocal\", \"createSimp" !="rclearWeaponCargocode={diag_log(\"WARNING illegal RE rclearWeaponCargocode with args:\"+str(_this));};" !="_freeSpace select 6;\n\nclearMagazineCargoGlobal _object;\nclearWeaponCargoGlobal _object;\n\n_returnVar = [];\n_returnMag = [];\n_retu" 1 clearBackpackCargo 1 closeDisplay !"'closeDisplay'" !"closeDisplay 0" !"closeDisplay 2" !"if (!isNil \"closeDisplay\") then {" 1 compile !"ca\\communityconfiguration" !"ca\\Data\\" !"ca\\missions" !"ca\\modules" !"ca\\ui\\" !"ca\\Warfare2\\" !"scriptName \"Functions\\systems\\fn_inv" !"scriptName \"MP\\data\\script" !"code = compile preprocessFileLineNumbers (BIS_PathMPscriptCommands" !"t = missionConfigFile >> \"onMinimapScript" !="_this call (call compile GetText (configFile >> \"CfgAmmo\" >> _amm >> \"muzzleEffect\"));" !"z\\addons\\dayz_code\\" !"_menu ctrlSetEventHandler [\"ButtonClick\",_compile];\n};\n_pos set [3" !"{ _x set [1, compile (_x select 1)]; }" !"silver_1oz_b);\n\n{ \nif (!isNil {call compile" !"Var = compile format[\"epoch_death_board_record_" !="RandomSentenceFunc\") then \n{\nBIS_selectRandomSentenceFunc = compile (preprocessFileLineNumbers \"ca\\characters_e\\data\\scripts\\sel" 1 createAgent !="_agent = if (_type == \"Pastor\") then {createAgent [_type, _Pos, [], 0, \"NONE\"]} else {createAgent [_type, _Pos, [], 0, \"FORM\"]};" !="_dog = createAgent [_type, _Pos, [], 0, \"NONE\"];" !="\n\n\n_type = _unitTypes call BIS_fnc_selectRandom;\n_agent = createAgent [_type, _position, [], 0, \"CAN_COLLIDE\"];\n_agent setDir (r" -1 createDialog !="_region = createDialog \"RscDisplaySpawnSelecter\";" !="_gender = createDialog 'RscDisplayGenderSelect';" !="_dialog = createDialog \"bloodTest\";" !"createDialog 'horde_journal_" !"Z_ResetContainer = true;\ncreateDialog \"AdvancedTrading\";" !"createDialog \"DoorManagement\";\ncall DoorNearbyHumans;" !="createDialog \"ComboLockUI\";" !"createdialog \"PlotManagement\";\ncall PlotNearbyHumans;" !"_ok = createDialog \"KeypadUI\";" !"EpochDeathBoardLoad = {\ncreatedialog \"EpochDeathBoardDialog\";" !="if(DZE_doorManagement) then {createdialog \"DoorAccess\";} else {createdialog \"ComboLockUI\";};" !"\ndisableSerialization;\ncreateDialog \"DZ_GroupDialog\";" !"createDialog _dialog;\n\nwaitUntil {!dialog};\n\nif (keypadCancel) exitWith {" !=";\n};\n\nZSC_CurrentStorage setVariable[\"isBusy\",true,true];\ncreateDialog \"BankDialog\";\ncall BankDialogUpdateAmounts;\n\nwaitUntil {!" !="ANKING_NOT_AVAIL\",_typeOf] call dayz_rollingMessages;\n};\n\ncreateDialog \"atmDialog\";\ncall AtmDialogUpdateAmounts;\n\nwaitUntil {!di" !="!_isBusy) then {\nplayer setVariable[\"isBusy\",true,true]; \ncreateDialog \"GivePlayerDialog\";\n_display = uiNamespace getVariable[\"z" !="ked\",\"VaultStorage2\",\"TallSafe\",\"TallSafeLocked\"]) then {\ncreateDialog \"SafeKeyPad\";\n} else {\ncreateDialog \"KeypadUI\";\n};\n};\n\nda" !";\n\nif (count rv_vehicleList > 1) then {\nrv_isOk = false;\n\ncreateDialog \"remoteVehicle\";\n\n_display = uiNamespace getVariable[\"rv_" +1 createDialog !="_region = createDialog \"RscDisplaySpawnSelecter\";" !="_gender = createDialog 'RscDisplayGenderSelect';" !="_dialog = createDialog \"bloodTest\";" !"createDialog 'horde_journal_" !"Z_ResetContainer = true;\ncreateDialog \"AdvancedTrading\";" !"createDialog \"DoorManagement\";\ncall DoorNearbyHumans;" !="createDialog \"ComboLockUI\";" !"createdialog \"PlotManagement\";\ncall PlotNearbyHumans;" !"_ok = createDialog \"KeypadUI\";" !"EpochDeathBoardLoad = {\ncreatedialog \"EpochDeathBoardDialog\";" !="if(DZE_doorManagement) then {createdialog \"DoorAccess\";} else {createdialog \"ComboLockUI\";};" !"\ndisableSerialization;\ncreateDialog \"DZ_GroupDialog\";" !"createDialog _dialog;\n\nwaitUntil {!dialog};\n\nif (keypadCancel) exitWith {" !=";\n};\n\nZSC_CurrentStorage setVariable[\"isBusy\",true,true];\ncreateDialog \"BankDialog\";\ncall BankDialogUpdateAmounts;\n\nwaitUntil {!" !="ANKING_NOT_AVAIL\",_typeOf] call dayz_rollingMessages;\n};\n\ncreateDialog \"atmDialog\";\ncall AtmDialogUpdateAmounts;\n\nwaitUntil {!di" !="!_isBusy) then {\nplayer setVariable[\"isBusy\",true,true]; \ncreateDialog \"GivePlayerDialog\";\n_display = uiNamespace getVariable[\"z" !="ked\",\"VaultStorage2\",\"TallSafe\",\"TallSafeLocked\"]) then {\ncreateDialog \"SafeKeyPad\";\n} else {\ncreateDialog \"KeypadUI\";\n};\n};\n\nda" !";\n\nif (count rv_vehicleList > 1) then {\nrv_isOk = false;\n\ncreateDialog \"remoteVehicle\";\n\n_display = uiNamespace getVariable[\"rv_" !="urrencyName]} else {[_amount,true] call z_calcCurrency};\n\ncreateDialog \"vkc\";\n{ctrlShow [_x,false]} count [4803,4850,4851];\n\ncal" 1 createDisplay 1 createMarker !"\"createMarkerLocal\"," !"rcreateMarkerLocal" !"if (isnil 'BIS_GITA_fnc_createMarkers' || false) then {" !"_marker = createMarkerLocal [format[\"groupMember" !">> \"CfgVehicles\" >> _vehicle >> \"displayName\");\n_marker = createMarkerLocal [\"vehicleMarker\" + (str _i),[_position select 0,_pos" 1 createUnit !="_newUnit = _group createUnit [_class,respawn_west_original,[],0,\"NONE\"];" !="BIS_MPF_logic = BIS_MPF_dummygroup createUnit [\"Logic\", [1000,10,0], [], 0, \"NONE\"];" @@ -40,17 +40,17 @@ 1 execVM !"rexecVM" !"\"execVM\", " !="[] execVM \"initJIPcompatible.sqf\";" !="_script = [] execVM (BIS_MP_Path + BIS_PATH_SQF + \"JIPWaitFor.sqf\");" !"execVM \"\\ca\\Data\\" !"execVM '\\ca\\Data\\" !"execVM \"\\ca\\missions" !"execVM 'ca\\modules\\" !"execVM \"ca\\modules\\" !"'\\ca\\ui\\" !"\"\\ca\\ui\\" !"scriptName \"MP\\data\\script" !"_handle\"];\n_handle = [_display] execVM _script;\n}" !"execVM '\\z\\addons\\dayz_code\\" !"execVM 'z\\addons\\dayz_code\\" !"execVM \"z\\addons\\dayz_code\\" !"execVM \"\\z\\addons\\dayz_code\\" !"execVM (\"\\z\\addons\\dayz_code\\" !="dayz_rulesHandle = execVM \"rules.sqf\";" !"execvm '\\ASC\\" !"\\usec_ch53\\scripts\\" !"execVM (_actionDir + \"warn.sqf" !="_this execVM \"\\GNT_C185\\scr\\C185_Exhaust.sqf\";[_this select 0] execvm \"\\GNT_C185\\scr\\G_CheckEngine.sqf\";" 1 failMission !"rfailMission" !"failMission\",\n\"titleCut\"," !"fadeSound\", \"failMission\"," !"if (_debug == 1) then {\ndiag_log (\"End Mission\");\n};\n\nfailMission" 1 forceEnd -1 globalMoney !="\"cashMoney\", _characterCoins, true];\nplayer setVariable [\"globalMoney\", _globalCoins, true];\nplayer setVariable [\"bankMoney\", _b" !="rency) then {\n_wealth = player getVariable[([\"cashMoney\",\"globalMoney\"] select Z_persistentMoney),0];\nplayer setVariable[([\"cash" !="13001,format [\"%1 %2\",[player getVariable [([\"cashMoney\",\"globalMoney\"] select Z_persistentMoney),0]] call BIS_fnc_numberText,Cu" !="Messages};\n\n_myMoney = player getVariable [([\"cashMoney\",\"globalMoney\"] select Z_persistentMoney),0];\n_myMoney = _myMoney + _his" !="xitWith {}; \n\n_wealth = player getVariable[([\"cashMoney\",\"globalMoney\"] select Z_persistentMoney),0];\n\n_enoughMoney = false;\n\n_m" !="able [\"bankMoney\",0];\n_globalCoins = player getVariable [\"globalMoney\",0];\n};\n\n\n[_model, _charID, _humanity, _zombieKills, _head" !="then {\nlocal _cashAmt = player getVariable[([\"cashMoney\",\"globalMoney\"] select Z_persistentMoney),0];\n_string = format [\"=" 1 groupIcon 1 HelicopterExplo !"(isNull _who) then {\nif (_ammo != \"\" && _ammo isKindOf \"HelicopterExplo" !"_v = thisTrigger getVariable [\"obj\", objNull];\n" !"_v = thisTrigger getVariable [\"\"obj\"\", objNull];\n" !"\n\n\nremoveallweapons _v;\n\nif (local _v) then {_expl=\"HelicopterExplo" 1 hideObject !"rhideObject" !"\"hideObject\"" !"(_x select 0) nearestObject (_x select 1);\n_object hideObject" !"_object2 = _ghost2 createVehicleLocal [0,0,0];\nhideObject _object;" 1 hint !", \"_postFix\"" !rhint !rtaskHint !"\"hint\", " !"\"hintC\", " !"\"taskHint\"," !"_controlHintButton ctrlSettext \"Objectives\";" !"hint (localize \"strwf" !"'BIS_fnc_hints'" !sched_planthint !"call ui_initDisplay;\nhintSilent \"\"" !"hintSilent localize \"str_player_low" !=" select 1;\n_filter = [\"private\",\"dynamic_text\",\"ai_killfeed\",\"hintWithImage\",\"hintNoImage\"]; \n\nif (typeName _message == \"TEXT\") " !="vars select 7) \n] spawn BIS_fnc_dynamicText;\n};\nif (_type == \"hintWithImage\") exitWith {hint parseText format[\"> \"CfgVehicles\" >>" !="#line 1 \"z\\addons\\dayz_code\\compile\\player_humanityChange.sqf\"\nprivate [\"_change\",\"_humanity\"];\n\n\n\n\n_change = _this;\n\n_humanity " !"layer]];\npublicVariableServer \"PVDZ_send\";\n\n\n20 call player_humanityChange;\n\nformat[localize \"str_actions_medical_gave_wipes\",(n" !=" [\"_msg\",\"_bagUsed\",\"_bloodResult\",\"_bloodAmount\",\"_unit\",\"_humanityAwarded\",\"_timer\",\"_i\",\"_isClose\",\"_duration\",\"_rhVal\",\"_blo" !="#line 1 \"z\\addons\\dayz_code\\compile\\player_humanityMorph.sqf\"\ncloseDialog 0;\nlocal _charID = _this select 1;\nlocal _model = _thi" !="ody_Value} else {DZE_Butcher_Body_Value};\n_gain call player_humanityChange;\n\ndayz_actionInProgress = false;\n" !="l fn_dynamicTool;\n\ncall {\nif (_isZombie) exitWith {\n\nlocal _humanity = player getVariable [\"humanity\",0];\nplayer setVariable [\"h" -1 lbCurSel !"_selectedUserIndex = lbCurSel _lbUsersControl;" !="profileNamespace setVariable ['statusUI',(lbCurSel (_this select 0))];" !="profileNamespace setVariable ['streamerMode',(lbCurSel (_this select 0))];" !"_index = lbCurSel _lbcontrol;\n_selectedItem" !"_selected = lbCurSel _list;\n_classname = _list lnbData [_selected, 2];" !="_friendName = _userList lbText (lbCurSel _userList);" !")] call Z_" !"(lbCurSel 7421) call Z_fillCategoryList" !"] call Door" !"] call Plot" !"[(lbCurSel 12001)] " !="[(lbCurSel 21000), ((ctrlParent (_this select 0)) displayCtrl 21001)] spawn EpochDeathBoardClick;" !"((ctrlParent (_this select 0)) closeDisplay 2);" !="_uid = _playerList lbData (lbCurSel _playerList);" !"_myGroup lbData (lbCurSel _myGroup);" -1 lbSet !"_lbUsersControl lbSetColor [_x, [1,0,0,1]];" !"\n_control lbSetColor [_x, _color];\n};" !"_weaponsLBSetFocus" !="(_this select 0) displayCtrl _idc lbSetCurSel (profileNamespace getVariable [_var,_default]);" !="(_display displayCtrl 105) lbSetColor [_i, [0.06, 0.05, 0.03, 1]];" !" [7421," !"lbSetPicture [7422, _index" !"lbSetPicture [7402, _index" !"lbSetPicture [7401, _index" !="_userList lbSetData [(lbSize _userList) -1,_friendUID];" !" [TraderDialogItemList, _index, " !"_myGroup lbSetData [_index,getPlayerUID _x];" !"ive DZE_myVehicle} && {DZE_myVehicle == _x}) then {\n_control lbSetColor [(lbSize _control)-1,[0, 1, 0, 1]];\n};\n} count rv_vehicl" +1 lbCurSel !"_selectedUserIndex = lbCurSel _lbUsersControl;" !="profileNamespace setVariable ['statusUI',(lbCurSel (_this select 0))];" !="profileNamespace setVariable ['streamerMode',(lbCurSel (_this select 0))];" !"_index = lbCurSel _lbcontrol;\n_selectedItem" !"_selected = lbCurSel _list;\n_classname = _list lnbData [_selected, 2];" !="_friendName = _userList lbText (lbCurSel _userList);" !")] call Z_" !"(lbCurSel 7421) call Z_fillCategoryList" !"] call Door" !"] call Plot" !"[(lbCurSel 12001)] " !="[(lbCurSel 21000), ((ctrlParent (_this select 0)) displayCtrl 21001)] spawn EpochDeathBoardClick;" !"((ctrlParent (_this select 0)) closeDisplay 2);" !="_uid = _playerList lbData (lbCurSel _playerList);" !"_myGroup lbData (lbCurSel _myGroup);" !="vkc_charID = (vkc_keyList select 0) select (lbCurSel 4802);vkc_keyName = (vkc_keyList select 1) select (lbCurSel 4802);" +1 lbSet !"_lbUsersControl lbSetColor [_x, [1,0,0,1]];" !"\n_control lbSetColor [_x, _color];\n};" !"_weaponsLBSetFocus" !="(_this select 0) displayCtrl _idc lbSetCurSel (profileNamespace getVariable [_var,_default]);" !="(_display displayCtrl 105) lbSetColor [_i, [0.06, 0.05, 0.03, 1]];" !" [7421," !"lbSetPicture [7422, _index" !"lbSetPicture [7402, _index" !"lbSetPicture [7401, _index" !="_userList lbSetData [(lbSize _userList) -1,_friendUID];" !" [TraderDialogItemList, _index, " !"_myGroup lbSetData [_index,getPlayerUID _x];" !"ive DZE_myVehicle} && {DZE_myVehicle == _x}) then {\n_control lbSetColor [(lbSize _control)-1,[0, 1, 0, 1]];\n};\n} count rv_vehicl" !="bAdd ((vkc_keyList select 1) select _forEachIndex);\n_control lbSetPicture [_index,getText(configFile >> \"CfgWeapons\" >> ((vkc_ke" 1 loadFile 1 menu !",\"MenuSelected\",\"Draw\",\"VideoStop" !"_menu = _parent displayCtrl (1600 + _i);\n_menu ctrlShow " !"BIS_fnc_commsMenu" !"BIS_fnc_kbMenu" !"call gear_ui_offMenu;" !"dayz_inflame_showMenu" !"\"showCommandingMenu\", " !"rshowCommandingMenu" !"menu_" !"use action menu to " !"\"_menu\",\"_menu1\"" !"fn_gearMenuChecks" !"fn_pauseMenuChecks" -1 nearEntities !="exit = true;\n} else {\n_nearestObjects = (position player) nearEntities [[\"Air\", \"Car\", \"Motorcycle\", \"Tank\", \"Ship\"], 26];\nif (c" !="jects \"SpawnableWreck\";\n{deleteVehicle _x} count (_setPos nearEntities [\"zZombie_Base\",30]);\nplayer setDir _setDir;\n\nif (dayz_pa" !="((!surfaceIsWater _Pos) AND {(0 == {alive _x} count (_Pos nearEntities [ AllPlayers, 200 ]))}) then {\n_agent = if (_type == \"Pas" !="z, _elevation] ];\n};\n};\n};\n};\n} count ((getPosATL player) nearEntities [\"zZombie_Base\", 30]);\n};\n\n\n_buriedZeds\n};\n" !="call dz_fn_array_any);\n};\n\n_vehClose = (getPosATL player) nearEntities [[\"Car\",\"Tank\",\"Helicopter\",\"Plane\",\"StaticWeapon\",\"Ship\"" !="z_spawnZombies = {alive _x AND local _x} count (_position nearEntities [\"zZombie_Base\",_radius]);\ndayz_CurrentNearByZombies = {a" !="{\nr_player_infected = true;\n\n};\n};\n};\n} count (_mylastPos nearEntities [\"CAManBase\",12]);\nif (dayz_temperatur < ((50 / 100) * (d" !=" < dayz_maxGlobalZeds}) then {\n_zombiesNum = count (_bPos nearEntities [\"zZombie_Base\",(((sizeOf _type) * 2) + 10)]);\nif (_zombi" !="te;\n};\n};\n\n\n_nearByPlayer = ({isPlayer _x} count (_objPos nearEntities [\"CAManBase\",30])) > 0;\nif (!_nearByPlayer) then {\n_posit" !="_entityTime = diag_tickTime;\n\n_list = (getposATL _agent) nearEntities [[\"CAManBase\",\"AllVehicles\"],300];\n_isSomeone = ({isPlayer" !="_timeN = diag_tickTime;\n\n_list = (getposATL _agent) nearEntities [[\"CAManBase\",\"AllVehicles\"],300];\n_isSomeone = ({isPlayer _x} " !="_waitStart = diag_tickTime;\n\n_list = (getposATL _agent) nearEntities [[\"CAManBase\",\"AllVehicles\"],300];\n_isSomeone = ({isPlayer " !="lt = false;\n_pos = [player] call FNC_GetPos;\n_list = _pos nearEntities [[\"Air\",\"LandVehicle\",\"Ship\"],Z_VehicleDistance];\n\nif (!i" !="[\"localtargets\",_localtargets,false];\n};\n};\n} count (_pos nearEntities [\"zZombie_Base\",50]);\n} else {\nwhile {alive _projectile} " !="this select 2;\n_pos = _this select 3;\n\n_listTalk = _pos nearEntities [\"zZombie_Base\",_distance];\n\n{\n_distance = _distance max " !="_list = (getposATL _agent) nearEntities [[\"CAManBase\",\"AllVehicles\"],300];\n_isSomeone = ({isPlayer _x} count _list) > 0;\n\n_timeN" !=";};\n\n_playerNear = {isPlayer _x} count ((getPosATL _body) nearEntities [\"CAManBase\", 10]) > 1;\nif (_playerNear) exitWith {dayz_a" !="\n\n\n_pos = getPosATL player;\nif ({isPlayer _x} count (_pos nearEntities [\"CAManBase\",40]) > 1) then {\n[_unit,\"hit\",0,false] call " !="[];\n\n_PlayerNear = {isPlayer _x} count ((getPosATL _item) nearEntities [\"CAManBase\", 12]) > 1;\nif (_PlayerNear) exitWith {locali" !="layerNear = {isPlayer _x} count (([_obj] call FNC_GetPos) nearEntities [\"CAManBase\", 12]) > 1;\nif (_PlayerNear && (_isMine or _o" !="hicle _player] call FNC_getPos;\n\n\n_findNearestPole = _pos nearEntities [\"Plastic_Pole_EP1_DZ\", _distance];\n\n_IsNearPlot = count " !="layerNear = {isPlayer _x} count ((getPosATL cursortarget) nearEntities [\"CAManBase\", 10]) > 1;\nif (_playerNear) exitWith {\ndayz_" !="etPos;\n\nif (surfaceIsWater _location && {count (_location nearEntities [\"Ship\",8]) > 0}) then {\ndeleteVehicle _sign;\nlocalize \"S" !="yerNear = {isPlayer _x} count (([player] call FNC_GetPos) nearEntities [\"CAManBase\", 12]) > 1;\nif (_playerNear) exitWith {locali" !="ag_tickTime);\n_playerCheck = ({isPlayer _x} count (player nearEntities [\"AllVehicles\",5]) > 1);\n_zedCheck = ((count (player near" !="(_this select 1) && isServer && (({isPlayer _x} count (_z nearEntities ['CAManBase',150])) == 0)) exitWith { _z call sched_co_de" !=" do {\nuiSleep 5;\n};\nhideBody _body;\n\n\n\n\n\n\n_inRange = _pos nearEntities [\"CAManBase\",100];\n{\nif ((isPlayer _x) && {_x != player})" !=" {\n_PlayerNear = {isPlayer _x} count ((getPosATL _holder) nearEntities [\"CAManBase\", 12]) > 1;\nif (_PlayerNear) exitWith {locali" !="yerNear = {isPlayer _x} count (([_plant] call FNC_GetPos) nearEntities [\"CAManBase\", 12]) > 1;\nif (_playerNear) exitWith {dayz_a" !="layerNear = {isPlayer _x} count (([_obj] call FNC_GetPos) nearEntities [\"CAManBase\", 12]) > 1;\nif (_playerNear) exitWith {dayz_a" !="\n_ammo = \"RunOver\";\n};\n} count (([_unit] call fnc_getPos) nearEntities [[\"Air\",\"LandVehicle\",\"Ship\"],3]);\n};\n};\n};\n\n_end = false" !="{\n_liftHeli = _x;\n_found = true;\n};\n};\n};\n} count (player nearEntities [DZE_HeliAllowTowFrom,15]);\n};\n\nlocal _attached = _cursor" !="z_fn_array_any);\n};\n\nlocal _vehClose = (getPosATL player) nearEntities [[\"Car\",\"Tank\",\"Helicopter\",\"Plane\",\"StaticWeapon\",\"Ship\"" !=" = false;\n\nif (!isNull _this) then {\n_nearPlayers = _this nearEntities [\"CAManBase\", 12];\n_playerNear = ({isPlayer _x} count _ne" !="ePeople = if (DZE_doorManagementMustBeClose) then {player nearEntities [\"CAManBase\", 12]} else {playableUnits};\n\n{\nif (isPlayer " !"\n\n_PlayerNear = {isPlayer _x} count ((getPosATL _vehicle) nearEntities [\"CAManBase\", 12]) > 1;\nif (_PlayerNear) exitWith {" !="layerNear = {isPlayer _x} count (([_obj] call FNC_GetPos) nearEntities [\"CAManBase\", 10]) > 1;\nif (_playerNear) exitWith {dayz_a" !"arestVehicle),_x];\n};\n} count (([player] call fnc_getPos) nearEntities [[\"Air\",\"LandVehicle\",\"Ship\"],30]);\n\nif (count _findNeare" !"arPlayers = {(isPlayer _x && _x != player)} count (player nearEntities [\"CAManBase\",8]);\n\nif (!(_object isKindOf \"ATV_Base_EP1\")" !="ePeople = if (DZE_plotManagementMustBeClose) then {player nearEntities [\"CAManBase\", 12]} else {playableUnits};\n\n{\nif (isPlayer " !="lot\"];\n\nlbClear 7002;\n_plots = ([player] call FNC_getPos) nearEntities [\"Plastic_Pole_EP1_DZ\",15];\n_thePlot = _plots select 0;\n_" !="_area_preview = 1;\n\n_target = (([player] call FNC_getPos) nearEntities [\"Plastic_Pole_EP1_DZ\",15]) select 0;\n_objects = nearestO" !="_PlotPole select 0;\n_target = (([player] call FNC_getPos) nearEntities [\"Plastic_Pole_EP1_DZ\",15]) select 0;\n\n_buildables = DZE_" !=" == \"\") exitWith {};\n\n_plots = ([player] call FNC_getPos) nearEntities [\"Plastic_Pole_EP1_DZ\",15];\n\n_thePlot = _plots select 0;\n" !="here100cm_EP1\"; \n\n\n_thePlot = (([player] call FNC_getPos) nearEntities [\"Plastic_Pole_EP1_DZ\",15]) select 0;\n_center = getPosASL" !"arPlayers = {(isPlayer _x && _x != player)} count (player nearEntities [\"CAManBase\",8]);\n\nif ((_object isKindOf \"C130J_US_EP1\" o" !="RANGE = 1500;};CA_ZOMBIE_COUNT = count ((position player) nearEntities ['zZombie_Base',CA_GPS_RANGE]); CA_MAN_COUNT = count ((po" !"ayerNear = {isPlayer _x} count (([_body] call FNC_GetPos) nearEntities [\"CAManBase\", 10]) > 1;\nif (_playerNear) exitWith {dayz_a" !="\n_x setVariable [\"myDest\",_pos,true];\n};\n};\n} count (_pos nearEntities [\"Zed_Base\",_distance]);\n" !=" then {deleteVehicle _x}; \n} forEach ((getPosATL _refObj) nearEntities [\"Zed_Base\",100]);\n\nif (_attacked) then {\nif (r_player_un" !="erNear = {isPlayer _x} count (([_corpse] call FNC_GetPos) nearEntities [\"CAManBase\", 10]) > 1;\nif (_playerNear) exitWith {dayz_a" !="ss = false;}; \nif ({isPlayer _x} count ((getPosATL _body) nearEntities [\"CAManBase\", 12]) > 1) exitWith {dayz_actionInProgress =" +1 nearEntities !="exit = true;\n} else {\n_nearestObjects = (position player) nearEntities [[\"Air\", \"Car\", \"Motorcycle\", \"Tank\", \"Ship\"], 26];\nif (c" !="jects \"SpawnableWreck\";\n{deleteVehicle _x} count (_setPos nearEntities [\"zZombie_Base\",30]);\nplayer setDir _setDir;\n\nif (dayz_pa" !="((!surfaceIsWater _Pos) AND {(0 == {alive _x} count (_Pos nearEntities [ AllPlayers, 200 ]))}) then {\n_agent = if (_type == \"Pas" !="z, _elevation] ];\n};\n};\n};\n};\n} count ((getPosATL player) nearEntities [\"zZombie_Base\", 30]);\n};\n\n\n_buriedZeds\n};\n" !="call dz_fn_array_any);\n};\n\n_vehClose = (getPosATL player) nearEntities [[\"Car\",\"Tank\",\"Helicopter\",\"Plane\",\"StaticWeapon\",\"Ship\"" !="z_spawnZombies = {alive _x AND local _x} count (_position nearEntities [\"zZombie_Base\",_radius]);\ndayz_CurrentNearByZombies = {a" !="{\nr_player_infected = true;\n\n};\n};\n};\n} count (_mylastPos nearEntities [\"CAManBase\",12]);\nif (dayz_temperatur < ((50 / 100) * (d" !=" < dayz_maxGlobalZeds}) then {\n_zombiesNum = count (_bPos nearEntities [\"zZombie_Base\",(((sizeOf _type) * 2) + 10)]);\nif (_zombi" !="te;\n};\n};\n\n\n_nearByPlayer = ({isPlayer _x} count (_objPos nearEntities [\"CAManBase\",30])) > 0;\nif (!_nearByPlayer) then {\n_posit" !="_entityTime = diag_tickTime;\n\n_list = (getposATL _agent) nearEntities [[\"CAManBase\",\"AllVehicles\"],300];\n_isSomeone = ({isPlayer" !="_timeN = diag_tickTime;\n\n_list = (getposATL _agent) nearEntities [[\"CAManBase\",\"AllVehicles\"],300];\n_isSomeone = ({isPlayer _x} " !="_waitStart = diag_tickTime;\n\n_list = (getposATL _agent) nearEntities [[\"CAManBase\",\"AllVehicles\"],300];\n_isSomeone = ({isPlayer " !="lt = false;\n_pos = [player] call FNC_GetPos;\n_list = _pos nearEntities [[\"Air\",\"LandVehicle\",\"Ship\"],Z_VehicleDistance];\n\nif (!i" !="[\"localtargets\",_localtargets,false];\n};\n};\n} count (_pos nearEntities [\"zZombie_Base\",50]);\n} else {\nwhile {alive _projectile} " !="this select 2;\n_pos = _this select 3;\n\n_listTalk = _pos nearEntities [\"zZombie_Base\",_distance];\n\n{\n_distance = _distance max " !="_list = (getposATL _agent) nearEntities [[\"CAManBase\",\"AllVehicles\"],300];\n_isSomeone = ({isPlayer _x} count _list) > 0;\n\n_timeN" !=";};\n\n_playerNear = {isPlayer _x} count ((getPosATL _body) nearEntities [\"CAManBase\", 10]) > 1;\nif (_playerNear) exitWith {dayz_a" !="\n\n\n_pos = getPosATL player;\nif ({isPlayer _x} count (_pos nearEntities [\"CAManBase\",40]) > 1) then {\n[_unit,\"hit\",0,false] call " !="[];\n\n_PlayerNear = {isPlayer _x} count ((getPosATL _item) nearEntities [\"CAManBase\", 12]) > 1;\nif (_PlayerNear) exitWith {locali" !="layerNear = {isPlayer _x} count (([_obj] call FNC_GetPos) nearEntities [\"CAManBase\", 12]) > 1;\nif (_PlayerNear && (_isMine or _o" !="hicle _player] call FNC_getPos;\n\n\n_findNearestPole = _pos nearEntities [\"Plastic_Pole_EP1_DZ\", _distance];\n\n_IsNearPlot = count " !="layerNear = {isPlayer _x} count ((getPosATL cursortarget) nearEntities [\"CAManBase\", 10]) > 1;\nif (_playerNear) exitWith {\ndayz_" !="etPos;\n\nif (surfaceIsWater _location && {count (_location nearEntities [\"Ship\",8]) > 0}) then {\ndeleteVehicle _sign;\nlocalize \"S" !="yerNear = {isPlayer _x} count (([player] call FNC_GetPos) nearEntities [\"CAManBase\", 12]) > 1;\nif (_playerNear) exitWith {locali" !="ag_tickTime);\n_playerCheck = ({isPlayer _x} count (player nearEntities [\"AllVehicles\",5]) > 1);\n_zedCheck = ((count (player near" !="(_this select 1) && isServer && (({isPlayer _x} count (_z nearEntities ['CAManBase',150])) == 0)) exitWith { _z call sched_co_de" !=" do {\nuiSleep 5;\n};\nhideBody _body;\n\n\n\n\n\n\n_inRange = _pos nearEntities [\"CAManBase\",100];\n{\nif ((isPlayer _x) && {_x != player})" !=" {\n_PlayerNear = {isPlayer _x} count ((getPosATL _holder) nearEntities [\"CAManBase\", 12]) > 1;\nif (_PlayerNear) exitWith {locali" !="yerNear = {isPlayer _x} count (([_plant] call FNC_GetPos) nearEntities [\"CAManBase\", 12]) > 1;\nif (_playerNear) exitWith {dayz_a" !="layerNear = {isPlayer _x} count (([_obj] call FNC_GetPos) nearEntities [\"CAManBase\", 12]) > 1;\nif (_playerNear) exitWith {dayz_a" !="\n_ammo = \"RunOver\";\n};\n} count (([_unit] call fnc_getPos) nearEntities [[\"Air\",\"LandVehicle\",\"Ship\"],3]);\n};\n};\n};\n\n_end = false" !="{\n_liftHeli = _x;\n_found = true;\n};\n};\n};\n} count (player nearEntities [DZE_HeliAllowTowFrom,15]);\n};\n\nlocal _attached = _cursor" !="z_fn_array_any);\n};\n\nlocal _vehClose = (getPosATL player) nearEntities [[\"Car\",\"Tank\",\"Helicopter\",\"Plane\",\"StaticWeapon\",\"Ship\"" !=" = false;\n\nif (!isNull _this) then {\n_nearPlayers = _this nearEntities [\"CAManBase\", 12];\n_playerNear = ({isPlayer _x} count _ne" !="ePeople = if (DZE_doorManagementMustBeClose) then {player nearEntities [\"CAManBase\", 12]} else {playableUnits};\n\n{\nif (isPlayer " !"\n\n_PlayerNear = {isPlayer _x} count ((getPosATL _vehicle) nearEntities [\"CAManBase\", 12]) > 1;\nif (_PlayerNear) exitWith {" !="layerNear = {isPlayer _x} count (([_obj] call FNC_GetPos) nearEntities [\"CAManBase\", 10]) > 1;\nif (_playerNear) exitWith {dayz_a" !"arestVehicle),_x];\n};\n} count (([player] call fnc_getPos) nearEntities [[\"Air\",\"LandVehicle\",\"Ship\"],30]);\n\nif (count _findNeare" !"arPlayers = {(isPlayer _x && _x != player)} count (player nearEntities [\"CAManBase\",8]);\n\nif (!(_object isKindOf \"ATV_Base_EP1\")" !="ePeople = if (DZE_plotManagementMustBeClose) then {player nearEntities [\"CAManBase\", 12]} else {playableUnits};\n\n{\nif (isPlayer " !="lot\"];\n\nlbClear 7002;\n_plots = ([player] call FNC_getPos) nearEntities [\"Plastic_Pole_EP1_DZ\",15];\n_thePlot = _plots select 0;\n_" !="_area_preview = 1;\n\n_target = (([player] call FNC_getPos) nearEntities [\"Plastic_Pole_EP1_DZ\",15]) select 0;\n_objects = nearestO" !="_PlotPole select 0;\n_target = (([player] call FNC_getPos) nearEntities [\"Plastic_Pole_EP1_DZ\",15]) select 0;\n\n_buildables = DZE_" !=" == \"\") exitWith {};\n\n_plots = ([player] call FNC_getPos) nearEntities [\"Plastic_Pole_EP1_DZ\",15];\n\n_thePlot = _plots select 0;\n" !="here100cm_EP1\"; \n\n\n_thePlot = (([player] call FNC_getPos) nearEntities [\"Plastic_Pole_EP1_DZ\",15]) select 0;\n_center = getPosASL" !"arPlayers = {(isPlayer _x && _x != player)} count (player nearEntities [\"CAManBase\",8]);\n\nif ((_object isKindOf \"C130J_US_EP1\" o" !="RANGE = 1500;};CA_ZOMBIE_COUNT = count ((position player) nearEntities ['zZombie_Base',CA_GPS_RANGE]); CA_MAN_COUNT = count ((po" !"ayerNear = {isPlayer _x} count (([_body] call FNC_GetPos) nearEntities [\"CAManBase\", 10]) > 1;\nif (_playerNear) exitWith {dayz_a" !="\n_x setVariable [\"myDest\",_pos,true];\n};\n};\n} count (_pos nearEntities [\"Zed_Base\",_distance]);\n" !=" then {deleteVehicle _x}; \n} forEach ((getPosATL _refObj) nearEntities [\"Zed_Base\",100]);\n\nif (_attacked) then {\nif (r_player_un" !="erNear = {isPlayer _x} count (([_corpse] call FNC_GetPos) nearEntities [\"CAManBase\", 10]) > 1;\nif (_playerNear) exitWith {dayz_a" !="ss = false;}; \nif ({isPlayer _x} count ((getPosATL _body) nearEntities [\"CAManBase\", 12]) > 1) exitWith {dayz_actionInProgress =" !="{isPlayer _x} count (([vkc_cursorTarget] call FNC_GetPos) nearEntities [\"CAManBase\", 10]) > 1;\nif (_playerNear) exitWith {call _" 1 nearestObject !="licVariableEventHandler {_pos = (_this select 1); _obj = nearestObjects [_pos, DZE_isWreckBuilding, 5]; if (count _obj > 0) then" !=" 0;\n_whatIwant = _this select 1;\n_ret = false;\n\n_flame = nearestObjects [_fireplace, [\"flamable_DZ\"], 1];\n_flame = if (count _fl" !="Whitelisted = [];\n_pointsNearby = [];\n_findWhitelisted = nearestObjects [_pos,_whitelist,(_radius + DZE_snapExtraRange)]-[_objec" !=".sqf\"\n\n\n\n\n\nprivate \"_object\";\n\n{\n_object = (_x select 0) nearestObject (_x select 1);\n_object hideObject true;\n_object setVariab" !="\ncall dayz_meleeMagazineCheck;\n{player reveal _x} count (nearestObjects [_position,[\"AllVehicles\",\"WeaponHolder\",\"Land_A_tent\",\"" !="ks.sqf\"\nsetMousePosition [0.5, 0.5];\n\nprivate [\"_exit\",\"_nearestObjects\",\"_rID\",\"_display\",\"_cTarget\",\"_dis\",\"_friendlyTo\",\"_las" !="eenMsg = localize 'str_player_setup_completed';\n_torev4l=nearestObjects [_setPos, Dayz_plants + DayZ_GearedObjects + [\"AllVehicl" !=") then {\n_pPos = [player] call FNC_GetPos;\n_fireplaces = nearestObjects [_pPos, [\"flamable_DZ\",\"Land_Fire\",\"Land_Campfire\"], 8];" !=" \n\n)\nmax 0;\n\nif (_scaleLight < 0.9) then {\n\n_nearFlare = nearestObject [getPosATL (vehicle player),\"RoadFlare\"];\nif (!isNull _ne" !=" call _check}) exitWith { \n_inside = true;\n};\n} forEach (nearestObjects [_unit, [\"Building\"], 50]);\n};\n\n\n_inside\n" !="= _this select 0;\n_ammo = _this select 1;\n\n_projectile = nearestObject [_unit, _ammo];\n_pos = getPosATL _projectile;\n\nif (_ammo " !="\n};\nif (\"workshop\" in _needNear) then {\n_isNear = count (nearestObjects [player, DZE_Workshops, _distance]);\nif(_isNear == 0) th" !="ingPlayer = player;\n_dir = round(random 360);\n_helipad = nearestObjects [player, [\"HeliHCivil\",\"HeliHempty\"], 100];\n\n\nif (count " !="1\",\"land_smd_water_pump\"];\n\n_canFill = call {\n\nif (count nearestObjects [_posATL,_wells,4] > 0) exitwith {[true,false]};\nif (toL" !="d) exitWith {\n_nearWaterHole = [true,_pond];\n};\n} count (nearestObjects [_x, [], 1]);\n\nif (_nearWaterHole select 0) exitWith {};" !="bj select 4;\n_projectile = _obj select 6;\n\n_projectile = nearestObject [_unit,_ammo];\n_endPos = getPosATL _projectile;\n_doWait =" !="_plantOutput select _index;\n_countOut = 1;\n};\n};\n} count nearestObjects [([player] call FNC_getPos), [], 10];\n\nif (count _findNe" !=" !r_player_unconscious && !_onLadder);\n\n_nearByObjects = nearestObjects [player,_objects,_range];\n\nif (count _nearByObjects == 0" !="= \"workshop\") exitwith {\n_distance = 3;\n_isNear = count (nearestObjects [_pos, DZE_Workshops, _distance]);\nif (_isNear == 0) the" !="earestPole) then {_pos} else {_nearestPole};\nif ((count (nearestObjects [_center,_buildables,_distance])) >= DZE_BuildingLimit) " !="_ammo in [\"Dragged\",\"RunOver\"])}) then {\n_vehicleArray = nearestObjects [([vehicle _unit] call fnc_getPos),[\"Air\",\"LandVehicle\"," !="n _rocks) exitWith { _findNearestRock = _x; };\n} foreach nearestObjects [getPosATL player, [], 8];\n\n\nif (!isNull _findNearestRoc" !="modeltoWorld [0,0,0]};\n_holder = objNull;\n\n\n_nearByPile= nearestObjects [_pos, [\"WeaponHolder\",\"WeaponHolderBase\"],2];\n\nif (coun" !="r);\nlocal _uid = getPlayerUID player;\nlocal _nearLight = nearestObject [player,\"LitObject\"];\nlocal _canPickLight = false;\nlocal " !="p = {\nlocal _doors = [];\nif (r_drag_sqf) then {\n_doors = nearestObjects [player, DayZ_DropDrageeObjects, 3]; \nif (count _doors >" !"With {};\nif (!_unconscious) exitWith {};\n\n_dropObjects = nearestObjects [player, DayZ_DropDrageeObjects, 3];\nif (count _dropObje" !"Name) in dayz_trees}) exitWith {\n\n_tree = _x;\n};\n} count nearestObjects [getPosATL player, [], 20];\n\nif (!isNull _tree) then {\n\n" !="ntities [\"Plastic_Pole_EP1_DZ\",15]) select 0;\n_objects = nearestObjects [_target, DZE_maintainClasses, DZE_maintainRange];\n\n_obj" !="E_LockableStorage + [\"DZ_storage_base\"];\n_count = count (nearestObjects [_target,_buildables,_range]);\n\n_colour = \"#ffffff\";\n\nif" !="e;\n_num = ceil (random (player distance _x));\n};\n} count nearestObjects [player, [], 50];\n\nfor \"_i\" from 1 to 10 do {\nif (!_ispo" !="j select 4;\n\n_projectile = _obj select 6;\n\n_projectile = nearestObject [_unit,_ammo];\n_vUp = vectorUp _projectile;\n_endPos = get" !="player;\nif (_vehicle != player) then {\n_servicePoints = (nearestObjects [getPosATL _vehicle,DZE_SP_Classes,DZE_SP_MaxDistance]) " 1 nearObjects !="ratorRunning\",false]))} count (([player] call FNC_getPos) nearObjects [\"Generator_DZ\",30]);\nif (_findNearestGen > 0) then {\ns_pl" !="lders = dayz_currentWeaponHolders - 1;\n} count (_worldPos nearObjects [\"ReammoBox\", 1]);\n\nif (_lootChance > random 1 && {dayz_cu" !="rgets == 0) then {\nprivate \"_objects\";\n\n_objects = _agent nearObjects [\"GrenadeHand\", 300]; \n{\nif (!(_x in _targets)) then {\nif " !="er] call FNC_GetPos;\n_isNear = {inflamed _x} count (_pPos nearObjects _distance);\nif(_isNear == 0) then {\n_abort = true;\n_reason" !="s select 0;\n_sign = _this select 1;\n_near = count (player nearObjects [_class,50]);\n\n[_class,_sign,_near] spawn {\n_class = _this" !="with {\n_distance = 3;\n_isNear = {inflamed _x} count (_pos nearObjects _distance);\nif (_isNear == 0) then {\n_abort = true;\n_reaso" !=" (_nearWaterHole select 0) exitWith {};\n} forEach (player nearObjects [\"waterHoleProxy\",50]);\n\n_nearWaterHole" !="yer] call FNC_GetPos;\n_isNear = {inflamed _x} count (_pos nearObjects 3);\nif (_isNear == 0) exitWith {dayz_actionInProgress = fa" !="unt _zeds;\n\n\ndayz_currentWeaponHolders = count (_position nearObjects [\"ReammoBox\",_radius]);\n\n\nif (DZE_Bloodsuckers) then {\nloc" 1 onMapSingleClick @@ -77,7 +77,7 @@ 1 setPosASL !="_unit setPosAsl [(_position select 0), (_position select 1), (LHA_height+1)];" !="_flame setPosASL [_pos select 0,_pos select 1,(_pos select 2)+0.2];" !="_fire setPosASL _location;" !"_objectHelper setPosASL _position;\n} else {" !"_b0x1337 setPosASL (getPosASL player);\n} else {" !"_obj setPosASL [_center select 0, _a, _b];" !"_objectSnapGizmo setPosASL " !"_para setposasl [\n" !"_thingy setPosASL (ATLToASL _pos);\n} else {" !="> \"fixWaterPos\");\nif (_fixWaterSpawn == 1) then {\n_vehicle setPosASL (_pos);\n} else {\n_vehicle setPos (_pos);\n}; \n} else {\n_ve" 1 setTerrainGrid 1 setUnitRecoilCoefficient -1 setVehicle !"if(_status) then {\n_vehicle setVehicleLock \"LOCKED\";\n} else {\n_vehicle setVehicleLock \"UNLOCKED\";\n};" +1 setVehicle !"if(_status) then {\n_vehicle setVehicleLock \"LOCKED\";\n} else {\n_vehicle setVehicleLock \"UNLOCKED\";\n};" !="stentMoney),(_wealth - _amount),true];};\n\nvkc_cursorTarget setVehicleLock \"LOCKED\";\nplayer playActionNow \"Medic\";\n\n_position = [" 1 setViewDistance 1 sideLogic !"publicVariable \"BIS_MPF_logic\";" 1 switchCamera !"\"switchCamera\", " !"rswitchCamera" !"player switchCamera _currentCamera;\nif (_currentWpn !=" !"< 150) && random 1 > 0.5) then {\n_killer switchcamera" From d6cebd4598906a60b59360e2cecb334c39dcdc3f Mon Sep 17 00:00:00 2001 From: A Man Date: Wed, 18 Aug 2021 21:31:35 +0200 Subject: [PATCH 28/40] Update bloodsucker strings --- SQF/dayz_code/stringtable.xml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/SQF/dayz_code/stringtable.xml b/SQF/dayz_code/stringtable.xml index 4cf4780aa..f4c219a4b 100644 --- a/SQF/dayz_code/stringtable.xml +++ b/SQF/dayz_code/stringtable.xml @@ -22468,6 +22468,7 @@
You have carved the heart of the %1 from it's chest. + Du hast das Herz des %1 aus seiner Brust herausgeschnitten. Tame Dog @@ -25549,6 +25550,7 @@ Butcher Bloodsucker + Bloodsucker ausnehmen Open %1 @@ -27348,9 +27350,11 @@ Mutant Heart + Mutantenherz - Mutant heart + The heart of a mutant. It is probably worth a lot. + Das Herz eines Mutanten. Es ist möglicherweise viel wert. Combination Lock From 30f15326c2fed4fa7f5e451c909fa2d4031547ab Mon Sep 17 00:00:00 2001 From: A Man Date: Wed, 18 Aug 2021 23:43:21 +0200 Subject: [PATCH 29/40] Add toggleable Virtual Garage by salival This also adds heli pads to the wholesaler if the virutal garage is activated. --- .../CfgServerTrader/Category/Wholesale.hpp | 8 + .../CfgServerTraderZSC/Category/Wholesale.hpp | 8 + .../Configs/RscDisplay/virtualGarage.hpp | 367 ++++++++++++++++++ .../virtualGarage/player_MaintainVG.sqf | 42 ++ .../virtualGarage/player_getVehicle.sqf | 69 ++++ .../virtualGarage/player_removePad.sqf | 24 ++ .../virtualGarage/player_storeVehicle.sqf | 209 ++++++++++ .../actions/virtualGarage/vehicleInfo.sqf | 110 ++++++ .../actions/virtualGarage/virtualGarage.sqf | 64 +++ SQF/dayz_code/compile/fn_selfActions.sqf | 21 +- SQF/dayz_code/config.cpp | 1 + SQF/dayz_code/configVariables.sqf | 43 +- SQF/dayz_code/init/compiles.sqf | 23 ++ SQF/dayz_code/init/variables.sqf | 3 +- SQF/dayz_code/stringtable.xml | 4 + .../system/mission/server_traders/caribou.sqf | 4 + .../mission/server_traders/chernarus11.sqf | 4 + .../mission/server_traders/chernarus17.sqf | 4 + .../mission/server_traders/cmr_ovaron.sqf | 4 + .../mission/server_traders/fdf_isle1_a.sqf | 4 + .../mission/server_traders/isladuala.sqf | 4 + .../system/mission/server_traders/lingor.sqf | 4 + .../system/mission/server_traders/namalsk.sqf | 2 + .../system/mission/server_traders/napf.sqf | 4 + .../mission/server_traders/panthera2.sqf | 4 + .../mission/server_traders/sauerland.sqf | 4 + .../mission/server_traders/smd_sahrani_a2.sqf | 4 + .../mission/server_traders/takistan.sqf | 4 + .../system/mission/server_traders/tavi.sqf | 4 + SQF/dayz_server/compile/garage/init.sqf | 54 +++ .../garage/server_maintainVehicles.sqf | 9 + .../compile/garage/server_queryVehicle.sqf | 12 + .../compile/garage/server_spawnVehicle.sqf | 112 ++++++ .../compile/garage/server_storeVehicle.sqf | 92 +++++ SQF/dayz_server/init/server_functions.sqf | 4 + .../BattlEye/createvehicle.txt | 2 +- .../BattlEye/publicvariable.txt | 2 +- .../DZE_Server_Config/BattlEye/scripts.txt | 14 +- Server Files/DZE_Server_Config/HiveExt.ini | 12 + Server Files/SQL/epoch.sql | 35 +- .../SQL/update epoch 1.0.7 to 1.0.7.1.sql | 22 ++ 41 files changed, 1405 insertions(+), 15 deletions(-) create mode 100644 SQF/dayz_code/Configs/RscDisplay/virtualGarage.hpp create mode 100644 SQF/dayz_code/actions/virtualGarage/player_MaintainVG.sqf create mode 100644 SQF/dayz_code/actions/virtualGarage/player_getVehicle.sqf create mode 100644 SQF/dayz_code/actions/virtualGarage/player_removePad.sqf create mode 100644 SQF/dayz_code/actions/virtualGarage/player_storeVehicle.sqf create mode 100644 SQF/dayz_code/actions/virtualGarage/vehicleInfo.sqf create mode 100644 SQF/dayz_code/actions/virtualGarage/virtualGarage.sqf create mode 100644 SQF/dayz_server/compile/garage/init.sqf create mode 100644 SQF/dayz_server/compile/garage/server_maintainVehicles.sqf create mode 100644 SQF/dayz_server/compile/garage/server_queryVehicle.sqf create mode 100644 SQF/dayz_server/compile/garage/server_spawnVehicle.sqf create mode 100644 SQF/dayz_server/compile/garage/server_storeVehicle.sqf diff --git a/SQF/dayz_code/Configs/CfgServerTrader/Category/Wholesale.hpp b/SQF/dayz_code/Configs/CfgServerTrader/Category/Wholesale.hpp index 9984fdb66..959b022de 100644 --- a/SQF/dayz_code/Configs/CfgServerTrader/Category/Wholesale.hpp +++ b/SQF/dayz_code/Configs/CfgServerTrader/Category/Wholesale.hpp @@ -16,4 +16,12 @@ class Category_50 { class ItemRSJ {type = "trade_items";buy[] = {1,"ItemGoldBar10oz"};sell[] = {5,"ItemGoldBar"};}; class ItemFuelBarrelEmpty {type = "trade_items";buy[] = {1,"ItemGoldBar"};sell[] = {5,"ItemSilverBar10oz"};}; class ItemFuelBarrel {type = "trade_items";buy[] = {2,"ItemGoldBar"};sell[] = {1,"ItemGoldBar"};}; +}; + +class Category_52 { + class helipad_civil_kit {type = "trade_items";buy[] = {2,"ItemGoldBar"};sell[] = {1,"ItemGoldBar"};}; + class helipad_rescue_kit {type = "trade_items";buy[] = {2,"ItemGoldBar"};sell[] = {1,"ItemGoldBar"};}; + class helipad_army_kit {type = "trade_items";buy[] = {2,"ItemGoldBar"};sell[] = {1,"ItemGoldBar"};}; + class helipad_cross_kit {type = "trade_items";buy[] = {2,"ItemGoldBar"};sell[] = {1,"ItemGoldBar"};}; + class helipad_parkborder_kit {type = "trade_items";buy[] = {2,"ItemGoldBar"};sell[] = {1,"ItemGoldBar"};}; }; \ No newline at end of file diff --git a/SQF/dayz_code/Configs/CfgServerTraderZSC/Category/Wholesale.hpp b/SQF/dayz_code/Configs/CfgServerTraderZSC/Category/Wholesale.hpp index 9c44c8e47..130f6f0a9 100644 --- a/SQF/dayz_code/Configs/CfgServerTraderZSC/Category/Wholesale.hpp +++ b/SQF/dayz_code/Configs/CfgServerTraderZSC/Category/Wholesale.hpp @@ -16,4 +16,12 @@ class Category_50 { class ItemRSJ {type = "trade_items";buy[] = {1000,"worth"};sell[] = {500,"worth"};}; class ItemFuelBarrelEmpty {type = "trade_items";buy[] = {100,"worth"};sell[] = {50,"worth"};}; class ItemFuelBarrel {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; +}; + +class Category_52 { + class helipad_civil_kit {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class helipad_rescue_kit {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class helipad_army_kit {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class helipad_cross_kit {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class helipad_parkborder_kit {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; }; \ No newline at end of file diff --git a/SQF/dayz_code/Configs/RscDisplay/virtualGarage.hpp b/SQF/dayz_code/Configs/RscDisplay/virtualGarage.hpp new file mode 100644 index 000000000..975259ed8 --- /dev/null +++ b/SQF/dayz_code/Configs/RscDisplay/virtualGarage.hpp @@ -0,0 +1,367 @@ +// Developed by [GZA] David for German Zombie Apocalypse Servers (https://zombieapo.eu/) +// Rewritten by salival (https://github.com/oiad) + +class vg_RscText { + idc = -1; + x = 0; + y = 0; + h = 0.037; + w = 0.3; + type = 0; + style = 0; + shadow = 2; + colorShadow[] = {0, 0, 0, 0.5}; + font = "Zeppelin32"; + SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + text = ""; + colorText[] = {1, 1, 1, 1.0}; + colorBackground[] = {0, 0, 0, 0}; + linespacing = 1; + tooltipColorText[] = {1,1,1,1}; + tooltipColorBox[] = {1,1,1,1}; + tooltipColorShade[] = {0,0,0,0.65}; +}; + +class vg_RscTitle : vg_RscText { + idc = -1; + style = 0; + sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + colorText[] = {0.95, 0.95, 0.95, 1}; +}; + +class vg_RscShortcutButton { + idc = -1; + style = 0; + default = 0; + shadow = 2; + w = 0.183825; + h = "((((safezoneW / safezoneH) min 1.2) / 1.2) / 20)"; + color[] = {1,1,1,1.0}; + colorFocused[] = {1,1,1,1.0}; + color2[] = {0.95,0.95,0.95,1}; + colorDisabled[] = {1,1,1,0.25}; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.69])","(profilenamespace getvariable ['GUI_BCG_RGB_G',0.75])","(profilenamespace getvariable ['GUI_BCG_RGB_B',0.5])",1}; + colorBackgroundFocused[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.69])","(profilenamespace getvariable ['GUI_BCG_RGB_G',0.75])","(profilenamespace getvariable ['GUI_BCG_RGB_B',0.5])",1}; + colorBackground2[] = {1,1,1,1}; + animTextureDefault = "gza\scripts\gold\gui\normal_ca.paa"; + animTextureNormal = "gza\scripts\gold\gui\normal_ca.paa"; + animTextureDisabled = "gza\scripts\gold\gui\normal_ca.paa"; + animTextureOver = "gza\scripts\gold\gui\over_ca.paa"; + animTextureFocused = "gza\scripts\gold\gui\focus_ca.paa"; + animTexturePressed = "gza\scripts\gold\gui\down_ca.paa"; + periodFocus = 1.2; + periodOver = 0.8; + class HitZone { + left = 0.0; + top = 0.0; + right = 0.0; + bottom = 0.0; + }; + class ShortcutPos { + left = 0; + top = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 20) - (((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)) / 2"; + w = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1) * (3/4)"; + h = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + }; + class TextPos { + left = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1) * (3/4)"; + top = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 20) - (((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)) / 2"; + right = 0.005; + bottom = 0.0; + }; + period = 0.4; + font = "Zeppelin32"; + size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + text = ""; + action = ""; + class Attributes { + font = "Zeppelin32"; + color = "#E5E5E5"; + align = "left"; + shadow = 1; + }; + class AttributesImage { + font = "Zeppelin32"; + color = "#E5E5E5"; + align = "left"; + }; + soundPush[] = { "", 0, 1 }; + soundEnter[] ={ "", 0, 1 }; + soundClick[] ={ "", 0, 1 }; + soundEscape[] ={ "", 0, 1 }; + sound[] ={ "", 0, 1 }; +}; + +class vg_RscButtonMenu : vg_RscShortcutButton { + idc = -1; + type = 16; + style = "0x02 + 0xC0"; + default = 0; + shadow = 0; + x = 0; + y = 0; + w = 0.095589; + h = 0.039216; + animTextureNormal = "#(argb,8,8,3)color(1,1,1,1)"; + animTextureDisabled = "#(argb,8,8,3)color(1,1,1,1)"; + animTextureOver = "#(argb,8,8,3)color(1,1,1,1)"; + animTextureFocused = "#(argb,8,8,3)color(1,1,1,1)"; + animTexturePressed = "#(argb,8,8,3)color(1,1,1,1)"; + animTextureDefault = "#(argb,8,8,3)color(1,1,1,1)"; + colorBackground[] = {0,0,0,0.8}; + colorBackgroundFocused[] = {1,1,1,1}; + colorBackground2[] = {0.75,0.75,0.75,1}; + color[] = {1,1,1,1}; + colorFocused[] = {0,0,0,1}; + color2[] = {0,0,0,1}; + colorText[] = {1,1,1,1}; + colorDisabled[] = {1,1,1,0.25}; + period = 1.2; + periodFocus = 1.2; + periodOver = 1.2; + size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + tooltipColorText[] = {1,1,1,1}; + tooltipColorBox[] = {1,1,1,1}; + tooltipColorShade[] = {0,0,0,0.65}; + class TextPos { + left = "0.25 * (((safezoneW / safezoneH) min 1.2) / 40)"; + top = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) - (((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)) / 2"; + right = 0.005; + bottom = 0.0; + }; + class Attributes { + font = "Zeppelin32"; + color = "#E5E5E5"; + align = "center"; + shadow = 0; + }; + class ShortcutPos { + left = "(6.25 * (((safezoneW / safezoneH) min 1.2) / 40)) - 0.0225 - 0.005"; + top = 0.005; + w = 0.0225; + h = 0.03; + }; + textureNoShortcut = ""; +}; + +class vg_RscListBox { + style = 16; + idc = -1; + type = 5; + w = 0.275; + h = 0.04; + font = "Zeppelin32"; + colorSelect[] = {0.11,0.686,0.831,1}; + colorText[] = {1, 1, 1, 1}; + colorBackground[] = {0.28,0.28,0.28,0.28}; + colorSelect2[] = {1, 1, 1, 1}; + colorSelectBackground[] = {0.95, 0.95, 0.95, 0.5}; + colorSelectBackground2[] = {1, 1, 1, 0.5}; + colorScrollbar[] = {0.2, 0.2, 0.2, 1}; + arrowFull = "\ca\ui\data\igui_arrow_top_active_ca.paa"; + arrowEmpty = "\ca\ui\data\igui_arrow_top_ca.paa"; + wholeHeight = 0.45; + rowHeight = 0.04; + color[] = {0.7, 0.7, 0.7, 1}; + colorActive[] = {0,0,0,1}; + colorDisabled[] = {0,0,0,0.3}; + sizeEx = 0.023; + maxHistoryDelay = 1; + autoScrollSpeed = -1; + autoScrollDelay = 5; + autoScrollRewind = 0; + tooltipColorText[] = {1,1,1,1}; + tooltipColorBox[] = {1,1,1,1}; + tooltipColorShade[] = {0,0,0,0.65}; + class ScrollBar { + color[] = {1, 1, 1, 0.6}; + colorActive[] = {1, 1, 1, 1}; + colorDisabled[] = {1, 1, 1, 0.3}; + thumb = "\ca\ui\data\igui_scrollbar_thumb_ca.paa"; + arrowFull = "\ca\ui\data\igui_arrow_top_active_ca.paa"; + arrowEmpty = "\ca\ui\data\igui_arrow_top_ca.paa"; + border = "\ca\ui\data\igui_border_scroll_ca.paa"; + }; + soundPush[] = { "", 0, 1 }; + soundEnter[] ={ "", 0, 1 }; + soundClick[] ={ "", 0, 1 }; + soundEscape[] ={ "", 0, 1 }; + sound[] ={ "", 0, 1 }; + soundSelect[] = { "", 0, 1 }; +}; + +class vg_RscStructuredText { + type = 13; + style = 0; + x = 0; + y = 0; + h = 0.035; + w = 0.1; + text = ""; + size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + colorText[] = {1, 1, 1, 1.0}; + shadow = 1; + class Attributes { + font = "Zeppelin32"; + color = "#ffffff"; + align = "left"; + shadow = 1; + }; +}; + +class virtualGarage { + idd = 2800; + name="virtualGarage"; + onload = "player setVariable['isBusy',true,true]; [] spawn vg_maintainSetText;"; + onUnload = "player setVariable['isBusy',false,true];dayz_actionInProgress = false;"; + movingEnabled = 0; + enableSimulation = 1; + + class controlsBackground { + class vg_RscTitleBackground : vg_RscText { + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"}; + idc = -1; + x = 0.1; + y = 0.2; + w = 0.8; + h = (1 / 25); + }; + + class MainBackground : vg_RscText { + colorBackground[] = {0,0,0,0.7}; + idc = -1; + x = 0.1; + y = 0.2 + (11 / 250); + w = 0.8; + h = 0.7 - (22 / 250); + }; + + class Title : vg_RscTitle { + idc = 2801; + text = $STR_CL_VG_VIRTUAL_GARAGE; + x = 0.1; + y = 0.2; + w = 0.8; + h = (1 / 25); + }; + + class VehicleInfoHeader : vg_RscText { + idc = 2830; + text = $STR_CL_VG_VEHICLE_INFO; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"}; + x = 0.47; y = 0.26; + w = 0.42; + h = (1 / 25); + }; + + class CloseBtn : vg_RscButtonMenu { + idc = -1; + text = $STR_UI_CLOSE; + onButtonClick = "closeDialog 2;"; + x = -0.06 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); + y = 0.9 - (1 / 25); + w = (6.25 / 40); + h = (1 / 25); + }; + }; + + class controls { + class VehicleList : vg_RscListBox { + idc = 2802; + text = ""; + sizeEx = 0.04; + colorBackground[] = {0.1,0.1,0.1,0.9}; + onLBSelChanged = "[_this] call vehicleInfo;"; + x = 0.11; y = 0.302; + w = 0.35; h = 0.49; + }; + + class VehicleTitleBox : vg_RscText { + idc = 2804; + text = ""; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"}; + x = 0.11; y = 0.26; + w = 0.35; + h = (1 / 25); + }; + + class storeVehicle : vg_RscButtonMenu { + idc = 2850; + text = $STR_CL_VG_STORE_VEHICLE; + onButtonClick = "if (!vg_hasRun) then {vg_hasRun = true;[true] spawn player_storeVehicle;};"; + x = 0.1 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); + y = 0.9 - (1 / 25); + w = (6.25 / 36); + h = (1 / 25); + }; + + class storeVehicleGear : vg_RscButtonMenu { + idc = 2851; + text = $STR_CL_VG_STORE_VEHICLE_GEAR; + onButtonClick = "if (!vg_hasRun) then {vg_hasRun = true;[false] spawn player_storeVehicle;};"; + x = 0.1 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); + y = 0.9 - (1 / 25); + w = (6.25 / 15.85); + h = (1 / 25); + }; + + class getVehicle : vg_RscButtonMenu { + idc = 2852; + text = $STR_CL_VG_GET_VEHICLE; + onButtonClick = "if (!vg_hasRun) then {vg_hasRun = true;[] spawn player_getVehicle;};"; + x = 0.1 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); + y = 0.9 - (1 / 25); + w = (6.25 / 20); + h = (1 / 25); + }; + + class removePad : vg_RscButtonMenu { + idc = 2853; + text = $STR_CL_VG_REMOVE_PAD; + onButtonClick = "call player_removePad;"; + x = 0.5 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); + y = 0.9 - (1 / 25); + w = 0.241; + h = (1 / 25); + }; + + class MaintainGarage : vg_RscButtonMenu { + idc = 2854; + text = $STR_CL_VG_MAINTAIN_GARAGE; + onButtonClick = "if (!vg_hasRun) then {vg_hasRun = true;[] spawn Player_MaintainVG;};"; + x = -0.06 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); + y = 0.903; + w = 0.8; + h = (1 / 25); + }; + + class vehicleInfomationList : vg_RscStructuredText { + idc = 2803; + text = ""; + sizeEx = 0.035; + x = 0.47; y = 0.3; + w = 0.41; h = 0.5; + }; + + class MainBackgroundHider : vg_RscText { + colorBackground[] = {0,0,0,1}; + idc = 2810; + x = 0.1; + y = 0.2 + (11 / 250); + w = 0.8; + h = 0.7 - (22 / 250); + }; + + class MainHideText : vg_RscText { + idc = 2811; + text = $STR_CL_VG_SEARCH_VEHICLES; + sizeEx = 0.06; + x = 0.10; + y = 0.5; + w = 0.8; + h = (1 / 15); + }; + }; +}; diff --git a/SQF/dayz_code/actions/virtualGarage/player_MaintainVG.sqf b/SQF/dayz_code/actions/virtualGarage/player_MaintainVG.sqf new file mode 100644 index 000000000..209fec3f9 --- /dev/null +++ b/SQF/dayz_code/actions/virtualGarage/player_MaintainVG.sqf @@ -0,0 +1,42 @@ +// Written by icomrade (https://github.com/icomrade) + +private ["_hasAccess","_heliPad","_objectID","_objectUID","_plotCheck"]; + +closeDialog 0; + +_itemText = if (Z_SingleCurrency) then {CurrencyName} else {[vg_maintainCost,true] call z_calcCurrency}; +_enoughMoney = false; +_moneyInfo = [false, [], [], [], 0]; + +if (Z_SingleCurrency) then { + _wealth = player getVariable [(["cashMoney","globalMoney"] select Z_persistentMoney),0]; + _enoughMoney = (_wealth >= vg_maintainCost); +} else { + Z_Selling = false; + _moneyInfo = vg_maintainCost call Z_canAfford; + _enoughMoney = _moneyInfo select 0; +}; + +_success = true; +if (vg_maintainCost > 0) then { + _success = if (Z_SingleCurrency) then {_enoughMoney} else {[player,vg_maintainCost,_moneyInfo,false,0] call Z_payDefault}; +}; + +if (!_success && _enoughMoney) exitWith {systemChat localize "STR_EPOCH_TRADE_GEAR_AND_BAG_FULL";}; + +if (_enoughMoney || vg_maintainCost < 1) then { + if (Z_SingleCurrency) then { + player setVariable [(["cashMoney","globalMoney"] select Z_persistentMoney),(_wealth - vg_maintainCost),true]; + }; + localize "STR_CL_VG_MAINTAINSUCCESS" call dayz_rollingMessages; + PVDZE_maintainGarage = if (vg_tiedToPole) then { + _plotCheck = [player,false] call FNC_find_plots; + _ownerPUID = if (_plotCheck select 1 > 0) then {(_plotCheck select 2) getVariable ["ownerPUID","0"]} else {dayz_playerUID}; + [player,_ownerPUID] + } else { + [player] + }; + publicVariableServer "PVDZE_maintainGarage"; +} else { + localize "STR_CL_VG_MAINTAINFAIL" call dayz_rollingMessages; +}; diff --git a/SQF/dayz_code/actions/virtualGarage/player_getVehicle.sqf b/SQF/dayz_code/actions/virtualGarage/player_getVehicle.sqf new file mode 100644 index 000000000..409bfcf1f --- /dev/null +++ b/SQF/dayz_code/actions/virtualGarage/player_getVehicle.sqf @@ -0,0 +1,69 @@ +// Developed by [GZA] David for German Zombie Apocalypse Servers (https://zombieapo.eu/) +// Rewritten by salival (https://github.com/oiad) + +private ["_backPack","_charID","_dir","_heliPad","_inventory","_isNearPlot","_keyID","_keyName","_location","_plotCheck","_sign","_vehicle"]; + +closeDialog 0; +_vehicle = (call compile format["%1",lbData[2802,(lbCurSel 2802)]]); + +if (vg_removeKey && {_vehicle select 3 != 0} && {({getNumber (configFile >> "CfgWeapons" >> _x >> "type") == 131072} count (weapons player)) == 12}) exitWith {localize "str_epoch_player_107" call dayz_rollingMessages;}; + +_dir = round(random 360); +_backPack = []; + +_plotCheck = [player,false] call FNC_find_plots; +_isNearPlot = (_plotCheck select 1) > 0; + +_heliPad = nearestObjects [if (_isNearPlot) then {_plotCheck select 2} else {player},vg_heliPads,if (_isNearPlot) then {DZE_maintainRange} else {Z_VehicleDistance}]; +if ((count _heliPad == 0) && ((_vehicle select 1) isKindOf "Air")) exitWith {localize "STR_CL_VG_NEED_HELIPAD" call dayz_rollingMessages;}; +if (count _heliPad > 0) then { + _location = [(_heliPad select 0)] call FNC_GetPos; +} else { + _location = [(position player),0,400,10,0,2000,0] call BIS_fnc_findSafePos; + _location set [2,0]; +}; + +_sign = "Sign_arrow_down_large_EP1" createVehicleLocal [0,0,0]; +_sign setPos _location; + +if (surfaceIsWater _location && {count (_location nearEntities ["Ship",8]) > 0}) then { + deleteVehicle _sign; + localize "STR_EPOCH_TRADE_OBSTRUCTED" call dayz_rollingMessages; +} else { + [_vehicle select 1,_sign] call fn_waitForObject; +}; + +PVDZE_spawnVehicle = [[_dir,_location],player,_vehicle select 0]; +publicVariableServer "PVDZE_spawnVehicle"; + +waitUntil {!isNil "PVDZE_spawnVehicleResult"}; + +if (PVDZE_spawnVehicleResult != "0") then { + _keyID = ""; + _charID = parseNumber PVDZE_spawnVehicleResult; + if ((_charID > 0) && (_charID <= 2500)) then {_keyID = format["ItemKeyGreen%1",_charID];}; + if ((_charID > 2500) && (_charID <= 5000)) then {_keyID = format["ItemKeyRed%1",_charID-2500];}; + if ((_charID > 5000) && (_charID <= 7500)) then {_keyID = format["ItemKeyBlue%1",_charID-5000];}; + if ((_charID > 7500) && (_charID <= 10000)) then {_keyID = format["ItemKeyYellow%1",_charID-7500];}; + if ((_charID > 10000) && (_charID <= 12500)) then {_keyID = format["ItemKeyBlack%1",_charID-10000];}; + _keyName = getText(configFile >> "CfgWeapons" >> _keyID >> "displayName"); + + if (vg_removeKey) then { + _inventory = weapons player; + dayz_myBackpack = unitBackpack player; + if (!isNull dayz_myBackpack) then {_backPack = (getWeaponCargo dayz_myBackpack) select 0;}; + if (_keyID in (_inventory+_backPack)) then { + if (_keyID in _inventory) then {format[localize "STR_CL_VG_IN_INVENTORY",_keyName] call dayz_rollingMessages;}; + if (_keyID in _backPack) then {format[localize "STR_CL_VG_IN_BACKPACK",_keyName] call dayz_rollingMessages;}; + } else { + player addWeapon _keyID; + format[localize "STR_CL_VG_ADDED_INVENTORY",_keyName] call dayz_rollingMessages; + }; + }; +}; + +PVDZE_spawnVehicle = nil; +PVDZE_spawnVehicleResult = nil; +vg_vehicleList = nil; + +localize "STR_CL_VG_VEHICLE_SPAWNED" call dayz_rollingMessages; diff --git a/SQF/dayz_code/actions/virtualGarage/player_removePad.sqf b/SQF/dayz_code/actions/virtualGarage/player_removePad.sqf new file mode 100644 index 000000000..fd0e54247 --- /dev/null +++ b/SQF/dayz_code/actions/virtualGarage/player_removePad.sqf @@ -0,0 +1,24 @@ +// Written by salival (https://github.com/oiad) + +private ["_hasAccess","_objectID","_objectUID","_plotCheck"]; + +closeDialog 0; + +_plotCheck = [player, false] call FNC_find_plots; +_hasAccess = [player,_plotCheck select 2] call FNC_check_access; + +if ((_hasAccess select 0) or (_hasAccess select 2) or (_hasAccess select 3) or (_hasAccess select 4)) then { + + { + _objectID = _x getVariable ["ObjectID","0"]; + _objectUID = _x getVariable ["ObjectUID","0"]; + + PVDZ_obj_Destroy = [_objectID,_objectUID,player,_x,dayz_authKey]; + publicVariableServer "PVDZ_obj_Destroy"; + + deleteVehicle _x; + systemChat format[localize "STR_CL_VG_HELIPAD_REMOVED",typeOf _x]; + } count (nearestObjects [_plotCheck select 2,vg_heliPads,Z_VehicleDistance]); +} else { + systemChat localize "STR_EPOCH_PLAYER_134"; +}; diff --git a/SQF/dayz_code/actions/virtualGarage/player_storeVehicle.sqf b/SQF/dayz_code/actions/virtualGarage/player_storeVehicle.sqf new file mode 100644 index 000000000..a5a5c65eb --- /dev/null +++ b/SQF/dayz_code/actions/virtualGarage/player_storeVehicle.sqf @@ -0,0 +1,209 @@ +// Developed by [GZA] David for German Zombie Apocalypse Servers (https://zombieapo.eu/) +// Rewritten by salival (https://github.com/oiad) + +private ["_amount","_backPackCount","_backPackGear","_cargoAmount","_charID","_control","_counter","_display","_enoughMoney","_gearCount","_hasKey","_isLimitArray","_itemText","_items","_keyName","_limit","_magazineCount","_matchedCount","_moneyInfo","_name","_overLimit","_storedVehicles","_success","_typeName","_typeOf","_vehicle","_vehicleID","_vehicleUID","_wealth","_weaponsCount","_woGear","_playerNear","_ownerPUID","_plotCheck"]; + +disableSerialization; + +_display = findDisplay 2800; +_control = ((findDisplay 2800) displayCtrl 2802); + +_vehicle = vg_vehicleList select (lbCurSel _control); +_typeOf = typeOf _vehicle; +_isLimitArray = typeName vg_limit == "ARRAY"; + +_overLimit = false; +_matchedCount = 0; +_storedVehicles = []; + +{if (_typeOf isKindOf _x) exitWith {_overLimit = true;}} count vg_blackListed; +if (_overLimit) exitWith {localize "STR_CL_VG_BLACKLISTED" call dayz_rollingMessages;}; + +{ + if (typeName _x == "ARRAY") then { + _storedVehicles set [count _storedVehicles,_x select 1]; + }; +} count vg_vehicleList; + +_gearCount = { + private ["_counter"]; + _counter = 0; + {_counter = _counter + _x;} count _this; + _counter +}; + +if (_isLimitArray) then { + { + _typeName = _x select 0; + _limit = _x select 1; + if (typeName _x == "ARRAY") then { + if (_typeOf isKindOf _typeName) then { + { + if (_x isKindOf _typeName) then {_matchedCount = _matchedCount +1}; + if (_matchedCount >= _limit) then {_overLimit = true;}; + } count _storedVehicles; + }; + }; + if (_overLimit) exitWith {}; + } count vg_limit; +} else { + if (count _storedVehicles >= vg_limit) then {_overLimit = true;}; +}; + +if (_overLimit) exitWith { + if (_isLimitArray) then { + systemChat localize "STR_CL_VG_LIMIT_ARRAY"; + } else { + systemChat localize "STR_CL_VG_LIMIT_NUMBER"; + }; +}; + +vg_vehicleList = nil; + +_woGear = _this select 0; +closeDialog 0; +if (!vg_storeWithGear && !_woGear) exitWith {localize "STR_CL_VG_NOSTOREWITHGEAR" call dayz_rollingMessages;}; + +_charID = _vehicle getVariable ["CharacterID","0"]; +_vehicleID = _vehicle getVariable ["ObjectID","0"]; +_vehicleUID = _vehicle getVariable ["ObjectUID","0"]; +_weaponsCount = ((getWeaponCargo _vehicle) select 1) call _gearCount; +_magazineCount = ((getMagazineCargo _vehicle) select 1) call _gearCount; +_backPackCount = ((getBackpackCargo _vehicle) select 1) call _gearCount; +_cargoAmount = (_weaponsCount + _magazineCount + _backPackCount); + +if (_vehicleID == "1" || _vehicleUID == "1") exitWith {localize "STR_CL_VG_STORE_MISSION" call dayz_rollingMessages;}; +if (isNull DZE_myVehicle || !local DZE_myVehicle) exitWith {localize "STR_EPOCH_PLAYER_245" call dayz_rollingMessages;}; + +_hasKey = false; + +_items = items player; +dayz_myBackpack = unitBackpack player; + +if (!isNull dayz_myBackpack) then { + _backPackGear = (getWeaponCargo dayz_myBackpack) select 0; + _items = _items + _backPackGear; +}; + +if (_charID != "0") then { + { + if (configName(inheritsFrom(configFile >> "CfgWeapons" >> _x)) in DZE_itemKeys) then { + if (str(getNumber(configFile >> "CfgWeapons" >> _x >> "keyid")) == _charID) then { + _keyName = _x; + _hasKey = true; + }; + }; + } count _items; +} else { + if (vg_store_keyless_vehicles) then { + _hasKey = true; + }; +}; + +if (vg_requireKey && {!_hasKey}) exitWith {localize "STR_CL_VG_REQUIRE_KEY" call dayz_rollingMessages;}; + +_name = getText(configFile >> "cfgVehicles" >> _typeOf >> "displayName"); + +{ + if (_typeOf isKindOf (_x select 0)) exitWith {_amount = _x select 1}; +} forEach vg_price; + +if (_cargoAmount > 0) then {_amount = _amount + (_cargoAmount * vg_pricePer);}; + +if (!isNil "sk_dualCurrency") then {_amount = if (z_singleCurrency) then {_amount * 10} else {_amount};}; + +/* +_playerNear = {isPlayer _x && (_x != player)} count (([_vehicle] call FNC_GetPos) nearEntities ["CAManBase", 15]) > 0; +if (_playerNear) exitWith {localize "STR_CL_VG_PLAYERNEARVEHICLE" call dayz_rollingMessages;}; +*/ + +if (count (crew _vehicle) > 0) exitWith {localize "STR_CL_VG_PLAYERINVEHICLE" call dayz_rollingMessages;}; + +_enoughMoney = false; +_moneyInfo = [false,[],[],[],0]; + +if (Z_SingleCurrency) then { + _wealth = player getVariable [(["cashMoney","globalMoney"] select Z_persistentMoney),0]; + _enoughMoney = (_wealth >= _amount); +} else { + Z_Selling = false; + if (Z_AllowTakingMoneyFromVehicle) then {false call Z_checkCloseVehicle}; + _moneyInfo = _amount call Z_canAfford; + _enoughMoney = _moneyInfo select 0; +}; + +_success = if (Z_SingleCurrency) then {true} else {[player,_amount,_moneyInfo,true,0] call Z_payDefault}; + +if (!_success && {_enoughMoney}) exitWith {systemChat localize "STR_EPOCH_TRADE_GEAR_AND_BAG_FULL"}; + +if (_enoughMoney) then { + _success = if (Z_SingleCurrency) then {_amount <= _wealth} else {[player,_amount,_moneyInfo,false,0] call Z_payDefault}; + if (_success) then { + if (Z_SingleCurrency) then {player setVariable [(["cashMoney","globalMoney"] select Z_persistentMoney),(_wealth - _amount),true];}; + + [_vehicle,true] call local_lockUnlock; + DZE_myVehicle = objNull; + + PVDZE_storeVehicle = if (vg_tiedToPole) then { + _plotCheck = [player,false] call FNC_find_plots; + _ownerPUID = if (_plotCheck select 1 > 0) then {(_plotCheck select 2) getVariable ["ownerPUID","0"]} else {dayz_playerUID}; + [_vehicle,player,_woGear,_ownerPUID] + } else { + [_vehicle,player,_woGear] + }; + + publicVariableServer "PVDZE_storeVehicle"; + waitUntil {!isNil "PVDZE_storeVehicleResult"}; + + PVDZE_storeVehicle = nil; + PVDZE_storeVehicleResult = nil; + + format[localize "STR_CL_VG_VEHICLE_STORED",_name] call dayz_rollingMessages; + if (vg_removeKey && {_charID != "0"}) then { + if (_keyName in (items player)) then { + [player,_keyName,1] call BIS_fnc_invRemove; + } else { + private ["_weparray", "_qtyarray", "_arraycnt","_newwepqty","_newwep","_newarray","_cntarray","_weapon","_weaponqty"]; + + _weparray = []; + _qtyarray = []; + _arraycnt = -1; + _backPackGear = getWeaponCargo dayz_myBackpack; + + { + _arraycnt = _arraycnt + 1; + if (_x == _keyName) then { + } else { + _newwep = (_backPackGear select 0) select _arraycnt; + _newwepqty = (_backPackGear select 1) select _arraycnt; + + _weparray set [count _weparray, _newwep]; + _qtyarray set [count _qtyarray,_newwepqty]; + }; + } forEach (_backPackGear select 0); + + _newarray = []; + _newarray = [_weparray] + [_qtyarray]; + + clearWeaponCargoGlobal dayz_myBackpack; + + _cntarray = count _weparray; + + for "_i" from 0 to (_cntarray-1) do { + _weapon = (_newarray select 0) select _i; + _weaponqty = (_newarray select 1) select _i; + dayz_myBackpack addWeaponCargoGlobal [_weapon,_weaponqty]; + }; + }; + }; + } else { + systemChat localize "STR_EPOCH_TRADE_DEBUG"; + }; +} else { + _itemText = if (Z_SingleCurrency) then {CurrencyName} else {[_amount,true] call z_calcCurrency}; + if (Z_SingleCurrency) then { + systemChat format[localize "STR_CL_VG_NEED_COINS",[_amount] call BIS_fnc_numberText,_itemText,_name]; + } else { + systemChat format[localize "STR_CL_VG_NEED_BRIEFCASES",_itemText,_name]; + }; +}; diff --git a/SQF/dayz_code/actions/virtualGarage/vehicleInfo.sqf b/SQF/dayz_code/actions/virtualGarage/vehicleInfo.sqf new file mode 100644 index 000000000..9b752779e --- /dev/null +++ b/SQF/dayz_code/actions/virtualGarage/vehicleInfo.sqf @@ -0,0 +1,110 @@ +// Developed by [GZA] David for German Zombie Apocalypse Servers (https://zombieapo.eu/) +// Rewritten by salival (https://github.com/oiad) + +private ["_backPackCount","_backPackSlots","_cargoAmount","_control","_counter","_DateStored","_formattedText","_index","_inventory","_localVehicle","_magazineCount","_magazineSlots","_name","_picture","_price","_typeOf","_vehicle","_weaponSlots","_weaponsCount","_MaintainDays","_DateMaintained"]; + +disableSerialization; + +_control = (_this select 0) select 0; +_index = (_this select 0) select 1; +_localVehicle = typeName (vg_vehicleList select _index) == "OBJECT"; +_DateMaintained = ""; +_MaintainDays = -1; +_gearCount = { + private ["_counter"]; + _counter = 0; + {_counter = _counter + _x;} count _this; + _counter; +}; + +if (_localVehicle) then { + _vehicle = vg_vehicleList select _index; + _typeOf = typeOf _vehicle; + _weaponsCount = ((getWeaponCargo _vehicle) select 1) call _gearCount; + _magazineCount = ((getMagazineCargo _vehicle) select 1) call _gearCount; + _backPackCount = ((getBackpackCargo _vehicle) select 1) call _gearCount; + ctrlShow[2852,false]; // getVehicle + ctrlShow[2850,true]; // storeVehicle + ctrlShow[2851,true]; // storeVehicleWithGear +} else { + _vehicle = (vg_vehicleList select _index) select 1; + _inventory = (vg_vehicleList select _index) select 2; + _DateStored = (vg_vehicleList select _index) select 4; + _DateMaintained = (vg_vehicleList select _index) select 5; + _MaintainDays = (vg_vehicleList select _index) select 6; + _typeOf = _vehicle; + _weaponsCount = _inventory select 0; + _magazineCount = _inventory select 1; + _backPackCount = _inventory select 2; + + ctrlShow[2852,true]; // getVehicle + ctrlShow[2850,false]; // storeVehicle + ctrlShow[2851,false]; // storeVehicleWithGear +}; + +_weaponSlots = getNumber(configFile >> "CfgVehicles" >> _typeOf >> "transportMaxWeapons"); +_magazineSlots = getNumber(configFile >> "CfgVehicles" >> _typeOf >> "transportMaxMagazines"); +_backPackSlots = getNumber(configFile >> "CfgVehicles" >> _typeOf >> "transportmaxbackpacks"); +_name = getText(configFile >> "CfgVehicles" >> _typeOf >> "displayName"); +_picture = getText (configFile >> 'CfgVehicles' >> _typeOf >> 'picture'); + +_cargoAmount = (_weaponsCount + _magazineCount + _backPackCount); + +if (_localVehicle) then { + { + if (_typeOf isKindOf (_x select 0)) exitWith {_price = _x select 1;}; + } forEach vg_price; + if (_cargoAmount > 0) then { + _price = _price + (_cargoAmount * vg_pricePer); + ctrlShow[2850,false]; + } else { + ctrlShow[2851,false]; + }; + _price = if (_price == 0) then {localize "strwffree"} else { + if (!isNil "sk_dualCurrency") then {_price = if (z_singleCurrency) then {_price * 10} else {_price};}; + if (z_singleCurrency) then { + format ["%1 %2",[_price] call BIS_fnc_numberText,currencyName] + } else { + [_price,true] call z_calcCurrency + }; + }; +}; + +_formattedText = format [ + "
" + + "%2: %3
" + + "%4: %5
" + + "%6: %13/%10 %14/%11 %15/%12
", + _picture, + localize "STR_EPOCH_NAME", + _name, + localize "STR_EPOCH_CLASS", + _typeOf, + localize "STR_EPOCH_CARGO_SPACE", + "\z\addons\dayz_code\gui\gear\gear_ui_slots_weapons_white.paa", + "\z\addons\dayz_code\gui\gear\gear_ui_slots_items_white.paa", + "\z\addons\dayz_code\gui\gear\gear_ui_slots_backPacks_white.paa", + _weaponSlots, + _magazineSlots, + _backPackSlots, + _weaponsCount, + _magazineCount, + _backPackCount +]; + +if (_localVehicle) then {_formattedText = _formattedText + format ["%1: %2
",localize "STR_CL_VG_PRICE",_price];}; +if (!_localVehicle) then { + if (_DateStored != "old") then { + _formattedText = _formattedText + format ["%1: %2
",localize "STR_CL_VG_STOREDATE",_DateStored]; + if (_MaintainDays >= 0) then { + _formattedText = _formattedText + format ["%1: %2
%3: %4
",localize "STR_CL_VG_MAINTAINDATE",_DateMaintained,localize "STR_CL_VG_MAINTAININTERVAL",_MaintainDays]; + }; + } else { + _formattedText = _formattedText + format ["%1: %2
",localize "STR_CL_VG_STOREDATE",localize "STR_CL_VG_STOREDATE_INVALID"]; + }; +}; + +((findDisplay 2800) displayCtrl 2803) ctrlSetStructuredText parseText _formattedText; + +ctrlShow [2803,true]; +ctrlShow [2830,true]; diff --git a/SQF/dayz_code/actions/virtualGarage/virtualGarage.sqf b/SQF/dayz_code/actions/virtualGarage/virtualGarage.sqf new file mode 100644 index 000000000..12a6fdca3 --- /dev/null +++ b/SQF/dayz_code/actions/virtualGarage/virtualGarage.sqf @@ -0,0 +1,64 @@ +// Developed by [GZA] David for German Zombie Apocalypse Servers (https://zombieapo.eu/) +// Rewritten by salival (https://github.com/oiad) + +if (dayz_actionInProgress) exitWith {localize "str_player_actionslimit" call dayz_rollingMessages;}; +dayz_actionInProgress = true; + +private ["_class","_control","_displayName","_heliPad","_isNearPlot","_itemText","_localVehicles","_plotCheck","_storedVehicles","_vgDisplCtl"]; +disableSerialization; + +vg_hasRun = false; +createDialog "virtualGarage"; + +{ctrlShow [_x,false]} count [2803,2830,2850,2851,2852,2853]; + +_plotCheck = [player,false] call FNC_find_plots; +_isNearPlot = (_plotCheck select 1) > 0; + +PVDZE_queryVehicle = if (vg_tiedToPole) then { + [player,if (_isNearPlot) then {(_plotCheck select 2) getVariable ["ownerPUID","0"]} else {dayz_playerUID}] +} else { + [player] +}; + +publicVariableServer "PVDZE_queryVehicle"; +waitUntil {!isNil "PVDZE_queryVehicleResult"}; + +_storedVehicles = PVDZE_queryVehicleResult; +PVDZE_queryVehicle = nil; +PVDZE_queryVehicleResult = nil; + +_localVehicles = ([player] call FNC_getPos) nearEntities [["Air","LandVehicle","Ship"],Z_VehicleDistance]; +_heliPad = nearestObjects [if (_isNearPlot) then {_plotCheck select 2} else {player},vg_heliPads,if (_isNearPlot) then {DZE_maintainRange} else {Z_VehicleDistance}]; + +if (count _heliPad > 0 && {_isNearPlot}) then {ctrlShow[2853,true];}; + +_control = ((findDisplay 2800) displayCtrl 2802); +lbClear _control; + +if (count _storedVehicles == 0 && {isNull DZE_myVehicle || {!(alive DZE_myVehicle)} || {!(local DZE_myVehicle)}}) exitWith {ctrlSetText[2811,localize "STR_CL_VG_NO_VEHICLES"];}; + +vg_vehicleList = []; + +{ + _displayName = getText(configFile >> "CfgVehicles" >> (_x select 1) >> "displayName"); + _control lbAdd _displayName; + _control lbSetData [(lbSize _control)-1,str(_x)]; + vg_vehicleList set [count vg_vehicleList,_x]; +} count _storedVehicles; + +{ + if (!isNull DZE_myVehicle && {local DZE_myVehicle} && {alive DZE_myVehicle} && {DZE_myVehicle == _x}) then { + _class = typeOf _x; + _displayName = getText(configFile >> "CfgVehicles" >> _class >> "displayName"); + _control lbAdd _displayName; + _control lbSetData [(lbSize _control)-1,_class]; + _control lbSetColor [(lbSize _control)-1,[0, 1, 0, 1]]; + vg_vehicleList set [count vg_vehicleList,_x]; + }; +} count _localVehicles; + +ctrlShow[2810,false]; +ctrlShow[2811,false]; + +ctrlSetText [2804, format ["%1 (%2 %3)",localize "STR_CL_VG_YOUR_VEHICLES",count (_storedVehicles),localize "STR_CL_VG_VEHICLES"]]; diff --git a/SQF/dayz_code/compile/fn_selfActions.sqf b/SQF/dayz_code/compile/fn_selfActions.sqf index 6c15df26c..13a19bdf2 100644 --- a/SQF/dayz_code/compile/fn_selfActions.sqf +++ b/SQF/dayz_code/compile/fn_selfActions.sqf @@ -869,7 +869,24 @@ if (!isNull _cursorTarget && {!_inVehicle && !_isPZombie && _canDo && player dis s_player_butcher_human = -1; }; }; - }; + }; + + if (DZE_Virtual_Garage) then { + if (_typeOfCursorTarget in vg_List) then { + if (s_garage_dialog < 0) then { + local _hasAccess = [player,_cursorTarget] call FNC_check_access; + local _plotCheck = [player, false] call FNC_find_plots; + local _isNearPlot = ((_plotCheck select 1) > 0); + + if ((_isNearPlot && ((_hasAccess select 0) || (_hasAccess select 2) || (_hasAccess select 3) || (_hasAccess select 4))) || !_isNearPlot) then { + s_garage_dialog = player addAction [format["%1",localize "STR_CL_VG_VIRTUAL_GARAGE"],"\z\addons\dayz_code\actions\virtualGarage\virtualGarage.sqf",_cursorTarget,3,false,true]; + }; + }; + } else { + player removeAction s_garage_dialog; + s_garage_dialog = -1; + }; + }; // ZSC if (Z_singleCurrency) then { @@ -1153,6 +1170,8 @@ if (!isNull _cursorTarget && {!_inVehicle && !_isPZombie && _canDo && player dis s_player_copyToKey = -1; player removeAction s_player_claimVehicle; s_player_claimVehicle = -1; + player removeAction s_garage_dialog; + s_garage_dialog = -1; }; //Dog actions on player self diff --git a/SQF/dayz_code/config.cpp b/SQF/dayz_code/config.cpp index b7ce25c89..60dc4615a 100644 --- a/SQF/dayz_code/config.cpp +++ b/SQF/dayz_code/config.cpp @@ -131,6 +131,7 @@ class DefaultEventhandlers { #include "Configs\RscDisplay\zscDialogs.hpp" #include "Configs\RscDisplay\remoteVehicle.hpp" #include "Configs\RscDisplay\vehicleKeyChanger.hpp" +#include "Configs\RscDisplay\virtualGarage.hpp" //#include "Configs\RscDisplay\tradermenu.hpp" class CfgTasks diff --git a/SQF/dayz_code/configVariables.sqf b/SQF/dayz_code/configVariables.sqf index c4f9b10a9..9a87806f8 100644 --- a/SQF/dayz_code/configVariables.sqf +++ b/SQF/dayz_code/configVariables.sqf @@ -37,7 +37,10 @@ if (Z_SingleCurrency) then { Z_VehicleDistance = 40; // Max distance a vehicle can be sold or accessed from at a trader. // Vehicle Key Changer -DZE_VehicleKey_Changer = true; // Enable Vehicle Key Changer. Create or change the key for a vehicle. +DZE_VehicleKey_Changer = false; // Enable Vehicle Key Changer. Create or change the key for a vehicle. + +// Virtual Garage +DZE_Virtual_Garage = false; // Enable the Virtual Garage to store vehicles. // Plot Management and Plot for Life DZE_permanentPlot = true; // Plot ownership saves after death. Enables Plot for Life by @RimBlock and Plot Management by @DevZupa. @@ -107,6 +110,12 @@ if (isServer) then { if (DZE_VehicleKey_Changer) then { vkc_clearAmmo = true; // Clear the ammo of vehicles after they have been rekeyed/claimed? (stops users getting a free rearm) vkc_disableThermal = [""]; // Array of vehicle config classes as well as vehicle classnames to disable thermal on when being spawned. i.e: ["All","Land","Air","Ship","StaticWeapon","AH1Z","MTVR"]; + }; + + if (DZE_Virtual_Garage) then { + vg_clearAmmo = true; // Clear the ammo of vehicles spawned during the same restart they are stored? (stops users storing a vehicle for a free rearm) + vg_disableThermal = []; // Array of vehicle config classes as well as vehicle classnames to disable thermal on when being spawned. i.e: ["All","Land","Air","Ship","StaticWeapon","AH1Z","MTVR"]; + vg_sortColumn = 0; //0 or an out of range value sorts by the default column 'DisplayName', otherwise 1 = 'DateStored', 2 = 'id', 3 = 'Name' (of storing player), 4 = 'DateMaintained' }; }; @@ -304,6 +313,38 @@ if (!isDedicated) then { vkc_changePrice = 5000; // Amount in worth for changing the key for a vehicle. See the top of this script for an explanation. }; + if (DZE_Virtual_Garage) then { + vg_list = ["Plastic_Pole_EP1_DZ"]; // List of objects/traders that are allowed to interact with virtual garage. i.e: ["Plastic_Pole_EP1_DZ","Worker2"]; + vg_blackListed = []; // Array of vehicle config classes as well as vehicle classnames that are blacklisted from being stored, i.e ["All","Land","Air","Ship","StaticWeapon","AH1Z","MTVR"] + vg_heliPads = ["Helipad_Civil_DZ","Helipad_Rescue_DZ","Helipad_Army_DZ","Helipad_Cross_DZ","Helipad_ParkBorder_DZ"]; // Array of heli pad classnames + vg_store_keyless_vehicles = false; // Allow storing of keyless vehicle (map or mission spawned) + vg_removeKey = true; // Remove the key from the players inventory after storing vehicle? + vg_requireKey = true; // Require the player to have the key when storing a locked vehicle. + vg_storeWithGear = true; // Allow storing vehicles with gear? + vg_tiedToPole = true; // Tie the virtual garage to a local plot pole? If no plot pole is present (i.e a communal garage at a trader etc) the players UID will be used. + vg_pricePer = 100; // Price in worth to store a vehicle per gear item, use 0 if you want it to be free. + vg_maintainCost = 10000; //cost is 1000 per 10oz gold, gem cost is as defined in DZE_GemWorthArray; if you use ZSC then this is an amount of coins. This is a flate rate for all vehicles in the garage/per player depending on vg_tiedToPole + vg_price = [["Land",500],["Air",500],["Ship",500]]; + /* + vg_price can be an array of vehicle config classes as well as vehicle classnames, you need to put these in order of what you prefer to get checked first. + Price is in worth for briefcases or coins for gold based servers (10,000 worth is considered 1 briefcase, 100,000 coins is considered 1 briefcase) + + i.e: + vg_price = [["Land",500],["Air",300],["Ship",100]]; + vg_price = [["350z_red",200],["Land",500],["AH1Z",1000],["Air",300],["Ship",100]]; + */ + vg_limit = [["Land",5],["Air",5],["Ship",5]]; + /* + vg_limit can be an array of vehicle config classes and classnames to narrow down what players can store or it can be a numerical value for a total limit. + These can be classnames as well as config classnames, you need to put these in order of what you prefer to get checked first. + + i.e: + vg_limit = [["Land",5],["Air",3],["Ship",1]]; + vg_limit = [["350z_red",2],["Land",5],["AH1Z",1],["Air",3],["Ship",1]]; + vg_limit = 5; + */ + }; + // Bloodsuckers DZE_Bloodsuckers = false; // Enable bloodsucker spawning. diff --git a/SQF/dayz_code/init/compiles.sqf b/SQF/dayz_code/init/compiles.sqf index 0b59c812c..19f119700 100644 --- a/SQF/dayz_code/init/compiles.sqf +++ b/SQF/dayz_code/init/compiles.sqf @@ -212,6 +212,29 @@ if (!isDedicated) then { vkc_vehicleInfo = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\vkc\vehicleInfo.sqf"; }; + if (DZE_Virtual_Garage) then { + player_getVehicle = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\virtualGarage\player_getVehicle.sqf"; + player_removePad = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\virtualGarage\player_removePad.sqf"; + player_storeVehicle = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\virtualGarage\player_storeVehicle.sqf"; + Player_MaintainVG = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\virtualGarage\player_MaintainVG.sqf"; + vehicleInfo = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\virtualGarage\vehicleInfo.sqf"; + vg_maintainSetText = { + disableSerialization; + waituntil {!isNull (findDisplay 2800)}; + _vgDisplCtl = (findDisplay 2800) displayCtrl 2854; + if (vg_maintainCost > 0) then { + _itemText = if (Z_SingleCurrency) then {CurrencyName} else {[vg_maintainCost,true] call z_calcCurrency}; + if (Z_SingleCurrency) then { + _vgDisplCtl ctrlSetText format["%1 (%2 %3)",localize "STR_CL_VG_MAINTAIN_GARAGE",vg_maintainCost,_itemText]; + } else { + _vgDisplCtl ctrlSetText format["%1 (%2)",localize "STR_CL_VG_MAINTAIN_GARAGE",_itemText]; + }; + } else { + _vgDisplCtl ctrlSetText format["%1 (%2)",localize "STR_CL_VG_MAINTAIN_GARAGE",localize "strwffree"]; + }; + }; + }; + if (DZE_Service_Points) then { execVM "\z\addons\dayz_code\actions\servicePoints\init.sqf"; }; diff --git a/SQF/dayz_code/init/variables.sqf b/SQF/dayz_code/init/variables.sqf index 4d572ea42..12df2095c 100644 --- a/SQF/dayz_code/init/variables.sqf +++ b/SQF/dayz_code/init/variables.sqf @@ -213,7 +213,8 @@ if (!isDedicated) then { s_player_bury_human = -1; s_player_butcher_human = -1; s_player_copyToKey = -1; - s_player_claimVehicle = -1; + s_player_claimVehicle = -1; + s_garage_dialog = -1; }; call dayz_resetSelfActions; diff --git a/SQF/dayz_code/stringtable.xml b/SQF/dayz_code/stringtable.xml index f4c219a4b..aa6efa27d 100644 --- a/SQF/dayz_code/stringtable.xml +++ b/SQF/dayz_code/stringtable.xml @@ -32171,6 +32171,10 @@ Währung Валюта
+ + Heli Pads + Helipads + Trade %1 %2 for %3 %4 %1 %2 für %3 %4 handeln diff --git a/SQF/dayz_code/system/mission/server_traders/caribou.sqf b/SQF/dayz_code/system/mission/server_traders/caribou.sqf index 17c579697..bd13f45ae 100644 --- a/SQF/dayz_code/system/mission/server_traders/caribou.sqf +++ b/SQF/dayz_code/system/mission/server_traders/caribou.sqf @@ -135,6 +135,8 @@ menu_Profiteer2 = [ "neutral" ]; +if (DZE_Virtual_Garage) then {(menu_Profiteer2 select 0) set [count (menu_Profiteer2 select 0), [localize "STR_EPOCH_TRADER_CATEGORY_HELI_PADS",52]];}; + /***************Wholesaler*********/ menu_Profiteer3 = [ [[localize "STR_EPOCH_TRADER_CATEGORY_WHOLESALE",50]], @@ -142,6 +144,8 @@ menu_Profiteer3 = [ "neutral" ]; +if (DZE_Virtual_Garage) then {(menu_Profiteer3 select 0) set [count (menu_Profiteer3 select 0), [localize "STR_EPOCH_TRADER_CATEGORY_HELI_PADS",52]];}; + /***************Banker*********/ menu_Functionary1_EP1 = [ [[localize "STR_EPOCH_TRADER_CATEGORY_CURRENCY",51]], diff --git a/SQF/dayz_code/system/mission/server_traders/chernarus11.sqf b/SQF/dayz_code/system/mission/server_traders/chernarus11.sqf index 66d84566b..ca464d481 100644 --- a/SQF/dayz_code/system/mission/server_traders/chernarus11.sqf +++ b/SQF/dayz_code/system/mission/server_traders/chernarus11.sqf @@ -181,6 +181,8 @@ menu_Profiteer2 = [ "neutral" ]; +if (DZE_Virtual_Garage) then {(menu_Profiteer2 select 0) set [count (menu_Profiteer2 select 0), [localize "STR_EPOCH_TRADER_CATEGORY_HELI_PADS",52]];}; + /***************Wholesaler*********/ menu_Profiteer3 = [ [[localize "STR_EPOCH_TRADER_CATEGORY_WHOLESALE",50]], @@ -188,6 +190,8 @@ menu_Profiteer3 = [ "neutral" ]; +if (DZE_Virtual_Garage) then {(menu_Profiteer3 select 0) set [count (menu_Profiteer3 select 0), [localize "STR_EPOCH_TRADER_CATEGORY_HELI_PADS",52]];}; + /***************Banker*********/ menu_Functionary1_EP1 = [ [[localize "STR_EPOCH_TRADER_CATEGORY_CURRENCY",51]], diff --git a/SQF/dayz_code/system/mission/server_traders/chernarus17.sqf b/SQF/dayz_code/system/mission/server_traders/chernarus17.sqf index e9c4c6651..bfb679373 100644 --- a/SQF/dayz_code/system/mission/server_traders/chernarus17.sqf +++ b/SQF/dayz_code/system/mission/server_traders/chernarus17.sqf @@ -179,6 +179,8 @@ menu_Profiteer2 = [ "neutral" ]; +if (DZE_Virtual_Garage) then {(menu_Profiteer2 select 0) set [count (menu_Profiteer2 select 0), [localize "STR_EPOCH_TRADER_CATEGORY_HELI_PADS",52]];}; + /***************Wholesaler*********/ menu_Profiteer3 = [ [[localize "STR_EPOCH_TRADER_CATEGORY_WHOLESALE",50]], @@ -186,6 +188,8 @@ menu_Profiteer3 = [ "neutral" ]; +if (DZE_Virtual_Garage) then {(menu_Profiteer3 select 0) set [count (menu_Profiteer3 select 0), [localize "STR_EPOCH_TRADER_CATEGORY_HELI_PADS",52]];}; + /***************Banker*********/ menu_Functionary1_EP1 = [ [[localize "STR_EPOCH_TRADER_CATEGORY_CURRENCY",51]], diff --git a/SQF/dayz_code/system/mission/server_traders/cmr_ovaron.sqf b/SQF/dayz_code/system/mission/server_traders/cmr_ovaron.sqf index 953c43b12..5cbec6619 100644 --- a/SQF/dayz_code/system/mission/server_traders/cmr_ovaron.sqf +++ b/SQF/dayz_code/system/mission/server_traders/cmr_ovaron.sqf @@ -138,6 +138,8 @@ menu_Profiteer2 = [ "neutral" ]; +if (DZE_Virtual_Garage) then {(menu_Profiteer2 select 0) set [count (menu_Profiteer2 select 0), [localize "STR_EPOCH_TRADER_CATEGORY_HELI_PADS",52]];}; + /***************Wholesaler*********/ menu_Profiteer3 = [ [[localize "STR_EPOCH_TRADER_CATEGORY_WHOLESALE",50]], @@ -145,6 +147,8 @@ menu_Profiteer3 = [ "neutral" ]; +if (DZE_Virtual_Garage) then {(menu_Profiteer3 select 0) set [count (menu_Profiteer3 select 0), [localize "STR_EPOCH_TRADER_CATEGORY_HELI_PADS",52]];}; + /***************Banker*********/ menu_Functionary1_EP1 = [ [[localize "STR_EPOCH_TRADER_CATEGORY_CURRENCY",51]], diff --git a/SQF/dayz_code/system/mission/server_traders/fdf_isle1_a.sqf b/SQF/dayz_code/system/mission/server_traders/fdf_isle1_a.sqf index 4144b2b9f..02cb16dd1 100644 --- a/SQF/dayz_code/system/mission/server_traders/fdf_isle1_a.sqf +++ b/SQF/dayz_code/system/mission/server_traders/fdf_isle1_a.sqf @@ -128,6 +128,8 @@ menu_Profiteer2 = [ "neutral" ]; +if (DZE_Virtual_Garage) then {(menu_Profiteer2 select 0) set [count (menu_Profiteer2 select 0), [localize "STR_EPOCH_TRADER_CATEGORY_HELI_PADS",52]];}; + /***************Wholesaler*********/ menu_Profiteer3 = [ [[localize "STR_EPOCH_TRADER_CATEGORY_WHOLESALE",50]], @@ -135,6 +137,8 @@ menu_Profiteer3 = [ "neutral" ]; +if (DZE_Virtual_Garage) then {(menu_Profiteer3 select 0) set [count (menu_Profiteer3 select 0), [localize "STR_EPOCH_TRADER_CATEGORY_HELI_PADS",52]];}; + /***************Banker*********/ menu_Functionary1_EP1 = [ [[localize "STR_EPOCH_TRADER_CATEGORY_CURRENCY",51]], diff --git a/SQF/dayz_code/system/mission/server_traders/isladuala.sqf b/SQF/dayz_code/system/mission/server_traders/isladuala.sqf index 5cbed648c..26ddd1ca5 100644 --- a/SQF/dayz_code/system/mission/server_traders/isladuala.sqf +++ b/SQF/dayz_code/system/mission/server_traders/isladuala.sqf @@ -181,6 +181,8 @@ menu_Profiteer2 = [ "neutral" ]; +if (DZE_Virtual_Garage) then {(menu_Profiteer2 select 0) set [count (menu_Profiteer2 select 0), [localize "STR_EPOCH_TRADER_CATEGORY_HELI_PADS",52]];}; + /***************Wholesaler*********/ menu_Profiteer3 = [ [[localize "STR_EPOCH_TRADER_CATEGORY_WHOLESALE",50]], @@ -188,6 +190,8 @@ menu_Profiteer3 = [ "neutral" ]; +if (DZE_Virtual_Garage) then {(menu_Profiteer3 select 0) set [count (menu_Profiteer3 select 0), [localize "STR_EPOCH_TRADER_CATEGORY_HELI_PADS",52]];}; + /***************Banker*********/ menu_Functionary1_EP1 = [ [[localize "STR_EPOCH_TRADER_CATEGORY_CURRENCY",51]], diff --git a/SQF/dayz_code/system/mission/server_traders/lingor.sqf b/SQF/dayz_code/system/mission/server_traders/lingor.sqf index ea6d2c4f3..4100fb270 100644 --- a/SQF/dayz_code/system/mission/server_traders/lingor.sqf +++ b/SQF/dayz_code/system/mission/server_traders/lingor.sqf @@ -181,6 +181,8 @@ menu_Profiteer2 = [ "neutral" ]; +if (DZE_Virtual_Garage) then {(menu_Profiteer2 select 0) set [count (menu_Profiteer2 select 0), [localize "STR_EPOCH_TRADER_CATEGORY_HELI_PADS",52]];}; + /***************Wholesaler*********/ menu_Profiteer3 = [ [[localize "STR_EPOCH_TRADER_CATEGORY_WHOLESALE",50]], @@ -188,6 +190,8 @@ menu_Profiteer3 = [ "neutral" ]; +if (DZE_Virtual_Garage) then {(menu_Profiteer3 select 0) set [count (menu_Profiteer3 select 0), [localize "STR_EPOCH_TRADER_CATEGORY_HELI_PADS",52]];}; + /***************Banker*********/ menu_Functionary1_EP1 = [ [[localize "STR_EPOCH_TRADER_CATEGORY_CURRENCY",51]], diff --git a/SQF/dayz_code/system/mission/server_traders/namalsk.sqf b/SQF/dayz_code/system/mission/server_traders/namalsk.sqf index 7b7eaec9e..e07c5383e 100644 --- a/SQF/dayz_code/system/mission/server_traders/namalsk.sqf +++ b/SQF/dayz_code/system/mission/server_traders/namalsk.sqf @@ -88,6 +88,8 @@ menu_Profiteer2 = [ "neutral" ]; +if (DZE_Virtual_Garage) then {(menu_Profiteer2 select 0) set [count (menu_Profiteer2 select 0), [localize "STR_EPOCH_TRADER_CATEGORY_HELI_PADS",52]];}; + /***************Banker*********/ menu_Functionary1_EP1 = [ [[localize "STR_EPOCH_TRADER_CATEGORY_CURRENCY",51]], diff --git a/SQF/dayz_code/system/mission/server_traders/napf.sqf b/SQF/dayz_code/system/mission/server_traders/napf.sqf index 205e7354f..42fdd81f7 100644 --- a/SQF/dayz_code/system/mission/server_traders/napf.sqf +++ b/SQF/dayz_code/system/mission/server_traders/napf.sqf @@ -179,6 +179,8 @@ menu_Profiteer2 = [ "neutral" ]; +if (DZE_Virtual_Garage) then {(menu_Profiteer2 select 0) set [count (menu_Profiteer2 select 0), [localize "STR_EPOCH_TRADER_CATEGORY_HELI_PADS",52]];}; + /***************Wholesaler*********/ menu_Profiteer3 = [ [[localize "STR_EPOCH_TRADER_CATEGORY_WHOLESALE",50]], @@ -186,6 +188,8 @@ menu_Profiteer3 = [ "neutral" ]; +if (DZE_Virtual_Garage) then {(menu_Profiteer3 select 0) set [count (menu_Profiteer3 select 0), [localize "STR_EPOCH_TRADER_CATEGORY_HELI_PADS",52]];}; + /***************Banker*********/ menu_Functionary1_EP1 = [ [[localize "STR_EPOCH_TRADER_CATEGORY_CURRENCY",51]], diff --git a/SQF/dayz_code/system/mission/server_traders/panthera2.sqf b/SQF/dayz_code/system/mission/server_traders/panthera2.sqf index 212995906..4d3deb580 100644 --- a/SQF/dayz_code/system/mission/server_traders/panthera2.sqf +++ b/SQF/dayz_code/system/mission/server_traders/panthera2.sqf @@ -181,6 +181,8 @@ menu_Profiteer2 = [ "neutral" ]; +if (DZE_Virtual_Garage) then {(menu_Profiteer2 select 0) set [count (menu_Profiteer2 select 0), [localize "STR_EPOCH_TRADER_CATEGORY_HELI_PADS",52]];}; + /***************Wholesaler*********/ menu_Profiteer3 = [ [[localize "STR_EPOCH_TRADER_CATEGORY_WHOLESALE",50]], @@ -188,6 +190,8 @@ menu_Profiteer3 = [ "neutral" ]; +if (DZE_Virtual_Garage) then {(menu_Profiteer3 select 0) set [count (menu_Profiteer3 select 0), [localize "STR_EPOCH_TRADER_CATEGORY_HELI_PADS",52]];}; + /***************Banker*********/ menu_Functionary1_EP1 = [ [[localize "STR_EPOCH_TRADER_CATEGORY_CURRENCY",51]], diff --git a/SQF/dayz_code/system/mission/server_traders/sauerland.sqf b/SQF/dayz_code/system/mission/server_traders/sauerland.sqf index 15d7b389d..546421266 100644 --- a/SQF/dayz_code/system/mission/server_traders/sauerland.sqf +++ b/SQF/dayz_code/system/mission/server_traders/sauerland.sqf @@ -174,6 +174,8 @@ menu_Profiteer2 = [ "neutral" ]; +if (DZE_Virtual_Garage) then {(menu_Profiteer2 select 0) set [count (menu_Profiteer2 select 0), [localize "STR_EPOCH_TRADER_CATEGORY_HELI_PADS",52]];}; + /***************Wholesaler*********/ menu_Profiteer3 = [ [[localize "STR_EPOCH_TRADER_CATEGORY_WHOLESALE",50]], @@ -181,6 +183,8 @@ menu_Profiteer3 = [ "neutral" ]; +if (DZE_Virtual_Garage) then {(menu_Profiteer3 select 0) set [count (menu_Profiteer3 select 0), [localize "STR_EPOCH_TRADER_CATEGORY_HELI_PADS",52]];}; + /***************Banker*********/ menu_Functionary1_EP1 = [ [[localize "STR_EPOCH_TRADER_CATEGORY_CURRENCY",51]], diff --git a/SQF/dayz_code/system/mission/server_traders/smd_sahrani_a2.sqf b/SQF/dayz_code/system/mission/server_traders/smd_sahrani_a2.sqf index 625d96e38..c1e450440 100644 --- a/SQF/dayz_code/system/mission/server_traders/smd_sahrani_a2.sqf +++ b/SQF/dayz_code/system/mission/server_traders/smd_sahrani_a2.sqf @@ -181,6 +181,8 @@ menu_Profiteer2 = [ "neutral" ]; +if (DZE_Virtual_Garage) then {(menu_Profiteer2 select 0) set [count (menu_Profiteer2 select 0), [localize "STR_EPOCH_TRADER_CATEGORY_HELI_PADS",52]];}; + /***************Wholesaler*********/ menu_Profiteer3 = [ [[localize "STR_EPOCH_TRADER_CATEGORY_WHOLESALE",50]], @@ -188,6 +190,8 @@ menu_Profiteer3 = [ "neutral" ]; +if (DZE_Virtual_Garage) then {(menu_Profiteer3 select 0) set [count (menu_Profiteer3 select 0), [localize "STR_EPOCH_TRADER_CATEGORY_HELI_PADS",52]];}; + /***************Banker*********/ menu_Functionary1_EP1 = [ [[localize "STR_EPOCH_TRADER_CATEGORY_CURRENCY",51]], diff --git a/SQF/dayz_code/system/mission/server_traders/takistan.sqf b/SQF/dayz_code/system/mission/server_traders/takistan.sqf index 7ab157516..fde29f9b3 100644 --- a/SQF/dayz_code/system/mission/server_traders/takistan.sqf +++ b/SQF/dayz_code/system/mission/server_traders/takistan.sqf @@ -167,6 +167,8 @@ menu_Profiteer2 = [ "neutral" ]; +if (DZE_Virtual_Garage) then {(menu_Profiteer2 select 0) set [count (menu_Profiteer2 select 0), [localize "STR_EPOCH_TRADER_CATEGORY_HELI_PADS",52]];}; + /***************Wholesaler*********/ menu_Profiteer3 = [ [[localize "STR_EPOCH_TRADER_CATEGORY_WHOLESALE",50]], @@ -174,6 +176,8 @@ menu_Profiteer3 = [ "neutral" ]; +if (DZE_Virtual_Garage) then {(menu_Profiteer3 select 0) set [count (menu_Profiteer3 select 0), [localize "STR_EPOCH_TRADER_CATEGORY_HELI_PADS",52]];}; + /***************Banker*********/ menu_Functionary1_EP1 = [ [[localize "STR_EPOCH_TRADER_CATEGORY_CURRENCY",51]], diff --git a/SQF/dayz_code/system/mission/server_traders/tavi.sqf b/SQF/dayz_code/system/mission/server_traders/tavi.sqf index 6f3b16d3c..a3ee4e652 100644 --- a/SQF/dayz_code/system/mission/server_traders/tavi.sqf +++ b/SQF/dayz_code/system/mission/server_traders/tavi.sqf @@ -181,6 +181,8 @@ menu_Profiteer2 = [ "neutral" ]; +if (DZE_Virtual_Garage) then {(menu_Profiteer2 select 0) set [count (menu_Profiteer2 select 0), [localize "STR_EPOCH_TRADER_CATEGORY_HELI_PADS",52]];}; + /***************Wholesaler*********/ menu_Profiteer3 = [ [[localize "STR_EPOCH_TRADER_CATEGORY_WHOLESALE",50]], @@ -188,6 +190,8 @@ menu_Profiteer3 = [ "neutral" ]; +if (DZE_Virtual_Garage) then {(menu_Profiteer3 select 0) set [count (menu_Profiteer3 select 0), [localize "STR_EPOCH_TRADER_CATEGORY_HELI_PADS",52]];}; + /***************Banker*********/ menu_Functionary1_EP1 = [ [[localize "STR_EPOCH_TRADER_CATEGORY_CURRENCY",51]], diff --git a/SQF/dayz_server/compile/garage/init.sqf b/SQF/dayz_server/compile/garage/init.sqf new file mode 100644 index 000000000..0ce53c169 --- /dev/null +++ b/SQF/dayz_server/compile/garage/init.sqf @@ -0,0 +1,54 @@ +server_queryVehicle = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\garage\server_queryVehicle.sqf"; +server_spawnVehicle = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\garage\server_spawnVehicle.sqf"; +server_storeVehicle = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\garage\server_storeVehicle.sqf"; +server_maintainGarage = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\garage\server_maintainVehicles.sqf"; + +"PVDZE_queryVehicle" addPublicVariableEventHandler {(_this select 1) spawn server_queryVehicle}; +"PVDZE_spawnVehicle" addPublicVariableEventHandler {(_this select 1) spawn server_spawnVehicle}; +"PVDZE_storeVehicle" addPublicVariableEventHandler {(_this select 1) spawn server_storeVehicle}; +"PVDZE_maintainGarage" addPublicVariableEventHandler {(_this select 1) spawn server_maintainGarage}; + +// Thanks to icomrade/DayZ Epoch for this code: https://github.com/EpochModTeam/DayZ-Epoch/commit/8035df0ba0cd928b84085e288c5cb88260870a3e#diff-ad0636fc2328a27bd80bad9f46126307 +VG_RandomizeMyKey = { + _randomInput = toArray "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890"; + _return = []; + for "_i" from 0 to (_this) do { + _return set [count _return, (_randomInput call BIS_fnc_selectRandom)]; + }; + _return; +}; +vg_serverKey = toString (8 call VG_RandomizeMyKey); +vg_alreadySpawned = []; + +VG_ClearTurrets = { + //By denvdmj (probably, I found it on the biki) + private ["_weaponArray","_findRecurse","_class","_obj","_turret","_mags"]; + _obj = _this; + + _weaponArray = []; + _weaponArray set [count _weaponArray,[-1]]; + + _findRecurse = { + private ["_root", "_class", "_path", "_currentPath", "_thisThis"]; + _root = (_this select 0); + _path = +(_this select 1); + _thisThis = _this select 2; + for "_i" from 0 to count _root -1 do { + _class = _root select _i; + if (isClass _class) then { + _currentPath = _path + [_i]; + {_weaponArray set [count _weaponArray, _currentPath];} count getArray (_class >> "weapons"); + _class = _class >> "turrets"; + if (isClass _class) then {[_class, _currentPath, _thisThis] call _findRecurse;}; + }; + }; + }; + + [configFile >> "CfgVehicles" >> typeOf (_obj) >> "turrets", [], _this] call _findRecurse; + + { + _turret = _x; + _mags = _obj magazinesTurret _turret; + {_obj removeMagazinesTurret[_x,_turret];} count _mags; + } forEach _weaponArray; +}; diff --git a/SQF/dayz_server/compile/garage/server_maintainVehicles.sqf b/SQF/dayz_server/compile/garage/server_maintainVehicles.sqf new file mode 100644 index 000000000..f70711f6d --- /dev/null +++ b/SQF/dayz_server/compile/garage/server_maintainVehicles.sqf @@ -0,0 +1,9 @@ +private ["_player","_playerUID","_key","_message"]; +_player = _this select 0; +_playerUID = if (count _this > 1) then {_this select 1} else {getPlayerUID _player}; + +_key = format["CHILD:803:%1:",_playerUID]; +_key call server_hiveWrite; + +_message = format["GARAGE: %1 (%2) maintained vehicles linked to UID: %3 @%4 %5",if (alive _player) then {name _player} else {"DeadPlayer"},getPlayerUID _player,_playerUID,mapGridPosition _player,getPosATL _player]; +diag_log _message; diff --git a/SQF/dayz_server/compile/garage/server_queryVehicle.sqf b/SQF/dayz_server/compile/garage/server_queryVehicle.sqf new file mode 100644 index 000000000..9784acf9b --- /dev/null +++ b/SQF/dayz_server/compile/garage/server_queryVehicle.sqf @@ -0,0 +1,12 @@ +private ["_player","_query","_result","_clientID","_playerUID"]; + +_player = _this select 0; +_clientID = owner _player; +_playerUID = if (count _this > 1) then {_this select 1} else {getPlayerUID _player}; + +_key = format["CHILD:800:%1:%2:",_playerUID,vg_sortColumn]; +_result = _key call server_hiveReadWrite; + +PVDZE_queryVehicleResult = _result; + +if (!isNull _player) then {_clientID publicVariableClient "PVDZE_queryVehicleResult";}; diff --git a/SQF/dayz_server/compile/garage/server_spawnVehicle.sqf b/SQF/dayz_server/compile/garage/server_spawnVehicle.sqf new file mode 100644 index 000000000..df3919b7e --- /dev/null +++ b/SQF/dayz_server/compile/garage/server_spawnVehicle.sqf @@ -0,0 +1,112 @@ +private ["_isAir","_VG_ObjID","_characterID","_class","_clientID","_clrinit","_clrinit2","_colour","_colour2","_dam","_damage","_dir","_fuel","_hitpoints","_id","_inventory","_key","_location","_message","_object","_oid","_outcome","_player","_result","_selection","_serverKey","_uid","_worldSpace"]; + +_worldSpace = _this select 0; +_player = _this select 1; +_id = _this select 2; +_dir = _worldSpace select 0; +_location = _worldSpace select 1; +_worldSpace = [_dir,_location]; +_uid = _worldSpace call dayz_objectUID2; +_key = str formatText["CHILD:801:%1:%2:%3:",_id,_worldSpace,_uid]; + +_result = _key call server_hiveReadWrite; +_outcome = _result select 0; +if (_outcome != "PASS") exitWith {diag_log("HIVE VIRTUAL GARAGE SPAWN VEHICLE FAILED TO EXECUTE: " + _key);}; +_class = _result select 1; +_characterID = _result select 2; +_inventory = _result select 3; +_hitpoints = _result select 4; +_fuel = _result select 5; +_damage = _result select 6; +_colour = _result select 7; +_colour2 = _result select 8; +_serverKey = _result select 9; +_VG_ObjID = _result select 10; +_clientID = owner _player; + +if (_VG_ObjID in vg_alreadySpawned) exitWith { + diag_log format["VG ERROR: Vehicle with VGObjID = %1 has already been spawned and will not be spawned again. PlayerUID: %2", _VG_ObjID, (getPlayerUID _player)]; +}; + +_key = format["CHILD:388:%1:",_uid]; + +#ifdef OBJECT_DEBUG +diag_log ("HIVE: WRITE: "+ str(_key)); +#endif + +_result = _key call server_hiveReadWrite; +_outcome = _result select 0; + +if (_outcome != "PASS") then { + diag_log("CUSTOM: failed to get id for : " + str(_uid)); +} else { + _VG_ObjID = (toString (18 call VG_RandomizeMyKey)); //new ID + vg_alreadySpawned set [(count vg_alreadySpawned), _VG_ObjID]; + _oid = _result select 1; + + #ifdef OBJECT_DEBUG + diag_log("CUSTOM: Selected " + str(_oid)); + #endif + + _object = _class createVehicle _location; + if (surfaceIsWater _location && {({_x != _object} count (_location nearEntities ["Ship",8])) == 0}) then { + _object setPos _location; + }; + + _object addEventHandler ["HandleDamage",{false}]; + + clearWeaponCargoGlobal _object; + clearMagazineCargoGlobal _object; + if (vg_clearAmmo && {vg_serverKey == _serverKey}) then {_object call VG_ClearTurrets;}; + + _object setFuel _fuel; + _object setDamage _damage; + + [_inventory select 0,_inventory select 1,_inventory select 2,_object] call fn_addCargo; + + _object setVariable ["ObjectID", _oid, true]; + _object setVariable ["lastUpdate",diag_tickTime]; + _object setVariable ["VGObjectID",_VG_ObjID, false]; + + if (_colour != "0") then { + _object setVariable ["Colour",_colour,true]; + _clrinit = format ["#(argb,8,8,3)color(%1)",_colour]; + _object setVehicleInit "this setObjectTexture [0,"+str _clrinit+"];"; + }; + + if (_colour2 != "0") then { + _object setVariable ["Colour2",_colour2,true]; + _clrinit2 = format ["#(argb,8,8,3)color(%1)",_colour2]; + _object setVehicleInit "this setObjectTexture [1,"+str _clrinit2+"];"; + }; + + processInitCommands; + + _characterID = str(_characterID); + _object setVariable ["CharacterID", _characterID, true]; + + if (_characterID != "0" && !(_object isKindOf "Bicycle")) then {_object setVehicleLock "LOCKED";}; + _isAir = _object isKindOf "Air"; + + { + _selection = _x select 0; + _dam = _x select 1; + _dam = [_x select 1,(_x select 1) min 0.8] select (!_isAir && {_selection in dayZ_explosiveParts}); + [_object,_selection,_dam] call fnc_veh_setFixServer; + } forEach _hitpoints; + + dayz_serverObjectMonitor set [count dayz_serverObjectMonitor,_object]; + + _object call fnc_veh_ResetEH; + {if (_object isKindOf _x) exitWith {_object disableTIEquipment true;}} count vg_disableThermal; + + PVDZE_veh_Init = _object; + publicVariable "PVDZE_veh_Init"; + + PVDZE_spawnVehicleResult = _characterID; + + if (!isNull _player) then {_clientID publicVariableClient "PVDZE_spawnVehicleResult";}; + + _message = format["%1 (%2) retrieved %3 @%4 %5",if (alive _player) then {name _player} else {"DeadPlayer"},getPlayerUID _player,_class,mapGridPosition _player,getPosATL _player]; + diag_log _message; +}; diff --git a/SQF/dayz_server/compile/garage/server_storeVehicle.sqf b/SQF/dayz_server/compile/garage/server_storeVehicle.sqf new file mode 100644 index 000000000..3e969e079 --- /dev/null +++ b/SQF/dayz_server/compile/garage/server_storeVehicle.sqf @@ -0,0 +1,92 @@ +private ["_damageVeh","_VGobjID","_array","_backPack","_backPackCount","_charID","_class","_clientID","_colour","_colour2","_damage","_displayName","_fnc_sanitizeInput","_fuel","_gearCount","_hit","_hitpoints","_index","_inventory","_inventoryCount","_key","_magazine","_magazineCount","_message","_name","_objectID","_objectUID","_player","_playerUID","_selection","_vehicle","_weapons","_weaponsCount","_woGear"]; + +_vehicle = _this select 0; +_player = _this select 1; +_woGear = _this select 2; +_clientID = owner _player; +_playerUID = if (count _this > 3) then {_this select 3} else {getPlayerUID _player}; + +_gearCount = { + private ["_counter"]; + _counter = 0; + {_counter = _counter + _x;} count _this; + _counter; +}; + +_fnc_sanitizeInput = { + private ["_input","_badChars"]; + + _input = _this; + _input = toArray (_input); + _badChars = [60,62,38,123,125,91,93,59,58,39,96,126,44,46,47,63,124,92,34]; + + { + _input = _input - [_x]; + } forEach _badChars; + + _input = toString (_input); + _input +}; + +_class = typeOf _vehicle; +_displayName = (getText(configFile >> "cfgVehicles" >> _class >> "displayName")) call _fnc_sanitizeInput; +_name = if (alive _player) then {(name _player) call _fnc_sanitizeInput;} else {"unknown player";}; + +_charID = _vehicle getVariable ["CharacterID","0"]; +_objectID = _vehicle getVariable ["ObjectID","0"]; +_objectUID = _vehicle getVariable ["ObjectUID","0"]; +_VGobjID = _vehicle getVariable ["VGObjectID","0"]; +if (_VGobjID == "0") then { + _VGobjID = (toString (18 call VG_RandomizeMyKey)); //normally spawned vehicle +} else { + _index = vg_alreadySpawned find _VGobjID; + if (_index >= 0) then { + vg_alreadySpawned = vg_alreadySpawned - [_VGobjID]; + } else { + diag_log format["VG Error: Could not find vehicle with VGobjUID = %1 in vg_alreadySpawned array (server_storeVehicle.sqf) - possible duplicate vehicle being stored. PlayerUID: %2", _VGobjID, (getPlayerUID _player)]; + }; +}; +_damageVeh = damage _vehicle; +_fuel = fuel _vehicle; +_colour = _vehicle getVariable ["Colour","0"]; +_colour2 = _vehicle getVariable ["Colour2","0"]; + +_array = []; +_inventory = [[[],[]],[[],[]],[[],[]]]; +_inventoryCount = [0,0,0]; + +if (isNil "_colour") then {_colour = "0";}; +if (isNil "_colour2") then {_colour2 = "0";}; + +_hitpoints = _vehicle call vehicle_getHitpoints; + +{ + _hit = [_vehicle,_x] call object_getHit; + _damage = _hit select 0; + _selection = getText (configFile >> "CfgVehicles" >> _class >> "HitPoints" >> _x >> "name"); + if (_damage > 0) then {_array set [count _array,[_selection,_damage]]}; +} count _hitpoints; + +if (!_woGear) then { + _weapons = getWeaponCargo _vehicle; + _magazine = getMagazineCargo _vehicle; + _backPack = getBackpackCargo _vehicle; + _weaponsCount = (_weapons select 1) call _gearCount; + _magazineCount = (_magazine select 1) call _gearCount; + _backPackCount = (_backPack select 1) call _gearCount; + _inventory = [_weapons, _magazine, _backPack]; + _inventoryCount = [_weaponsCount, _magazineCount, _backPackCount]; +}; + +_key = str formatText["CHILD:802:%1:%2:%3:%4:%5:%6:%7:%8:%9:%10:%11:%12:%13:%14:",_playerUID,_name,_displayName,_class,_charID,_inventory,_array,_fuel,_damageVeh,_colour,_colour2,vg_serverKey,_VGobjID,_inventoryCount]; +_key call server_hiveWrite; + +PVDZE_storeVehicleResult = true; + +[_objectID,_objectUID,_vehicle] call server_deleteObjDirect; +deleteVehicle _vehicle; + +if (!isNull _player) then {_clientID publicVariableClient "PVDZE_storeVehicleResult";}; + +_message = format["GARAGE: %1 (%2) stored %3 @%4 %5",_name,_playerUID,_class,mapGridPosition _player,getPosATL _player]; +diag_log _message; diff --git a/SQF/dayz_server/init/server_functions.sqf b/SQF/dayz_server/init/server_functions.sqf index 9835508dc..e87b4b23b 100644 --- a/SQF/dayz_server/init/server_functions.sqf +++ b/SQF/dayz_server/init/server_functions.sqf @@ -58,6 +58,10 @@ spawn_mineveins = compile preprocessFileLineNumbers "\z\addons\dayz_server\compi spawn_roadblocks = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\spawn_roadblocks.sqf"; spawn_vehicles = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\spawn_vehicles.sqf"; +if (DZE_Virtual_Garage) then { + call compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\garage\init.sqf"; +}; + fnc_veh_setFixServer = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\veh_setFixServer.sqf"; //process the hit as a NORMAL damage (useful for persistent vehicles) server_medicalSync = { diff --git a/Server Files/DZE_Server_Config/BattlEye/createvehicle.txt b/Server Files/DZE_Server_Config/BattlEye/createvehicle.txt index c2e10be6c..d46db7f7b 100644 --- a/Server Files/DZE_Server_Config/BattlEye/createvehicle.txt +++ b/Server Files/DZE_Server_Config/BattlEye/createvehicle.txt @@ -8,7 +8,7 @@ 1 ^Smoke !=SmokeShell(|Red|Green|Yellow) !=SmokeLauncherAmmo 1 ^Chem !=Chem(Green|Red|Blue) 1 ^._40mm !=(G_40mm_HE|G_40mm_Smoke|F_40mm_White|F_40mm_Green) -1 _DZ$ !=(BanditW?[12]|Camo1|Sniper1W?|Soldier1|SurvivorW?([123]|desert|pink|combat|urban|winter)|Blood_Trail)_DZ !=(Land_Fire|Sandbag1|Hedgehog|BearTrap|CamoNet|GrenadeHandTimedWest|flamable)_DZ !=(Priest|Doctor|Assistant|Worker[134]|Soldier_(Crew|TL|Sniper|Bodyguard_AA12)_PMC)_DZ !=((Functionary1|Haris_Press|Pilot|US_Soldier)_EP1|Reporter|MafiaBoss|Dealer)_DZ !=pz_(policeman|suit[12]|worker[123]|doctor|teacher|hunter|villager[123]|priest)_DZ !=(GUE_Soldier_(MG|Sniper|Crew|CO|2)|Apo_Rifleman_0[1-6])_DZ !=(UN_CDF_Soldier(_Guard)?_EP1|BAF_Soldier_(Officer|N)_MTP|Nac_Soldier|Tamika)_DZ !=GhillieFull_(Desert0[1-8]|Snow0[1-5]|Urban01|Wood(0[1-9]|1[1-6]))_DZ !=SG_GRU_(TL|Scout|Sniper|Spotter|Assaultman|Medic|Marksman|Operator|MG)(|_W|_D)_DZ !=(Firefighter([1-5]|_Officer[12])|Postman[1-4]|SchoolTeacher|Civilian([1-9]|1[0-4]))_DZ !=((Drake|Graves)_Light|GUE_Commander|Hunter|Gardener|RUS_(Soldier1|Commander))_DZ !=(RU_(Soldier(|_Officer|_Crew)|Policeman2?)|Ins_(Soldier_(2|GL|Crew)|Commander))_DZ !=(MVD_Soldier|CDF_Soldier|Prisoner[123]|Rocker[1-4]|BusinessMan|Rocket)_DZ !=(INS_(Lopotev|Soldier_(AR|CO)|Bardak|Worker2)|USMC_Soldier_(Officer|MG|Pilot))_DZ !=FR_(TL|R|Marksman|Assault_R|OHara|Rodriguez|Sapper)_DZ !=TK_(Special_Forces_MG|Soldier_Sniper|Commander|GUE_Soldier|CIV_Takistani0[1346]|INS_(Soldier(_AR)?|Warlord))_EP1_DZ !=gsc_(military_helmet_|military_head_)(|wdl|grey)_DZ !=gsc_(scientist[12](_head)?|cloth_loner_head)_DZ !=gsc_eco_stalker_(mask|head)_(camo|neutral|head|fred|duty)_DZ !=CZ_(Soldier_(805|Crew|Officer|Recon|Spec([123]|_Demo)|Sniper|Light)(|_Wdl|_Dst)|Soldier805_DES)_ACR_DZ !=CZ_(Special_Forces_GL_DES|Soldier_Sniper|Soldier_SL_DES)_EP1_DZ !=GER_Soldier(_TL)?_EP1(|_des|_wdl)_DZ !=(Plastic_Pole_EP1|Generator|Server_Rack|FuelPump|FireBarrel|GunRack|GunRack2|WoodCrate|WoodCrate2|WorkBench)_DZ !_Preview_DZ !=CamoWinter(1|2|1W|2W)_DZ !=HookerW(1-5)_DZ !=TK_INS_Soldier_EP(1-3)_DZ !=CinderGarageOpenTop(|Frame|Locked)_DZ !=CinderWall(Doorway|Door|DoorLocked|Window|Half)_DZ !=Wood(Ramp|Floor(|Stairs|Half|Quarter|4x)|TriangleFloor|Large(Wall(|Door|Win))|Small(Wall(|Third|Win|Door))|TriangleWall|GateFrame|Stairs(|Rails|Sans)|Ladder|Handrail|Pillar)_DZ !=MetalFloor(|_Half|_Quarter|4x)_DZ !=GlassFloor(|_Half|_Quarter)_DZ !=(DesertLarge|Desert|Winter|WinterLarge|Forest|ForestLarge)CamoNet_DZ !WoodenFence_ !MetalFence_ +1 _DZ$ !=(BanditW?[12]|Camo1|Sniper1W?|Soldier1|SurvivorW?([123]|desert|pink|combat|urban|winter)|Blood_Trail)_DZ !=(Land_Fire|Sandbag1|Hedgehog|BearTrap|CamoNet|GrenadeHandTimedWest|flamable)_DZ !=(Priest|Doctor|Assistant|Worker[134]|Soldier_(Crew|TL|Sniper|Bodyguard_AA12)_PMC)_DZ !=((Functionary1|Haris_Press|Pilot|US_Soldier)_EP1|Reporter|MafiaBoss|Dealer)_DZ !=pz_(policeman|suit[12]|worker[123]|doctor|teacher|hunter|villager[123]|priest)_DZ !=(GUE_Soldier_(MG|Sniper|Crew|CO|2)|Apo_Rifleman_0[1-6])_DZ !=(UN_CDF_Soldier(_Guard)?_EP1|BAF_Soldier_(Officer|N)_MTP|Nac_Soldier|Tamika)_DZ !=GhillieFull_(Desert0[1-8]|Snow0[1-5]|Urban01|Wood(0[1-9]|1[1-6]))_DZ !=SG_GRU_(TL|Scout|Sniper|Spotter|Assaultman|Medic|Marksman|Operator|MG)(|_W|_D)_DZ !=(Firefighter([1-5]|_Officer[12])|Postman[1-4]|SchoolTeacher|Civilian([1-9]|1[0-4]))_DZ !=((Drake|Graves)_Light|GUE_Commander|Hunter|Gardener|RUS_(Soldier1|Commander))_DZ !=(RU_(Soldier(|_Officer|_Crew)|Policeman2?)|Ins_(Soldier_(2|GL|Crew)|Commander))_DZ !=(MVD_Soldier|CDF_Soldier|Prisoner[123]|Rocker[1-4]|BusinessMan|Rocket)_DZ !=(INS_(Lopotev|Soldier_(AR|CO)|Bardak|Worker2)|USMC_Soldier_(Officer|MG|Pilot))_DZ !=FR_(TL|R|Marksman|Assault_R|OHara|Rodriguez|Sapper)_DZ !=TK_(Special_Forces_MG|Soldier_Sniper|Commander|GUE_Soldier|CIV_Takistani0[1346]|INS_(Soldier(_AR)?|Warlord))_EP1_DZ !=gsc_(military_helmet_|military_head_)(|wdl|grey)_DZ !=gsc_(scientist[12](_head)?|cloth_loner_head)_DZ !=gsc_eco_stalker_(mask|head)_(camo|neutral|head|fred|duty)_DZ !=CZ_(Soldier_(805|Crew|Officer|Recon|Spec([123]|_Demo)|Sniper|Light)(|_Wdl|_Dst)|Soldier805_DES)_ACR_DZ !=CZ_(Special_Forces_GL_DES|Soldier_Sniper|Soldier_SL_DES)_EP1_DZ !=GER_Soldier(_TL)?_EP1(|_des|_wdl)_DZ !=(Plastic_Pole_EP1|Generator|Server_Rack|FuelPump|FireBarrel|GunRack|GunRack2|WoodCrate|WoodCrate2|WorkBench)_DZ !_Preview_DZ !=CamoWinter(1|2|1W|2W)_DZ !=HookerW(1-5)_DZ !=TK_INS_Soldier_EP(1-3)_DZ !=CinderGarageOpenTop(|Frame|Locked)_DZ !=CinderWall(Doorway|Door|DoorLocked|Window|Half)_DZ !=Wood(Ramp|Floor(|Stairs|Half|Quarter|4x)|TriangleFloor|Large(Wall(|Door|Win))|Small(Wall(|Third|Win|Door))|TriangleWall|GateFrame|Stairs(|Rails|Sans)|Ladder|Handrail|Pillar)_DZ !=MetalFloor(|_Half|_Quarter|4x)_DZ !=GlassFloor(|_Half|_Quarter)_DZ !=(DesertLarge|Desert|Winter|WinterLarge|Forest|ForestLarge)CamoNet_DZ !WoodenFence_ !MetalFence_ !Helipad_ 1 ^Trap Trap(_Cans|Tripwire(Flare|Grenade|Smoke)|BearTrap(Smoke|Flare)) 1=(SmallSecondary|HelicopterExplo(Small|Big)) // log explosions (optional) 1=(PipeBomb|Grenade(_|HandTimed)(West|East)) // log grenades (optional) diff --git a/Server Files/DZE_Server_Config/BattlEye/publicvariable.txt b/Server Files/DZE_Server_Config/BattlEye/publicvariable.txt index 6b8afe5a6..1a2430279 100644 --- a/Server Files/DZE_Server_Config/BattlEye/publicvariable.txt +++ b/Server Files/DZE_Server_Config/BattlEye/publicvariable.txt @@ -1,5 +1,5 @@ //new -5 !=remEx(Field|FP) !=(PVCDZ_obj_GutBody|BIS_effects_gepv) !=PVDZ_(hlt_Bleed|obj_(Delete|Publish|RoadFlare|Destroy|Fire)|veh_Save|veh_SF) !=PVDZ_(plr_(Death|Login[12]|LoginRecord|Save|SwitchMove|Delete)|Server(_Simulation|StoreVar|_UpdateGroup)) !=PVDZ_(playerMedicalSync|groupInvite|send|sec_atp) !=PVDZ_objgather_(Delete|Knockdown) !=PVDZE_(obj_(Swap|Trade)|maintainArea|PingSend|veh_(Lock|Publish2|Upgrade)|handleSafeGear|plr_(DeathB|FriendRQ)) !=SK_changeCode +5 !=remEx(Field|FP) !=(PVCDZ_obj_GutBody|BIS_effects_gepv) !=PVDZ_(hlt_Bleed|obj_(Delete|Publish|RoadFlare|Destroy|Fire)|veh_Save|veh_SF) !=PVDZ_(plr_(Death|Login[12]|LoginRecord|Save|SwitchMove|Delete)|Server(_Simulation|StoreVar|_UpdateGroup)) !=PVDZ_(playerMedicalSync|groupInvite|send|sec_atp) !=PVDZ_objgather_(Delete|Knockdown) !=PVDZE_(obj_(Swap|Trade)|maintainArea|PingSend|veh_(Lock|Publish2|Upgrade)|handleSafeGear|plr_(DeathB|FriendRQ)) !=SK_changeCode !=PVDZE_(query|store|spawn)Vehicle !=PVDZE_maintainGarage 1=BIS_effects_gepv|PVDZ_(hlt_Bleed|obj_Delete|obj_Destroy|obj_Publish|plr_Death|plr_LoginRecord|sec_atp|send) 1=PVDZ_veh_(Save|SF) 1=PVDZE_obj_Swap diff --git a/Server Files/DZE_Server_Config/BattlEye/scripts.txt b/Server Files/DZE_Server_Config/BattlEye/scripts.txt index d6a9b25f7..a20d157dc 100644 --- a/Server Files/DZE_Server_Config/BattlEye/scripts.txt +++ b/Server Files/DZE_Server_Config/BattlEye/scripts.txt @@ -2,7 +2,7 @@ 1 addAction !", \"\\z\\addons\\dayz_code\\" !=" = -1;\n};\nif (_s1 > 0) then {\ns_player_toggleSnap = player addaction [format[\"\" + \"Snap: %1\" +\"\",snapAc" !="-1;\n};\n\nif (_s1 > 0) then {\ns_player_toggleVector = player addaction [format[\"\" + localize \"STR_EPOCH_ACTIO" !"\"addAction\", " !"raddAction" !="_costs] call _fnc_actionTitle;\nSP_refuel_action = _vehicle addAction [_actionTitle,_folder + \"servicePointActions.sqf\",[\"refuel\"" 1 addBackpack !"addBackpackCargoGlobal [_x,(_objWpnQty select _counter)];\n_counter = _counter + 1;\n} count _objWpnTypes;" !"addBackpack _item;\n};\n};\nformat[localize \"str_c" !"case 3: {_holder addBackpackCargoGlobal [_item,_amount];};\n};\n\n\n" !"}) then {\n_newUnit addBackpack _newBackpackType;\n\nd" !"addBackpack _backpackType; \ndayz_myBackpack = unitBackpack player;\n\n\n\n_backpackWpnT" !"};\n} count _wpns;\n\nif (_bcpk != \"\") then {\nplayer addBackpack" !"1 == \"trade_backpacks\") then {\nDZE_myVehicle addBackpack" !"7 addBackpackCargoGlobal [_create,_qty];\n};\nif (surfaceIsWater" !"case 5: {_item addBackpackCargoGlobal [_itemOut,_countOut]}; \n};\n} else" !="m (2 + 1)];\n};\n};\n\nif (_type == 5) exitWith {\n_container addBackpackCargoGlobal [_item, 1];\n};\n};\n} count ([_group, _count] cal" !="5) exitWith {\nif (isNull unitBackpack _unit) then {\n_unit addBackpack _item;\n};\n};\n};\n} foreach ([_group, _count] call dz_fn_loo" !="al [_itemOut,_countOut]};\nif (_type == 5) exitwith {_item addBackpackCargoGlobal [_itemOut,_countOut]}; \n};\n} else {\n_item addMa" !="forEachIndex]} forEach (_backPackMag select 0);};\n\n_crate addBackpackCargoGlobal [_backPack,1];\n};\n\n_sound = _corpse getVariable" 1 addMagazine !raddMagazine !"\"addMagazine\", " !"if (isClass (configfile >> \"cfgmagazines\" >> (_item))) then {_unit addMagazine _item;};\n};\n};\n};\n};" !"_vehicle addMagazineTurret [_ammo,_turret];\nplayer removeMagazine" !"if (dayz_actionInProgress) exitWith {" !"addMagazine _x;\n};\n} foreach _items;\nformat[loc" !"addMagazine \"ItemAntibiotic\" + str(_remain" !"sumeDrop\") == 0) then\n{\nplayer addMagazine" !"ion) do {\ncase \"CfgWeapons\":\n{\nplayer addWeapon _item;\n};\ncase \"CfgMagazines\":\n{\nplayer addMagazine" !"addMagazine [\"12Rnd_Quiver_Wood\",_qty_quiv" !" >> \"containerEmpty\")" !"plant) select 1;\n{\n_item addMagazine" !"addMagazineCargoGlobal [_itemtodrop,1];\n\nformat[localize \"str_f" !"addMagazine _attachment;\n\n\n(findDisplay 10" !"addMagazine getText (configFile >> \"CfgMagazines\" >> _x >> _water" !"};\n};\n\n\nswitch _type do {\ncase 1: {_holder addMagazine" !"addMagazine _item;\n};\n};\n_idc = _idc" !"_newUnit addMagazine [_x select 0,_x select 1]" !"addMagazine _x } count MeleeMagazines;\n} e" !"_meleeNum < 1) then {\nplayer addMagazine" !"addMagazine _qtyRemaining;\n};\n};\ntrue" !"bag\";\n};\n};\n(_this select 0) addMagazine" !"addMagazine \"wholeBloodBagBNEG\";\n};\n};" !"_qty > 0) then {\n_firePlace addMagazine" !"ONEG\" }; \n};\ndayz_myBackpack addMagazine" !"addMagazine _x;\n_countmags = _countmags +1;\n};\n} count _gmag" !"E\"];\n_lootpile addMagazineCargoGlobal [\"TrapBear\", 1]" !"With\n{\nplayer addMagazine (_this select 1" !"lder addMagazineCargoGlobal [_x,(_objWpnQty select _counter)];\n_counter = _counter + 1;\n};\n} co" !"soldItem\"];\n{\n_object addMagazine" !"systemChat localize \"STR_EPOCH_TRADE_" !"if (_silver_1oz > 0) then {\nif (_silver_1oz == 1) then {\nplayer addMagazine" !="Random;\n} else {\n_item = \"ItemBloodbag\";\n};\n};\n_container addMagazineCargoGlobal [_item, 1];\n};\n\nif (_type == 2) exitWith {\n_c" !="electRandom;\n} else {\n_item = \"ItemBloodbag\";\n};\n};\n_unit addMagazine _item;\n};\n\nif (_type == 2) exitWith {\n_unit addWeapon _i" !="];\n\ncall {\nif (_humanityBody >= DZE_Hero) exitwith {_body addMagazine \"ItemDogTagHero\";};\nif (_humanityBody <= DZE_Bandit) exitw" !="_vehicle = \"WeaponHolder\" createVehicle [0,0,0];\n_vehicle addMagazineCargoGlobal [_item, 1];\n\nif (_isWater) then { \n_fixWaterSp" !"eep 3;\n_finished = true;\n};\n\nif (!_finished) then {\n_unit addMagazine _bagUsed;\n_msg = \"str_actions_medical_transfusion_interrup" !="art\") then {\n_body addWeapon _rawfoodtype;\n} else {\n_body addMagazine _rawfoodtype;\n};\n};\n\nif (_bodyType in [\"Cock\",\"Hen\"]) then" -1 addWeapon !raddWeapon !"\"addWeapon\", " !"if (isClass (configfile >> \"cfgweapons\" >> (_item))) then {_unit addWeapon _item;}\nelse" !",0]] call dayz_NutritionSystem;\n" !"Remove) == 1}) then {\nplayer addWeapon _create;" !"Display 0;\n\n\nif (_weaponInUse) then\n{\n_muz" !"failChance) then {\nswitch (_selection) do {\ncase \"CfgWeapons\":\n{\nplayer addWeapon" !"addWeapon _fixedItem;\nformat[localize \"str_f" !"_wepcounts = (getWeaponCargo _plant) select 1;\n{\n_item addWeapon" !"addWeapon _repair;\n} else {\n\n[_repair" !"player addWeapon dayz_onBack] select 0;\n};\n\n" !"player addWeapon _addWeapon;\n\nif (vehicle player != player) then {\n_display = find" !"};\n};\n\n\nswitch _type do {\ncase 1: {_holder addMagazineCargoGlobal [_item,_amount];};\ncase 2: {_holder addWeapon" !"l fn_chance) then {\nplayer removeWeapon _x;\nplayer addWeapon _rem" !"else {\n_body addWeapon dayz_onBack;\n};\n};\n\n\n_infect" !"\" >> _x)) then {\nplayer addWeapon _x;\n};\n} count _wpns;\n};" !"lder addWeaponCargoGlobal [_x,(_objWpnQty select _counter)];\n_counter = _counter + 1;\n} co" !"WpnQtys = [];\nif (count _backpackWpn > 0) then {\n_backpackWpnTypes = _backpackWpn sel" !"addWeapon (\"Item\"+str(_remain)+\"Matchbox" !"{\nswitch (_x select 0) do\n{\ncase 2:\n{\n(_this select 0) addWeapon" !"addWeaponCargoGlobal [_bcpkWpn, 1];\n};\n};\n};\n};" !"s;\n};\n\n\nplayer addWeapon \"Loot" !"With\n{\nplayer addWeapon (_this select 1" !"\") then {\n_newUnit addWeapon _secweapon;\n};\n\n" !"soldItem\"];\n{\n_object addWeapon" !"then {\nsystemChat format[localize \"STR_EPOCH_" !"DuplicateTool;\n} else {\nplayer addWeapon" !="al [_item, 1];\n};\n\nif (_type == 2) exitWith {\n_container addWeaponCargoGlobal [_item, 1];\n\n_magazines = getArray (configFile >" !=" addMagazine _item;\n};\n\nif (_type == 2) exitWith {\n_unit addWeapon _item;\n};\n\nif (_type == 5) exitWith {\nif (isNull unitBackp" !="ile >> \"CfgWeapons\" >> _x >> \"type\") == 256) then {\nplayer addWeapon _x;\n} else {\n_x call player_addDuplicateTool;\n};\n};\n} count" !="\n_vehicle = \"WeaponHolder\" createVehicle [0,0,0];\n_vehicle addWeaponCargoGlobal [_item, 1];\n\nif (_isWater) then { \n_fixWaterSpa" !="do {_vehicle addMagazineTurret [_ammo,_turret];};\n_vehicle addWeaponTurret [\"CMFlareLauncher\",_turret];\n} else {\n{_vehicle remov" !="ect 2];\n_cross setVariable [\"bury\",true,true];\n};\n\n{_crate addWeaponCargoGlobal [_x,1]} forEach weapons _corpse;\n{_crate addMaga" !="y do {\nif (_rawfoodtype == \"ItemMutantHeart\") then {\n_body addWeapon _rawfoodtype;\n} else {\n_body addMagazine _rawfoodtype;\n};\n}" +1 addWeapon !raddWeapon !"\"addWeapon\", " !"if (isClass (configfile >> \"cfgweapons\" >> (_item))) then {_unit addWeapon _item;}\nelse" !",0]] call dayz_NutritionSystem;\n" !"Remove) == 1}) then {\nplayer addWeapon _create;" !"Display 0;\n\n\nif (_weaponInUse) then\n{\n_muz" !"failChance) then {\nswitch (_selection) do {\ncase \"CfgWeapons\":\n{\nplayer addWeapon" !"addWeapon _fixedItem;\nformat[localize \"str_f" !"_wepcounts = (getWeaponCargo _plant) select 1;\n{\n_item addWeapon" !"addWeapon _repair;\n} else {\n\n[_repair" !"player addWeapon dayz_onBack] select 0;\n};\n\n" !"player addWeapon _addWeapon;\n\nif (vehicle player != player) then {\n_display = find" !"};\n};\n\n\nswitch _type do {\ncase 1: {_holder addMagazineCargoGlobal [_item,_amount];};\ncase 2: {_holder addWeapon" !"l fn_chance) then {\nplayer removeWeapon _x;\nplayer addWeapon _rem" !"else {\n_body addWeapon dayz_onBack;\n};\n};\n\n\n_infect" !"\" >> _x)) then {\nplayer addWeapon _x;\n};\n} count _wpns;\n};" !"lder addWeaponCargoGlobal [_x,(_objWpnQty select _counter)];\n_counter = _counter + 1;\n} co" !"WpnQtys = [];\nif (count _backpackWpn > 0) then {\n_backpackWpnTypes = _backpackWpn sel" !"addWeapon (\"Item\"+str(_remain)+\"Matchbox" !"{\nswitch (_x select 0) do\n{\ncase 2:\n{\n(_this select 0) addWeapon" !"addWeaponCargoGlobal [_bcpkWpn, 1];\n};\n};\n};\n};" !"s;\n};\n\n\nplayer addWeapon \"Loot" !"With\n{\nplayer addWeapon (_this select 1" !"\") then {\n_newUnit addWeapon _secweapon;\n};\n\n" !"soldItem\"];\n{\n_object addWeapon" !"then {\nsystemChat format[localize \"STR_EPOCH_" !"DuplicateTool;\n} else {\nplayer addWeapon" !="al [_item, 1];\n};\n\nif (_type == 2) exitWith {\n_container addWeaponCargoGlobal [_item, 1];\n\n_magazines = getArray (configFile >" !=" addMagazine _item;\n};\n\nif (_type == 2) exitWith {\n_unit addWeapon _item;\n};\n\nif (_type == 5) exitWith {\nif (isNull unitBackp" !="ile >> \"CfgWeapons\" >> _x >> \"type\") == 256) then {\nplayer addWeapon _x;\n} else {\n_x call player_addDuplicateTool;\n};\n};\n} count" !="\n_vehicle = \"WeaponHolder\" createVehicle [0,0,0];\n_vehicle addWeaponCargoGlobal [_item, 1];\n\nif (_isWater) then { \n_fixWaterSpa" !="do {_vehicle addMagazineTurret [_ammo,_turret];};\n_vehicle addWeaponTurret [\"CMFlareLauncher\",_turret];\n} else {\n{_vehicle remov" !="ect 2];\n_cross setVariable [\"bury\",true,true];\n};\n\n{_crate addWeaponCargoGlobal [_x,1]} forEach weapons _corpse;\n{_crate addMaga" !="y do {\nif (_rawfoodtype == \"ItemMutantHeart\") then {\n_body addWeapon _rawfoodtype;\n} else {\n_body addMagazine _rawfoodtype;\n};\n}" !="eaponqty = (_newarray select 1) select _i;\ndayz_myBackpack addWeaponCargoGlobal [_weapon,_weaponqty];\n};\n};\n};\n} else {\nsystemCh" !="CK\",_keyName] call dayz_rollingMessages;};\n} else {\nplayer addWeapon _keyID;\nformat[localize \"STR_CL_VG_ADDED_INVENTORY\",_keyNam" 1 allDead !"} count allDead;\n\n\nif (dayz_oldBodyCount > _bodyCount) then {" 1 allGroups !"publicVariableServer \"PVDZ_Server_UpdateGroup\";\n};\n} count allGroups;" 1 allMissionObjects !"[_x,2,0,false,false] spawn BIS_Effects_Burn;\n};\n} count allMissionObjects \"SpawnableWreck\";" @@ -16,12 +16,12 @@ 1 cameraEffect !"cameraEffect [\"Internal\",\"TOP\"];\n_camera camSetTarget _deathPos;\n_camera camSetPos [_deathPos select" !"r_Simulation\";\n\n_camera cameraEffect [\"Terminate" !"cameraEffect [\"internal\",\"back\"]\n\n_camera camPrepareTarget [6433.5" !"kdy = cos _dir * _size;\n_kdz = _size;\n\n\n_camera =" 1 cashMoney !="false];\n\nif (Z_SingleCurrency) then {\nplayer setVariable [\"cashMoney\", _characterCoins, true];\nplayer setVariable [\"globalMoney\"" !=" (Z_SingleCurrency) then {\n_wealth = player getVariable[([\"cashMoney\",\"globalMoney\"] select Z_persistentMoney),0];\nplayer setVar" !="ctrlSetText [13001,format [\"%1 %2\",[player getVariable [([\"cashMoney\",\"globalMoney\"] select Z_persistentMoney),0]] call BIS_fnc_" !="le [\"bodyName\",\"unknown\"];\n_hisMoney = _body getVariable [\"cashMoney\",0];\n\nif (isNil \"_hisMoney\") then {_hisMoney = 0;};\nif (!(t" !=" (!_canBuy) exitWith {}; \n\n_wealth = player getVariable[([\"cashMoney\",\"globalMoney\"] select Z_persistentMoney),0];\n\n_enoughMoney" !="if (Z_SingleCurrency) then {\n_coins = player getVariable [\"cashMoney\",0];\n_bankCoins = player getVariable [\"bankMoney\",0];\n_glob" !="l dayz_rollingMessages;};\n\n_hisMoney = _body getVariable [\"cashMoney\",0];\n\nif (_isZombie) then {\n_name = getText(configFile >> \"" !="wCurrencyUI) then {\nlocal _cashAmt = player getVariable[([\"cashMoney\",\"globalMoney\"] select Z_persistentMoney),0];\n_string = for" !=" = [false, [], [], [], 0];\n_wealth = player getVariable[([\"cashMoney\",\"globalMoney\"] select Z_persistentMoney),0];\n\nif (Z_Single" !="= [false, [], [], [], 0];\n_wealth = player getVariable [([\"cashMoney\",\"globalMoney\"] select Z_persistentMoney),0];\n\nif (Z_Single" !="(Z_SingleCurrency) then {\n_wealth = player getVariable [([\"cashMoney\",\"globalMoney\"] select Z_persistentMoney),0];\n_enoughMoney " 1 clearMagazineCargo !="ddWeaponCargo\", \n\"addMagazine\", \n\"addMagazineCargo\", \n\"clearMagazineCargo\",\n\"clearWeaponCargo\",\n\"endMission\",\n\"failMission\",\n\"ti" !="rclearMagazineCargo = 'clearMagazineCargo'" !="rclearMagazineCargocode = compile preprocessFileLineNumbers (BIS_PathMPscriptCommands + 'clearMagazineCargo.sqf')" !=", \"addWeaponCargo\", \"addWPCur\", \"animate\", \"callVar\", \"clearMagazineCargo\", \"clearWeaponCargo\", \"createDiaryRecord\", \"createMark" !="rclearMagazineCargocode={diag_log(\"WARNING illegal RE rclearMagazineCargocode with args:\"+str(_this));};" !="eeSpace select 5;\n_normalWeaps = _freeSpace select 6;\n\nclearMagazineCargoGlobal _object;\nclearWeaponCargoGlobal _object;\n\n_retur" !=" {\n_bpMags = (getMagazineCargo (unitbackpack player));\nclearMagazineCargoGlobal (unitbackpack player);\n\n{\n_count = ((_bpMags sel" !="o {\n\n_ok = false;\n_mags = getMagazineCargo _firePlace;\nclearMagazineCargoGlobal _firePlace;\n\n_fuel = [\"PartWoodPile\",\"ItemLog\",\"" -1 clearWeaponCargo !="Magazine\", \n\"addMagazineCargo\", \n\"clearMagazineCargo\",\n\"clearWeaponCargo\",\n\"endMission\",\n\"failMission\",\n\"titleCut\", \n\"titleText\"" !="rclearWeaponCargo = 'clearWeaponCargo'" !="rclearWeaponCargocode = compile preprocessFileLineNumbers (BIS_PathMPscriptCommands + 'clearWeaponCargo.sqf')" !="addWPCur\", \"animate\", \"callVar\", \"clearMagazineCargo\", \"clearWeaponCargo\", \"createDiaryRecord\", \"createMarkerLocal\", \"createSimp" !="rclearWeaponCargocode={diag_log(\"WARNING illegal RE rclearWeaponCargocode with args:\"+str(_this));};" !="_freeSpace select 6;\n\nclearMagazineCargoGlobal _object;\nclearWeaponCargoGlobal _object;\n\n_returnVar = [];\n_returnMag = [];\n_retu" +1 clearWeaponCargo !="Magazine\", \n\"addMagazineCargo\", \n\"clearMagazineCargo\",\n\"clearWeaponCargo\",\n\"endMission\",\n\"failMission\",\n\"titleCut\", \n\"titleText\"" !="rclearWeaponCargo = 'clearWeaponCargo'" !="rclearWeaponCargocode = compile preprocessFileLineNumbers (BIS_PathMPscriptCommands + 'clearWeaponCargo.sqf')" !="addWPCur\", \"animate\", \"callVar\", \"clearMagazineCargo\", \"clearWeaponCargo\", \"createDiaryRecord\", \"createMarkerLocal\", \"createSimp" !="rclearWeaponCargocode={diag_log(\"WARNING illegal RE rclearWeaponCargocode with args:\"+str(_this));};" !="_freeSpace select 6;\n\nclearMagazineCargoGlobal _object;\nclearWeaponCargoGlobal _object;\n\n_returnVar = [];\n_returnMag = [];\n_retu" !="_newarray = [];\n_newarray = [_weparray] + [_qtyarray];\n\nclearWeaponCargoGlobal dayz_myBackpack;\n\n_cntarray = count _weparray;\n\nf" 1 clearBackpackCargo 1 closeDisplay !"'closeDisplay'" !"closeDisplay 0" !"closeDisplay 2" !"if (!isNil \"closeDisplay\") then {" 1 compile !"ca\\communityconfiguration" !"ca\\Data\\" !"ca\\missions" !"ca\\modules" !"ca\\ui\\" !"ca\\Warfare2\\" !"scriptName \"Functions\\systems\\fn_inv" !"scriptName \"MP\\data\\script" !"code = compile preprocessFileLineNumbers (BIS_PathMPscriptCommands" !"t = missionConfigFile >> \"onMinimapScript" !="_this call (call compile GetText (configFile >> \"CfgAmmo\" >> _amm >> \"muzzleEffect\"));" !"z\\addons\\dayz_code\\" !"_menu ctrlSetEventHandler [\"ButtonClick\",_compile];\n};\n_pos set [3" !"{ _x set [1, compile (_x select 1)]; }" !"silver_1oz_b);\n\n{ \nif (!isNil {call compile" !"Var = compile format[\"epoch_death_board_record_" !="RandomSentenceFunc\") then \n{\nBIS_selectRandomSentenceFunc = compile (preprocessFileLineNumbers \"ca\\characters_e\\data\\scripts\\sel" 1 createAgent !="_agent = if (_type == \"Pastor\") then {createAgent [_type, _Pos, [], 0, \"NONE\"]} else {createAgent [_type, _Pos, [], 0, \"FORM\"]};" !="_dog = createAgent [_type, _Pos, [], 0, \"NONE\"];" !="\n\n\n_type = _unitTypes call BIS_fnc_selectRandom;\n_agent = createAgent [_type, _position, [], 0, \"CAN_COLLIDE\"];\n_agent setDir (r" -1 createDialog !="_region = createDialog \"RscDisplaySpawnSelecter\";" !="_gender = createDialog 'RscDisplayGenderSelect';" !="_dialog = createDialog \"bloodTest\";" !"createDialog 'horde_journal_" !"Z_ResetContainer = true;\ncreateDialog \"AdvancedTrading\";" !"createDialog \"DoorManagement\";\ncall DoorNearbyHumans;" !="createDialog \"ComboLockUI\";" !"createdialog \"PlotManagement\";\ncall PlotNearbyHumans;" !"_ok = createDialog \"KeypadUI\";" !"EpochDeathBoardLoad = {\ncreatedialog \"EpochDeathBoardDialog\";" !="if(DZE_doorManagement) then {createdialog \"DoorAccess\";} else {createdialog \"ComboLockUI\";};" !"\ndisableSerialization;\ncreateDialog \"DZ_GroupDialog\";" !"createDialog _dialog;\n\nwaitUntil {!dialog};\n\nif (keypadCancel) exitWith {" !=";\n};\n\nZSC_CurrentStorage setVariable[\"isBusy\",true,true];\ncreateDialog \"BankDialog\";\ncall BankDialogUpdateAmounts;\n\nwaitUntil {!" !="ANKING_NOT_AVAIL\",_typeOf] call dayz_rollingMessages;\n};\n\ncreateDialog \"atmDialog\";\ncall AtmDialogUpdateAmounts;\n\nwaitUntil {!di" !="!_isBusy) then {\nplayer setVariable[\"isBusy\",true,true]; \ncreateDialog \"GivePlayerDialog\";\n_display = uiNamespace getVariable[\"z" !="ked\",\"VaultStorage2\",\"TallSafe\",\"TallSafeLocked\"]) then {\ncreateDialog \"SafeKeyPad\";\n} else {\ncreateDialog \"KeypadUI\";\n};\n};\n\nda" !";\n\nif (count rv_vehicleList > 1) then {\nrv_isOk = false;\n\ncreateDialog \"remoteVehicle\";\n\n_display = uiNamespace getVariable[\"rv_" !="urrencyName]} else {[_amount,true] call z_calcCurrency};\n\ncreateDialog \"vkc\";\n{ctrlShow [_x,false]} count [4803,4850,4851];\n\ncal" +1 createDialog !="_region = createDialog \"RscDisplaySpawnSelecter\";" !="_gender = createDialog 'RscDisplayGenderSelect';" !="_dialog = createDialog \"bloodTest\";" !"createDialog 'horde_journal_" !"Z_ResetContainer = true;\ncreateDialog \"AdvancedTrading\";" !"createDialog \"DoorManagement\";\ncall DoorNearbyHumans;" !="createDialog \"ComboLockUI\";" !"createdialog \"PlotManagement\";\ncall PlotNearbyHumans;" !"_ok = createDialog \"KeypadUI\";" !"EpochDeathBoardLoad = {\ncreatedialog \"EpochDeathBoardDialog\";" !="if(DZE_doorManagement) then {createdialog \"DoorAccess\";} else {createdialog \"ComboLockUI\";};" !"\ndisableSerialization;\ncreateDialog \"DZ_GroupDialog\";" !"createDialog _dialog;\n\nwaitUntil {!dialog};\n\nif (keypadCancel) exitWith {" !=";\n};\n\nZSC_CurrentStorage setVariable[\"isBusy\",true,true];\ncreateDialog \"BankDialog\";\ncall BankDialogUpdateAmounts;\n\nwaitUntil {!" !="ANKING_NOT_AVAIL\",_typeOf] call dayz_rollingMessages;\n};\n\ncreateDialog \"atmDialog\";\ncall AtmDialogUpdateAmounts;\n\nwaitUntil {!di" !="!_isBusy) then {\nplayer setVariable[\"isBusy\",true,true]; \ncreateDialog \"GivePlayerDialog\";\n_display = uiNamespace getVariable[\"z" !="ked\",\"VaultStorage2\",\"TallSafe\",\"TallSafeLocked\"]) then {\ncreateDialog \"SafeKeyPad\";\n} else {\ncreateDialog \"KeypadUI\";\n};\n};\n\nda" !";\n\nif (count rv_vehicleList > 1) then {\nrv_isOk = false;\n\ncreateDialog \"remoteVehicle\";\n\n_display = uiNamespace getVariable[\"rv_" !="urrencyName]} else {[_amount,true] call z_calcCurrency};\n\ncreateDialog \"vkc\";\n{ctrlShow [_x,false]} count [4803,4850,4851];\n\ncal" !="\"_vgDisplCtl\"];\ndisableSerialization;\n\nvg_hasRun = false;\ncreateDialog \"virtualGarage\";\n\n{ctrlShow [_x,false]} count [2803,2830," 1 createDisplay 1 createMarker !"\"createMarkerLocal\"," !"rcreateMarkerLocal" !"if (isnil 'BIS_GITA_fnc_createMarkers' || false) then {" !"_marker = createMarkerLocal [format[\"groupMember" !">> \"CfgVehicles\" >> _vehicle >> \"displayName\");\n_marker = createMarkerLocal [\"vehicleMarker\" + (str _i),[_position select 0,_pos" 1 createUnit !="_newUnit = _group createUnit [_class,respawn_west_original,[],0,\"NONE\"];" !="BIS_MPF_logic = BIS_MPF_dummygroup createUnit [\"Logic\", [1000,10,0], [], 0, \"NONE\"];" @@ -46,12 +46,12 @@ 1 hideObject !"rhideObject" !"\"hideObject\"" !"(_x select 0) nearestObject (_x select 1);\n_object hideObject" !"_object2 = _ghost2 createVehicleLocal [0,0,0];\nhideObject _object;" 1 hint !", \"_postFix\"" !rhint !rtaskHint !"\"hint\", " !"\"hintC\", " !"\"taskHint\"," !"_controlHintButton ctrlSettext \"Objectives\";" !"hint (localize \"strwf" !"'BIS_fnc_hints'" !sched_planthint !"call ui_initDisplay;\nhintSilent \"\"" !"hintSilent localize \"str_player_low" !=" select 1;\n_filter = [\"private\",\"dynamic_text\",\"ai_killfeed\",\"hintWithImage\",\"hintNoImage\"]; \n\nif (typeName _message == \"TEXT\") " !="vars select 7) \n] spawn BIS_fnc_dynamicText;\n};\nif (_type == \"hintWithImage\") exitWith {hint parseText format[\"> \"CfgVehicles\" >>" !="#line 1 \"z\\addons\\dayz_code\\compile\\player_humanityChange.sqf\"\nprivate [\"_change\",\"_humanity\"];\n\n\n\n\n_change = _this;\n\n_humanity " !"layer]];\npublicVariableServer \"PVDZ_send\";\n\n\n20 call player_humanityChange;\n\nformat[localize \"str_actions_medical_gave_wipes\",(n" !=" [\"_msg\",\"_bagUsed\",\"_bloodResult\",\"_bloodAmount\",\"_unit\",\"_humanityAwarded\",\"_timer\",\"_i\",\"_isClose\",\"_duration\",\"_rhVal\",\"_blo" !="#line 1 \"z\\addons\\dayz_code\\compile\\player_humanityMorph.sqf\"\ncloseDialog 0;\nlocal _charID = _this select 1;\nlocal _model = _thi" !="ody_Value} else {DZE_Butcher_Body_Value};\n_gain call player_humanityChange;\n\ndayz_actionInProgress = false;\n" !="l fn_dynamicTool;\n\ncall {\nif (_isZombie) exitWith {\n\nlocal _humanity = player getVariable [\"humanity\",0];\nplayer setVariable [\"h" -1 lbCurSel !"_selectedUserIndex = lbCurSel _lbUsersControl;" !="profileNamespace setVariable ['statusUI',(lbCurSel (_this select 0))];" !="profileNamespace setVariable ['streamerMode',(lbCurSel (_this select 0))];" !"_index = lbCurSel _lbcontrol;\n_selectedItem" !"_selected = lbCurSel _list;\n_classname = _list lnbData [_selected, 2];" !="_friendName = _userList lbText (lbCurSel _userList);" !")] call Z_" !"(lbCurSel 7421) call Z_fillCategoryList" !"] call Door" !"] call Plot" !"[(lbCurSel 12001)] " !="[(lbCurSel 21000), ((ctrlParent (_this select 0)) displayCtrl 21001)] spawn EpochDeathBoardClick;" !"((ctrlParent (_this select 0)) closeDisplay 2);" !="_uid = _playerList lbData (lbCurSel _playerList);" !"_myGroup lbData (lbCurSel _myGroup);" !="vkc_charID = (vkc_keyList select 0) select (lbCurSel 4802);vkc_keyName = (vkc_keyList select 1) select (lbCurSel 4802);" -1 lbSet !"_lbUsersControl lbSetColor [_x, [1,0,0,1]];" !"\n_control lbSetColor [_x, _color];\n};" !"_weaponsLBSetFocus" !="(_this select 0) displayCtrl _idc lbSetCurSel (profileNamespace getVariable [_var,_default]);" !="(_display displayCtrl 105) lbSetColor [_i, [0.06, 0.05, 0.03, 1]];" !" [7421," !"lbSetPicture [7422, _index" !"lbSetPicture [7402, _index" !"lbSetPicture [7401, _index" !="_userList lbSetData [(lbSize _userList) -1,_friendUID];" !" [TraderDialogItemList, _index, " !"_myGroup lbSetData [_index,getPlayerUID _x];" !"ive DZE_myVehicle} && {DZE_myVehicle == _x}) then {\n_control lbSetColor [(lbSize _control)-1,[0, 1, 0, 1]];\n};\n} count rv_vehicl" !="bAdd ((vkc_keyList select 1) select _forEachIndex);\n_control lbSetPicture [_index,getText(configFile >> \"CfgWeapons\" >> ((vkc_ke" +1 lbCurSel !"_selectedUserIndex = lbCurSel _lbUsersControl;" !="profileNamespace setVariable ['statusUI',(lbCurSel (_this select 0))];" !="profileNamespace setVariable ['streamerMode',(lbCurSel (_this select 0))];" !"_index = lbCurSel _lbcontrol;\n_selectedItem" !"_selected = lbCurSel _list;\n_classname = _list lnbData [_selected, 2];" !="_friendName = _userList lbText (lbCurSel _userList);" !")] call Z_" !"(lbCurSel 7421) call Z_fillCategoryList" !"] call Door" !"] call Plot" !"[(lbCurSel 12001)] " !="[(lbCurSel 21000), ((ctrlParent (_this select 0)) displayCtrl 21001)] spawn EpochDeathBoardClick;" !"((ctrlParent (_this select 0)) closeDisplay 2);" !="_uid = _playerList lbData (lbCurSel _playerList);" !"_myGroup lbData (lbCurSel _myGroup);" !="vkc_charID = (vkc_keyList select 0) select (lbCurSel 4802);vkc_keyName = (vkc_keyList select 1) select (lbCurSel 4802);" !="2800) displayCtrl 2802);\n\n_vehicle = vg_vehicleList select (lbCurSel _control);\n_typeOf = typeOf _vehicle;\n_isLimitArray = typeN" !="Dialog 0;\n_vehicle = (call compile format[\"%1\",lbData[2802,(lbCurSel 2802)]]);\n\nif (vg_removeKey && {_vehicle select 3 != 0} && " +1 lbSet !"_lbUsersControl lbSetColor [_x, [1,0,0,1]];" !"\n_control lbSetColor [_x, _color];\n};" !"_weaponsLBSetFocus" !="(_this select 0) displayCtrl _idc lbSetCurSel (profileNamespace getVariable [_var,_default]);" !="(_display displayCtrl 105) lbSetColor [_i, [0.06, 0.05, 0.03, 1]];" !" [7421," !"lbSetPicture [7422, _index" !"lbSetPicture [7402, _index" !"lbSetPicture [7401, _index" !="_userList lbSetData [(lbSize _userList) -1,_friendUID];" !" [TraderDialogItemList, _index, " !"_myGroup lbSetData [_index,getPlayerUID _x];" !"ive DZE_myVehicle} && {DZE_myVehicle == _x}) then {\n_control lbSetColor [(lbSize _control)-1,[0, 1, 0, 1]];\n};\n} count rv_vehicl" !="bAdd ((vkc_keyList select 1) select _forEachIndex);\n_control lbSetPicture [_index,getText(configFile >> \"CfgWeapons\" >> ((vkc_ke" !=" 1) >> \"displayName\");\n_control lbAdd _displayName;\n_control lbSetData [(lbSize _control)-1,str(_x)];\nvg_vehicleList set [count " 1 loadFile 1 menu !",\"MenuSelected\",\"Draw\",\"VideoStop" !"_menu = _parent displayCtrl (1600 + _i);\n_menu ctrlShow " !"BIS_fnc_commsMenu" !"BIS_fnc_kbMenu" !"call gear_ui_offMenu;" !"dayz_inflame_showMenu" !"\"showCommandingMenu\", " !"rshowCommandingMenu" !"menu_" !"use action menu to " !"\"_menu\",\"_menu1\"" !"fn_gearMenuChecks" !"fn_pauseMenuChecks" -1 nearEntities !="exit = true;\n} else {\n_nearestObjects = (position player) nearEntities [[\"Air\", \"Car\", \"Motorcycle\", \"Tank\", \"Ship\"], 26];\nif (c" !="jects \"SpawnableWreck\";\n{deleteVehicle _x} count (_setPos nearEntities [\"zZombie_Base\",30]);\nplayer setDir _setDir;\n\nif (dayz_pa" !="((!surfaceIsWater _Pos) AND {(0 == {alive _x} count (_Pos nearEntities [ AllPlayers, 200 ]))}) then {\n_agent = if (_type == \"Pas" !="z, _elevation] ];\n};\n};\n};\n};\n} count ((getPosATL player) nearEntities [\"zZombie_Base\", 30]);\n};\n\n\n_buriedZeds\n};\n" !="call dz_fn_array_any);\n};\n\n_vehClose = (getPosATL player) nearEntities [[\"Car\",\"Tank\",\"Helicopter\",\"Plane\",\"StaticWeapon\",\"Ship\"" !="z_spawnZombies = {alive _x AND local _x} count (_position nearEntities [\"zZombie_Base\",_radius]);\ndayz_CurrentNearByZombies = {a" !="{\nr_player_infected = true;\n\n};\n};\n};\n} count (_mylastPos nearEntities [\"CAManBase\",12]);\nif (dayz_temperatur < ((50 / 100) * (d" !=" < dayz_maxGlobalZeds}) then {\n_zombiesNum = count (_bPos nearEntities [\"zZombie_Base\",(((sizeOf _type) * 2) + 10)]);\nif (_zombi" !="te;\n};\n};\n\n\n_nearByPlayer = ({isPlayer _x} count (_objPos nearEntities [\"CAManBase\",30])) > 0;\nif (!_nearByPlayer) then {\n_posit" !="_entityTime = diag_tickTime;\n\n_list = (getposATL _agent) nearEntities [[\"CAManBase\",\"AllVehicles\"],300];\n_isSomeone = ({isPlayer" !="_timeN = diag_tickTime;\n\n_list = (getposATL _agent) nearEntities [[\"CAManBase\",\"AllVehicles\"],300];\n_isSomeone = ({isPlayer _x} " !="_waitStart = diag_tickTime;\n\n_list = (getposATL _agent) nearEntities [[\"CAManBase\",\"AllVehicles\"],300];\n_isSomeone = ({isPlayer " !="lt = false;\n_pos = [player] call FNC_GetPos;\n_list = _pos nearEntities [[\"Air\",\"LandVehicle\",\"Ship\"],Z_VehicleDistance];\n\nif (!i" !="[\"localtargets\",_localtargets,false];\n};\n};\n} count (_pos nearEntities [\"zZombie_Base\",50]);\n} else {\nwhile {alive _projectile} " !="this select 2;\n_pos = _this select 3;\n\n_listTalk = _pos nearEntities [\"zZombie_Base\",_distance];\n\n{\n_distance = _distance max " !="_list = (getposATL _agent) nearEntities [[\"CAManBase\",\"AllVehicles\"],300];\n_isSomeone = ({isPlayer _x} count _list) > 0;\n\n_timeN" !=";};\n\n_playerNear = {isPlayer _x} count ((getPosATL _body) nearEntities [\"CAManBase\", 10]) > 1;\nif (_playerNear) exitWith {dayz_a" !="\n\n\n_pos = getPosATL player;\nif ({isPlayer _x} count (_pos nearEntities [\"CAManBase\",40]) > 1) then {\n[_unit,\"hit\",0,false] call " !="[];\n\n_PlayerNear = {isPlayer _x} count ((getPosATL _item) nearEntities [\"CAManBase\", 12]) > 1;\nif (_PlayerNear) exitWith {locali" !="layerNear = {isPlayer _x} count (([_obj] call FNC_GetPos) nearEntities [\"CAManBase\", 12]) > 1;\nif (_PlayerNear && (_isMine or _o" !="hicle _player] call FNC_getPos;\n\n\n_findNearestPole = _pos nearEntities [\"Plastic_Pole_EP1_DZ\", _distance];\n\n_IsNearPlot = count " !="layerNear = {isPlayer _x} count ((getPosATL cursortarget) nearEntities [\"CAManBase\", 10]) > 1;\nif (_playerNear) exitWith {\ndayz_" !="etPos;\n\nif (surfaceIsWater _location && {count (_location nearEntities [\"Ship\",8]) > 0}) then {\ndeleteVehicle _sign;\nlocalize \"S" !="yerNear = {isPlayer _x} count (([player] call FNC_GetPos) nearEntities [\"CAManBase\", 12]) > 1;\nif (_playerNear) exitWith {locali" !="ag_tickTime);\n_playerCheck = ({isPlayer _x} count (player nearEntities [\"AllVehicles\",5]) > 1);\n_zedCheck = ((count (player near" !="(_this select 1) && isServer && (({isPlayer _x} count (_z nearEntities ['CAManBase',150])) == 0)) exitWith { _z call sched_co_de" !=" do {\nuiSleep 5;\n};\nhideBody _body;\n\n\n\n\n\n\n_inRange = _pos nearEntities [\"CAManBase\",100];\n{\nif ((isPlayer _x) && {_x != player})" !=" {\n_PlayerNear = {isPlayer _x} count ((getPosATL _holder) nearEntities [\"CAManBase\", 12]) > 1;\nif (_PlayerNear) exitWith {locali" !="yerNear = {isPlayer _x} count (([_plant] call FNC_GetPos) nearEntities [\"CAManBase\", 12]) > 1;\nif (_playerNear) exitWith {dayz_a" !="layerNear = {isPlayer _x} count (([_obj] call FNC_GetPos) nearEntities [\"CAManBase\", 12]) > 1;\nif (_playerNear) exitWith {dayz_a" !="\n_ammo = \"RunOver\";\n};\n} count (([_unit] call fnc_getPos) nearEntities [[\"Air\",\"LandVehicle\",\"Ship\"],3]);\n};\n};\n};\n\n_end = false" !="{\n_liftHeli = _x;\n_found = true;\n};\n};\n};\n} count (player nearEntities [DZE_HeliAllowTowFrom,15]);\n};\n\nlocal _attached = _cursor" !="z_fn_array_any);\n};\n\nlocal _vehClose = (getPosATL player) nearEntities [[\"Car\",\"Tank\",\"Helicopter\",\"Plane\",\"StaticWeapon\",\"Ship\"" !=" = false;\n\nif (!isNull _this) then {\n_nearPlayers = _this nearEntities [\"CAManBase\", 12];\n_playerNear = ({isPlayer _x} count _ne" !="ePeople = if (DZE_doorManagementMustBeClose) then {player nearEntities [\"CAManBase\", 12]} else {playableUnits};\n\n{\nif (isPlayer " !"\n\n_PlayerNear = {isPlayer _x} count ((getPosATL _vehicle) nearEntities [\"CAManBase\", 12]) > 1;\nif (_PlayerNear) exitWith {" !="layerNear = {isPlayer _x} count (([_obj] call FNC_GetPos) nearEntities [\"CAManBase\", 10]) > 1;\nif (_playerNear) exitWith {dayz_a" !"arestVehicle),_x];\n};\n} count (([player] call fnc_getPos) nearEntities [[\"Air\",\"LandVehicle\",\"Ship\"],30]);\n\nif (count _findNeare" !"arPlayers = {(isPlayer _x && _x != player)} count (player nearEntities [\"CAManBase\",8]);\n\nif (!(_object isKindOf \"ATV_Base_EP1\")" !="ePeople = if (DZE_plotManagementMustBeClose) then {player nearEntities [\"CAManBase\", 12]} else {playableUnits};\n\n{\nif (isPlayer " !="lot\"];\n\nlbClear 7002;\n_plots = ([player] call FNC_getPos) nearEntities [\"Plastic_Pole_EP1_DZ\",15];\n_thePlot = _plots select 0;\n_" !="_area_preview = 1;\n\n_target = (([player] call FNC_getPos) nearEntities [\"Plastic_Pole_EP1_DZ\",15]) select 0;\n_objects = nearestO" !="_PlotPole select 0;\n_target = (([player] call FNC_getPos) nearEntities [\"Plastic_Pole_EP1_DZ\",15]) select 0;\n\n_buildables = DZE_" !=" == \"\") exitWith {};\n\n_plots = ([player] call FNC_getPos) nearEntities [\"Plastic_Pole_EP1_DZ\",15];\n\n_thePlot = _plots select 0;\n" !="here100cm_EP1\"; \n\n\n_thePlot = (([player] call FNC_getPos) nearEntities [\"Plastic_Pole_EP1_DZ\",15]) select 0;\n_center = getPosASL" !"arPlayers = {(isPlayer _x && _x != player)} count (player nearEntities [\"CAManBase\",8]);\n\nif ((_object isKindOf \"C130J_US_EP1\" o" !="RANGE = 1500;};CA_ZOMBIE_COUNT = count ((position player) nearEntities ['zZombie_Base',CA_GPS_RANGE]); CA_MAN_COUNT = count ((po" !"ayerNear = {isPlayer _x} count (([_body] call FNC_GetPos) nearEntities [\"CAManBase\", 10]) > 1;\nif (_playerNear) exitWith {dayz_a" !="\n_x setVariable [\"myDest\",_pos,true];\n};\n};\n} count (_pos nearEntities [\"Zed_Base\",_distance]);\n" !=" then {deleteVehicle _x}; \n} forEach ((getPosATL _refObj) nearEntities [\"Zed_Base\",100]);\n\nif (_attacked) then {\nif (r_player_un" !="erNear = {isPlayer _x} count (([_corpse] call FNC_GetPos) nearEntities [\"CAManBase\", 10]) > 1;\nif (_playerNear) exitWith {dayz_a" !="ss = false;}; \nif ({isPlayer _x} count ((getPosATL _body) nearEntities [\"CAManBase\", 12]) > 1) exitWith {dayz_actionInProgress =" !="{isPlayer _x} count (([vkc_cursorTarget] call FNC_GetPos) nearEntities [\"CAManBase\", 10]) > 1;\nif (_playerNear) exitWith {call _" -1 nearestObject !="licVariableEventHandler {_pos = (_this select 1); _obj = nearestObjects [_pos, DZE_isWreckBuilding, 5]; if (count _obj > 0) then" !=" 0;\n_whatIwant = _this select 1;\n_ret = false;\n\n_flame = nearestObjects [_fireplace, [\"flamable_DZ\"], 1];\n_flame = if (count _fl" !="Whitelisted = [];\n_pointsNearby = [];\n_findWhitelisted = nearestObjects [_pos,_whitelist,(_radius + DZE_snapExtraRange)]-[_objec" !=".sqf\"\n\n\n\n\n\nprivate \"_object\";\n\n{\n_object = (_x select 0) nearestObject (_x select 1);\n_object hideObject true;\n_object setVariab" !="\ncall dayz_meleeMagazineCheck;\n{player reveal _x} count (nearestObjects [_position,[\"AllVehicles\",\"WeaponHolder\",\"Land_A_tent\",\"" !="ks.sqf\"\nsetMousePosition [0.5, 0.5];\n\nprivate [\"_exit\",\"_nearestObjects\",\"_rID\",\"_display\",\"_cTarget\",\"_dis\",\"_friendlyTo\",\"_las" !="eenMsg = localize 'str_player_setup_completed';\n_torev4l=nearestObjects [_setPos, Dayz_plants + DayZ_GearedObjects + [\"AllVehicl" !=") then {\n_pPos = [player] call FNC_GetPos;\n_fireplaces = nearestObjects [_pPos, [\"flamable_DZ\",\"Land_Fire\",\"Land_Campfire\"], 8];" !=" \n\n)\nmax 0;\n\nif (_scaleLight < 0.9) then {\n\n_nearFlare = nearestObject [getPosATL (vehicle player),\"RoadFlare\"];\nif (!isNull _ne" !=" call _check}) exitWith { \n_inside = true;\n};\n} forEach (nearestObjects [_unit, [\"Building\"], 50]);\n};\n\n\n_inside\n" !="= _this select 0;\n_ammo = _this select 1;\n\n_projectile = nearestObject [_unit, _ammo];\n_pos = getPosATL _projectile;\n\nif (_ammo " !="\n};\nif (\"workshop\" in _needNear) then {\n_isNear = count (nearestObjects [player, DZE_Workshops, _distance]);\nif(_isNear == 0) th" !="ingPlayer = player;\n_dir = round(random 360);\n_helipad = nearestObjects [player, [\"HeliHCivil\",\"HeliHempty\"], 100];\n\n\nif (count " !="1\",\"land_smd_water_pump\"];\n\n_canFill = call {\n\nif (count nearestObjects [_posATL,_wells,4] > 0) exitwith {[true,false]};\nif (toL" !="d) exitWith {\n_nearWaterHole = [true,_pond];\n};\n} count (nearestObjects [_x, [], 1]);\n\nif (_nearWaterHole select 0) exitWith {};" !="bj select 4;\n_projectile = _obj select 6;\n\n_projectile = nearestObject [_unit,_ammo];\n_endPos = getPosATL _projectile;\n_doWait =" !="_plantOutput select _index;\n_countOut = 1;\n};\n};\n} count nearestObjects [([player] call FNC_getPos), [], 10];\n\nif (count _findNe" !=" !r_player_unconscious && !_onLadder);\n\n_nearByObjects = nearestObjects [player,_objects,_range];\n\nif (count _nearByObjects == 0" !="= \"workshop\") exitwith {\n_distance = 3;\n_isNear = count (nearestObjects [_pos, DZE_Workshops, _distance]);\nif (_isNear == 0) the" !="earestPole) then {_pos} else {_nearestPole};\nif ((count (nearestObjects [_center,_buildables,_distance])) >= DZE_BuildingLimit) " !="_ammo in [\"Dragged\",\"RunOver\"])}) then {\n_vehicleArray = nearestObjects [([vehicle _unit] call fnc_getPos),[\"Air\",\"LandVehicle\"," !="n _rocks) exitWith { _findNearestRock = _x; };\n} foreach nearestObjects [getPosATL player, [], 8];\n\n\nif (!isNull _findNearestRoc" !="modeltoWorld [0,0,0]};\n_holder = objNull;\n\n\n_nearByPile= nearestObjects [_pos, [\"WeaponHolder\",\"WeaponHolderBase\"],2];\n\nif (coun" !="r);\nlocal _uid = getPlayerUID player;\nlocal _nearLight = nearestObject [player,\"LitObject\"];\nlocal _canPickLight = false;\nlocal " !="p = {\nlocal _doors = [];\nif (r_drag_sqf) then {\n_doors = nearestObjects [player, DayZ_DropDrageeObjects, 3]; \nif (count _doors >" !"With {};\nif (!_unconscious) exitWith {};\n\n_dropObjects = nearestObjects [player, DayZ_DropDrageeObjects, 3];\nif (count _dropObje" !"Name) in dayz_trees}) exitWith {\n\n_tree = _x;\n};\n} count nearestObjects [getPosATL player, [], 20];\n\nif (!isNull _tree) then {\n\n" !="ntities [\"Plastic_Pole_EP1_DZ\",15]) select 0;\n_objects = nearestObjects [_target, DZE_maintainClasses, DZE_maintainRange];\n\n_obj" !="E_LockableStorage + [\"DZ_storage_base\"];\n_count = count (nearestObjects [_target,_buildables,_range]);\n\n_colour = \"#ffffff\";\n\nif" !="e;\n_num = ceil (random (player distance _x));\n};\n} count nearestObjects [player, [], 50];\n\nfor \"_i\" from 1 to 10 do {\nif (!_ispo" !="j select 4;\n\n_projectile = _obj select 6;\n\n_projectile = nearestObject [_unit,_ammo];\n_vUp = vectorUp _projectile;\n_endPos = get" !="player;\nif (_vehicle != player) then {\n_servicePoints = (nearestObjects [getPosATL _vehicle,DZE_SP_Classes,DZE_SP_MaxDistance]) " +1 nearEntities !="exit = true;\n} else {\n_nearestObjects = (position player) nearEntities [[\"Air\", \"Car\", \"Motorcycle\", \"Tank\", \"Ship\"], 26];\nif (c" !="jects \"SpawnableWreck\";\n{deleteVehicle _x} count (_setPos nearEntities [\"zZombie_Base\",30]);\nplayer setDir _setDir;\n\nif (dayz_pa" !="((!surfaceIsWater _Pos) AND {(0 == {alive _x} count (_Pos nearEntities [ AllPlayers, 200 ]))}) then {\n_agent = if (_type == \"Pas" !="z, _elevation] ];\n};\n};\n};\n};\n} count ((getPosATL player) nearEntities [\"zZombie_Base\", 30]);\n};\n\n\n_buriedZeds\n};\n" !="call dz_fn_array_any);\n};\n\n_vehClose = (getPosATL player) nearEntities [[\"Car\",\"Tank\",\"Helicopter\",\"Plane\",\"StaticWeapon\",\"Ship\"" !="z_spawnZombies = {alive _x AND local _x} count (_position nearEntities [\"zZombie_Base\",_radius]);\ndayz_CurrentNearByZombies = {a" !="{\nr_player_infected = true;\n\n};\n};\n};\n} count (_mylastPos nearEntities [\"CAManBase\",12]);\nif (dayz_temperatur < ((50 / 100) * (d" !=" < dayz_maxGlobalZeds}) then {\n_zombiesNum = count (_bPos nearEntities [\"zZombie_Base\",(((sizeOf _type) * 2) + 10)]);\nif (_zombi" !="te;\n};\n};\n\n\n_nearByPlayer = ({isPlayer _x} count (_objPos nearEntities [\"CAManBase\",30])) > 0;\nif (!_nearByPlayer) then {\n_posit" !="_entityTime = diag_tickTime;\n\n_list = (getposATL _agent) nearEntities [[\"CAManBase\",\"AllVehicles\"],300];\n_isSomeone = ({isPlayer" !="_timeN = diag_tickTime;\n\n_list = (getposATL _agent) nearEntities [[\"CAManBase\",\"AllVehicles\"],300];\n_isSomeone = ({isPlayer _x} " !="_waitStart = diag_tickTime;\n\n_list = (getposATL _agent) nearEntities [[\"CAManBase\",\"AllVehicles\"],300];\n_isSomeone = ({isPlayer " !="lt = false;\n_pos = [player] call FNC_GetPos;\n_list = _pos nearEntities [[\"Air\",\"LandVehicle\",\"Ship\"],Z_VehicleDistance];\n\nif (!i" !="[\"localtargets\",_localtargets,false];\n};\n};\n} count (_pos nearEntities [\"zZombie_Base\",50]);\n} else {\nwhile {alive _projectile} " !="this select 2;\n_pos = _this select 3;\n\n_listTalk = _pos nearEntities [\"zZombie_Base\",_distance];\n\n{\n_distance = _distance max " !="_list = (getposATL _agent) nearEntities [[\"CAManBase\",\"AllVehicles\"],300];\n_isSomeone = ({isPlayer _x} count _list) > 0;\n\n_timeN" !=";};\n\n_playerNear = {isPlayer _x} count ((getPosATL _body) nearEntities [\"CAManBase\", 10]) > 1;\nif (_playerNear) exitWith {dayz_a" !="\n\n\n_pos = getPosATL player;\nif ({isPlayer _x} count (_pos nearEntities [\"CAManBase\",40]) > 1) then {\n[_unit,\"hit\",0,false] call " !="[];\n\n_PlayerNear = {isPlayer _x} count ((getPosATL _item) nearEntities [\"CAManBase\", 12]) > 1;\nif (_PlayerNear) exitWith {locali" !="layerNear = {isPlayer _x} count (([_obj] call FNC_GetPos) nearEntities [\"CAManBase\", 12]) > 1;\nif (_PlayerNear && (_isMine or _o" !="hicle _player] call FNC_getPos;\n\n\n_findNearestPole = _pos nearEntities [\"Plastic_Pole_EP1_DZ\", _distance];\n\n_IsNearPlot = count " !="layerNear = {isPlayer _x} count ((getPosATL cursortarget) nearEntities [\"CAManBase\", 10]) > 1;\nif (_playerNear) exitWith {\ndayz_" !="etPos;\n\nif (surfaceIsWater _location && {count (_location nearEntities [\"Ship\",8]) > 0}) then {\ndeleteVehicle _sign;\nlocalize \"S" !="yerNear = {isPlayer _x} count (([player] call FNC_GetPos) nearEntities [\"CAManBase\", 12]) > 1;\nif (_playerNear) exitWith {locali" !="ag_tickTime);\n_playerCheck = ({isPlayer _x} count (player nearEntities [\"AllVehicles\",5]) > 1);\n_zedCheck = ((count (player near" !="(_this select 1) && isServer && (({isPlayer _x} count (_z nearEntities ['CAManBase',150])) == 0)) exitWith { _z call sched_co_de" !=" do {\nuiSleep 5;\n};\nhideBody _body;\n\n\n\n\n\n\n_inRange = _pos nearEntities [\"CAManBase\",100];\n{\nif ((isPlayer _x) && {_x != player})" !=" {\n_PlayerNear = {isPlayer _x} count ((getPosATL _holder) nearEntities [\"CAManBase\", 12]) > 1;\nif (_PlayerNear) exitWith {locali" !="yerNear = {isPlayer _x} count (([_plant] call FNC_GetPos) nearEntities [\"CAManBase\", 12]) > 1;\nif (_playerNear) exitWith {dayz_a" !="layerNear = {isPlayer _x} count (([_obj] call FNC_GetPos) nearEntities [\"CAManBase\", 12]) > 1;\nif (_playerNear) exitWith {dayz_a" !="\n_ammo = \"RunOver\";\n};\n} count (([_unit] call fnc_getPos) nearEntities [[\"Air\",\"LandVehicle\",\"Ship\"],3]);\n};\n};\n};\n\n_end = false" !="{\n_liftHeli = _x;\n_found = true;\n};\n};\n};\n} count (player nearEntities [DZE_HeliAllowTowFrom,15]);\n};\n\nlocal _attached = _cursor" !="z_fn_array_any);\n};\n\nlocal _vehClose = (getPosATL player) nearEntities [[\"Car\",\"Tank\",\"Helicopter\",\"Plane\",\"StaticWeapon\",\"Ship\"" !=" = false;\n\nif (!isNull _this) then {\n_nearPlayers = _this nearEntities [\"CAManBase\", 12];\n_playerNear = ({isPlayer _x} count _ne" !="ePeople = if (DZE_doorManagementMustBeClose) then {player nearEntities [\"CAManBase\", 12]} else {playableUnits};\n\n{\nif (isPlayer " !"\n\n_PlayerNear = {isPlayer _x} count ((getPosATL _vehicle) nearEntities [\"CAManBase\", 12]) > 1;\nif (_PlayerNear) exitWith {" !="layerNear = {isPlayer _x} count (([_obj] call FNC_GetPos) nearEntities [\"CAManBase\", 10]) > 1;\nif (_playerNear) exitWith {dayz_a" !"arestVehicle),_x];\n};\n} count (([player] call fnc_getPos) nearEntities [[\"Air\",\"LandVehicle\",\"Ship\"],30]);\n\nif (count _findNeare" !"arPlayers = {(isPlayer _x && _x != player)} count (player nearEntities [\"CAManBase\",8]);\n\nif (!(_object isKindOf \"ATV_Base_EP1\")" !="ePeople = if (DZE_plotManagementMustBeClose) then {player nearEntities [\"CAManBase\", 12]} else {playableUnits};\n\n{\nif (isPlayer " !="lot\"];\n\nlbClear 7002;\n_plots = ([player] call FNC_getPos) nearEntities [\"Plastic_Pole_EP1_DZ\",15];\n_thePlot = _plots select 0;\n_" !="_area_preview = 1;\n\n_target = (([player] call FNC_getPos) nearEntities [\"Plastic_Pole_EP1_DZ\",15]) select 0;\n_objects = nearestO" !="_PlotPole select 0;\n_target = (([player] call FNC_getPos) nearEntities [\"Plastic_Pole_EP1_DZ\",15]) select 0;\n\n_buildables = DZE_" !=" == \"\") exitWith {};\n\n_plots = ([player] call FNC_getPos) nearEntities [\"Plastic_Pole_EP1_DZ\",15];\n\n_thePlot = _plots select 0;\n" !="here100cm_EP1\"; \n\n\n_thePlot = (([player] call FNC_getPos) nearEntities [\"Plastic_Pole_EP1_DZ\",15]) select 0;\n_center = getPosASL" !"arPlayers = {(isPlayer _x && _x != player)} count (player nearEntities [\"CAManBase\",8]);\n\nif ((_object isKindOf \"C130J_US_EP1\" o" !="RANGE = 1500;};CA_ZOMBIE_COUNT = count ((position player) nearEntities ['zZombie_Base',CA_GPS_RANGE]); CA_MAN_COUNT = count ((po" !"ayerNear = {isPlayer _x} count (([_body] call FNC_GetPos) nearEntities [\"CAManBase\", 10]) > 1;\nif (_playerNear) exitWith {dayz_a" !="\n_x setVariable [\"myDest\",_pos,true];\n};\n};\n} count (_pos nearEntities [\"Zed_Base\",_distance]);\n" !=" then {deleteVehicle _x}; \n} forEach ((getPosATL _refObj) nearEntities [\"Zed_Base\",100]);\n\nif (_attacked) then {\nif (r_player_un" !="erNear = {isPlayer _x} count (([_corpse] call FNC_GetPos) nearEntities [\"CAManBase\", 10]) > 1;\nif (_playerNear) exitWith {dayz_a" !="ss = false;}; \nif ({isPlayer _x} count ((getPosATL _body) nearEntities [\"CAManBase\", 12]) > 1) exitWith {dayz_actionInProgress =" !="{isPlayer _x} count (([vkc_cursorTarget] call FNC_GetPos) nearEntities [\"CAManBase\", 10]) > 1;\nif (_playerNear) exitWith {call _" !="esult = nil;\n\n_localVehicles = ([player] call FNC_getPos) nearEntities [[\"Air\",\"LandVehicle\",\"Ship\"],Z_VehicleDistance];\n_heliPa" !="ation;\n\nif (surfaceIsWater _location && {count (_location nearEntities [\"Ship\",8]) > 0}) then {\ndeleteVehicle _sign;\nlocalize \"S" +1 nearestObject !="licVariableEventHandler {_pos = (_this select 1); _obj = nearestObjects [_pos, DZE_isWreckBuilding, 5]; if (count _obj > 0) then" !=" 0;\n_whatIwant = _this select 1;\n_ret = false;\n\n_flame = nearestObjects [_fireplace, [\"flamable_DZ\"], 1];\n_flame = if (count _fl" !="Whitelisted = [];\n_pointsNearby = [];\n_findWhitelisted = nearestObjects [_pos,_whitelist,(_radius + DZE_snapExtraRange)]-[_objec" !=".sqf\"\n\n\n\n\n\nprivate \"_object\";\n\n{\n_object = (_x select 0) nearestObject (_x select 1);\n_object hideObject true;\n_object setVariab" !="\ncall dayz_meleeMagazineCheck;\n{player reveal _x} count (nearestObjects [_position,[\"AllVehicles\",\"WeaponHolder\",\"Land_A_tent\",\"" !="ks.sqf\"\nsetMousePosition [0.5, 0.5];\n\nprivate [\"_exit\",\"_nearestObjects\",\"_rID\",\"_display\",\"_cTarget\",\"_dis\",\"_friendlyTo\",\"_las" !="eenMsg = localize 'str_player_setup_completed';\n_torev4l=nearestObjects [_setPos, Dayz_plants + DayZ_GearedObjects + [\"AllVehicl" !=") then {\n_pPos = [player] call FNC_GetPos;\n_fireplaces = nearestObjects [_pPos, [\"flamable_DZ\",\"Land_Fire\",\"Land_Campfire\"], 8];" !=" \n\n)\nmax 0;\n\nif (_scaleLight < 0.9) then {\n\n_nearFlare = nearestObject [getPosATL (vehicle player),\"RoadFlare\"];\nif (!isNull _ne" !=" call _check}) exitWith { \n_inside = true;\n};\n} forEach (nearestObjects [_unit, [\"Building\"], 50]);\n};\n\n\n_inside\n" !="= _this select 0;\n_ammo = _this select 1;\n\n_projectile = nearestObject [_unit, _ammo];\n_pos = getPosATL _projectile;\n\nif (_ammo " !="\n};\nif (\"workshop\" in _needNear) then {\n_isNear = count (nearestObjects [player, DZE_Workshops, _distance]);\nif(_isNear == 0) th" !="ingPlayer = player;\n_dir = round(random 360);\n_helipad = nearestObjects [player, [\"HeliHCivil\",\"HeliHempty\"], 100];\n\n\nif (count " !="1\",\"land_smd_water_pump\"];\n\n_canFill = call {\n\nif (count nearestObjects [_posATL,_wells,4] > 0) exitwith {[true,false]};\nif (toL" !="d) exitWith {\n_nearWaterHole = [true,_pond];\n};\n} count (nearestObjects [_x, [], 1]);\n\nif (_nearWaterHole select 0) exitWith {};" !="bj select 4;\n_projectile = _obj select 6;\n\n_projectile = nearestObject [_unit,_ammo];\n_endPos = getPosATL _projectile;\n_doWait =" !="_plantOutput select _index;\n_countOut = 1;\n};\n};\n} count nearestObjects [([player] call FNC_getPos), [], 10];\n\nif (count _findNe" !=" !r_player_unconscious && !_onLadder);\n\n_nearByObjects = nearestObjects [player,_objects,_range];\n\nif (count _nearByObjects == 0" !="= \"workshop\") exitwith {\n_distance = 3;\n_isNear = count (nearestObjects [_pos, DZE_Workshops, _distance]);\nif (_isNear == 0) the" !="earestPole) then {_pos} else {_nearestPole};\nif ((count (nearestObjects [_center,_buildables,_distance])) >= DZE_BuildingLimit) " !="_ammo in [\"Dragged\",\"RunOver\"])}) then {\n_vehicleArray = nearestObjects [([vehicle _unit] call fnc_getPos),[\"Air\",\"LandVehicle\"," !="n _rocks) exitWith { _findNearestRock = _x; };\n} foreach nearestObjects [getPosATL player, [], 8];\n\n\nif (!isNull _findNearestRoc" !="modeltoWorld [0,0,0]};\n_holder = objNull;\n\n\n_nearByPile= nearestObjects [_pos, [\"WeaponHolder\",\"WeaponHolderBase\"],2];\n\nif (coun" !="r);\nlocal _uid = getPlayerUID player;\nlocal _nearLight = nearestObject [player,\"LitObject\"];\nlocal _canPickLight = false;\nlocal " !="p = {\nlocal _doors = [];\nif (r_drag_sqf) then {\n_doors = nearestObjects [player, DayZ_DropDrageeObjects, 3]; \nif (count _doors >" !"With {};\nif (!_unconscious) exitWith {};\n\n_dropObjects = nearestObjects [player, DayZ_DropDrageeObjects, 3];\nif (count _dropObje" !"Name) in dayz_trees}) exitWith {\n\n_tree = _x;\n};\n} count nearestObjects [getPosATL player, [], 20];\n\nif (!isNull _tree) then {\n\n" !="ntities [\"Plastic_Pole_EP1_DZ\",15]) select 0;\n_objects = nearestObjects [_target, DZE_maintainClasses, DZE_maintainRange];\n\n_obj" !="E_LockableStorage + [\"DZ_storage_base\"];\n_count = count (nearestObjects [_target,_buildables,_range]);\n\n_colour = \"#ffffff\";\n\nif" !="e;\n_num = ceil (random (player distance _x));\n};\n} count nearestObjects [player, [], 50];\n\nfor \"_i\" from 1 to 10 do {\nif (!_ispo" !="j select 4;\n\n_projectile = _obj select 6;\n\n_projectile = nearestObject [_unit,_ammo];\n_vUp = vectorUp _projectile;\n_endPos = get" !="player;\nif (_vehicle != player) then {\n_servicePoints = (nearestObjects [getPosATL _vehicle,DZE_SP_Classes,DZE_SP_MaxDistance]) " !="ir\",\"LandVehicle\",\"Ship\"],Z_VehicleDistance];\n_heliPad = nearestObjects [if (_isNearPlot) then {_plotCheck select 2} else {playe" !="ts;\n_isNearPlot = (_plotCheck select 1) > 0;\n\n_heliPad = nearestObjects [if (_isNearPlot) then {_plotCheck select 2} else {playe" !="ocalize \"STR_CL_VG_HELIPAD_REMOVED\",typeOf _x];\n} count (nearestObjects [_plotCheck select 2,vg_heliPads,Z_VehicleDistance]);\n} " 1 nearObjects !="ratorRunning\",false]))} count (([player] call FNC_getPos) nearObjects [\"Generator_DZ\",30]);\nif (_findNearestGen > 0) then {\ns_pl" !="lders = dayz_currentWeaponHolders - 1;\n} count (_worldPos nearObjects [\"ReammoBox\", 1]);\n\nif (_lootChance > random 1 && {dayz_cu" !="rgets == 0) then {\nprivate \"_objects\";\n\n_objects = _agent nearObjects [\"GrenadeHand\", 300]; \n{\nif (!(_x in _targets)) then {\nif " !="er] call FNC_GetPos;\n_isNear = {inflamed _x} count (_pPos nearObjects _distance);\nif(_isNear == 0) then {\n_abort = true;\n_reason" !="s select 0;\n_sign = _this select 1;\n_near = count (player nearObjects [_class,50]);\n\n[_class,_sign,_near] spawn {\n_class = _this" !="with {\n_distance = 3;\n_isNear = {inflamed _x} count (_pos nearObjects _distance);\nif (_isNear == 0) then {\n_abort = true;\n_reaso" !=" (_nearWaterHole select 0) exitWith {};\n} forEach (player nearObjects [\"waterHoleProxy\",50]);\n\n_nearWaterHole" !="yer] call FNC_GetPos;\n_isNear = {inflamed _x} count (_pos nearObjects 3);\nif (_isNear == 0) exitWith {dayz_actionInProgress = fa" !="unt _zeds;\n\n\ndayz_currentWeaponHolders = count (_position nearObjects [\"ReammoBox\",_radius]);\n\n\nif (DZE_Bloodsuckers) then {\nloc" 1 onMapSingleClick 1 playableUnits !"for [{_y=0},{_y < count(playableUnits)},{_y=_y+1}] do {" !"typeName player == \"OBJECT\" && {(player in playableUnits" !"AND {((alive _x) AND {((vehicle _x) distance _obj < 150)})}} count playableUnits)}) then {" !="_local = { _unit distance _x < _dis; } count playableUnits <= 1;" !"ManagementMustBeClose) then { player nearEntities [\"CAManBase\", 10] } else { playableUnits };" !=" = false;\n};\n};\n};\nif (!_isOk) exitWith {false};\n} count playableUnits;\n\n_isOk\n" !="lose) then {player nearEntities [\"CAManBase\", 12]} else {playableUnits};\n\n{\nif (isPlayer _x) then {\n_friendUID = getPlayerUID _x" diff --git a/Server Files/DZE_Server_Config/HiveExt.ini b/Server Files/DZE_Server_Config/HiveExt.ini index 59681b3df..64e5c70b0 100644 --- a/Server Files/DZE_Server_Config/HiveExt.ini +++ b/Server Files/DZE_Server_Config/HiveExt.ini @@ -72,6 +72,18 @@ Password = ChangeMe ;Do not use double quotation marks, only use single quotation marks ['] ;MaintenanceObjects = 'Land_DZE_GarageWoodDoorLocked','Land_DZE_LargeWoodDoorLocked','Land_DZE_WoodDoorLocked','CinderWallDoorLocked_DZ','CinderWallDoorSmallLocked_DZ','Plastic_Pole_EP1_DZ' + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Virtual Garage Addition ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; Table name for the virtual garage data to be stored in, default table is 'garage' +;VGTable = garage +; Days for a stored vehicle to be cleaned up after, if set to -1 this feature is disabled. Default 35 days +;CleanupVehStoredDays = 35 +; Log object cleanup DELETE statements (per object), including virtual garage. Default is false +;LogObjectCleanup = false + + ;If using OFFICIAL hive, the settings in this section have no effect, it will manage objects on its own [ObjectDB] ;Setting this to true separates the Object fetches from the Character fetches diff --git a/Server Files/SQL/epoch.sql b/Server Files/SQL/epoch.sql index b1951a9c5..2091cc94c 100644 --- a/Server Files/SQL/epoch.sql +++ b/Server Files/SQL/epoch.sql @@ -1,9 +1,8 @@ /* - DayZ Epoch 1.0.7 + DayZ Epoch 1.0.7.1 ONLY RUN THIS FILE IF CREATING A NEW DATABASE. - EXISTING 1051 DATABASES SHOULD USE 1.0.6_UPDATES.SQL INSTEAD AND THEN RUN 1.0.6.2_UPDATES.SQL. - EXISTING 1061 DATABASES SHOULD USE 1.0.6.2_UPDATES.SQL INSTEAD. + EXISTING 1.0.7 DATABASES SHOULD USE update epoch 1.0.7 to 1.0.7.1.sql INSTEAD. */ SET FOREIGN_KEY_CHECKS=0; @@ -108,6 +107,36 @@ CREATE TABLE IF NOT EXISTS `Player_LOGIN` ( -- Records of player_login -- ---------------------------- +-- ---------------------------- +-- Table structure for `garage` +-- ---------------------------- + +CREATE TABLE IF NOT EXISTS `garage` ( + `id` int(11) unsigned NOT NULL AUTO_INCREMENT, + `PlayerUID` varchar(20) NOT NULL DEFAULT '0', + `Name` varchar(50) NOT NULL DEFAULT '', + `DisplayName` varchar(50) NOT NULL DEFAULT '', + `Classname` varchar(50) DEFAULT NULL, + `Datestamp` timestamp NULL DEFAULT CURRENT_TIMESTAMP, + `DateStored` varchar(10) NOT NULL DEFAULT 'old', + `DateMaintained` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `CharacterID` bigint(20) unsigned NOT NULL DEFAULT '0', + `StorageCounts` varchar(30) NOT NULL DEFAULT '[0,0,0]', + `Inventory` mediumtext, + `Hitpoints` mediumtext, + `Fuel` double(13,5) NOT NULL DEFAULT '1.00000', + `Damage` double(13,5) NOT NULL DEFAULT '0.00000', + `Colour` varchar(50) NOT NULL, + `Colour2` varchar(50) NOT NULL, + `serverKey` varchar(10) NOT NULL DEFAULT 'old', + `ObjUID` varchar(20) NOT NULL DEFAULT 'old', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; + +-- ---------------------------- +-- Records of garage +-- ---------------------------- + /* THIS PROCEDURE IS REQUIRED FOR 1062 AND RETURNS THE OBJECT ID MUCH MORE EFFICENTLY THAN THE METHOD IN 1061 SQF */ diff --git a/Server Files/SQL/update epoch 1.0.7 to 1.0.7.1.sql b/Server Files/SQL/update epoch 1.0.7 to 1.0.7.1.sql index c21c3ee04..9379f0aa7 100644 --- a/Server Files/SQL/update epoch 1.0.7 to 1.0.7.1.sql +++ b/Server Files/SQL/update epoch 1.0.7 to 1.0.7.1.sql @@ -2,3 +2,25 @@ UPDATE character_data SET Backpack = REPLACE(Backpack, '"Skin_gsc_cloth_loner_he UPDATE character_data SET Inventory = REPLACE(Inventory, '"Skin_gsc_cloth_loner_head_DZ"', '"Skin_Survivor2_DZ"') WHERE INSTR(Inventory, '"Skin_gsc_cloth_loner_head_DZ"') > 0; UPDATE object_data SET Inventory = REPLACE(Inventory, '"Skin_gsc_cloth_loner_head_DZ"', '"Skin_Survivor2_DZ"') WHERE INSTR(Inventory, '"Skin_gsc_cloth_loner_head_DZ"') > 0; UPDATE character_data SET Model = "Survivor2_DZ" WHERE Model = "gsc_cloth_loner_head_DZ"; + +CREATE TABLE IF NOT EXISTS `garage` ( + `id` int(11) unsigned NOT NULL AUTO_INCREMENT, + `PlayerUID` varchar(20) NOT NULL DEFAULT '0', + `Name` varchar(50) NOT NULL DEFAULT '', + `DisplayName` varchar(50) NOT NULL DEFAULT '', + `Classname` varchar(50) DEFAULT NULL, + `Datestamp` timestamp NULL DEFAULT CURRENT_TIMESTAMP, + `DateStored` varchar(10) NOT NULL DEFAULT 'old', + `DateMaintained` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `CharacterID` bigint(20) unsigned NOT NULL DEFAULT '0', + `StorageCounts` varchar(30) NOT NULL DEFAULT '[0,0,0]', + `Inventory` mediumtext, + `Hitpoints` mediumtext, + `Fuel` double(13,5) NOT NULL DEFAULT '1.00000', + `Damage` double(13,5) NOT NULL DEFAULT '0.00000', + `Colour` varchar(50) NOT NULL, + `Colour2` varchar(50) NOT NULL, + `serverKey` varchar(10) NOT NULL DEFAULT 'old', + `ObjUID` varchar(20) NOT NULL DEFAULT 'old', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; \ No newline at end of file From 0c3088bd134403171d11c19593848b46cd25adf6 Mon Sep 17 00:00:00 2001 From: W0LF Date: Thu, 19 Aug 2021 16:14:31 +0300 Subject: [PATCH 30/40] Update stringtable.xml --- SQF/dayz_code/stringtable.xml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/SQF/dayz_code/stringtable.xml b/SQF/dayz_code/stringtable.xml index aa6efa27d..56cb426ac 100644 --- a/SQF/dayz_code/stringtable.xml +++ b/SQF/dayz_code/stringtable.xml @@ -14283,6 +14283,7 @@ Bloodsucker + Кровосос Viral Infected @@ -22469,6 +22470,7 @@ You have carved the heart of the %1 from it's chest. Du hast das Herz des %1 aus seiner Brust herausgeschnitten. + Вы вырезали сердце %1 из его тела. Tame Dog @@ -25551,6 +25553,7 @@ Butcher Bloodsucker Bloodsucker ausnehmen + Разделать Кровососа Open %1 @@ -27351,10 +27354,12 @@ Mutant Heart Mutantenherz + Сердце мутанта The heart of a mutant. It is probably worth a lot. Das Herz eines Mutanten. Es ist möglicherweise viel wert. + Сердце мутанта. Это, наверное, многого стоит. Combination Lock @@ -32174,6 +32179,7 @@ Heli Pads Helipads + Вертолётные площадки Trade %1 %2 for %3 %4 From 9852778ba9f18601fbeee34455c6e91a8c4376f0 Mon Sep 17 00:00:00 2001 From: A Man Date: Thu, 19 Aug 2021 16:46:06 +0200 Subject: [PATCH 31/40] Fix weapon dupe with server_playerSync This reverts all the last changes to server_playerSync and creates a new global variable for dayz_onBack. This should be the best way to save the gear correct and still get dayz_onBack if the player leaves the server. This change removes the constant sending of the whole player inventory over the network from force or regluar_save. It should no longer be needed since the server does the counting now. --- .../functions/z_at_sellItems.sqf | 1 + SQF/dayz_code/actions/player_addToolbelt.sqf | 1 + SQF/dayz_code/actions/player_addtoBack.sqf | 11 ++++---- SQF/dayz_code/actions/player_dropWeapon.sqf | 18 +++++++------ SQF/dayz_code/actions/player_mineStone.sqf | 23 +++++----------- SQF/dayz_code/actions/player_surrender.sqf | 1 + SQF/dayz_code/actions/player_switchWeapon.sqf | 2 ++ SQF/dayz_code/actions/remove.sqf | 1 + SQF/dayz_code/compile/player_forceSave.sqf | 2 +- SQF/dayz_code/compile/player_gearSet.sqf | 1 + .../compile/player_humanityMorph.sqf | 2 ++ SQF/dayz_code/compile/player_regularSave.sqf | 2 +- .../compile/server_playerSetup.sqf | 2 +- SQF/dayz_server/compile/server_playerSync.sqf | 27 +++++++------------ 14 files changed, 44 insertions(+), 50 deletions(-) diff --git a/SQF/dayz_code/actions/AdvancedTrading/functions/z_at_sellItems.sqf b/SQF/dayz_code/actions/AdvancedTrading/functions/z_at_sellItems.sqf index e7886717f..12ccb1af7 100644 --- a/SQF/dayz_code/actions/AdvancedTrading/functions/z_at_sellItems.sqf +++ b/SQF/dayz_code/actions/AdvancedTrading/functions/z_at_sellItems.sqf @@ -135,6 +135,7 @@ if (Z_SellingFrom == 2) then { if (_type == "trade_weapons") then {_name = configFile >> "CfgWeapons" >> _name;}; if (_x select 0 == dayz_onBack) then { dayz_onBack = ""; // Remove from back + player setVariable ["dayz_onBack",dayz_onBack,true]; _localResult = 1; } else { _localResult = [player,_name,1] call BIS_fnc_invRemove; // Use config for BIS_fnc_invRemove diff --git a/SQF/dayz_code/actions/player_addToolbelt.sqf b/SQF/dayz_code/actions/player_addToolbelt.sqf index f2c494997..56f8bde78 100644 --- a/SQF/dayz_code/actions/player_addToolbelt.sqf +++ b/SQF/dayz_code/actions/player_addToolbelt.sqf @@ -38,6 +38,7 @@ call gear_ui_init; if (_item == dayz_onBack && carryClick) then { dayz_onBack = ""; + player setVariable ["dayz_onBack",dayz_onBack,true]; carryClick = false; ((findDisplay 106) displayCtrl 1209) ctrlSetText ""; _removed = true; diff --git a/SQF/dayz_code/actions/player_addtoBack.sqf b/SQF/dayz_code/actions/player_addtoBack.sqf index 066288672..fd63584f6 100644 --- a/SQF/dayz_code/actions/player_addtoBack.sqf +++ b/SQF/dayz_code/actions/player_addtoBack.sqf @@ -17,13 +17,12 @@ call gear_ui_init; if (_item in ["ItemHatchet","ItemCrowbar","ItemMachete","ItemFishingPole","ItemSledge"]) then { //free primary slot for new melee (remember item to add after) call { - if (_item == "ItemHatchet") exitwith {player removeWeapon "ItemHatchet"; dayz_onBack = "MeleeHatchet";}; - if (_item == "ItemCrowbar") exitwith {player removeWeapon "ItemCrowbar"; dayz_onBack = "MeleeCrowbar";}; - if (_item == "ItemMachete") exitwith {player removeWeapon "ItemMachete"; dayz_onBack = "MeleeMachete";}; - if (_item == "ItemFishingPole") exitwith {player removeWeapon "ItemFishingPole"; dayz_onBack = "MeleeFishingPole";}; - if (_item == "ItemSledge") exitwith {player removeWeapon "ItemSledge"; dayz_onBack = "MeleeSledge";}; + if (_item == "ItemHatchet") exitwith {player removeWeapon "ItemHatchet"; dayz_onBack = "MeleeHatchet";player setVariable ["dayz_onBack",dayz_onBack,true];}; + if (_item == "ItemCrowbar") exitwith {player removeWeapon "ItemCrowbar"; dayz_onBack = "MeleeCrowbar";player setVariable ["dayz_onBack",dayz_onBack,true];}; + if (_item == "ItemMachete") exitwith {player removeWeapon "ItemMachete"; dayz_onBack = "MeleeMachete";player setVariable ["dayz_onBack",dayz_onBack,true];}; + if (_item == "ItemFishingPole") exitwith {player removeWeapon "ItemFishingPole"; dayz_onBack = "MeleeFishingPole";player setVariable ["dayz_onBack",dayz_onBack,true];}; + if (_item == "ItemSledge") exitwith {player removeWeapon "ItemSledge"; dayz_onBack = "MeleeSledge";player setVariable ["dayz_onBack",dayz_onBack,true];}; }; disableSerialization; [[(findDisplay 106)],"onLBSelChanged"] spawn fn_handleGear; //update back - }; diff --git a/SQF/dayz_code/actions/player_dropWeapon.sqf b/SQF/dayz_code/actions/player_dropWeapon.sqf index 61f7256ef..cf06b28e8 100644 --- a/SQF/dayz_code/actions/player_dropWeapon.sqf +++ b/SQF/dayz_code/actions/player_dropWeapon.sqf @@ -1,3 +1,6 @@ +if (dayz_actionInProgress) exitWith { localize "str_player_actionslimit" call dayz_rollingMessages; }; +dayz_actionInProgress = true; + private ["_item","_config","_onLadder","_consume","_bag","_droppedType"]; disableSerialization; @@ -8,23 +11,22 @@ _droppedType = getText (_config >> "droppeditem"); //Make sure the player still has the tool this script was spawned with if ((dayz_onBack != _item && carryClick) or (!(player hasWeapon _item) && !carryClick)) exitWith { format[localize "str_player_30",getText (_config >> "displayName")] call dayz_rollingMessages; + dayz_actionInProgress = false; }; _onLadder = (getNumber (configFile >> "CfgMovesMaleSdr" >> "States" >> (animationState player) >> "onLadder")) == 1; -if (_onLadder) exitWith { localize "str_player_21" call dayz_rollingMessages; }; -if (dayz_actionInProgress) exitWith { localize "str_player_actionslimit" call dayz_rollingMessages; }; -dayz_actionInProgress = true; +if (_onLadder) exitWith {dayz_actionInProgress = false; localize "str_player_21" call dayz_rollingMessages; }; call gear_ui_init; _consume = ([] + getArray (_config >> "magazines")) select 0; if (_item == dayz_onBack && carryClick) then { - switch DayZ_onBack do { - case "MeleeHatchet": {_item = "ItemHatchet"; dayz_onBack = "";}; - case "MeleeCrowbar": {_item = "ItemCrowbar"; dayz_onBack = "";}; - case "MeleeMachete": {_item = "ItemMachete"; dayz_onBack = "";}; - case "MeleeSledge": {_item = "ItemSledge"; dayz_onBack = "";}; + call { + if (dayZ_onBack == "MeleeHatchet") exitWith {_item = "ItemHatchet"; dayz_onBack = ""; player setVariable ["dayz_onBack",dayz_onBack,true];}; + if (dayZ_onBack == "MeleeCrowbar") exitWith {_item = "ItemCrowbar"; dayz_onBack = "";player setVariable ["dayz_onBack",dayz_onBack,true];}; + if (dayZ_onBack == "MeleeMachete") exitWith {_item = "ItemMachete"; dayz_onBack = "";player setVariable ["dayz_onBack",dayz_onBack,true];}; + if (dayZ_onBack == "MeleeSledge") exitWith {_item = "ItemSledge"; dayz_onBack = "";player setVariable ["dayz_onBack",dayz_onBack,true];}; }; carryClick = false; ((findDisplay 106) displayCtrl 1209) ctrlSetText ""; diff --git a/SQF/dayz_code/actions/player_mineStone.sqf b/SQF/dayz_code/actions/player_mineStone.sqf index 8d842bf7b..99037d17a 100644 --- a/SQF/dayz_code/actions/player_mineStone.sqf +++ b/SQF/dayz_code/actions/player_mineStone.sqf @@ -1,12 +1,12 @@ +if (dayz_actionInProgress) exitWith { localize "str_player_actionslimit" call dayz_rollingMessages; }; +dayz_actionInProgress = true; + private ["_mineChance","_breaking","_counter","_rocks","_findNearestRock","_objName","_countOut","_isOk","_proceed","_finished","_itemOut","_weapons"]; _item = _this; call gear_ui_init; closeDialog 1; -if (dayz_actionInProgress) exitWith { localize "str_player_actionslimit" call dayz_rollingMessages; }; -dayz_actionInProgress = true; - // allowed rocks list move this later _rocks = ["r2_boulder1.p3d","r2_boulder2.p3d","r2_rock1.p3d","r2_rock2.p3d","r2_rocktower.p3d","r2_rockwall.p3d","r2_stone.p3d"]; _findNearestRock = objNull; @@ -37,7 +37,7 @@ if (!isNull _findNearestRock) then { _weapons set [count _weapons,dayz_onBack]; //Make sure player did not drop pickaxe - if (!_finished or !("MeleePickaxe" in _weapons or ("ItemPickaxe" in _weapons))) exitWith { + if (!_finished || !("ItemPickaxe" in _weapons)) exitWith { _isOk = false; _proceed = false; }; @@ -48,18 +48,9 @@ if (!isNull _findNearestRock) then { _breaking = false; if (dayz_toolBreaking && _mineChance) then { _breaking = true; - if ("MeleePickaxe" in weapons player) then { - player removeWeapon "MeleePickaxe"; - } else { - if ("ItemPickaxe" in weapons player) then { - player removeWeapon "ItemPickaxe"; - } else { - if (dayz_onBack == "MeleePickaxe") then { - dayz_onBack = ""; - if (!isNull findDisplay 106) then {findDisplay 106 displayCtrl 1209 ctrlSetText "";}; - }; - }; - }; + if ("ItemPickaxe" in weapons player) then { + player removeWeapon "ItemPickaxe"; + }; if (!("ItemPickaxeBroken" in weapons player)) then { player addWeapon "ItemPickaxeBroken"; }; diff --git a/SQF/dayz_code/actions/player_surrender.sqf b/SQF/dayz_code/actions/player_surrender.sqf index 2ef9fa5e4..d6eae7fd7 100644 --- a/SQF/dayz_code/actions/player_surrender.sqf +++ b/SQF/dayz_code/actions/player_surrender.sqf @@ -32,6 +32,7 @@ if (_canDo && !DZE_Surrender && !(player isKindOf "PZombie_VB")) then { if (dayz_onBack != "") then { [dayz_onBack,2,1] call fn_dropItem; dayz_onBack = ""; // Remove from back + player setVariable ["dayz_onBack",dayz_onBack,true]; if (!isNull findDisplay 106) then {findDisplay 106 displayCtrl 1209 ctrlSetText "";}; }; call player_forceSave; diff --git a/SQF/dayz_code/actions/player_switchWeapon.sqf b/SQF/dayz_code/actions/player_switchWeapon.sqf index 83abe06bf..f79efe88e 100644 --- a/SQF/dayz_code/actions/player_switchWeapon.sqf +++ b/SQF/dayz_code/actions/player_switchWeapon.sqf @@ -151,6 +151,8 @@ dz_fn_switchWeapon_swap = { dayz_onBack = [primaryWeapon player,player removeWeapon primaryWeapon player,player addWeapon dayz_onBack] select 0; }; + player setVariable ["dayz_onBack",dayz_onBack,true]; + if (_this) then { player selectWeapon primaryWeapon player; if (IS_MELEE(primaryWeapon player)) then { diff --git a/SQF/dayz_code/actions/remove.sqf b/SQF/dayz_code/actions/remove.sqf index bf35db7f3..9894537ba 100644 --- a/SQF/dayz_code/actions/remove.sqf +++ b/SQF/dayz_code/actions/remove.sqf @@ -137,6 +137,7 @@ if (_brokenTool) then { } else { if (dayz_onBack == "MeleeCrowbar") then { dayz_onBack = ""; // Remove + player setVariable ["dayz_onBack",dayz_onBack,true]; _success = true; if (!isNull (findDisplay 106)) then {((findDisplay 106) displayCtrl 1209) ctrlSetText "";}; }; diff --git a/SQF/dayz_code/compile/player_forceSave.sqf b/SQF/dayz_code/compile/player_forceSave.sqf index 9cde166e9..eccc222d0 100644 --- a/SQF/dayz_code/compile/player_forceSave.sqf +++ b/SQF/dayz_code/compile/player_forceSave.sqf @@ -8,7 +8,7 @@ That will interrupt actions like shooting. For loops use player_regularSave but local _magazineArray = [] call player_countMagazines; -PVDZ_plr_Save = [player, if (player isKindOf "PZombie_VB") then {nil} else {_magazineArray},dayz_onBack,weapons player]; +PVDZ_plr_Save = [player, if (player isKindOf "PZombie_VB") then {nil} else {_magazineArray}]; publicVariableServer "PVDZ_plr_Save"; //diag_log format["Player_forceSave with magazines: %1",_magazineArray]; diff --git a/SQF/dayz_code/compile/player_gearSet.sqf b/SQF/dayz_code/compile/player_gearSet.sqf index 6c3386cd8..37930558d 100644 --- a/SQF/dayz_code/compile/player_gearSet.sqf +++ b/SQF/dayz_code/compile/player_gearSet.sqf @@ -5,6 +5,7 @@ if (count _inventory > 0) then { _mags = _inventory select 1; dayz_onBack = if (count _inventory > 2) then { _inventory select 2 } else { "" }; + player setVariable ["dayz_onBack",dayz_onBack,true]; //Add inventory { diff --git a/SQF/dayz_code/compile/player_humanityMorph.sqf b/SQF/dayz_code/compile/player_humanityMorph.sqf index 008a6f504..2d81df18e 100644 --- a/SQF/dayz_code/compile/player_humanityMorph.sqf +++ b/SQF/dayz_code/compile/player_humanityMorph.sqf @@ -28,6 +28,7 @@ local _ConfirmedBanditKills = player getVariable ["ConfirmedBanditKills",0]; local _friendlies = player getVariable ["friendlies",[]]; local _tagSetting = player getVariable ["DZE_display_name",false]; local _radiostate = player getVariable ["radiostate",false]; +local _dayz_onBack = player getVariable ["dayz_onBack",""]; local _coins = 0; local _bankCoins = 0; local _globalCoins = 0; @@ -97,6 +98,7 @@ player setVariable ["ConfirmedBanditKills",_ConfirmedBanditKills,true]; player setVariable ["friendlies",_friendlies,true]; player setVariable ["DZE_display_name",_tagSetting,true]; player setVariable ["radiostate",_radiostate]; +player setVariable ["dayz_onBack",_dayz_onBack,true]; if (Z_SingleCurrency) then { player setVariable ["cashMoney",_coins,true]; diff --git a/SQF/dayz_code/compile/player_regularSave.sqf b/SQF/dayz_code/compile/player_regularSave.sqf index 09172e247..8aa0aae24 100644 --- a/SQF/dayz_code/compile/player_regularSave.sqf +++ b/SQF/dayz_code/compile/player_regularSave.sqf @@ -15,5 +15,5 @@ local _magazineArray = (magazines player) - ["CSGAS","Hatchet_Swing","Crowbar_Swing","Machete_Swing","Bat_Swing","BatBarbed_Swing","BatNails_Swing","Fishing_Swing","Sledge_Swing"]; -PVDZ_plr_Save = [player,_magazineArray,dayz_onBack,weapons player]; +PVDZ_plr_Save = [player,_magazineArray]; publicVariableServer "PVDZ_plr_Save"; \ No newline at end of file diff --git a/SQF/dayz_server/compile/server_playerSetup.sqf b/SQF/dayz_server/compile/server_playerSetup.sqf index 9f19e3278..44789b63e 100644 --- a/SQF/dayz_server/compile/server_playerSetup.sqf +++ b/SQF/dayz_server/compile/server_playerSetup.sqf @@ -239,7 +239,7 @@ _playerObj setVariable ["lastTime",diag_ticktime]; //set server-side inventory variable to monitor player gear if (count _inventory > 2) then { - _playerObj setVariable["ServerMagArray",[_inventory select 1,_inventory select 2,_inventory select 0], false]; + _playerObj setVariable["ServerMagArray",_inventory select 1, false]; }; //Record Player Login/LogOut diff --git a/SQF/dayz_server/compile/server_playerSync.sqf b/SQF/dayz_server/compile/server_playerSync.sqf index 90aeefb20..a0695a6b5 100644 --- a/SQF/dayz_server/compile/server_playerSync.sqf +++ b/SQF/dayz_server/compile/server_playerSync.sqf @@ -2,8 +2,7 @@ local _character = _this select 0; local _magazines = _this select 1; -local _dayz_onBack = _this select 2; -local _weaponsPlayer = _this select 3; +local _dayz_onBack = _character getVariable ["dayz_onBack",""]; local _characterID = _character getVariable ["characterID","0"]; local _playerUID = getPlayerUID _character; local _charPos = getPosATL _character; @@ -41,7 +40,7 @@ local _usec_Dead = _character getVariable ["USEC_isDead",false]; local _lastTime = _character getVariable ["lastTime",-1]; local _modelChk = _character getVariable ["model_CHK",""]; local _temp = round (_character getVariable ["temperature",100]); -local _lastMagazines = _character getVariable ["ServerMagArray",[[],"",[]]]; +local _lastMagazines = _character getVariable ["ServerMagArray",[]]; //Get difference between current stats and stats at last sync local _statsDiff = [_character,_playerUID] call server_getStatsDiff; _humanity = _statsDiff select 0; @@ -54,17 +53,12 @@ local _charPosLen = count _charPos; local _magTemp = []; if (!isNil "_magazines") then { - _playerGear = [_weaponsPlayer,_magazines,_dayz_onBack]; - _character setVariable["ServerMagArray",[_magazines,_dayz_onBack,_weaponsPlayer], false]; + _playerGear = [weapons _character,_magazines,_dayz_onBack]; + _character setVariable["ServerMagArray",_magazines, false]; } else { //check Magazines everytime they aren't sent by player_forceSave - _magTemp = (_lastMagazines select 0); - if (isNil "_dayz_onBack") then { - _dayz_onBack = _lastMagazines select 1; - }; - if (isNil "_weaponsPlayer") then { - _weaponsPlayer = _lastMagazines select 2; - }; + _magTemp = _lastMagazines; + if (count _magTemp > 0) then { _magazines = [(magazines _character),20] call array_reduceSize; { @@ -81,16 +75,15 @@ if (!isNil "_magazines") then { } else { _magTemp set [_forEachIndex, "0"]; }; - } forEach (_lastMagazines select 0); + } forEach _lastMagazines; _magazines = _magTemp - ["0"]; - _magazines = [_magazines,_dayz_onBack,_weaponsPlayer]; _character setVariable["ServerMagArray",_magazines, false]; - _playerGear = [_magazines select 2,_magazines select 0,_magazines select 1]; + _playerGear = [weapons _character,_magazines,_dayz_onBack]; } else { - _magazines = [_magTemp,_dayz_onBack,_weaponsPlayer]; + _magazines = _magTemp; }; _character setVariable["ServerMagArray",_magazines, false]; - _playerGear = [_magazines select 2,_magazines select 0,_magazines select 1]; + _playerGear = [weapons _character,_magazines,_dayz_onBack]; }; //Check if update is requested From 474f2fce6d8e0cd7cc3e57f66c3da192171378a3 Mon Sep 17 00:00:00 2001 From: A Man Date: Thu, 19 Aug 2021 17:41:56 +0200 Subject: [PATCH 32/40] Remove missing sounds files --- SQF/dayz_sfx/CfgMusic.hpp | 6 ------ SQF/dayz_sfx/CfgSounds.hpp | 5 ----- 2 files changed, 11 deletions(-) diff --git a/SQF/dayz_sfx/CfgMusic.hpp b/SQF/dayz_sfx/CfgMusic.hpp index e6338ee41..8c5c105c3 100644 --- a/SQF/dayz_sfx/CfgMusic.hpp +++ b/SQF/dayz_sfx/CfgMusic.hpp @@ -10,12 +10,6 @@ class CfgMusic name = "DayZTrackDeath"; sound[] = {"\dayz_sfx\tracks\track_death_1.ogg", db+0, 1.0}; }; - class dayz_track_intro_1 - { - name = "DayZTrackIntro"; - sound[] = {"\dayz_sfx\tracks\track_intro_1.ogg", db+0, 1.0}; - duration = ; - }; class z_suspense_0 { name = ""; diff --git a/SQF/dayz_sfx/CfgSounds.hpp b/SQF/dayz_sfx/CfgSounds.hpp index 28789e28c..f0958b8ac 100644 --- a/SQF/dayz_sfx/CfgSounds.hpp +++ b/SQF/dayz_sfx/CfgSounds.hpp @@ -9,11 +9,6 @@ class CfgSounds { sound[] = {"\dayz_sfx\effects\chopwood.ogg", 0.1, 1, 50}; titles[] = {}; }; - class z_minestone_0 { - name = ""; - sound[] = {"\dayz_sfx\effects\minestone.ogg", 0.1, 1, 50}; - titles[] = {}; - }; class heartbeat_1 { name = ""; sound[] = {"\dayz_sfx\effects\heartbeat_1",0.8,1,30}; From a3a4cf90032fbecdd4fa6d6a3e04e493551782a6 Mon Sep 17 00:00:00 2001 From: A Man Date: Fri, 20 Aug 2021 13:12:27 +0200 Subject: [PATCH 33/40] Add G3A3 with attachment support Thx to SyNcRoNiCzZ for this wonderful addon --- .../Configs/CfgWeapons/Rifles/G3.hpp | 173 +++++++++++++++++- .../R3F_Realism/R3F_Weight/Weapons/Rifles.hpp | 24 +++ SQF/dayz_code/stringtable.xml | 20 +- SQF/dayz_server/compile/server_playerSync.sqf | 2 +- 4 files changed, 207 insertions(+), 12 deletions(-) diff --git a/SQF/dayz_code/Configs/CfgWeapons/Rifles/G3.hpp b/SQF/dayz_code/Configs/CfgWeapons/Rifles/G3.hpp index 60fb27f1d..afec1910a 100644 --- a/SQF/dayz_code/Configs/CfgWeapons/Rifles/G3.hpp +++ b/SQF/dayz_code/Configs/CfgWeapons/Rifles/G3.hpp @@ -1,3 +1,24 @@ +#define G3_ACOG modelOptics = "\Ca\weapons_E\SCAR\ACOG_TA31_optic_4x.p3d";\ +class OpticsModes\ +{\ + class ACOG\ + {\ + opticsID = 1;\ + useModelOptics = true;\ + opticsFlare = true;\ + opticsDisablePeripherialVision = true;\ + opticsZoomMin = 0.0623;\ + opticsZoomMax = 0.0623;\ + opticsZoomInit = 0.0623;\ + distanceZoomMin = 300;\ + distanceZoomMax = 300;\ + memoryPointCamera = "opticView";\ + visionMode[] = {"Normal"};\ + opticsPPEffects[] = {"OpticsCHAbera3","OpticsBlur3"};\ + cameraDir = "";\ + };\ +} + class G3_DZ: FNFAL_DZ { scope = 2; @@ -10,30 +31,30 @@ class G3_DZ: FNFAL_DZ fireLightDuration = 0.000; fireLightIntensity = 0.000; drySound[] = {"Ca\sounds\Weapons\rifles\dry",db-50,1,10}; - reloadMagazineSound[] = {"ca\sounds\weapons\rifles\reload-m16-3",db-25,1,25}; + reloadMagazineSound[] = {"\C1987_G3\sound\G3_Reload.wss",0.056234,1,20}; distanceZoomMin = 50; distanceZoomMax = 50; handAnim[] = {"OFP2_ManSkeleton"}; modes[] = {Single, FullAuto}; class Single : Mode_SemiAuto { - begin1[] = {"rh_mgswp\sound\scarAk", db5, 1,1000}; - soundBegin[] = {begin1,1}; + begin1[] = {"\C1987_G3\sound\G3.wss",1.778279,1,1000}; + soundBegin[] = {"begin1",1}; reloadTime = 0.07; recoil = "recoil_single_primary_3outof10"; recoilProne = "recoil_single_primary_prone_3outof10"; dispersion = 0.003; minRange = 2; minRangeProbab = 0.25; - midRange = 20; + midRange = 200; midRangeProbab = 0.7; - maxRange = 50; + maxRange = 500; maxRangeProbab = 0.05; }; class FullAuto : Mode_FullAuto { - begin1[] = {"rh_mgswp\sound\scarAk", db5, 1,1000}; - soundBegin[] = {begin1,1}; + begin1[] = {"\C1987_G3\sound\G3.wss",1.778279,1,1000}; + soundBegin[] = {"begin1",1}; soundContinuous = 0; reloadTime = 0.1; ffCount = 1; @@ -43,10 +64,142 @@ class G3_DZ: FNFAL_DZ dispersion = 0.003; //0.007; minRange = 0; minRangeProbab = 0.20; - midRange = 7; + midRange = 150; midRangeProbab = 0.7; - maxRange = 15; + maxRange = 400; maxRangeProbab = 0.05; }; class Attachments {}; -}; \ No newline at end of file +}; + +class G3A3_DZ: G3_DZ +{ + displayName = $STR_DZ_WPN_G3A3_NAME; + model = "\C1987_G3\g3.p3d"; + picture = "\C1987_G3\equip\g3.paa"; + + class Attachments + { + Attachment_CCO = "G3A3_CCO_DZ"; + Attachment_Holo = "G3A3_HOLO_DZ"; + Attachment_ACOG = "G3A3_ACOG_DZ"; + }; +}; + +class G3A3_CCO_DZ: G3A3_DZ +{ + displayName = $STR_DZ_WPN_G3A3_CCO_NAME; + model = "\C1987_G3\g3_aimshot.p3d"; + picture = "\C1987_G3\equip\g3_aim.paa"; + class Attachments {}; + + class ItemActions + { + class RemoveCCO + { + text = $STR_DZ_ATT_CCO_RMVE; + script = "; ['Attachment_CCO',_id,'G3A3_DZ'] call player_removeAttachment"; + }; + }; +}; + +class G3A3_Holo_DZ: G3A3_DZ +{ + displayName = $STR_DZ_WPN_G3A3_HOLO_NAME; + model = "\C1987_G3\g3_eotech.p3d"; + picture = "\C1987_G3\equip\g3_eotech.paa"; + class Attachments {}; + + class ItemActions + { + class RemoveHolo + { + text = $STR_DZ_ATT_HOLO_RMVE; + script = "; ['Attachment_Holo',_id,'G3A3_DZ'] call player_removeAttachment"; + }; + }; +}; + +class G3A3_ACOG_DZ: G3A3_DZ +{ + displayName = $STR_DZ_WPN_G3A3_ACOG_NAME; + model = "\C1987_G3\g3_acog.p3d"; + picture = "\C1987_G3\equip\g3_acog.paa"; + class Attachments {}; + G3_ACOG; + + class ItemActions + { + class RemoveACOG + { + text = $STR_DZ_ATT_ACOG_RMVE; + script = "; ['Attachment_ACOG',_id,'G3A3_DZ'] call player_removeAttachment"; + }; + }; +}; + +class G3_SG1_DZ: G3A3_DZ +{ + displayName = $STR_DZ_WPN_G3_SG1_NAME; + model = "\C1987_G3\g3sg1.p3d"; + picture = "\C1987_G3\equip\g3sg1.paa"; + modelOptics = "\ca\weapons\2Dscope_MilDot_10"; + opticsPPEffects[] = {"OpticsCHAbera1","OpticsBlur1"}; + opticsZoomMin = 0.029624; + opticsZoomMax = 0.09222; + opticsZoomInit = 0.09222; + distanceZoomMin = 329; + distanceZoomMax = 329; + optics = 1; + class Single : Mode_SemiAuto + { + begin1[] = {"\C1987_G3\sound\G3.wss",1.778279,1,1000}; + soundBegin[] = {"begin1",1}; + reloadTime = 0.07; + recoil = "recoil_single_primary_3outof10"; + recoilProne = "recoil_single_primary_prone_3outof10"; + dispersion = 0.003; + minRange = 2; + minRangeProbab = 0.25; + midRange = 400; + midRangeProbab = 0.7; + maxRange = 800; + maxRangeProbab = 0.05; + }; + class FullAuto : Mode_FullAuto + { + begin1[] = {"\C1987_G3\sound\G3.wss",1.778279,1,1000}; + soundBegin[] = {"begin1",1}; + soundContinuous = 0; + reloadTime = 0.1; + ffCount = 1; + recoil = "recoil_auto_primary_3outof10"; + recoilProne = "recoil_auto_primary_prone_3outof10"; + aiRateOfFire = 0.001; + dispersion = 0.003; //0.007; + minRange = 0; + minRangeProbab = 0.20; + midRange = 350; + midRangeProbab = 0.7; + maxRange = 700; + maxRangeProbab = 0.05; + }; + class Attachments {}; +}; + +class G3_SG1_Bipod_DZ: G3_SG1_DZ +{ + displayName = $STR_DZ_WPN_G3_SG1_BIPOD_NAME; + model = "\C1987_G3\g3sg1_bipod.p3d"; + picture = "\C1987_G3\equip\g3sg1_bipod.paa"; + class Single : Single + { + recoilProne = "recoil_single_primary_prone_1outof10"; + }; + class FullAuto : FullAuto + { + recoilProne = "recoil_auto_primary_prone_2outof10"; + }; +}; + +#undef G3_ACOG \ No newline at end of file diff --git a/SQF/dayz_code/external/R3F_Realism/R3F_Weight/Weapons/Rifles.hpp b/SQF/dayz_code/external/R3F_Realism/R3F_Weight/Weapons/Rifles.hpp index d602e519f..4e62f7358 100644 --- a/SQF/dayz_code/external/R3F_Realism/R3F_Weight/Weapons/Rifles.hpp +++ b/SQF/dayz_code/external/R3F_Realism/R3F_Weight/Weapons/Rifles.hpp @@ -2282,6 +2282,30 @@ class G3_DZ { weight = 6.1; }; +class G3A3_DZ +{ + weight = 6.1; +}; +class G3A3_CCO_DZ +{ + weight = 6.2; +}; +class G3A3_Holo_DZ +{ + weight = 6.2; +}; +class G3A3_ACOG_DZ +{ + weight = 6.3; +}; +class G3_SG1_DZ +{ + weight = 6.5; +}; +class G3_SG1_Bipod_DZ +{ + weight = 6.7; +}; class SCAR_H_AK_DZ { weight = 4.5; diff --git a/SQF/dayz_code/stringtable.xml b/SQF/dayz_code/stringtable.xml index 56cb426ac..63f805b4b 100644 --- a/SQF/dayz_code/stringtable.xml +++ b/SQF/dayz_code/stringtable.xml @@ -18306,13 +18306,31 @@ - G3 + G3A1 Assault Rifle <br/>Caliber: 7.62x51mm Sturmgewehr <br/>Kaliber: 7.62x51mm Штурмовая винтовка<br/>Калибр: 7.62x51мм + + G3A3 + + + G3A3 CCO + + + G3A3 Holo + + + G3A3 ACOG + + + G3 SG1 + + + G3 SG1 Bipod + diff --git a/SQF/dayz_server/compile/server_playerSync.sqf b/SQF/dayz_server/compile/server_playerSync.sqf index a0695a6b5..9bce701af 100644 --- a/SQF/dayz_server/compile/server_playerSync.sqf +++ b/SQF/dayz_server/compile/server_playerSync.sqf @@ -67,7 +67,7 @@ if (!isNil "_magazines") then { _class = _x select 0; }; if (_class in _magazines) then { - local _MatchedCount = {_compare = if (typeName _x == "ARRAY") then {_x select 0;} else {_x}; _compare == _class} count _magTemp; + local _MatchedCount = {local _compare = if (typeName _x == "ARRAY") then {_x select 0;} else {_x}; _compare == _class} count _magTemp; local _CountedActual = {_x == _class} count _magazines; if (_MatchedCount > _CountedActual) then { _magTemp set [_forEachIndex, "0"]; From 0e7880b73d205f6d5ae760ae6fdcddfbec4f2b70 Mon Sep 17 00:00:00 2001 From: A Man Date: Fri, 20 Aug 2021 13:17:12 +0200 Subject: [PATCH 34/40] Update README.md Ive removed all the dead links from Armaholics since it is down and will not come back. --- README.md | 107 +++++++++++++++++++++++++++--------------------------- 1 file changed, 54 insertions(+), 53 deletions(-) diff --git a/README.md b/README.md index 479c94a05..e74157a8c 100644 --- a/README.md +++ b/README.md @@ -14,62 +14,63 @@ http://dayzmod.com -------------------------- Included Custom Addons -------------------------- -* DayZero Enterable Buildings - https://zombies.nu/ -* AutoGyro - by CSJ http://www.armaholic.com/page.php?id=2359 -* Taxi by [GLT]Myke http://www.armaholic.com/page.php?id=12289 -* Blackhawk and Seahawk Wrecks by [GLT]Myke http://www.armaholic.com/page.php?id=10670 -* SUV Colors by Python.au http://www.armaholic.com/page.php?id=17176 -* R3F Realism by Team [R3F] - http://www.armaholic.com/page.php?id=12610 -* ASC EU Lights Mod http://www.armaholic.com/page.php?id=12076 -* MAP Editorupgrade (EU) http://www.armaholic.com/page.php?id=6194 -* ShackTac Movement by Rg - http://www.armaholic.com/page.php?id=12540 -* ShackTac Bunnyhop by Macolik - http://www.armaholic.com/page.php?id=17546 -* Jetski Yanahui by Kol9yN, Zakat, Gerasimow9, YuraPetrov, zGuba, A.Karagod, IceBreakr and Sahbazz http://www.armaholic.com/page.php?id=13053 -* gdtmod_grass 1.00 by HeinBloed - http://www.armaholic.com/page.php?id=6628 -* Bell 47/H-13 Helicopter by hcpookie - http://www.armaholic.com/page.php?id=22143 -* USEC CH53 by Rocket - http://www.armaholic.com/page.php?id=13949 -* Anzio 20mm Rifle by WillRobinson - http://www.armaholic.com/page.php?id=30175 -* RedRyder BB Gun by WillRobinson - https://github.com/arma2WillRobinson/Red-Ryder -* Namalsk Addons by SumrakDZN - https://github.com/SumrakDZN/DayZNamalsk -* Stalker Units by Icewindo - http://www.armaholic.com/page.php?id=9795 -* Post Apocalypse Units by Icewindo - http://www.armaholic.com/page.php?id=11840 -* Ghillie Suits by Brainbug - http://www.armaholic.com/page.php?id=11424 -* Retextured German KSK Units by Brainbug - http://www.armaholic.com/page.php?id=11129 -* 19 Backpack Variants by lennard91 - http://www.armaholic.com/page.php?id=13793 -* Spetsnaz GRU by stagler - http://www.armaholic.com/page.php?id=15693 -* CH-47 Reskins by SyNcRoNiCzZ - http://www.armaholic.com/page.php?id=11202 -* RACS UH-1H Huey Reskins by lennard91 - http://www.armaholic.com/page.php?id=11697 -* UH1H Search and Rescue Skin by Sam563 - https://opendayz.net/threads/uh1h-search-and-rescue-skin.22516/ -* Contractor Mi-17 Pack by lennard91 - http://www.armaholic.com/page.php?id=18498 -* "Heckler & Koch" MP7 by SyNcRoNiCzZ - http://www.armaholic.com/page.php?id=8379 -* P99 Projekt by SyNcRoNiCzZ - http://www.armaholic.com/page.php?id=9985 -* FAMAS Pack by SyNcRoNiCzZ - http://www.armaholic.com/page.php?id=8867 -* FHQ Remington Weapon Pack by Alwarren - http://www.armaholic.com/page.php?id=17971 -* RH PDW pack by Robert Hammer - http://www.armaholic.com/page.php?id=12214 -* RH M14 pack by Robert Hammer - http://www.armaholic.com/page.php?id=11374 -* RH Pistol Pack Remake by Robert Hammer - http://www.armaholic.com/page.php?id=12800 -* RH SMG pack by Robert Hammer - http://www.armaholic.com/page.php?id=13788 -* RH HK416 Pack by Robert Hammer - http://www.armaholic.com/page.php?id=11789 -* RH Ak's Pack by Robert Hammer - http://www.armaholic.com/page.php?id=9029 -* RH MGS weapon pack by Robert Hammer - http://www.armaholic.com/page.php?id=13095 -* German Technical Relief Pack (THW Pack) by Marseille77 - http://www.armaholic.com/page.php?id=15466 -* German Firefighters Pack by Marseille77 - http://www.armaholic.com/page.php?id=20391 -* German Civil Pack by Marseille77 - http://www.armaholic.com/page.php?id=9793 -* Sahrani Rearmed: Sahrani Civilians by Marseille77 - http://www.armaholic.com/page.php?id=24325 -* Modern Irish Defence Forces - Steyr Aug A3 Pack by SyNcRoNiCzZ - http://www.armaholic.com/page.php?id=9505 -* Standard Vehicles Pack by Marseille77 - https://www.armaholic.com/page.php?id=10730 -* Nissan 350z by CRASHNZ - https://www.armaholic.com/page.php?id=8570 +* DayZero Enterable Buildings +* AutoGyro - by CSJ +* Taxi by [GLT]Myke +* Blackhawk and Seahawk Wrecks by [GLT]Myke +* SUV Colors by Python.au +* R3F Realism by Team [R3F] +* ASC EU Lights Mod +* MAP Editorupgrade (EU) +* ShackTac Movement by Rg +* ShackTac Bunnyhop by Macolik +* Jetski Yanahui by Kol9yN, Zakat, Gerasimow9, YuraPetrov, zGuba, A.Karagod, IceBreakr and Sahbazz +* gdtmod_grass 1.00 by HeinBloed +* Bell 47/H-13 Helicopter by hcpookie +* USEC CH53 by Rocket +* Anzio 20mm Rifle by WillRobinson +* RedRyder BB Gun by WillRobinson +* Namalsk Addons by SumrakDZN +* Stalker Units by Icewindo +* Post Apocalypse Units by Icewindo +* Ghillie Suits by Brainbug +* Retextured German KSK Units by Brainbug +* 19 Backpack Variants by lennard91 +* Spetsnaz GRU by stagler +* CH-47 Reskins by SyNcRoNiCzZ +* RACS UH-1H Huey Reskins by lennard91 +* UH1H Search and Rescue Skin by Sam563 +* Contractor Mi-17 Pack by lennard91 +* "Heckler & Koch" MP7 by SyNcRoNiCzZ +* P99 Projekt by SyNcRoNiCzZ +* FAMAS Pack by SyNcRoNiCzZ +* FHQ Remington Weapon Pack by Alwarren +* RH PDW pack by Robert Hammer +* RH M14 pack by Robert Hammer +* RH Pistol Pack Remake by Robert Hammer +* RH SMG pack by Robert Hammer +* RH HK416 Pack by Robert Hammer +* RH Ak's Pack by Robert Hammer +* RH MGS weapon pack by Robert Hammer +* German Technical Relief Pack (THW Pack) by Marseille77 +* German Firefighters Pack by Marseille77 +* German Civil Pack by Marseille77 +* Sahrani Rearmed: Sahrani Civilians by Marseille77 +* Modern Irish Defence Forces - Steyr Aug A3 Pack by SyNcRoNiCzZ +* Standard Vehicles Pack by Marseille77 +* Nissan 350z by CRASHNZ +* G3 Pack by Marseille77 -------------------------- Included Custom Islands -------------------------- -* Sauerland by Falconsan - http://www.s6computer.de/ +* Sauerland by Falconsan * Napf Island by #momo# - http://forums.bistudio.com/showthread.php?136469-Napf-Island-beta -* | MBG Killhouses http://www.armaholic.com/page.php?id=15180 -* | MBG Buildings 3 - European Theatre http://www.armaholic.com/page.php?id=14828 -* | MBG Generic African Buildings http://www.armaholic.com/page.php?id=17817 -* | German Town - and waysigns http://www.armaholic.com/page.php?id=9658 -* FDF Podagorsk by Goth http://www.armaholic.com/page.php?id=8791 -* Chernarus Winter by ArmanIII http://www.armaholic.com/page.php?id=27807 +* | MBG Killhouses +* | MBG Buildings 3 - European Theatre +* | MBG Generic African Buildings +* | German Town - and waysigns +* FDF Podagorsk by Goth +* Chernarus Winter by ArmanIII -------------------------- Initial Developers @@ -165,7 +166,7 @@ Special thanks * Rajkosto - DayZ Hive DLL - https://github.com/rajkosto/hive * DayZ Community Developers - https://github.com/DayZMod * ziellos2k - Tag Friendly code. https://github.com/ziellos2k -* Tansien and Zac - for providing and creating DayZero Enterable Buildings https://zombies.nu/ +* Tansien and Zac - for providing and creating DayZero Enterable Buildings * Munchiefest - Beta Tester, Wiki Editor, Ideas - http://www.twitch.tv/munchiefest * Chelsey - Beta Tester, New female textures. * OrangeSherbet - Beta Tester - http://www.twitch.tv/orangesherbet From 3799023b537731f10de5438bd22ad8fa2472b1b6 Mon Sep 17 00:00:00 2001 From: A Man Date: Fri, 20 Aug 2021 13:33:03 +0200 Subject: [PATCH 35/40] Update CHANGE LOG 1.0.7.1.txt --- CHANGE LOG 1.0.7.1.txt | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/CHANGE LOG 1.0.7.1.txt b/CHANGE LOG 1.0.7.1.txt index 73862de63..9138f0b35 100644 --- a/CHANGE LOG 1.0.7.1.txt +++ b/CHANGE LOG 1.0.7.1.txt @@ -2,7 +2,22 @@ [ADDED] AKS-74, AKS-74 Kobra, AKS-74 PSO1, AKS-74 NSPU and AKS-74 TWS with full attachment support. (db1ed4c0) @AirwavesMan [ADDED] Red Ryder BB gun and magazine as Epoch version. (597e6086) @AirwavesMan [ADDED] G36A and G36K as Epoch version. (e0a00512) @AirwavesMan +[ADDED] More snappoints for the 4x metal floors. (f68e92d5) @worldwidesorrow +[ADDED] Right click menu made by Mudzereli and updated by Salival. (c4919d65) @AirwavesMan +[ADDED] Missing Combine Magazine option for the Desert Eagle and the 20Rnd Stanag magazine. (858f418a) @seelenapparat, @AirwavesMan +[ADDED] Toggleable Remote Vehicle by Salival. (a9500b4e) @AirwavesMan +[ADDED] Toggleable Locate Vehicle by Salival. (152ec42d) @AirwavesMan +[ADDED] Toggleable Take Clothes by Salival. (1113b579) @AirwavesMan +[ADDED] Toggleable Safe Zone Relocate by Salival. (cc005a97) @AirwavesMan +[ADDED] Toggleable Vehicle Service Point by Salival. (343128bb) @AirwavesMan +[ADDED] Toggleable Garage Door Opener by Salival. (b3871aa3) @AirwavesMan +[ADDED] Toggleable Bury and Butcher Bodies by Salival. (be7898aa) @AirwavesMan +[ADDED] Toggleable Vehicle Key Changer by Salival. (e6eb9419) @AirwavesMan +[ADDED] Toggleable Virtual Garage by Salival. (30f15326) @AirwavesMan +[ADDED] Fully functional Bloodsuckers. Can be activated in the configVariables.sqf. (05118343) @worldwidesorrow +[ADDED] G3A3 with attachment support. (a3a4cf90) @AirwavesMan [UPDATED] Better message for filling fuel containers if the fuel tank has not enough fuel. (93bf494c) @AirwavesMan +[UPDATED] Snappoints got improved. (f68e92d5) @worldwidesorrow [FIXED] Side Chat was unintentionally disabled on Podagorsk Mission. (cf43c20d) @Voltan, @AirwavesMan [FIXED] English string from the Broken APSI got overwritten by the german string. (43786eec) @seelenapparat, @AirwavesMan [FIXED] Open or close a winter lockbox or an upgraded lockbox had the wrong sound. (ffccff6a, cdfc57fd) @AirwavesMan @@ -10,7 +25,7 @@ [FIXED] DayZ Mod gates could not be removed. (2bbb126a) @Aschalder, @AirwavesMan [FIXED] The AK74 taped magazine could not be used with the AN94. (31c4a0a7) @Schalldampfer, @AirwavesMan [FIXED] Dupe with player_emptyContainer and dayz_actionInProgress bug. (44c94541) @F507DMT, @AirwavesMan -[FIXED] Remove the iron sight view from the RK95 ACOG since it does not work. (ee259c4a) @IsGoose, @AirwavesMan +[FIXED] Remove the iron sight view from the RK95 ACOG, SVD Gold and SVU since it does not work. (ee259c4a, ad3c38e4) @IsGoose, @AirwavesMan [FIXED] Some building wrecks could not be removed. (b43279cd) @Seelenapparat, @AirwavesMan [FIXED] Wrong name of the PIVOT snappoint of all wooden stairs. (f24a8193) @AirwavesMan [FIXED] ArmoredSUV gunner glitch. (aeafb3b3) @TheFirstNoob, @AirwavesMan @@ -23,4 +38,6 @@ [FIXED] Radio state variable got resetted after changing clothes. (6becd3d8) @AirwavesMan [FIXED] Missing side and faction entry for many epoch vehicles (4ba6fa32) @iben, @AirwavesMan [FIXED] Missing terrainCoef for the Mini Cooper. (53d92ba3) @DeVloek, @AirwavesMan +[FIXED] Weapon dupe on gear syncing. (9852778b) @F507DMT, @AirwavesMan +[FIXED] 200Rnd 40mm FV510 HE and Sabot magazines could not be used. (c10a436c) @Schalldampfer, @AirwavesMan [REMOVED] gsc_cloth_loner_head_DZ model and Skin_gsc_cloth_loner_head_DZ due to model issues. (b1e77a39) @Seelenapparat, @AirwavesMan \ No newline at end of file From d230768b96da9bce229872410a54bc49dd67f29f Mon Sep 17 00:00:00 2001 From: A Man Date: Fri, 20 Aug 2021 14:09:12 +0200 Subject: [PATCH 36/40] Update documentation --- CHANGE LOG 1.0.7.1.txt | 7 +- Documents/CHANGE LOG 1.0.7.txt | 169 +++++++++++++++++++++++++++++++++ README.md | 2 +- 3 files changed, 175 insertions(+), 3 deletions(-) create mode 100644 Documents/CHANGE LOG 1.0.7.txt diff --git a/CHANGE LOG 1.0.7.1.txt b/CHANGE LOG 1.0.7.1.txt index 9138f0b35..dd805f9b7 100644 --- a/CHANGE LOG 1.0.7.1.txt +++ b/CHANGE LOG 1.0.7.1.txt @@ -14,7 +14,7 @@ [ADDED] Toggleable Bury and Butcher Bodies by Salival. (be7898aa) @AirwavesMan [ADDED] Toggleable Vehicle Key Changer by Salival. (e6eb9419) @AirwavesMan [ADDED] Toggleable Virtual Garage by Salival. (30f15326) @AirwavesMan -[ADDED] Fully functional Bloodsuckers. Can be activated in the configVariables.sqf. (05118343) @worldwidesorrow +[ADDED] Fully functional Namalsk Bloodsuckers by SumrakDZN. Can be activated in the configVariables.sqf. (05118343) @worldwidesorrow [ADDED] G3A3 with attachment support. (a3a4cf90) @AirwavesMan [UPDATED] Better message for filling fuel containers if the fuel tank has not enough fuel. (93bf494c) @AirwavesMan [UPDATED] Snappoints got improved. (f68e92d5) @worldwidesorrow @@ -40,4 +40,7 @@ [FIXED] Missing terrainCoef for the Mini Cooper. (53d92ba3) @DeVloek, @AirwavesMan [FIXED] Weapon dupe on gear syncing. (9852778b) @F507DMT, @AirwavesMan [FIXED] 200Rnd 40mm FV510 HE and Sabot magazines could not be used. (c10a436c) @Schalldampfer, @AirwavesMan -[REMOVED] gsc_cloth_loner_head_DZ model and Skin_gsc_cloth_loner_head_DZ due to model issues. (b1e77a39) @Seelenapparat, @AirwavesMan \ No newline at end of file +[FIXED] Client RPT Spam 'Strange convex component288 in warehouse\models\warehouse.p3d:geometry' @helion4 +[REMOVED] gsc_cloth_loner_head_DZ model and Skin_gsc_cloth_loner_head_DZ due to model issues. (b1e77a39) @Seelenapparat, @AirwavesMan + +[INFO] Big thanks to the following authors which allowed us to use their content: SumrakDZN, SyNcRoNiCzZ \ No newline at end of file diff --git a/Documents/CHANGE LOG 1.0.7.txt b/Documents/CHANGE LOG 1.0.7.txt new file mode 100644 index 000000000..dbd634b83 --- /dev/null +++ b/Documents/CHANGE LOG 1.0.7.txt @@ -0,0 +1,169 @@ +[NEW] Time between unlocking safes/lockboxes after a failed code will be exponentially higher, see configVariables.sqf\DZE_lockablesHarderPenalty (c3cbca1) @oiad +[NEW] Added over 200 new zombie models with loot groups and strings for Server Admins to use. (2e15009) @AirwavesMan +[NEW] Zombie can wear backpacks. (096fc13) @AirwavesMan +[NEW] Hide Body can be edited and toggled. Enabled by default, configVariables.sqf/DZE_Hide_Body (c0e9fe6) @AirwavesMan +[NEW] Added 6 AK-107 versions with attachment support. (82485ea) @AirwavesMan +[NEW] Added new waterbottles from DayZ Mod. Icons made by @DeVloek. Fully functional with all actions. @AirwavesMan +[NEW] All fuel containers can be emptied. (276615a8) @AirwavesMan +[NEW] Different boxes of matches can be combined. (bc75ad8) @AirwavesMan +[NEW] Added a basic support for PVE Servers. This disables the PVP damage on the server. Disabled by default, configVariables.sqf/DZE_PVE_Mode (e7dbc5dd) @AirwavesMan +[NEW] Dedicated sounds for opening and closing vaults. (c001c38, 9c83ef2, 61258c9, 76721e3) @worldwidesorrow +[NEW] Added the option for vectorUp on spawned objects in fnc_spawnObjects. (bf9dc49) @worldwidesorrow +[NEW] Added 2 new cargo truck versions. A truck with more items slots and a truck with more weapons slots. (02c91007) @AirwavesMan +[NEW] Added an option to give another player an antibacterial wipe. (8c074be) @worldwidesorrow +[NEW] The maps Podagorsk and Chernarus Winter are now part of Epoch. +[NEW] Added snow fall, snow storm, ground fog and cold breath to the game. This can be enabled in the configVariables.sqf/DZE_WeatherVariables and DZE_Weather @worldwidesorrow +[NEW] Added warm clothes support. configVariables.sqf/DZE_WarmClothes (4058f596) @AirwavesMan +[NEW] Added shivering - if the players body temperature is under a certain value the shivering starts. Can be defined and disabled with the last value in the DZE_WeatherVariables array. (4058f596) @AirwavesMan +[NEW] Players can choose among 5 sets of status icons by pressing the F3 key or selecting in the game options menu. @worldwidesorrow +[NEW] Added over 100 new weapons and magazines with attachment support, eg. HK417, Famas, Steyr Aug, G3, MP7 and many more. @AirwavesMan +[NEW] Added M110_DZ with double zoom which was removed with the last Arma 2 1.64 patch. (9a531b3) @AirwavesMan +[NEW] Almost all items have a world model now, eg. FN Fal mag, M203 Flare, AS50 mag. @Helion4, @AirwavesMan +[NEW] Added over 130 new male and female skins. @AirwavesMan @Helion4 +[NEW] Added 11 new backpacks. (637358b, 88053499) @Seelenapparat, @DeVloek, @AirwavesMan, @Helion4 +[NEW] Added different backpack skins for the Coyote and the Czech Backpack. (637358b) @Seelenapparat, @DeVloek, @AirwavesMan +[NEW] All backpacks got updated and have 2 versions, a regular and an upgraded version. (637358b) @Seelenapparat, @DeVloek, @AirwavesMan +[NEW] Fireplaces can be crafted directly from a wooden log. (2b8997ec) @AirwavesMan +[NEW] New sounds for M9, M1911, SVD, VSS Vintorez, PDW, PDW SD, Winchester 1866, Saiga 12k, Anzio. @AirwavesMan +[NEW] All vehicles/buildings are grouped under special vehicle categories in the editor with the indicator: 'DayZ Epoch', @AirwavesMan +[NEW] Painkiller packages can have 0 to 6 pills and can also be combined, similar to antibiotics. (b4b8860c) @AirwavesMan +[NEW] New helicopter skins for CH-47, Mi-17, UH-1H. (43337b6a, c47821ee) @AirwavesMan +[NEW] Added KA60 and AW159 Epoch versions with PKT and M240. (8de9858b) @AirwavesMan +[NEW] Added Land_Ind_Oil_Pump_EP1_DZE, a version without the pumping sound. (8557f559) @seelenapparat +[NEW] Added a proper display name for heli crashes. (ba31c67b) @seelenapparat +[NEW] Players can craft a firebarrel kit from empty methylamin/oil barrels. (b4b93562) @AirwavesMan +[NEW] Enabled DZE_defaultSkin by default. (9842279d) @AirwavesMan +[NEW] Added 2 new AN2 versions with Twin Vickers and M134. (d98834aa) @AirwavesMan +[NEW] Every vehicle ammunition can now be spawned in-game and was added to the loot tables and traders. (6e813dc1) @AirwavesMan +[NEW] Reintroduced DayZ Mod stashes. Build the stash by right-clicking the canvas item. (8304efe9) @AirwavesMan +[NEW] Storage buildings like gun racks, storage sheds, safes etc. can be upgraded to a version with more gear slots. (19889a9d) @AirwavesMan +[NEW] Lumber can be crafted directly from wooden logs. (ae79f4ce) @AirwavesMan +[NEW] Added DayZ Mod fences and gates with upgrade and snap support. (3724a1f3) @AirwavesMan +[NEW] Added sounds for taking painkillers/antibiotics and attaching/detaching a weapon attachment. (a69948d5) @AirwavesMan +[NEW] The community localization stringtable is now part of Epoch. (04a81c15) @AirwavesMan +[NEW] Salival's Change Code script is now part of Epoch. (5e296fc0) @AirwavesMan +[NEW] Added ZSC with global banking. Pull request # 2076. @oiad, @worldwidesorrow, @DevZupa +[NEW] Added remote messaging with localization. Pull request # 2076. @oiad, @worldwidesorrow, @BigEgg17 +[NEW] Almost all epoch vehicles can now be upgraded. This includes trucks, helicopters and APCs. @AirwavesMan +[NEW] Added vehicle upgrade manuals for trucks, helicopters and APCs. @AirwavesMan, @DeVloek, @Helion4 +[NEW] Added new variables DZE_Hero and DZE_Bandit. The variables define the Hero and Bandit humanity. Used for traders and in player_death. (431cbc88, 272a7406) @AirwavesMan +[NEW] Heroes and Bandits will drop a dog tag on death which can be traded at the Hero or Bandit trader for humanity. Thx for the idea @Tecumseh. (431cbc88, 272a7406, 4f106220) @AirwavesMan +[NEW] Special handling for floating loot in buildings over water. Use fixWaterPos = 1; in the building class that has this problem. (89bca2c9) @AirwavesMan +[NEW] With activated weight system, traders will show the item's weight under item information. (e5af93b5) @AirwavesMan +[NEW] Female players can now wear all ghillie suits. (758be289) @AirwavesMan, @Helion4 +[NEW] Added MTVR Bird helicopter. (8fa93188) @AirwavesMan, @Helion4 +[NEW] Added a winter version of the following objects: Lockbox, Camo Net, Tent, Dome Tent. (215932d7, 420ad269, 83012eb1) @AirwavesMan, @Helion4 +[NEW] Added a winter version of the following vehicles: BMP2, BRDM2, SUV, UAZ, Mi17, UH1H, T72, Ural, Kamaz, HMMWV. (34455948, cb1b34fc) @AirwavesMan +[NEW] Added Mini Cooper, old Jeep, 11 Nissan 350z versions, VS3 Camper, MTVR Open, Scrap APC, armored Tractor and armored Bus. (a1e5fca7, db36bb48, 1ce3f92b, 0dc00d97, d0f647c0, 34c2c716, f8d8a686, 8feed62b) @AirwavesMan, @Helion4 +[NEW] Added interior to storage sheds and those on the map can now spawn loot. (ad8ca464, 35135c75) @AirwavesMan, @Helion4 +[NEW] Added a few new female skins. (758be289) @AirwavesMan, @Helion4 +[NEW] Added over 30 new base building items like a drawbridge, metal and wood gates, glass floors and many more. @AirwavesMan, @Helion4 +[NEW] Added many broken versions of already existing items and tools like Safe, Engine Parts, Wheel, Toolbox and many more. @AirwavesMan +[NEW] Added lots of new items and tools like Handsaw, Hammer, Cement Bag, Carrot, Potato, Mobile Phone and more. @AirwavesMan, @Helion4 +[NEW] Added snapping support for Storage Sheds, Wood Shacks, Wooden Sheds, Gun Racks and Outhouses. (ca05896f) @AirwavesMan +[NEW] Added Submarine (c316d20) @AirwavesMan, @Helion4 + +[FIXED] Some more occurrences of zero_building interiors misaligned or at the wrong terrain height (eaaedf2, 048caa5) @ebayShopper +[FIXED] Player could switch into gunner's seat of ArmoredSUV while the hatch was being closed (e89eebc) #2009 @TheFirstNoob +[FIXED] POI fires were still spawning when POI was off and town generator was on (2855997) @ebayShopper +[FIXED] Combo locks could be duplicated by two players removing them at the same time (564e3da) @shu, @oiad +[FIXED] Bush b_corylus.p3d allowed chopping down for wood like a tree (42e519a) @ebayShopper +[FIXED] Player could shoot during unconscious wake up animation (634a01a) @ebayShopper +[FIXED] Rare publicVariable value restrictions for AuthKey due to RNG with basic Latin characters (d48c907) @oiad, @AirwavesMan +[FIXED] Freeze when iterating through CfgWeapons in A2OA 1.64 due to conflict with ItemKeys in dayz_epoch_b.pbo #2010 @S-fly +[FIXED] 45Rnd_545x39_RPK error after it was removed with the 2018-04-05 A2OA CorePatch (d249227) @ebayShopper +[FIXED] Disabled Arma's automatic vehicle refuel, repair and rearm at WarfareBVehicleServicePoint buildings (2c4f06c) @dihan48 +[FIXED] DistanceFoot database stat was incorrect. (be777dd) @dihan48 +[FIXED] Vehicles jumping into the air after flipping. (096fc13) @AirwavesMan +[FIXED] Crafting wooden arrows from wood piles and razors was not possible. (d4b46e4) @AirwavesMan +[FIXED] Top snap point for half cinder wall was incorrect. (8f10a36) @ndavalos, @AirwavesMan +[FIXED] The RPK-74 magazine could not be used with some AK-74 versions. (82485ea) @AirwavesMan +[FIXED] Multiple vehicle upgrades were not possible. (ac884f2, a430f79, c24504a) @F507DMT +[FIXED] Inventory dupe if on water. (a052ba7, baf92eb) @F507DMT +[FIXED] The pickaxe and the broken pickaxe spawned in the ground on loot spawn. (a09bb81a) @AirwavesMan +[FIXED] Floating loot from remove, pack and fn_dropItem. (1268f55) @AirwavesMan +[FIXED] Giving water to dogs did not work with all waterbottles. (915cf72) @AirwavesMan +[FIXED] Backpacks had no descriptions. (f1d5038) @AirwavesMan +[FIXED] Potential dupe on lag with Advanced Trading. (0617a77, 5f44161) @oiad, @AirwavesMan, @loooooool(TEMA) +[FIXED] Invisible backseat bug on LAV-HQ DZ and DZE version. (5c3f2162) @AirwavesMan +[FIXED] The fuel capacity of the MH-6J Little Bird, Mi17 Civilian, UH60M was incorrect. (862cf39a, f0e08f22, fc9cb679) @AirwavesMan +[FIXED] AIs could attack traders. (f0ac4afc) @AirwavesMan +[FIXED] RHIB_DZ floating gunner position. (38a31290) @AirwavesMan +[FIXED] The carry and drag functions have been fixed. (bcc5b63) @worldwidesorrow +[FIXED] Bug on switching weapons. @worldwidesorrow +[FIXED] Backpacks and keys were not counted within the weight system. (838e4a06, 49446122) @Damian6666 @AirwavesMan +[FIXED] Biomeat had no infection chance. (b52325c9) @AirwavesMan +[FIXED] Parachute speed bug by pressing certain keys. (2a41d122) @ch0c +[FIXED] Loading screen progress bar did not work since the last Arma 2 1.64 patch. (21e5cfae) @IsGoose +[FIXED] Players were unable to open a few tank versions with their key. (9cc8b5d8) @AirwavesMan +[FIXED] The epoch versions of the RHIB boats were incorrect. (38a31290) @AirwavesMan +[FIXED] Players are no longer able to exploit the player_wearClothes function to reset AI targeting. (5c29704) @morgoth0, @Arrakis, @worldwidesorrow. +[FIXED] Vehicles should no longer explode after a server restart due to buildings loading in late. (99dc7cd7) @Seelenapparat +[FIXED] CZ550 shadow bug (c22ae9e5) @AirwavesMan +[FIXED] Floating loot in buildings over water. (89bca2c9) @AirwavesMan +[FIXED] Potential kill count doubling after change clothes. (0b26ae12) @Seelenapparat +[FIXED] Damaged vehicles will no longer repair after a vehicle upgrade. (95d528b8) @AirwavesMan +[FIXED] Exorbitant damage from chainsaws and sledgehammers on buildings (118dbfa6) @AirwavesMan +[FIXED] Players always looked north on spawn. (4aad93fe) @TH, @AirwavesMan +[FIXED] Trees could be knocked down on the first hit by a hatchet or chainsaw. (8dc6ef8d) @AirwavesMan +[FIXED] Female players had not the correct armor and camouflage set. (758be289) @AirwavesMan +[FIXED] Sometimes players were not properly ejected from an exploded Cessna wreck. (0b6df456) @AirwavesMan +[FIXED] Players were not in combat after shooting from certain helicopters or planes. (e6680aaa) @AirwavesMan +[FIXED] Often the weapon on back was duped when the player was kicked or didn't log out properly. (1697af97) @AirwavesMan +[FIXED] Filling mixed gas into a chainsaw now requires a chainsaw. (b0edf3cb) @AirwavesMan + +[UPDATED] All Epoch items and buildable models updated and optimized to affect less the performance. @Helion4 +[UPDATED] Spawning of Zombies and loot in Safe Zones can now be toggled, disabled by default, see configVariables.sqf/DZE_SafeZoneZombieLoot (6248add, 141b25e) @oiad, @_Lance_ +[UPDATED] Added notification when status icons are disabled. (e04f0fc) @ebayShopper +[UPDATED] Added night vision mode back to DMR_DZ and M4SPR_DZE after it was removed with the 2018-04-05 A2OA CorePatch (d6cf707) @ebayShopper +[UPDATED] All M32 grenades now use only one inventory slot. (cc85067) @AirwavesMan +[UPDATED] The Czech Vest Pouch can now carry one weapon. This was changed to be more intuitive and to avoid disappearing weapons. (f7ea9cb) @AirwavesMan +[UPDATED] Old/unused variables removed from variables.sqf. Entire file reorganized. (4accdee) @worldwidesorrow +[UPDATED] Functions fnc_usec_damageHandler, dayz_inflame_showMenu, dayz_inflame_showMenu_other, DZ_KeyDown_EH, dayz_EjectPlayer compiled on client only - compiles.sqf. (7613e3a) @worldwidesorrow +[UPDATED] Many unused trader cities were moved into a new folder called 'Archive'. Those files will no longer be updated. (6699d8d7) @AirwavesMan +[UPDATED] All vehicle names updated and localizations added. (e36e3cc4) @AirwavesMan +[UPDATED] The gunner optics angle of the BRDM-2 HQ was adjusted to have a better usage. (9ab576fa) @AirwavesMan +[UPDATED] Moved FPS logging and server event spawner to the server scheduler (0a264b9) @worldwidesorrow +[UPDATED] Vanilla events adjusted and moved to the server modules folder. The events are now spawned by the scheduler. (0a264b9) @worldwidesorrow +[UPDATED] Rebuilt trader files and overhauled trader cities. (92700e8a) @AirwavesMan +[UPDATED] Server side security added for higher risk PVDZ_send usage. (40dcf6f) @worldwidesorrow +[UPDATED] New strings added to the string table for medical functions. (2a145bf) @worldwidesorrow +[UPDATED] Medical functions revised. Old/unused medical functions moved to archive. @worldwidesorrow +[UPDATED] Separate actions added for typed blood bags. Variable dayz_classicBloodBagSystem used to bypass unnecessary code. (a4c0638) @worldwidesorrow +[UPDATED] All vehicles updated and many bugs fixed. Now there is a DZ and DZE class for every armed Epoch vehicle. @AirwavesMan +[UPDATED] All silenced weapons can only be used with SD ammo, and all non-silenced weapons can only be used with regular (non-SD) ammo. (6f4b1706) @AirwavesMan +[UPDATED] Increased bullet speed for the MK17 SD and Vintorez ammo. (1e69f357) @AirwavesMan +[UPDATED] MK17 Sniper SD and Vintorez DZ and DZE versions have a higher zeroing. (3895cf9c) @AirwavesMan +[UPDATED] AK74 and AKM start with the semi-automatic firemode instead of full-automatic. (9aeceebb, becfee04) @AirwavesMan +[UPDATED] The FN Fal has a full-automatic mode again. (052becb) @AirwavesMan +[UPDATED] Zombies will no longer get triggered by a chemlight at daytime. (93ba732e) @AirwavesMan +[UPDATED] All magazines now have the combine option. @AirwavesMan +[UPDATED] The Humanity system was updated for hotwiring vehicles and killing players. (f68bbda0, d5910357) @AirwavesMan, @oiad +[UPDATED] The gear count of many vehicles (helicopters in particular) was updated and increased. (06b788a) @AirwavesMan +[UPDATED] Sharpening a knife now has an animation. (b7892bfc) @AirwavesMan +[UPDATED] Added full localization to snap and vector building. (fe1d7fb4) @AirwavesMan +[UPDATED] Added the correct icon for the Terminal Backpack. (1a411660) @AirwavesMan, @DeVloek +[UPDATED] Crafting a tent requires 2x equip_tent_poles instead of 2x ItemPole. (73289a69) @AirwavesMan +[UPDATED] Crafting a firebarrel kit no longer requires matches. (b4b93562) @nadal28 @AirwavesMan +[UPDATED] Crafting shows all required items now. (8315d899) @AirwavesMan +[UPDATED] Relogging with a chainsaw in the backpack will delete the chainsaw gas instead of refilling it. (132e9506) @AirwavesMan +[UPDATED] The group invite message now contains the name of the inviter. (396d0313) @ch0c, @AirwavesMan +[UPDATED] Harvesting wood with a hatchet can now drop both wood piles and wooden logs. (ae79f4ce) @AirwavesMan +[UPDATED] The maintain animation is interruptible now. (910ab43a) @AirwavesMan +[UPDATED] Trading single items can be configured to change the player's humanity value. (4f106220) @AirwavesMan +[UPDATED] The Journal main page was reworked and has some more information about the server settings now. (ef05eb4e) @AirwavesMan +[UPDATED] Harvesting wood will yield at least 16 or more wood. This was added in order to decrease network traffic. (8dc6ef8d) @AirwavesMan +[UPDATED] Increased cargo count of Refuel Trucks. (4667f20b) @AirwavesMan +[UPDATED] Cinder buildings and metal floors have a new texture. @Helion4 +[UPDATED] Highly increased infection chance if the player eats uncooked meat or fish. (29b6a26) @AirwavesMan +[UPDATED] Crafting wooden buildings now requires a handsaw and a hammer. (247f5dc6) @AirwavesMan +[UPDATED] Full Russian Localization @RedLink-kam, @dreamforceinc + +[REMOVED] Epoch 1.0.7 does not support Database Traders any longer. All server admins with DB Traders have to switch to the config traders now. (49378f62) @AirwavesMan +[REMOVED] NORRN_loadVcl, posForceUpdate, and medForceUpdate removed from setvariable.txt (47f07a8) @worldwidesorrow +[REMOVED] PVDZ_drg_RaDrag, PVDZ_drg_RaLW, PVDZ_drg_RLact and PVDZ_Unconscious removed from publicvariable.txt. They have been replaced with PVDZ_send. (2d03fb9) @worldwidesorrow +[REMOVED] DayZ Vanilla Crafting - all recipes were moved to Epoch Crafting. (8315d899) @AirwavesMan + +[INFO] Synced with DayZMod upstream up to commit fe063a8 +[INFO] Removed functions can be found under "dayz_code\old". +[INFO] Big thanks to the following authors which allowed us to use their content: SumrakDZN, Icewindo, Brainbug, lennard91, stagler, SyNcRoNiCzZ, Sam563, Alwarren, Robert Hammer, Marseille77 \ No newline at end of file diff --git a/README.md b/README.md index e74157a8c..a44a0b184 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ Included Custom Addons * USEC CH53 by Rocket * Anzio 20mm Rifle by WillRobinson * RedRyder BB Gun by WillRobinson -* Namalsk Addons by SumrakDZN +* Namalsk Addons and Bloodsucker by SumrakDZN * Stalker Units by Icewindo * Post Apocalypse Units by Icewindo * Ghillie Suits by Brainbug From 8bc484cb58fdb8fdef340ccaed13cae0857080cd Mon Sep 17 00:00:00 2001 From: A Man Date: Fri, 20 Aug 2021 18:25:01 +0200 Subject: [PATCH 37/40] Add Arma 2 Static Weapon as Epoch Classes This adds for every type of arma 2 static weapon an epoch version for it. This also adds to every epoch static weapon a magazine class so it can be build easily. The new weapons can found under: DayZ Epoch Static Weapons in the editor. Server admins have to add Battleye Filters for most of the static weapons. Since adding it to all server would weaken also servers which do not use those new static weapons. --- .../CfgMagazines/Buildings/StaticWeapons.hpp | 527 ++++++++++++++++++ .../Configs/CfgMagazines/CfgMagazines.hpp | 3 +- .../Configs/CfgVehicles/Buildables/Misc.hpp | 16 - .../CfgVehicles/Buildables/StaticWeapons.hpp | 288 ++++++++++ .../Configs/CfgVehicles/CfgVehicles.hpp | 1 + .../R3F_Weight/Magazines/Ammo/VehicleAmmo.hpp | 9 +- .../R3F_Weight/Magazines/Buildings/Misc.hpp | 5 - .../Magazines/Buildings/StaticWeapons.hpp | 100 ++++ SQF/dayz_code/init/variables.sqf | 6 +- 9 files changed, 930 insertions(+), 25 deletions(-) create mode 100644 SQF/dayz_code/Configs/CfgMagazines/Buildings/StaticWeapons.hpp create mode 100644 SQF/dayz_code/Configs/CfgVehicles/Buildables/StaticWeapons.hpp create mode 100644 SQF/dayz_code/external/R3F_Realism/R3F_Weight/Magazines/Buildings/StaticWeapons.hpp diff --git a/SQF/dayz_code/Configs/CfgMagazines/Buildings/StaticWeapons.hpp b/SQF/dayz_code/Configs/CfgMagazines/Buildings/StaticWeapons.hpp new file mode 100644 index 000000000..3d63b6d30 --- /dev/null +++ b/SQF/dayz_code/Configs/CfgMagazines/Buildings/StaticWeapons.hpp @@ -0,0 +1,527 @@ +class M2_MG_Static_kit: CA_Magazine +{ + scope = 2; + count = 1; + type = 256; + displayName = $STR_DN_M2_MG; + descriptionShort = $STR_DN_M2_MG; + model = "\z\addons\dayz_epoch\models\supply_crate.p3d"; + picture = "\z\addons\dayz_epoch\pictures\equip_wooden_crate_ca.paa"; + + class ItemActions + { + class Build + { + text = $STR_ACTIONS_BUILD; + script = "spawn player_build;"; + require[] = {"ItemToolbox"}; + create = "M2_MG_Static_DZ"; + }; + }; +}; + +class M2_TriPod_MG_Static_kit: CA_Magazine +{ + scope = 2; + count = 1; + type = 256; + displayName = $STR_DN_M2HD_MINITRIPOD; + descriptionShort = $STR_DN_M2HD_MINITRIPOD; + model = "\z\addons\dayz_epoch\models\supply_crate.p3d"; + picture = "\z\addons\dayz_epoch\pictures\equip_wooden_crate_ca.paa"; + + class ItemActions + { + class Build + { + text = $STR_ACTIONS_BUILD; + script = "spawn player_build;"; + require[] = {"ItemToolbox"}; + create = "M2_TriPod_MG_Static_DZ"; + }; + }; +}; + +class DSHKM_MG_Static_kit: CA_Magazine +{ + scope = 2; + count = 1; + type = 256; + displayName = $STR_DN_DSHKM; + descriptionShort = $STR_DN_DSHKM; + model = "\z\addons\dayz_epoch\models\supply_crate.p3d"; + picture = "\z\addons\dayz_epoch\pictures\equip_wooden_crate_ca.paa"; + + class ItemActions + { + class Build + { + text = $STR_ACTIONS_BUILD; + script = "spawn player_build;"; + require[] = {"ItemToolbox"}; + create = "DSHKM_MG_Static_DZ"; + }; + }; +}; + +class DSHKM_TriPod_MG_Static_kit: CA_Magazine +{ + scope = 2; + count = 1; + type = 256; + displayName = $STR_DN_DSHKM_MINITRIPOD; + descriptionShort = $STR_DN_DSHKM_MINITRIPOD; + model = "\z\addons\dayz_epoch\models\supply_crate.p3d"; + picture = "\z\addons\dayz_epoch\pictures\equip_wooden_crate_ca.paa"; + + class ItemActions + { + class Build + { + text = $STR_ACTIONS_BUILD; + script = "spawn player_build;"; + require[] = {"ItemToolbox"}; + create = "DSHKM_TriPod_MG_Static_DZ"; + }; + }; +}; + +class KORD_TriPod_MG_Static_kit: CA_Magazine +{ + scope = 2; + count = 1; + type = 256; + displayName = $STR_DN_KORD_LOW; + descriptionShort = $STR_DN_KORD_LOW; + model = "\z\addons\dayz_epoch\models\supply_crate.p3d"; + picture = "\z\addons\dayz_epoch\pictures\equip_wooden_crate_ca.paa"; + + class ItemActions + { + class Build + { + text = $STR_ACTIONS_BUILD; + script = "spawn player_build;"; + require[] = {"ItemToolbox"}; + create = "KORD_Tripod_MG_Static_DZ"; + }; + }; +}; + +class KORD_MG_Static_kit: CA_Magazine +{ + scope = 2; + count = 1; + type = 256; + displayName = $STR_DN_KORD; + descriptionShort = $STR_DN_KORD; + model = "\z\addons\dayz_epoch\models\supply_crate.p3d"; + picture = "\z\addons\dayz_epoch\pictures\equip_wooden_crate_ca.paa"; + + class ItemActions + { + class Build + { + text = $STR_ACTIONS_BUILD; + script = "spawn player_build;"; + require[] = {"ItemToolbox"}; + create = "KORD_MG_Static_DZ"; + }; + }; +}; + +class L2A1_MG_Static_kit: CA_Magazine +{ + scope = 2; + count = 1; + type = 256; + displayName = $STR_BAF_BAF_L2A1_TRIPOD_D0; + descriptionShort = $STR_BAF_BAF_L2A1_TRIPOD_D0; + model = "\z\addons\dayz_epoch\models\supply_crate.p3d"; + picture = "\z\addons\dayz_epoch\pictures\equip_wooden_crate_ca.paa"; + + class ItemActions + { + class Build + { + text = $STR_ACTIONS_BUILD; + script = "spawn player_build;"; + require[] = {"ItemToolbox"}; + create = "L2A1_MG_Static_DZ"; + }; + }; +}; + +class L2A1_Tripod_MG_Static_kit: CA_Magazine +{ + scope = 2; + count = 1; + type = 256; + displayName = $STR_BAF_BAF_L2A1_MINITRIPOD_D0; + descriptionShort = $STR_BAF_BAF_L2A1_MINITRIPOD_D0; + model = "\z\addons\dayz_epoch\models\supply_crate.p3d"; + picture = "\z\addons\dayz_epoch\pictures\equip_wooden_crate_ca.paa"; + + class ItemActions + { + class Build + { + text = $STR_ACTIONS_BUILD; + script = "spawn player_build;"; + require[] = {"ItemToolbox"}; + create = "L2A1_Tripod_MG_Static_DZ"; + }; + }; +}; + +class GMG_Tripod_MG_Static_kit: CA_Magazine +{ + scope = 2; + count = 1; + type = 256; + displayName = $STR_BAF_BAF_GMG_TRIPOD_D0; + descriptionShort = $STR_BAF_BAF_GMG_TRIPOD_D0; + model = "\z\addons\dayz_epoch\models\supply_crate.p3d"; + picture = "\z\addons\dayz_epoch\pictures\equip_wooden_crate_ca.paa"; + + class ItemActions + { + class Build + { + text = $STR_ACTIONS_BUILD; + script = "spawn player_build;"; + require[] = {"ItemToolbox"}; + create = "GMG_Tripod_MG_Static_DZ"; + }; + }; +}; + +class AGS30_GrenadeLauncher_Static_kit: CA_Magazine +{ + scope = 2; + count = 1; + type = 256; + displayName = $STR_DN_AGS30; + descriptionShort = $STR_DN_AGS30; + model = "\z\addons\dayz_epoch\models\supply_crate.p3d"; + picture = "\z\addons\dayz_epoch\pictures\equip_wooden_crate_ca.paa"; + + class ItemActions + { + class Build + { + text = $STR_ACTIONS_BUILD; + script = "spawn player_build;"; + require[] = {"ItemToolbox"}; + create = "AGS30_GrenadeLauncher_Static_DZ"; + }; + }; +}; + +class MK19_TriPod_GrenadeLauncher_Static_kit: CA_Magazine +{ + scope = 2; + count = 1; + type = 256; + displayName = $STR_DN_MK19_TRIPOD; + descriptionShort = $STR_DN_MK19_TRIPOD; + model = "\z\addons\dayz_epoch\models\supply_crate.p3d"; + picture = "\z\addons\dayz_epoch\pictures\equip_wooden_crate_ca.paa"; + + class ItemActions + { + class Build + { + text = $STR_ACTIONS_BUILD; + script = "spawn player_build;"; + require[] = {"ItemToolbox"}; + create = "MK19_TriPod_GrenadeLauncher_Static_DZ"; + }; + }; +}; + +class GPMG_TriPod_GrenadeLauncher_Static_kit: CA_Magazine +{ + scope = 2; + count = 1; + type = 256; + displayName = $STR_BAF_BAF_GPMG_MINITRIPOD_D0; + descriptionShort = $STR_BAF_BAF_GPMG_MINITRIPOD_D0; + model = "\z\addons\dayz_epoch\models\supply_crate.p3d"; + picture = "\z\addons\dayz_epoch\pictures\equip_wooden_crate_ca.paa"; + + class ItemActions + { + class Build + { + text = $STR_ACTIONS_BUILD; + script = "spawn player_build;"; + require[] = {"ItemToolbox"}; + create = "GPMG_TriPod_GrenadeLauncher_Static_DZ"; + }; + }; +}; + +class M119_Artillery_Static_kit: CA_Magazine +{ + scope = 2; + count = 1; + type = 256; + displayName = $STR_DN_M119; + descriptionShort = $STR_DN_M119; + model = "\z\addons\dayz_epoch\models\supply_crate.p3d"; + picture = "\z\addons\dayz_epoch\pictures\equip_wooden_crate_ca.paa"; + + class ItemActions + { + class Build + { + text = $STR_ACTIONS_BUILD; + script = "spawn player_build;"; + require[] = {"ItemToolbox"}; + create = "M119_Artillery_Static_DZ"; + }; + }; +}; + +class D30_Artillery_Static_kit: CA_Magazine +{ + scope = 2; + count = 1; + type = 256; + displayName = $STR_DN_D30; + descriptionShort = $STR_DN_D30; + model = "\z\addons\dayz_epoch\models\supply_crate.p3d"; + picture = "\z\addons\dayz_epoch\pictures\equip_wooden_crate_ca.paa"; + + class ItemActions + { + class Build + { + text = $STR_ACTIONS_BUILD; + script = "spawn player_build;"; + require[] = {"ItemToolbox"}; + create = "D30_Artillery_Static_DZ"; + }; + }; +}; + +class SearchLight_Static_kit: CA_Magazine +{ + scope = 2; + count = 1; + type = 256; + displayName = $STR_DN_SEARCHLIGHT; + descriptionShort = $STR_DN_SEARCHLIGHT; + model = "\z\addons\dayz_epoch\models\supply_crate.p3d"; + picture = "\z\addons\dayz_epoch\pictures\equip_wooden_crate_ca.paa"; + + class ItemActions + { + class Build + { + text = $STR_ACTIONS_BUILD; + script = "spawn player_build;"; + require[] = {"ItemToolbox"}; + create = "SearchLight_Static_DZ"; + }; + }; +}; + +class M252_Mortar_Static_kit: CA_Magazine +{ + scope = 2; + count = 1; + type = 256; + displayName = $STR_DN_M252; + descriptionShort = $STR_DN_M252; + model = "\z\addons\dayz_epoch\models\supply_crate.p3d"; + picture = "\z\addons\dayz_epoch\pictures\equip_wooden_crate_ca.paa"; + + class ItemActions + { + class Build + { + text = $STR_ACTIONS_BUILD; + script = "spawn player_build;"; + require[] = {"ItemToolbox"}; + create = "M252_Mortar_Static_DZ"; + }; + }; +}; + +class 2b14_82mm_Mortar_Static_kit: CA_Magazine +{ + scope = 2; + count = 1; + type = 256; + displayName = $STR_DN_2B14; + descriptionShort = $STR_DN_2B14; + model = "\z\addons\dayz_epoch\models\supply_crate.p3d"; + picture = "\z\addons\dayz_epoch\pictures\equip_wooden_crate_ca.paa"; + + class ItemActions + { + class Build + { + text = $STR_ACTIONS_BUILD; + script = "spawn player_build;"; + require[] = {"ItemToolbox"}; + create = "2b14_82mm_Mortar_Static_DZ"; + }; + }; +}; + +class Metis_Launcher_Static_kit: CA_Magazine +{ + scope = 2; + count = 1; + type = 256; + displayName = $STR_DN_AT13; + descriptionShort = $STR_DN_AT13; + model = "\z\addons\dayz_epoch\models\supply_crate.p3d"; + picture = "\z\addons\dayz_epoch\pictures\equip_wooden_crate_ca.paa"; + + class ItemActions + { + class Build + { + text = $STR_ACTIONS_BUILD; + script = "spawn player_build;"; + require[] = {"ItemToolbox"}; + create = "Metis_Launcher_Static_DZ"; + }; + }; +}; + +class SPG9_Launcher_Static_kit: CA_Magazine +{ + scope = 2; + count = 1; + type = 256; + displayName = $STR_DN_SPG9; + descriptionShort = $STR_DN_SPG9; + model = "\z\addons\dayz_epoch\models\supply_crate.p3d"; + picture = "\z\addons\dayz_epoch\pictures\equip_wooden_crate_ca.paa"; + + class ItemActions + { + class Build + { + text = $STR_ACTIONS_BUILD; + script = "spawn player_build;"; + require[] = {"ItemToolbox"}; + create = "SPG9_Launcher_Static_DZ"; + }; + }; +}; + +class Stinger_Tripod_Launcher_Static_kit: CA_Magazine +{ + scope = 2; + count = 1; + type = 256; + displayName = $STR_DN_STINGER_POD; + descriptionShort = $STR_DN_STINGER_POD; + model = "\z\addons\dayz_epoch\models\supply_crate.p3d"; + picture = "\z\addons\dayz_epoch\pictures\equip_wooden_crate_ca.paa"; + + class ItemActions + { + class Build + { + text = $STR_ACTIONS_BUILD; + script = "spawn player_build;"; + require[] = {"ItemToolbox"}; + create = "Stinger_Tripod_Launcher_Static_DZ"; + }; + }; +}; + +class TOW_Tripod_Launcher_Static_kit: CA_Magazine +{ + scope = 2; + count = 1; + type = 256; + displayName = $STR_DN_TOW_TRIPOD; + descriptionShort = $STR_DN_TOW_TRIPOD; + model = "\z\addons\dayz_epoch\models\supply_crate.p3d"; + picture = "\z\addons\dayz_epoch\pictures\equip_wooden_crate_ca.paa"; + + class ItemActions + { + class Build + { + text = $STR_ACTIONS_BUILD; + script = "spawn player_build;"; + require[] = {"ItemToolbox"}; + create = "TOW_Tripod_Launcher_Static_DZ"; + }; + }; +}; + +class Rbs70_Launcher_Static_kit: CA_Magazine +{ + scope = 2; + count = 1; + type = 256; + displayName = $STR_ACR_DN_RBS70; + descriptionShort = $STR_ACR_DN_RBS70; + model = "\z\addons\dayz_epoch\models\supply_crate.p3d"; + picture = "\z\addons\dayz_epoch\pictures\equip_wooden_crate_ca.paa"; + + class ItemActions + { + class Build + { + text = $STR_ACTIONS_BUILD; + script = "spawn player_build;"; + require[] = {"ItemToolbox"}; + create = "Rbs70_Launcher_Static_DZ"; + }; + }; +}; + +class Igla_AntiAir_Launcher_Static_kit: CA_Magazine +{ + scope = 2; + count = 1; + type = 256; + displayName = $STR_DN_IGLA_AA_POD_EAST; + descriptionShort = $STR_DN_IGLA_AA_POD_EAST; + model = "\z\addons\dayz_epoch\models\supply_crate.p3d"; + picture = "\z\addons\dayz_epoch\pictures\equip_wooden_crate_ca.paa"; + + class ItemActions + { + class Build + { + text = $STR_ACTIONS_BUILD; + script = "spawn player_build;"; + require[] = {"ItemToolbox"}; + create = "Igla_AntiAir_Launcher_Static_DZ"; + }; + }; +}; + +class ZU23_AntiAir_Static_kit: CA_Magazine +{ + scope = 2; + count = 1; + type = 256; + displayName = $STR_DN_ZU23; + descriptionShort = $STR_DN_ZU23; + model = "\z\addons\dayz_epoch\models\supply_crate.p3d"; + picture = "\z\addons\dayz_epoch\pictures\equip_wooden_crate_ca.paa"; + + class ItemActions + { + class Build + { + text = $STR_ACTIONS_BUILD; + script = "spawn player_build;"; + require[] = {"ItemToolbox"}; + create = "ZU23_AntiAir_Static_DZ"; + }; + }; +}; \ No newline at end of file diff --git a/SQF/dayz_code/Configs/CfgMagazines/CfgMagazines.hpp b/SQF/dayz_code/Configs/CfgMagazines/CfgMagazines.hpp index f54704326..94c158dde 100644 --- a/SQF/dayz_code/Configs/CfgMagazines/CfgMagazines.hpp +++ b/SQF/dayz_code/Configs/CfgMagazines/CfgMagazines.hpp @@ -65,5 +65,6 @@ class CfgMagazines #include "Buildings\Fences.hpp" #include "Buildings\Storage.hpp" #include "Buildings\Tent.hpp" - #include "Buildings\Misc.hpp" + #include "Buildings\Misc.hpp" + #include "Buildings\StaticWeapons.hpp" }; \ No newline at end of file diff --git a/SQF/dayz_code/Configs/CfgVehicles/Buildables/Misc.hpp b/SQF/dayz_code/Configs/CfgVehicles/Buildables/Misc.hpp index 25c546953..bf8a0aa33 100644 --- a/SQF/dayz_code/Configs/CfgVehicles/Buildables/Misc.hpp +++ b/SQF/dayz_code/Configs/CfgVehicles/Buildables/Misc.hpp @@ -241,22 +241,6 @@ class Fort_RazorWire : BuiltItems { nounderground = 0; }; -class USMC_WarfareBMGNest_M240; -class M240Nest_DZ: USMC_WarfareBMGNest_M240 -{ - destrType = "DestructBuilding"; - armor = 450; - scope = 2; - offset[] = {0,3.5,0}; - displayName = $STR_EPOCH_M240NEST; - vehicleClass = "DayZ Epoch Buildables"; - transportMaxMagazines = 25; - transportMaxWeapons = 4; - transportMaxBackpacks = 1; - constructioncount = 10; - removeoutput[] = {{"m240_nest_kit",1}}; -}; - class WoodGate_DZ: BuiltItems { scope = 2; diff --git a/SQF/dayz_code/Configs/CfgVehicles/Buildables/StaticWeapons.hpp b/SQF/dayz_code/Configs/CfgVehicles/Buildables/StaticWeapons.hpp new file mode 100644 index 000000000..80a3bbb52 --- /dev/null +++ b/SQF/dayz_code/Configs/CfgVehicles/Buildables/StaticWeapons.hpp @@ -0,0 +1,288 @@ +class USMC_WarfareBMGNest_M240; +class M240Nest_DZ: USMC_WarfareBMGNest_M240 +{ + destrType = "DestructBuilding"; + armor = 450; + scope = 2; + offset[] = {0,3.5,0}; + displayName = $STR_EPOCH_M240NEST; + transportMaxMagazines = 25; + transportMaxWeapons = 4; + transportMaxBackpacks = 1; + constructioncount = 10; + vehicleClass = "DayZ Epoch Static Weapons"; + removeoutput[] = {{"m240_nest_kit",1}}; +}; + +class M2StaticMG; +class M2_MG_Static_DZ: M2StaticMG { + side = 1; + faction = "USMC"; + offset[] = {0,3,1}; + GhostPreview = "M2_MG_Static_DZ"; + vehicleClass = "DayZ Epoch Static Weapons"; + removeoutput[] = {{"M2_MG_Static_kit",1}}; +}; + +class M2HD_mini_TriPod; +class M2_TriPod_MG_Static_DZ: M2HD_mini_TriPod { + side = 1; + faction = "USMC"; + offset[] = {0,3,1}; + GhostPreview = "M2_TriPod_MG_Static_DZ"; + vehicleClass = "DayZ Epoch Static Weapons"; + removeoutput[] = {{"M2_TriPod_MG_Static_kit",1}}; +}; + +class DSHKM_Ins; +class DSHKM_MG_Static_DZ: DSHKM_Ins { + side = 1; + faction = "USMC"; + offset[] = {0,3,2}; + GhostPreview = "DSHKM_MG_Static_DZ"; + vehicleClass = "DayZ Epoch Static Weapons"; + removeoutput[] = {{"DSHKM_MG_Static_kit",1}}; +}; + +class DSHkM_Mini_TriPod; +class DSHKM_TriPod_MG_Static_DZ: DSHkM_Mini_TriPod { + side = 1; + faction = "USMC"; + offset[] = {0,3,1}; + GhostPreview = "DSHKM_TriPod_MG_Static_DZ"; + vehicleClass = "DayZ Epoch Static Weapons"; + removeoutput[] = {{"DSHKM_TriPod_MG_Static_kit",1}}; +}; + +class KORD; +class KORD_Tripod_MG_Static_DZ: KORD { + side = 1; + faction = "USMC"; + offset[] = {0,3,1}; + GhostPreview = "KORD_Tripod_MG_Static_DZ"; + vehicleClass = "DayZ Epoch Static Weapons"; + removeoutput[] = {{"KORD_TriPod_MG_Static_kit",1}}; +}; + +class KORD_high; +class KORD_MG_Static_DZ: KORD_high { + side = 1; + faction = "USMC"; + offset[] = {0,3,2}; + GhostPreview = "KORD_MG_Static_DZ"; + vehicleClass = "DayZ Epoch Static Weapons"; + removeoutput[] = {{"KORD_MG_Static_kit",1}}; +}; + +class BAF_L2A1_ACOG_base; +class BAF_L2A1_Tripod_D: BAF_L2A1_ACOG_base { + class assembleInfo; +}; + +class L2A1_MG_Static_DZ: BAF_L2A1_Tripod_D { + side = 1; + faction = "USMC"; + class assembleInfo: assembleInfo { + dissasembleTo[] = {}; + }; + offset[] = {0,3,1}; + GhostPreview = "L2A1_MG_Static_DZ"; + vehicleClass = "DayZ Epoch Static Weapons"; + removeoutput[] = {{"L2A1_MG_Static_kit",1}}; +}; + +class BAF_L2A1_Minitripod_D: BAF_L2A1_ACOG_base { + class assembleInfo; +}; + +class L2A1_Tripod_MG_Static_DZ: BAF_L2A1_Minitripod_D { + side = 1; + faction = "USMC"; + class assembleInfo: assembleInfo { + dissasembleTo[] = {}; + }; + offset[] = {0,3,1}; + GhostPreview = "L2A1_Tripod_MG_Static_DZ"; + vehicleClass = "DayZ Epoch Static Weapons"; + removeoutput[] = {{"L2A1_Tripod_MG_Static_kit",1}}; +}; + +class GMG_TriPod; +class BAF_GMG_Tripod_D: GMG_TriPod { + class assembleInfo; +}; + +class GMG_Tripod_MG_Static_DZ: BAF_GMG_Tripod_D { + side = 1; + faction = "USMC"; + class assembleInfo: assembleInfo { + dissasembleTo[] = {}; + }; + offset[] = {0,3,0}; + GhostPreview = "GMG_Tripod_MG_Static_DZ"; + vehicleClass = "DayZ Epoch Static Weapons"; + removeoutput[] = {{"GMG_Tripod_MG_Static_kit",1}}; +}; + +class AGS_Ins; +class AGS30_GrenadeLauncher_Static_DZ: AGS_Ins { + side = 1; + faction = "USMC"; + offset[] = {0,3,1}; + GhostPreview = "AGS30_GrenadeLauncher_Static_DZ"; + vehicleClass = "DayZ Epoch Static Weapons"; + removeoutput[] = {{"AGS30_GrenadeLauncher_Static_kit",1}}; +}; + +class MK19_TriPod; +class MK19_TriPod_GrenadeLauncher_Static_DZ: MK19_TriPod { + side = 1; + faction = "USMC"; + offset[] = {0,3,1}; + GhostPreview = "MK19_TriPod_GrenadeLauncher_Static_DZ"; + vehicleClass = "DayZ Epoch Static Weapons"; + removeoutput[] = {{"MK19_TriPod_GrenadeLauncher_Static_kit",1}}; +}; + +class BAF_GPMG_Minitripod_D: BAF_L2A1_ACOG_base { + class assembleInfo; +}; + +class GPMG_TriPod_GrenadeLauncher_Static_DZ: BAF_GPMG_Minitripod_D { + side = 1; + faction = "USMC"; + class assembleInfo: assembleInfo { + dissasembleTo[] = {}; + }; + offset[] = {0,3,1}; + GhostPreview = "GPMG_TriPod_GrenadeLauncher_Static_DZ"; + vehicleClass = "DayZ Epoch Static Weapons"; + removeoutput[] = {{"GPMG_TriPod_GrenadeLauncher_Static_kit",1}}; +}; + +class M119; +class M119_Artillery_Static_DZ: M119 { + side = 1; + faction = "USMC"; + offset[] = {0,5,0.5}; + GhostPreview = "M119_Artillery_Static_DZ"; + vehicleClass = "DayZ Epoch Static Weapons"; + removeoutput[] = {{"M119_Artillery_Static_kit",1}}; +}; + +class D30_Ins; +class D30_Artillery_Static_DZ: D30_Ins { + side = 1; + faction = "USMC"; + offset[] = {0,5,1}; + GhostPreview = "D30_Artillery_Static_DZ"; + vehicleClass = "DayZ Epoch Static Weapons"; + removeoutput[] = {{"D30_Artillery_Static_kit",1}}; +}; + +class SearchLight_INS; +class SearchLight_Static_DZ: SearchLight_INS { + side = 1; + faction = "USMC"; + offset[] = {0,3,0}; + GhostPreview = "SearchLight_Static_DZ"; + vehicleClass = "DayZ Epoch Static Weapons"; + removeoutput[] = {{"SearchLight_Static_kit",1}}; +}; + +class M252; +class M252_Mortar_Static_DZ: M252 { + side = 1; + faction = "USMC"; + offset[] = {0,3,1}; + GhostPreview = "M252_Mortar_Static_DZ"; + vehicleClass = "DayZ Epoch Static Weapons"; + removeoutput[] = {{"M252_Mortar_Static_kit",1}}; +}; + +class 2b14_82mm; +class 2b14_82mm_Mortar_Static_DZ: 2b14_82mm { + side = 1; + faction = "USMC"; + offset[] = {0,3,1}; + GhostPreview = "2b14_82mm_Mortar_Static_DZ"; + vehicleClass = "DayZ Epoch Static Weapons"; + removeoutput[] = {{"2b14_82mm_Mortar_Static_kit",1}}; +}; + +class Metis; +class Metis_Launcher_Static_DZ: Metis { + side = 1; + faction = "USMC"; + offset[] = {0,3,1}; + GhostPreview = "Metis_Launcher_Static_DZ"; + vehicleClass = "DayZ Epoch Static Weapons"; + removeoutput[] = {{"Metis_Launcher_Static_kit",1}}; +}; + +class SPG9_Gue; +class SPG9_Launcher_Static_DZ: SPG9_Gue { + side = 1; + faction = "USMC"; + offset[] = {0,3,0}; + GhostPreview = "SPG9_Launcher_Static_DZ"; + vehicleClass = "DayZ Epoch Static Weapons"; + removeoutput[] = {{"SPG9_Launcher_Static_kit",1}}; +}; + +class Stinger_Pod; +class Stinger_Tripod_Launcher_Static_DZ: Stinger_Pod { + side = 1; + faction = "USMC"; + offset[] = {0,3,0}; + GhostPreview = "Stinger_Tripod_Launcher_Static_DZ"; + vehicleClass = "DayZ Epoch Static Weapons"; + removeoutput[] = {{"Stinger_Tripod_Launcher_Static_kit",1}}; +}; + +class TOW_TriPod; +class TOW_Tripod_Launcher_Static_DZ: TOW_TriPod { + side = 1; + faction = "USMC"; + offset[] = {0,3,2}; + GhostPreview = "TOW_Tripod_Launcher_Static_DZ"; + vehicleClass = "DayZ Epoch Static Weapons"; + removeoutput[] = {{"TOW_Tripod_Launcher_Static_kit",1}}; +}; + +class Stinger_Pod_base; +class Rbs70_ACR: Stinger_Pod_base { + class AssembleInfo; +}; + +class Rbs70_Launcher_Static_DZ: Rbs70_ACR { + side = 1; + faction = "USMC"; + class AssembleInfo : AssembleInfo { + dissasembleTo[] = {}; + }; + offset[] = {0,3,4}; + GhostPreview = "Rbs70_Launcher_Static_DZ"; + vehicleClass = "DayZ Epoch Static Weapons"; + removeoutput[] = {{"Rbs70_Launcher_Static_kit",1}}; +}; + +class Igla_AA_pod_East; +class Igla_AntiAir_Launcher_Static_DZ: Igla_AA_pod_East { + side = 1; + faction = "USMC"; + offset[] = {0,3,2}; + GhostPreview = "Igla_AntiAir_Launcher_Static_DZ"; + vehicleClass = "DayZ Epoch Static Weapons"; + removeoutput[] = {{"Igla_AntiAir_Launcher_Static_kit",1}}; +}; + +class ZU23_Ins; +class ZU23_AntiAir_Static_DZ: ZU23_Ins { + side = 1; + faction = "USMC"; + offset[] = {0,3,2}; + GhostPreview = "ZU23_AntiAir_Static_DZ"; + vehicleClass = "DayZ Epoch Static Weapons"; + removeoutput[] = {{"ZU23_AntiAir_Static_kit",1}}; +}; \ No newline at end of file diff --git a/SQF/dayz_code/Configs/CfgVehicles/CfgVehicles.hpp b/SQF/dayz_code/Configs/CfgVehicles/CfgVehicles.hpp index 3813c6a99..9348c66a0 100644 --- a/SQF/dayz_code/Configs/CfgVehicles/CfgVehicles.hpp +++ b/SQF/dayz_code/Configs/CfgVehicles/CfgVehicles.hpp @@ -781,6 +781,7 @@ class CfgVehicles #include "Buildables\Sandbags.hpp" #include "Buildables\Billboards.hpp" #include "Buildables\Misc.hpp" + #include "Buildables\StaticWeapons.hpp" //Loot Container #include "LootContainer\AmmoCrates.hpp" diff --git a/SQF/dayz_code/external/R3F_Realism/R3F_Weight/Magazines/Ammo/VehicleAmmo.hpp b/SQF/dayz_code/external/R3F_Realism/R3F_Weight/Magazines/Ammo/VehicleAmmo.hpp index 296e8bcd5..25a0f0a05 100644 --- a/SQF/dayz_code/external/R3F_Realism/R3F_Weight/Magazines/Ammo/VehicleAmmo.hpp +++ b/SQF/dayz_code/external/R3F_Realism/R3F_Weight/Magazines/Ammo/VehicleAmmo.hpp @@ -692,4 +692,11 @@ class IRStrobe { weight = 2; }; - +class 200Rnd_40mmHE_FV510 +{ + weight = 20; +}; +class 200Rnd_40mmSABOT_FV510 +{ + weight = 20; +}; \ No newline at end of file diff --git a/SQF/dayz_code/external/R3F_Realism/R3F_Weight/Magazines/Buildings/Misc.hpp b/SQF/dayz_code/external/R3F_Realism/R3F_Weight/Magazines/Buildings/Misc.hpp index f656a8164..6213a8336 100644 --- a/SQF/dayz_code/external/R3F_Realism/R3F_Weight/Magazines/Buildings/Misc.hpp +++ b/SQF/dayz_code/external/R3F_Realism/R3F_Weight/Magazines/Buildings/Misc.hpp @@ -64,11 +64,6 @@ class deer_stand_kit weight = 25; }; -class m240_nest_kit -{ - weight = 125; -}; - class rusty_gate_kit { weight = 80; diff --git a/SQF/dayz_code/external/R3F_Realism/R3F_Weight/Magazines/Buildings/StaticWeapons.hpp b/SQF/dayz_code/external/R3F_Realism/R3F_Weight/Magazines/Buildings/StaticWeapons.hpp new file mode 100644 index 000000000..352399679 --- /dev/null +++ b/SQF/dayz_code/external/R3F_Realism/R3F_Weight/Magazines/Buildings/StaticWeapons.hpp @@ -0,0 +1,100 @@ +class m240_nest_kit +{ + weight = 125; +}; +class M2_MG_Static_kit +{ + weight = 45; +}; +class M2_TriPod_MG_Static_kit +{ + weight = 35; +}; +class DSHKM_MG_Static_kit +{ + weight = 45; +}; +class DSHKM_TriPod_MG_Static_kit +{ + weight = 35; +}; +class KORD_TriPod_MG_Static_kit +{ + weight = 35; +}; +class KORD_MG_Static_kit +{ + weight = 65; +}; +class L2A1_MG_Static_kit +{ + weight = 45; +}; +class L2A1_Tripod_MG_Static_kit +{ + weight = 30; +}; +class GMG_Tripod_MG_Static_kit +{ + weight = 30; +}; +class AGS30_GrenadeLauncher_Static_kit +{ + weight = 35; +}; +class MK19_TriPod_GrenadeLauncher_Static_kit +{ + weight = 35; +}; +class GPMG_TriPod_GrenadeLauncher_Static_kit +{ + weight = 35; +}; +class M119_Artillery_Static_kit +{ + weight = 280; +}; +class D30_Artillery_Static_kit +{ + weight = 380; +}; +class SearchLight_Static_kit +{ + weight = 25; +}; +class M252_Mortar_Static_kit +{ + weight = 30; +}; +class 2b14_82mm_Mortar_Static_kit +{ + weight = 30; +}; +class Metis_Launcher_Static_kit +{ + weight = 75; +}; +class SPG9_Launcher_Static_kit +{ + weight = 75; +}; +class Stinger_Tripod_Launcher_Static_kit +{ + weight = 30; +}; +class TOW_Tripod_Launcher_Static_kit +{ + weight = 30; +}; +class Rbs70_Launcher_Static_kit +{ + weight = 130; +}; +class Igla_AntiAir_Launcher_Static_kit +{ + weight = 120; +}; +class ZU23_AntiAir_Static_kit +{ + weight = 370; +}; \ No newline at end of file diff --git a/SQF/dayz_code/init/variables.sqf b/SQF/dayz_code/init/variables.sqf index 12df2095c..6fe423ed9 100644 --- a/SQF/dayz_code/init/variables.sqf +++ b/SQF/dayz_code/init/variables.sqf @@ -1,7 +1,7 @@ /**************Variables Compiled on Both Client and Server**************/ Dayz_plants = ["Dayz_Plant1","Dayz_Plant2","Dayz_Plant3"]; -DayZ_SafeObjects = ["Base_Fire_DZ","Land_Fire_DZ","TentStorage","TentStorage0","TentStorage1","TentStorage2","TentStorage3","TentStorage4","StashSmall","StashSmall1","StashSmall2","StashSmall3","StashSmall4","StashMedium","StashMedium1","StashMedium2","StashMedium3","StashMedium4","Wire_cat1","Sandbag1_DZ","Fence_DZ","Generator_DZ","Hedgehog_DZ","BearTrap_DZ","DomeTentStorage","DomeTentStorage0","DomeTentStorage1","DomeTentStorage2","DomeTentStorage3","DomeTentStorage4","CamoNet_DZ","Trap_Cans","TrapTripwireFlare","TrapBearTrapSmoke","TrapTripwireGrenade","TrapTripwireSmoke","TrapBearTrapFlare","TentStorageDomed","VaultStorageLocked","VaultStorage2Locked","BagFenceRound_DZ","TrapBear","Fort_RazorWire","Land_HBarrier1_DZ","Land_HBarrier3_DZ","Land_HBarrier5_DZ","Fence_corrugated_DZ","M240Nest_DZ","CanvasHut_DZ","ParkBench_DZ","MetalGate_DZ","OutHouse_DZ","Wooden_shed_DZ","Wooden_shed2_DZ","WoodShack_DZ","WoodShack2_DZ","StorageShed_DZ","StorageShed2_DZ","Plastic_Pole_EP1_DZ","StickFence_DZ","LightPole_DZ","FuelPump_DZ","DesertCamoNet_DZ","ForestCamoNet_DZ","WinterCamoNet_DZ","DesertLargeCamoNet_DZ","ForestLargeCamoNet_DZ","WinterLargeCamoNet_DZ","SandNest_DZ","DeerStand_DZ","MetalPanel_DZ","WorkBench_DZ","WoodFloor_DZ","WoodLargeWall_DZ","WoodLargeWallDoor_DZ","WoodLargeWallWin_DZ","WoodSmallWall_DZ","WoodSmallWallWin_DZ","WoodSmallWallDoor_DZ","LockboxStorageLocked","LockboxStorage2Locked","LockboxStorageWinterLocked","LockboxStorageWinter2Locked","WoodFloorHalf_DZ","WoodFloorQuarter_DZ","WoodStairs_DZ","WoodStairsSans_DZ","WoodStairsRails_DZ","WoodSmallWallThird_DZ","WoodLadder_DZ","Land_DZE_GarageWoodDoor","Land_DZE_LargeWoodDoor","Land_DZE_WoodDoor","Land_DZE_GarageWoodDoorLocked","Land_DZE_LargeWoodDoorLocked","Land_DZE_WoodDoorLocked","CinderWallHalf_DZ","CinderWall_DZ","CinderWallDoorway_DZ","CinderWallDoor_DZ","CinderWallDoorLocked_DZ","CinderWallSmallDoorway_DZ","CinderWallDoorSmall_DZ","CinderWallDoorSmallLocked_DZ","MetalFloor_DZ","WoodRamp_DZ","GunRack_DZ","GunRack2_DZ","FireBarrel_DZ","WoodCrate_DZ","WoodCrate2_DZ","Scaffolding_DZ","DesertTentStorage","DesertTentStorage0","DesertTentStorage1","DesertTentStorage2","DesertTentStorage3","DesertTentStorage4","WoodenFence_1_foundation_DZ","WoodenFence_1_frame_DZ","WoodenFence_quaterpanel_DZ","WoodenFence_halfpanel_DZ","WoodenFence_thirdpanel_DZ","WoodenFence_1_DZ","WoodenFence_2_DZ","WoodenFence_3_DZ","WoodenFence_4_DZ","WoodenFence_5_DZ","WoodenFence_6_DZ","WoodenFence_7_DZ","MetalFence_1_foundation_DZ","MetalFence_1_frame_DZ","MetalFence_halfpanel_DZ","MetalFence_thirdpanel_DZ","MetalFence_1_DZ","MetalFence_2_DZ","MetalFence_3_DZ","MetalFence_4_DZ","MetalFence_5_DZ","MetalFence_6_DZ","MetalFence_7_DZ","WoodenGate_foundation_DZ","WoodenGate_1_DZ","WoodenGate_2_DZ","WoodenGate_3_DZ","WoodenGate_4_DZ","WoodGateFrame_DZ","Land_DZE_WoodGate","Land_DZE_WoodGateLocked","CinderGateFrame_DZ","CinderGate_DZ","CinderGateLocked_DZ","Metal_Drawbridge_DZ","Metal_DrawbridgeLocked_DZ","WoodTriangleWall_DZ","WoodHandrail_DZ","WoodFloorStairs_DZ","WoodPillar_DZ","Land_DZE_WoodOpenTopGarageDoor","Land_DZE_WoodOpenTopGarageLocked","CinderGarageOpenTopFrame_DZ","CinderGarageOpenTop_DZ","CinderGarageOpenTopLocked_DZ","DoorFrame_DZ","Door_DZ","DoorLocked_DZ","CinderWallWindow_DZ","CinderWallWindowLocked_DZ","CinderDoorHatch_DZ","CinderDoorHatchLocked_DZ","MetalPillar_DZ","MetalFloor_Half_DZ","MetalFloor_Quarter_DZ","GlassFloor_DZ","Concrete_Bunker_DZ","Concrete_Bunker_Locked_DZ","TallSafeLocked","Advanced_WorkBench_DZ","CookTripod_DZ","Stoneoven_DZ","Commode_DZ","Wardrobe_DZ","Fridge_DZ","Washing_Machine_DZ","Server_Rack_DZ","ATM_DZ","Armchair_DZ","Sofa_DZ","Arcade_DZ","Vendmachine1_DZ","Vendmachine2_DZ","Notebook_DZ","Water_Pump_DZ","Greenhouse_DZ","Bed_DZ","Table_DZ","Office_Chair_DZ","MetalFloor4x_DZ","GlassFloor_Half_DZ","GlassFloor_Quarter_DZ","WoodFloor4x_DZ","WoodTriangleFloor_DZ","CinderWallHalf_Gap_DZ","TentStorageWinter","TentStorageWinter0","TentStorageWinter1","TentStorageWinter2","TentStorageWinter3","TentStorageWinter4","WinterDomeTentStorage","WinterDomeTentStorage0","WinterDomeTentStorage1","WinterDomeTentStorage2","WinterDomeTentStorage3","WinterDomeTentStorage4","VaultStorageBroken","VaultStorageBroken2","TallSafeBroken","LockboxStorageBroken","LockboxStorage2Broken","LockboxStorageWinterBroken","LockboxStorageWinter2Broken","StorageCrate_DZ","CamoStorageCrate_DZ","Garage_Green_DZ","Garage_White_DZ","Garage_Brown_DZ","Garage_Grey_DZ","Helipad_Civil_DZ","Helipad_Rescue_DZ","Helipad_Army_DZ","Helipad_Cross_DZ","Helipad_ParkBorder_DZ","CCTV_DZ"]; +DayZ_SafeObjects = ["Base_Fire_DZ","Land_Fire_DZ","TentStorage","TentStorage0","TentStorage1","TentStorage2","TentStorage3","TentStorage4","StashSmall","StashSmall1","StashSmall2","StashSmall3","StashSmall4","StashMedium","StashMedium1","StashMedium2","StashMedium3","StashMedium4","Wire_cat1","Sandbag1_DZ","Fence_DZ","Generator_DZ","Hedgehog_DZ","BearTrap_DZ","DomeTentStorage","DomeTentStorage0","DomeTentStorage1","DomeTentStorage2","DomeTentStorage3","DomeTentStorage4","CamoNet_DZ","Trap_Cans","TrapTripwireFlare","TrapBearTrapSmoke","TrapTripwireGrenade","TrapTripwireSmoke","TrapBearTrapFlare","TentStorageDomed","VaultStorageLocked","VaultStorage2Locked","BagFenceRound_DZ","TrapBear","Fort_RazorWire","Land_HBarrier1_DZ","Land_HBarrier3_DZ","Land_HBarrier5_DZ","Fence_corrugated_DZ","CanvasHut_DZ","ParkBench_DZ","MetalGate_DZ","OutHouse_DZ","Wooden_shed_DZ","Wooden_shed2_DZ","WoodShack_DZ","WoodShack2_DZ","StorageShed_DZ","StorageShed2_DZ","Plastic_Pole_EP1_DZ","StickFence_DZ","LightPole_DZ","FuelPump_DZ","DesertCamoNet_DZ","ForestCamoNet_DZ","WinterCamoNet_DZ","DesertLargeCamoNet_DZ","ForestLargeCamoNet_DZ","WinterLargeCamoNet_DZ","SandNest_DZ","DeerStand_DZ","MetalPanel_DZ","WorkBench_DZ","WoodFloor_DZ","WoodLargeWall_DZ","WoodLargeWallDoor_DZ","WoodLargeWallWin_DZ","WoodSmallWall_DZ","WoodSmallWallWin_DZ","WoodSmallWallDoor_DZ","LockboxStorageLocked","LockboxStorage2Locked","LockboxStorageWinterLocked","LockboxStorageWinter2Locked","WoodFloorHalf_DZ","WoodFloorQuarter_DZ","WoodStairs_DZ","WoodStairsSans_DZ","WoodStairsRails_DZ","WoodSmallWallThird_DZ","WoodLadder_DZ","Land_DZE_GarageWoodDoor","Land_DZE_LargeWoodDoor","Land_DZE_WoodDoor","Land_DZE_GarageWoodDoorLocked","Land_DZE_LargeWoodDoorLocked","Land_DZE_WoodDoorLocked","CinderWallHalf_DZ","CinderWall_DZ","CinderWallDoorway_DZ","CinderWallDoor_DZ","CinderWallDoorLocked_DZ","CinderWallSmallDoorway_DZ","CinderWallDoorSmall_DZ","CinderWallDoorSmallLocked_DZ","MetalFloor_DZ","WoodRamp_DZ","GunRack_DZ","GunRack2_DZ","FireBarrel_DZ","WoodCrate_DZ","WoodCrate2_DZ","Scaffolding_DZ","DesertTentStorage","DesertTentStorage0","DesertTentStorage1","DesertTentStorage2","DesertTentStorage3","DesertTentStorage4","WoodenFence_1_foundation_DZ","WoodenFence_1_frame_DZ","WoodenFence_quaterpanel_DZ","WoodenFence_halfpanel_DZ","WoodenFence_thirdpanel_DZ","WoodenFence_1_DZ","WoodenFence_2_DZ","WoodenFence_3_DZ","WoodenFence_4_DZ","WoodenFence_5_DZ","WoodenFence_6_DZ","WoodenFence_7_DZ","MetalFence_1_foundation_DZ","MetalFence_1_frame_DZ","MetalFence_halfpanel_DZ","MetalFence_thirdpanel_DZ","MetalFence_1_DZ","MetalFence_2_DZ","MetalFence_3_DZ","MetalFence_4_DZ","MetalFence_5_DZ","MetalFence_6_DZ","MetalFence_7_DZ","WoodenGate_foundation_DZ","WoodenGate_1_DZ","WoodenGate_2_DZ","WoodenGate_3_DZ","WoodenGate_4_DZ","WoodGateFrame_DZ","Land_DZE_WoodGate","Land_DZE_WoodGateLocked","CinderGateFrame_DZ","CinderGate_DZ","CinderGateLocked_DZ","Metal_Drawbridge_DZ","Metal_DrawbridgeLocked_DZ","WoodTriangleWall_DZ","WoodHandrail_DZ","WoodFloorStairs_DZ","WoodPillar_DZ","Land_DZE_WoodOpenTopGarageDoor","Land_DZE_WoodOpenTopGarageLocked","CinderGarageOpenTopFrame_DZ","CinderGarageOpenTop_DZ","CinderGarageOpenTopLocked_DZ","DoorFrame_DZ","Door_DZ","DoorLocked_DZ","CinderWallWindow_DZ","CinderWallWindowLocked_DZ","CinderDoorHatch_DZ","CinderDoorHatchLocked_DZ","MetalPillar_DZ","MetalFloor_Half_DZ","MetalFloor_Quarter_DZ","GlassFloor_DZ","Concrete_Bunker_DZ","Concrete_Bunker_Locked_DZ","TallSafeLocked","Advanced_WorkBench_DZ","CookTripod_DZ","Stoneoven_DZ","Commode_DZ","Wardrobe_DZ","Fridge_DZ","Washing_Machine_DZ","Server_Rack_DZ","ATM_DZ","Armchair_DZ","Sofa_DZ","Arcade_DZ","Vendmachine1_DZ","Vendmachine2_DZ","Notebook_DZ","Water_Pump_DZ","Greenhouse_DZ","Bed_DZ","Table_DZ","Office_Chair_DZ","MetalFloor4x_DZ","GlassFloor_Half_DZ","GlassFloor_Quarter_DZ","WoodFloor4x_DZ","WoodTriangleFloor_DZ","CinderWallHalf_Gap_DZ","TentStorageWinter","TentStorageWinter0","TentStorageWinter1","TentStorageWinter2","TentStorageWinter3","TentStorageWinter4","WinterDomeTentStorage","WinterDomeTentStorage0","WinterDomeTentStorage1","WinterDomeTentStorage2","WinterDomeTentStorage3","WinterDomeTentStorage4","VaultStorageBroken","VaultStorageBroken2","TallSafeBroken","LockboxStorageBroken","LockboxStorage2Broken","LockboxStorageWinterBroken","LockboxStorageWinter2Broken","StorageCrate_DZ","CamoStorageCrate_DZ","Garage_Green_DZ","Garage_White_DZ","Garage_Brown_DZ","Garage_Grey_DZ","Helipad_Civil_DZ","Helipad_Rescue_DZ","Helipad_Army_DZ","Helipad_Cross_DZ","Helipad_ParkBorder_DZ","CCTV_DZ"]; DayZ_GearedObjects = ["Car","Helicopter","Motorcycle","Ship","TentStorage_base","StashSmall_base","StashMedium_base","Plane","Tank","VaultStorage","VaultStorage2","TallSafe","LockboxStorage","LockboxStorage2","LockboxStorageWinter","LockboxStorageWinter2","TentStorage","OutHouse_DZ","Wooden_shed_DZ","Wooden_shed2_DZ","WoodShack_DZ","WoodShack2_DZ","StorageShed_DZ","StorageShed2_DZ","GunRack_DZ","GunRack2_DZ","WoodCrate_DZ","WoodCrate2_DZ","Scaffolding_DZ","Generator_DZ","Advanced_WorkBench_DZ","CookTripod_DZ","Stoneoven_DZ","Commode_DZ","Wardrobe_DZ","Fridge_DZ","Washing_Machine_DZ","Server_Rack_DZ","ATM_DZ","Armchair_DZ","Sofa_DZ","Arcade_DZ","Vendmachine1_DZ","Vendmachine2_DZ","VaultStorageBroken","VaultStorageBroken2","TallSafeBroken","LockboxStorageBroken","LockboxStorage2Broken","LockboxStorageWinterBroken","LockboxStorageWinter2Broken","StorageCrate_DZ","CamoStorageCrate_DZ"]; dayz_typedBags = ["bloodTester","bloodBagANEG","bloodBagAPOS","bloodBagBNEG","bloodBagBPOS","bloodBagABNEG","bloodBagABPOS","bloodBagONEG","bloodBagOPOS","wholeBloodBagANEG","wholeBloodBagAPOS","wholeBloodBagBNEG","wholeBloodBagBPOS","wholeBloodBagABNEG","wholeBloodBagABPOS","wholeBloodBagONEG","wholeBloodBagOPOS"]; dayz_plant = ["pumpkin.p3d","p_helianthus.p3d","p_fiberplant_ep1.p3d"]; @@ -24,6 +24,8 @@ DZE_LockedStorage = ["VaultStorageLocked","VaultStorage2Locked","LockboxStorageL DZE_UnLockedStorage = ["VaultStorage","VaultStorage2","LockboxStorage","LockboxStorage2","LockboxStorageWinter","LockboxStorageWinter2","TallSafe"]; DZE_isNewStorage = ["OutHouse_DZ","Wooden_shed_DZ","Wooden_shed2_DZ","WoodShack_DZ","WoodShack2_DZ","StorageShed_DZ","StorageShed2_DZ","GunRack_DZ","GunRack2_DZ","WoodCrate_DZ","WoodCrate2_DZ","Advanced_WorkBench_DZ","CookTripod_DZ","Stoneoven_DZ","Commode_DZ","Wardrobe_DZ","Fridge_DZ","Washing_Machine_DZ","Server_Rack_DZ","ATM_DZ","Armchair_DZ","Sofa_DZ","Arcade_DZ","Vendmachine1_DZ","Vendmachine2_DZ","StorageCrate_DZ","CamoStorageCrate_DZ"]; DZE_isWreck = ["SKODAWreck","HMMWVWreck","UralWreck","datsun01Wreck","hiluxWreck","datsun02Wreck","UAZWreck","Land_Misc_Garb_Heap_EP1","Fort_Barricade_EP1","Rubbish2"]; +DZE_StaticWeapons = ["ZU23_AntiAir_Static_DZ","Igla_AntiAir_Launcher_Static_DZ","Rbs70_Launcher_Static_DZ","TOW_Tripod_Launcher_Static_DZ","Stinger_Tripod_Launcher_Static_DZ","SPG9_Launcher_Static_DZ","Metis_Launcher_Static_DZ","2b14_82mm_Mortar_Static_DZ","M252_Mortar_Static_DZ","SearchLight_Static_DZ","D30_Artillery_Static_DZ","M119_Artillery_Static_DZ","GPMG_TriPod_GrenadeLauncher_Static_DZ","MK19_TriPod_GrenadeLauncher_Static_DZ","AGS30_GrenadeLauncher_Static_DZ","GMG_Tripod_MG_Static_DZ","L2A1_Tripod_MG_Static_DZ","L2A1_MG_Static_DZ","KORD_MG_Static_DZ","KORD_Tripod_MG_Static_DZ","DSHKM_TriPod_MG_Static_DZ","DSHKM_MG_Static_DZ","M2_TriPod_MG_Static_DZ","M2_MG_Static_DZ","M240Nest_DZ"]; +DayZ_SafeObjects = DayZ_SafeObjects + DZE_StaticWeapons; respawn_west_original = getMarkerPos "respawn_west"; //Prevent problems caused by cheaters moving respawn_west marker with setMarkerPos or deleteMarker @@ -288,7 +290,7 @@ if (!isDedicated) then { DZE_LockboxesUnlocked = ["LockboxStorage","LockboxStorage2","LockboxStorageWinter","LockboxStorageWinter2"]; DZE_REPLACE_WEAPONS = [["Crossbow","DMR","M14_EP1","SVD","SVD_CAMO","M4SPR","VSS_vintorez"],["Crossbow_DZ","DMR_DZ","M14_CCO_DZ","SVD_PSO1_DZ","SVD_PSO1_Gh_DZ","M4SPR_DZE","VSS_vintorez_DZE"]]; DZE_replaceMagazines = [["vil_20Rnd_762x51_G3"],["vil_20Rnd_762x51_G3"]]; - DZE_maintainClasses = ["ModularItems","DZE_Housebase","LightPole_DZ","BuiltItems","Generator_DZ","DZ_buildables","Plastic_Pole_EP1_DZ","Fence_corrugated_DZ","CanvasHut_DZ","ParkBench_DZ","MetalGate_DZ","StickFence_DZ","DesertCamoNet_DZ","ForestCamoNet_DZ","WinterCamoNet_DZ","DesertLargeCamoNet_DZ","ForestLargeCamoNet_DZ","WinterLargeCamoNet_DZ","DeerStand_DZ","Scaffolding_DZ","FireBarrel_DZ","M240Nest_DZ","Notebook_DZ","Water_Pump_DZ","Greenhouse_DZ","Bed_DZ","Table_DZ","VaultStorageBroken","VaultStorageBroken2","TallSafeBroken","LockboxStorageBroken","LockboxStorage2Broken","LockboxStorageWinterBroken","LockboxStorageWinter2Broken","Garage_Green_DZ","Garage_White_DZ","Garage_Brown_DZ","Garage_Grey_DZ","Helipad_Civil_DZ","Helipad_Rescue_DZ","Helipad_Army_DZ","Helipad_Cross_DZ","Helipad_ParkBorder_DZ","CCTV_DZ"]; + DZE_maintainClasses = ["StaticWeapon","ModularItems","DZE_Housebase","LightPole_DZ","BuiltItems","Generator_DZ","DZ_buildables","Plastic_Pole_EP1_DZ","Fence_corrugated_DZ","CanvasHut_DZ","ParkBench_DZ","MetalGate_DZ","StickFence_DZ","DesertCamoNet_DZ","ForestCamoNet_DZ","WinterCamoNet_DZ","DesertLargeCamoNet_DZ","ForestLargeCamoNet_DZ","WinterLargeCamoNet_DZ","DeerStand_DZ","Scaffolding_DZ","FireBarrel_DZ","M240Nest_DZ","Notebook_DZ","Water_Pump_DZ","Greenhouse_DZ","Bed_DZ","Table_DZ","VaultStorageBroken","VaultStorageBroken2","TallSafeBroken","LockboxStorageBroken","LockboxStorage2Broken","LockboxStorageWinterBroken","LockboxStorageWinter2Broken","Garage_Green_DZ","Garage_White_DZ","Garage_Brown_DZ","Garage_Grey_DZ","Helipad_Civil_DZ","Helipad_Rescue_DZ","Helipad_Army_DZ","Helipad_Cross_DZ","Helipad_ParkBorder_DZ","CCTV_DZ"]; DZE_fueltruckarray = ["UralRefuel_TK_EP1_DZ","UralRefuel_TK_EP1_DZE1","UralRefuel_TK_EP1_DZE2","UralRefuel_TK_EP1_DZE3","UralRefuel_TK_EP1_DZE4","MtvrRefuel_DES_EP1_DZ","MtvrRefuel_DES_EP1_DZE1","MtvrRefuel_DES_EP1_DZE2","MtvrRefuel_DES_EP1_DZE3","MtvrRefuel_DES_EP1_DZE4","V3S_Refuel_TK_GUE_EP1_DZ","V3S_Refuel_TK_GUE_EP1_DZE1","V3S_Refuel_TK_GUE_EP1_DZE2","V3S_Refuel_TK_GUE_EP1_DZE3","V3S_Refuel_TK_GUE_EP1_DZE4","MtvrRefuel_DZ","MtvrRefuel_DZE1","MtvrRefuel_DZE2","MtvrRefuel_DZE3","MtvrRefuel_DZE4","KamazRefuel_DZ","KamazRefuel_DZE1","KamazRefuel_DZE2","KamazRefuel_DZE3","KamazRefuel_DZE4","T810A_ACR_REFUEL_DES_DZE","T810A_ACR_REFUEL_DES_DZE1","T810A_ACR_REFUEL_DES_DZE2","T810A_ACR_REFUEL_DES_DZE3","T810A_ACR_REFUEL_DES_DZE4","T810A_ACR_REFUEL_DZE","T810A_ACR_REFUEL_DZE1","T810A_ACR_REFUEL_DZE2","T810A_ACR_REFUEL_DZE3","T810A_ACR_REFUEL_DZE4","UralRefuel_INS_DZE","UralRefuel_INS_DZE1","UralRefuel_INS_DZE2","UralRefuel_INS_DZE3","UralRefuel_INS_DZE4","UralRefuel_CDF_DZE","UralRefuel_CDF_DZE1","UralRefuel_CDF_DZE2","UralRefuel_CDF_DZE3","UralRefuel_CDF_DZE4"]; DZE_HeliAllowToTow = ["hilux1_civil_1_open","HMMWV_Base","Lada_base","Offroad_DSHKM_base","Pickup_PK_base","SkodaBase","tractor","VWGolf","Volha_TK_CIV_Base_EP1","S1203_TK_CIV_EP1","SUV_Base_EP1","ArmoredSUV_Base_PMC","UAZ_Base","LandRover_Base","Ship"]; DZE_isDestroyableStorage = ["OutHouse_DZ","Wooden_shed_DZ","Wooden_shed2_DZ","WoodShack_DZ","WoodShack2_DZ","StorageShed_DZ","StorageShed2_DZ","GunRack_DZ","GunRack2_DZ","WoodCrate_DZ","WoodCrate2_DZ","Advanced_WorkBench_DZ","CookTripod_DZ","Stoneoven_DZ","Commode_DZ","Wardrobe_DZ","Fridge_DZ","Washing_Machine_DZ","Server_Rack_DZ","ATM_DZ","Armchair_DZ","Sofa_DZ","Arcade_DZ","Vendmachine1_DZ","Vendmachine2_DZ","StorageCrate_DZ","CamoStorageCrate_DZ","StashSmall","StashSmall1","StashSmall2","StashSmall3","StashSmall4","StashMedium","StashMedium1","StashMedium2","StashMedium3","StashMedium4"]; From 94ea07d88f2f00aa858d6bb126865c7b1901bc06 Mon Sep 17 00:00:00 2001 From: A Man Date: Fri, 20 Aug 2021 18:49:05 +0200 Subject: [PATCH 38/40] Fix wrong AK107 PSO classnames Thx to Kitty from discord. --- SQF/dayz_code/Configs/CfgServerTrader/Category/Weapons.hpp | 4 ++-- SQF/dayz_code/Configs/CfgServerTraderZSC/Category/Weapons.hpp | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/SQF/dayz_code/Configs/CfgServerTrader/Category/Weapons.hpp b/SQF/dayz_code/Configs/CfgServerTrader/Category/Weapons.hpp index 065651f50..7a490bb7b 100644 --- a/SQF/dayz_code/Configs/CfgServerTrader/Category/Weapons.hpp +++ b/SQF/dayz_code/Configs/CfgServerTrader/Category/Weapons.hpp @@ -459,10 +459,10 @@ class Category_16 { class AK74_GL_PSO1_SD_DZ {type = "trade_weapons";buy[] = {-1,"ItemGoldBar"};sell[] = {1,"ItemGoldBar10oz"};}; class AK107_DZ {type = "trade_weapons";buy[] = {2,"ItemGoldBar"};sell[] = {1,"ItemGoldBar"};}; class AK107_Kobra_DZ {type = "trade_weapons";buy[] = {-1,"ItemGoldBar"};sell[] = {3,"ItemGoldBar"};}; - class AK107_PSO1_DZ {type = "trade_weapons";buy[] = {-1,"ItemGoldBar"};sell[] = {5,"ItemGoldBar"};}; + class AK107_PSO_DZ {type = "trade_weapons";buy[] = {-1,"ItemGoldBar"};sell[] = {5,"ItemGoldBar"};}; class AK107_GL_DZ {type = "trade_weapons";buy[] = {-1,"ItemGoldBar"};sell[] = {3,"ItemGoldBar"};}; class AK107_GL_Kobra_DZ {type = "trade_weapons";buy[] = {-1,"ItemGoldBar"};sell[] = {5,"ItemGoldBar"};}; - class AK107_GL_PSO1_DZ {type = "trade_weapons";buy[] = {-1,"ItemGoldBar"};sell[] = {7,"ItemGoldBar"};}; + class AK107_GL_PSO_DZ {type = "trade_weapons";buy[] = {-1,"ItemGoldBar"};sell[] = {7,"ItemGoldBar"};}; class AN94_DZ {type = "trade_weapons";buy[] = {2,"ItemGoldBar"};sell[] = {1,"ItemGoldBar"};}; class AN94_GL_DZ {type = "trade_weapons";buy[] = {-1,"ItemGoldBar"};sell[] = {3,"ItemGoldBar"};}; class SCAR_H_AK_DZ {type = "trade_weapons";buy[] = {8,"ItemGoldBar"};sell[] = {4,"ItemGoldBar"};}; diff --git a/SQF/dayz_code/Configs/CfgServerTraderZSC/Category/Weapons.hpp b/SQF/dayz_code/Configs/CfgServerTraderZSC/Category/Weapons.hpp index f5bb4e067..23bebf4b0 100644 --- a/SQF/dayz_code/Configs/CfgServerTraderZSC/Category/Weapons.hpp +++ b/SQF/dayz_code/Configs/CfgServerTraderZSC/Category/Weapons.hpp @@ -459,10 +459,10 @@ class Category_16 { class AK74_GL_PSO1_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1000,"worth"};}; class AK107_DZ {type = "trade_weapons";buy[] = {200,"worth"};sell[] = {100,"worth"};}; class AK107_Kobra_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {300,"worth"};}; - class AK107_PSO1_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {500,"worth"};}; + class AK107_PSO_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {500,"worth"};}; class AK107_GL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {300,"worth"};}; class AK107_GL_Kobra_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {500,"worth"};}; - class AK107_GL_PSO1_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {700,"worth"};}; + class AK107_GL_PSO_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {700,"worth"};}; class AN94_DZ {type = "trade_weapons";buy[] = {200,"worth"};sell[] = {100,"worth"};}; class AN94_GL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {300,"worth"};}; class SCAR_H_AK_DZ {type = "trade_weapons";buy[] = {800,"worth"};sell[] = {400,"worth"};}; From 5885bb31e34bd162af7f7d0be8cfc332ad36d223 Mon Sep 17 00:00:00 2001 From: A Man Date: Sat, 21 Aug 2021 09:53:51 +0200 Subject: [PATCH 39/40] Fix greenhouse offset so players getting not pushed back Thx to Kitty from discord. --- SQF/dayz_code/Configs/CfgVehicles/Buildables/Misc.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SQF/dayz_code/Configs/CfgVehicles/Buildables/Misc.hpp b/SQF/dayz_code/Configs/CfgVehicles/Buildables/Misc.hpp index bf8a0aa33..0a834b794 100644 --- a/SQF/dayz_code/Configs/CfgVehicles/Buildables/Misc.hpp +++ b/SQF/dayz_code/Configs/CfgVehicles/Buildables/Misc.hpp @@ -317,7 +317,7 @@ class Greenhouse_DZ: MAP_Misc_Greenhouse mapSize = 2; displayName = $STR_EPOCH_GREENHOUSE; constructioncount = 1; - offset[] = {0,3,2}; + offset[] = {0,5,1.4}; removeoutput[] = {{"greenhouse_kit",1}}; vehicleClass = "DayZ Epoch Buildables"; }; From 6dbc6646f3287d98039da1895311b19c29f1b0c7 Mon Sep 17 00:00:00 2001 From: A Man Date: Tue, 24 Aug 2021 10:36:22 +0200 Subject: [PATCH 40/40] Add weapon parts and gun powder for server admins to add --- .../Configs/CfgMagazines/Items/Misc.hpp | 154 ++++++++++++++++++ .../R3F_Weight/Magazines/Items/Misc.hpp | 56 +++++++ .../R3F_Realism/R3F_Weight/R3F_CfgWeight.hpp | 1 + SQF/dayz_code/stringtable.xml | 113 +++++++++++++ 4 files changed, 324 insertions(+) diff --git a/SQF/dayz_code/Configs/CfgMagazines/Items/Misc.hpp b/SQF/dayz_code/Configs/CfgMagazines/Items/Misc.hpp index e8ccdf74b..af0c90661 100644 --- a/SQF/dayz_code/Configs/CfgMagazines/Items/Misc.hpp +++ b/SQF/dayz_code/Configs/CfgMagazines/Items/Misc.hpp @@ -262,6 +262,160 @@ class ItemCeramicParts : CA_Magazine type = 256; }; +class ItemWeaponPartsPistol : CA_Magazine +{ + scope = 2; + count = 1; + displayName = $STR_EPOCH_WEAPON_PARTS_PISTOL; + descriptionShort = $STR_EPOCH_WEAPON_PARTS_PISTOL_DESC; + model = "\z\addons\dayz_communityassets\models\crate.p3d"; + picture = "\z\addons\dayz_communityassets\CraftingPlaceholders\equip_part_somegeneric.paa"; + type = 256; +}; + +class ItemWeaponPartsSMG : CA_Magazine +{ + scope = 2; + count = 1; + displayName = $STR_EPOCH_WEAPON_PARTS_SMG; + descriptionShort = $STR_EPOCH_WEAPON_PARTS_SMG_DESC; + model = "\z\addons\dayz_communityassets\models\crate.p3d"; + picture = "\z\addons\dayz_communityassets\CraftingPlaceholders\equip_part_somegeneric.paa"; + type = 256; +}; + +class ItemWeaponPartsShotgun : CA_Magazine +{ + scope = 2; + count = 1; + displayName = $STR_EPOCH_WEAPON_PARTS_SHOTGUN; + descriptionShort = $STR_EPOCH_WEAPON_PARTS_SHOTGUN_DESC; + model = "\z\addons\dayz_communityassets\models\crate.p3d"; + picture = "\z\addons\dayz_communityassets\CraftingPlaceholders\equip_part_somegeneric.paa"; + type = 256; +}; + +class ItemWeaponPartsRifle : CA_Magazine +{ + scope = 2; + count = 1; + displayName = $STR_EPOCH_WEAPON_PARTS_RIFLE; + descriptionShort = $STR_EPOCH_WEAPON_PARTS_RIFLE_DESC; + model = "\z\addons\dayz_communityassets\models\crate.p3d"; + picture = "\z\addons\dayz_communityassets\CraftingPlaceholders\equip_part_somegeneric.paa"; + type = 256; +}; + +class ItemWeaponPartsSniperRilfe : CA_Magazine +{ + scope = 2; + count = 1; + displayName = $STR_EPOCH_WEAPON_PARTS_SNIPERRIFLE; + descriptionShort = $STR_EPOCH_WEAPON_PARTS_SNIPERRIFLE_DESC; + model = "\z\addons\dayz_communityassets\models\crate.p3d"; + picture = "\z\addons\dayz_communityassets\CraftingPlaceholders\equip_part_somegeneric.paa"; + type = 256; +}; + +class ItemWeaponPartsMG : CA_Magazine +{ + scope = 2; + count = 1; + displayName = $STR_EPOCH_WEAPON_PARTS_MG; + descriptionShort = $STR_EPOCH_WEAPON_PARTS_MG_DESC; + model = "\z\addons\dayz_communityassets\models\crate.p3d"; + picture = "\z\addons\dayz_communityassets\CraftingPlaceholders\equip_part_somegeneric.paa"; + type = 256; +}; + +class ItemWeaponPartsUnknown : CA_Magazine +{ + scope = 2; + count = 1; + displayName = $STR_EPOCH_WEAPON_PARTS_UNKNOWN_MG; + descriptionShort = $STR_EPOCH_WEAPON_PARTS_UNKNOWN_DESC; + model = "\z\addons\dayz_communityassets\models\crate.p3d"; + picture = "\z\addons\dayz_communityassets\CraftingPlaceholders\equip_part_somegeneric.paa"; + type = 256; +}; + +class ItemWeaponPartsBad : CA_Magazine +{ + scope = 2; + count = 1; + displayName = $STR_EPOCH_WEAPON_PARTS_BAD; + descriptionShort = $STR_EPOCH_WEAPON_PARTS_BAD_DESC; + model = "\z\addons\dayz_communityassets\models\crate.p3d"; + picture = "\z\addons\dayz_communityassets\CraftingPlaceholders\equip_part_somegeneric.paa"; + type = 256; +}; + +class ItemWeaponPartsNormal : CA_Magazine +{ + scope = 2; + count = 1; + displayName = $STR_EPOCH_WEAPON_PARTS_NORMAL; + descriptionShort = $STR_EPOCH_WEAPON_PARTS_NORMAL_DESC; + model = "\z\addons\dayz_communityassets\models\crate.p3d"; + picture = "\z\addons\dayz_communityassets\CraftingPlaceholders\equip_part_somegeneric.paa"; + type = 256; +}; + +class ItemWeaponPartsGood : CA_Magazine +{ + scope = 2; + count = 1; + displayName = $STR_EPOCH_WEAPON_PARTS_GOOD; + descriptionShort = $STR_EPOCH_WEAPON_PARTS_GOOD_DESC; + model = "\z\addons\dayz_communityassets\models\crate.p3d"; + picture = "\z\addons\dayz_communityassets\CraftingPlaceholders\equip_part_somegeneric.paa"; + type = 256; +}; + +class ItemWeaponPartsExecellent : CA_Magazine +{ + scope = 2; + count = 1; + displayName = $STR_EPOCH_WEAPON_PARTS_EXCELLENT; + descriptionShort = $STR_EPOCH_WEAPON_PARTS_EXCELLENT_DESC; + model = "\z\addons\dayz_communityassets\models\crate.p3d"; + picture = "\z\addons\dayz_communityassets\CraftingPlaceholders\equip_part_somegeneric.paa"; + type = 256; +}; + +class ItemGunPowderSmall : CA_Magazine +{ + scope = 2; + count = 1; + displayName = $STR_EPOCH_GUN_POWDER_SMALL; + descriptionShort = $STR_EPOCH_GUN_POWDER_SMALL_DESC; + model = "\z\addons\dayz_communityassets\models\tin_powder.p3d"; + picture = "\z\addons\dayz_communityassets\pictures\equip_tin_powder_co.paa"; + type = 256; +}; + +class ItemGunPowder : CA_Magazine +{ + scope = 2; + count = 1; + displayName = $STR_EPOCH_GUN_POWDER; + descriptionShort = $STR_EPOCH_GUN_POWDER_DESC; + model = "\z\addons\dayz_communityassets\models\tin_powder.p3d"; + picture = "\z\addons\dayz_communityassets\pictures\equip_tin_powder_co.paa"; + type = 256; +}; + +class ItemGunPowderBig : CA_Magazine +{ + scope = 2; + count = 1; + displayName = $STR_EPOCH_GUN_POWDER_BIG; + descriptionShort = $STR_EPOCH_GUN_POWDER_BIG_DESC; + model = "\z\addons\dayz_communityassets\models\tin_powder.p3d"; + picture = "\z\addons\dayz_communityassets\pictures\equip_tin_powder_co.paa"; + type = 256; +}; + //No models class equip_cable_tie : CA_Magazine { diff --git a/SQF/dayz_code/external/R3F_Realism/R3F_Weight/Magazines/Items/Misc.hpp b/SQF/dayz_code/external/R3F_Realism/R3F_Weight/Magazines/Items/Misc.hpp index eb43d9a47..fad483b92 100644 --- a/SQF/dayz_code/external/R3F_Realism/R3F_Weight/Magazines/Items/Misc.hpp +++ b/SQF/dayz_code/external/R3F_Realism/R3F_Weight/Magazines/Items/Misc.hpp @@ -140,4 +140,60 @@ class ItemPlasticParts class ItemCeramicParts { weight = 3; +}; +class ItemWeaponPartsPistol +{ + weight = 4; +}; +class ItemWeaponPartsSMG +{ + weight = 5; +}; +class ItemWeaponPartsShotgun +{ + weight = 5; +}; +class ItemWeaponPartsRifle +{ + weight = 7; +}; +class ItemWeaponPartsSniperRilfe +{ + weight = 7.5; +}; +class ItemWeaponPartsMG +{ + weight = 9; +}; +class ItemWeaponPartsUnknown +{ + weight = 8.5; +}; +class ItemWeaponPartsBad +{ + weight = 8; +}; +class ItemWeaponPartsNormal +{ + weight = 9; +}; +class ItemWeaponPartsGood +{ + weight = 9.5; +}; +class ItemWeaponPartsExecellent +{ + weight = 10; +}; +class ItemGunPowderSmall +{ + weight = 2; +}; +class ItemGunPowder +{ + weight = 8; +}; +class ItemGunPowderBig +{ + weight = 16; }; \ No newline at end of file diff --git a/SQF/dayz_code/external/R3F_Realism/R3F_Weight/R3F_CfgWeight.hpp b/SQF/dayz_code/external/R3F_Realism/R3F_Weight/R3F_CfgWeight.hpp index 64abe8397..9d974e259 100644 --- a/SQF/dayz_code/external/R3F_Realism/R3F_Weight/R3F_CfgWeight.hpp +++ b/SQF/dayz_code/external/R3F_Realism/R3F_Weight/R3F_CfgWeight.hpp @@ -34,6 +34,7 @@ class CfgWeight #include "Magazines\Buildings\Tent.hpp" #include "Magazines\Buildings\Misc.hpp" #include "Magazines\Buildings\TripWire.hpp" + #include "Magazines\Buildings\StaticWeapons.hpp" #include "Magazines\Consumables\Fish.hpp" #include "Magazines\Consumables\Meat.hpp" diff --git a/SQF/dayz_code/stringtable.xml b/SQF/dayz_code/stringtable.xml index 63f805b4b..ed11d1791 100644 --- a/SQF/dayz_code/stringtable.xml +++ b/SQF/dayz_code/stringtable.xml @@ -34321,6 +34321,119 @@ Eine Kiste mit Keramikteile. Ящик с керамическими частями. + + + Gun parts (Pistol) + Waffenteile (Pistole) + + + A pile of pistol gun parts. + Ein Haufen Waffenteile einer Pistole. + + + Gun parts (SMG) + Waffenteile (SMG) + + + A pile of smg gun parts. + Ein Haufen Waffenteile einer Maschinenpistole. + + + Gun parts (Shotgun) + Waffenteile (Schrotflinte) + + + A pile of shotgun gun parts. + Ein Haufen Waffenteile einer Schrotflinte. + + + Gun parts (Rifle) + Waffenteile (Gewehr) + + + A pile of rifle gun parts. + Ein Haufen Waffenteile eines Gewehrs. + + + Gun parts (Sniper Rifle) + Waffenteile (Scharfschützengewehr) + + + A pile of sniper rifle gun parts. + Ein Haufen Waffenteile eines Scharfschützengewehrs. + + + Gun parts (MG) + Waffenteile (MG) + + + A pile of mg gun parts. + Ein Haufen Waffenteile eines Maschinengewehrs. + + + Gun parts (Unknown) + Waffenteile (Unbekannt) + + + A pile of unknown gun parts in a good condition. + Ein Haufen unbekannter Waffenteile, in einem guten Zustand. + + + Gun parts (Bad) + Waffenteile (Schlecht) + + + A pile of old gun parts in a bad condition. + Ein Haufen alter Waffenteile in einem schlechten Zustand. + + + Gun parts (Average) + Waffenteile (Normal) + + + A pile of gun parts in an average condition. + Ein Haufen Waffenteile in einem durchschnittlichen Zustand. + + + Gun parts (Good) + Waffenteile (Gut) + + + A pile of gun parts in a good condition. + Ein Haufen Waffenteile, in einem guten Zustand. + + + Gun parts (Excellent) + Waffenteile (Exzellent) + + + A pile of gun parts in an excellent condition. + Ein Haufen Waffenteile, in einem exzellenten Zustand. + + + Gun Powder (Small) + Schießpulver (Klein) + + + A small can with gun powder. Used for crafting ammunation. + Eine kleine Dose mit Schießpulver, welche für die Herstellung von Munition genutzt werden kann. + + + Gun Powder + Schießpulver + + + A can with gun powder. Used for crafting ammunation. + Eine Dose mit Schießpulver, welche für die Herstellung von Munition genutzt werden kann. + + + Gun Powder (Big) + Schießpulver (Groß) + + + A big can with gun powder. Used for crafting ammunation. + Eine große Dose mit Schießpulver, welche für die Herstellung von Munition genutzt werden kann. + Slugs in a can Пули в банке