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[\"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);" !="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