diff --git a/SQF/dayz_code/Configs/RscDisplay/plotManagement.hpp b/SQF/dayz_code/Configs/RscDisplay/plotManagement.hpp
index 10779ca25..6a4781d26 100644
--- a/SQF/dayz_code/Configs/RscDisplay/plotManagement.hpp
+++ b/SQF/dayz_code/Configs/RscDisplay/plotManagement.hpp
@@ -38,21 +38,21 @@ class PlotManagement
class RscShortcutButton_7010: ZSC_RscButtonMenuBlue
{
idc = -1;
- text = $STR_EPOCH_REFRESH;
+ text = $STR_EPOCH_ACTIONS_MAINTAIN;
x = 0.41 * safezoneW + safezoneX;
y = 0.22 * safezoneH + safezoneY;
w = 0.08 * safezoneW;
- onButtonClick = "'preview' call MaintainPlot;";
+ onButtonClick = "'maintain' call MaintainPlot;";
};
class RscShortcutButton_7011: ZSC_RscButtonMenuBlue
{
idc = -1;
- text = $STR_EPOCH_ACTIONS_MAINTAIN;
+ text = $STR_EPOCH_ACTIONS_MAINTAIN_FORCE;
x = 0.51 * safezoneW + safezoneX;
y = 0.22 * safezoneH + safezoneY;
w = 0.08 * safezoneW;
- onButtonClick = "'maintain' call MaintainPlot;";
+ onButtonClick = "'force' call MaintainPlot;";
};
class RscText_7012: ZSC_RscTextT
diff --git a/SQF/dayz_code/actions/plotManagement/maintain_area.sqf b/SQF/dayz_code/actions/plotManagement/maintain_area.sqf
index d37b90959..8346fa5ea 100644
--- a/SQF/dayz_code/actions/plotManagement/maintain_area.sqf
+++ b/SQF/dayz_code/actions/plotManagement/maintain_area.sqf
@@ -1,4 +1,4 @@
-private ["_objectID","_objectUID","_target","_objectClasses","_range","_objects","_requirements","_count","_objects_filtered","_ctrl","_itemText","_type","_amount","_success","_wealth","_message1","_message2","_option"];
+private ["_objectID","_objectUID","_target","_objects","_requirements","_count","_objects_filtered","_ctrl","_itemText","_type","_amount","_success","_wealth","_message1","_message2","_option"];
disableSerialization;
if (dayz_actionInProgress) exitWith {localize "STR_EPOCH_ACTIONS_2" call dayz_rollingMessages;};
@@ -6,43 +6,24 @@ dayz_actionInProgress = true;
player removeAction s_player_maintain_area;
s_player_maintain_area = 1;
+player removeAction s_player_maintain_area_force;
+s_player_maintain_area_force = 1;
player removeAction s_player_maintain_area_preview;
s_player_maintain_area_preview = 1;
_target = nearestObject [[player] call FNC_getPos,"Plastic_Pole_EP1_DZ"];
-_objectClasses = DZE_maintainClasses;
-_range = DZE_maintainRange; // set the max range for the maintain area
-_objects = nearestObjects [_target, _objectClasses, _range];
+_objects = nearestObjects [_target, DZE_maintainClasses, DZE_maintainRange];
_objects_filtered = [];
-_count = 0;
-{
- if (damage _x >= DZE_DamageBeforeMaint) then {
- _objectUID = _x getVariable ["ObjectUID","0"];
- _objectID = _x getVariable ["ObjectID","0"];
- _objects_filtered set [count _objects_filtered, [_x, _objectID, _objectUID]];
- _count = _count + 1;
- };
-} count _objects;
-_objects = _objects_filtered;
-
-// TODO dynamic requirements based on used building parts?
-if (_count == 0) exitWith {
- if (DZE_permanentPlot) then {
- _ctrl = (uiNamespace getVariable "PlotManagement") displayCtrl 7012;
- _ctrl ctrlSetText format[localize "STR_EPOCH_PLOTMANAGEMENT_MAINTAIN_OBJECTS", _count];
- _ctrl = (uiNamespace getVariable "PlotManagement") displayCtrl 7013;
- _ctrl ctrlSetText format[localize "STR_EPOCH_PLOTMANAGEMENT_NO_MONEY_NEEDED", " "];
- } else {
- format[localize "STR_EPOCH_ACTIONS_22",_count] call dayz_rollingMessages;
- };
- dayz_actionInProgress = false;
- s_player_maintain_area = -1;
- s_player_maintain_area_preview = -1;
-};
-
_requirements = [];
-_requirements = switch true do {
+_count = 0;
+
+_req = {
+ private ["_count","_requirements","_type","_amount","_itemText","_wealth"];
+ _count = _this;
+ _wealth = 0;
+
+ _requirements = switch true do {
case (_count <= 10): {["ItemGoldBar10oz",1]};
case (_count <= 20): {["ItemGoldBar10oz",2]};
case (_count <= 35): {["ItemGoldBar10oz",3]};
@@ -57,81 +38,139 @@ _requirements = switch true do {
case (_count <= 550): {["ItemBriefcase100oz",7]};
case (_count <= 625): {["ItemBriefcase100oz",8]};
case (_count > 625): {["ItemBriefcase100oz",9]};
-};
-
-_type = _requirements select 0;
-_amount = _requirements select 1;
-
-if (Z_SingleCurrency) then {
- _amount = _count * 100;
- _itemText = CurrencyName;
- _wealth = player getVariable[Z_MoneyVariable,0];
-} else {
- _itemText = getText(configFile >> "CfgMagazines" >> _type >> "displayName");
- if ("ItemBriefcase100oz" == _type && _amount > 1) then {
- _itemText = _itemText + "s";
};
-};
-_option = if (typeName _this == "ARRAY") then {_this select 3} else {_this};
-
-switch _option do {
- case "maintain": {
- _success = if (Z_SingleCurrency) then {_amount <= _wealth} else {[[[_type, _amount]],0] call epoch_returnChange};
-
- if (_success) then {
- player playActionNow "Medic";
- [player,_range,true,(getPosATL player)] spawn player_alertZombies;
-
- if (Z_SingleCurrency) then {
- player setVariable[Z_MoneyVariable,(_wealth - _amount),true];
- call player_forceSave;
- };
-
- PVDZE_maintainArea = [player,1,_objects];
- publicVariableServer "PVDZE_maintainArea";
-
- systemChat format[localize "STR_EPOCH_ACTIONS_4", _count];
- _message1 = format[localize "STR_EPOCH_PLOTMANAGEMENT_OBJECTS_MAINTAINED_SUCCESS", _count];
- _message2 = format[localize "STR_EPOCH_PLOTMANAGEMENT_PRICE_MAINTAINED_SUCCESS", [_amount] call BIS_fnc_numberText, _itemText];
- if (DZE_permanentPlot) then {
- _ctrl = (uiNamespace getVariable "PlotManagement") displayCtrl 7012;
- _ctrl ctrlSetText _message1;
- _ctrl = (uiNamespace getVariable "PlotManagement") displayCtrl 7013;
- _ctrl ctrlSetText _message2;
- } else {
- _message2 call dayz_rollingMessages;
- _message1 call dayz_rollingMessages;
- };
- } else {
- _message1 = format[localize "STR_EPOCH_PLOTMANAGEMENT_OBJECTS_MAINTAINED_FAILED", _count];
- _message2 = format[localize "STR_EPOCH_PLOTMANAGEMENT_MONEY_NEEDED_FAILED", [_amount] call BIS_fnc_numberText, _itemText];
- if (DZE_permanentPlot) then {
- _ctrl = (uiNamespace getVariable "PlotManagement") displayCtrl 7012;
- _ctrl ctrlSetText _message1;
- _ctrl = (uiNamespace getVariable "PlotManagement") displayCtrl 7013;
- _ctrl ctrlSetText _message2;
- } else {
- _message2 call dayz_rollingMessages;
- _message1 call dayz_rollingMessages;
- };
+ _type = _requirements select 0;
+ _amount = _requirements select 1;
+
+ if (Z_SingleCurrency) then {
+ _amount = _count * 100;
+ _itemText = CurrencyName;
+ _wealth = player getVariable[Z_MoneyVariable,0];
+ } else {
+ _itemText = getText(configFile >> "CfgMagazines" >> _type >> "displayName");
+ if ("ItemBriefcase100oz" == _type && _amount > 1) then {
+ _itemText = _itemText + "s";
};
};
- case "preview": {
- _message1 = format[localize "STR_EPOCH_PLOTMANAGEMENT_MAINTAIN_OBJECTS", _count];
- _message2 = format[localize "STR_EPOCH_PLOTMANAGEMENT_MAINTAIN_PRICE", [_amount] call BIS_fnc_numberText, _itemText];
+
+ [_type,_amount,_itemText,_wealth]
+};
+
+_maintain = {
+ private ["_requirements","_count","_type","_amount","_itemText","_wealth","_success","_message1","_message2","_ctrl"];
+
+ _count = count (_this select 0);
+ _requirements = _count call _req;
+
+ _type = _requirements select 0;
+ _amount = _requirements select 1;
+ _itemText = _requirements select 2;
+ _wealth = _requirements select 3;
+
+ _success = if (Z_SingleCurrency) then {_amount <= _wealth} else {[[[_type, _amount]],0] call epoch_returnChange};
+
+ if (_success) then {
+ player playActionNow "Medic";
+ [player,DZE_maintainRange,true,(getPosATL player)] spawn player_alertZombies;
+
+ if (Z_SingleCurrency) then {
+ player setVariable[Z_MoneyVariable,(_wealth - _amount),true];
+ call player_forceSave;
+ };
+
+ PVDZE_maintainArea = [player,1,_this select 0];
+ publicVariableServer "PVDZE_maintainArea";
+
+ systemChat format[localize "STR_EPOCH_ACTIONS_4", _count];
+ _message1 = format [localize "STR_EPOCH_PLOTMANAGEMENT_OBJECTS_MAINTAINED_SUCCESS", _count, [_amount] call BIS_fnc_numberText, _itemText];
+ _message2 = " ";
+ if (DZE_permanentPlot) then {
+ _ctrl = (uiNamespace getVariable "PlotManagement") displayCtrl 7012;
+ _ctrl ctrlSetText _message1;
+ _ctrl = (uiNamespace getVariable "PlotManagement") displayCtrl 7013;
+ _ctrl ctrlSetText _message2;
+ } else {
+ _message1 call dayz_rollingMessages;
+ };
+ } else {
+ _message1 = format[localize "STR_EPOCH_PLOTMANAGEMENT_OBJECTS_MAINTAINED_FAILED", _count, [_amount] call BIS_fnc_numberText, _itemText];
+ _message2 = " ";
if (DZE_permanentPlot) then {
_ctrl = (uiNamespace getVariable "PlotManagement") displayCtrl 7012;
_ctrl ctrlSetText _message1;
_ctrl = (uiNamespace getVariable "PlotManagement") displayCtrl 7013;
_ctrl ctrlSetText _message2;
} else {
- _message2 call dayz_rollingMessages;
_message1 call dayz_rollingMessages;
};
};
};
+{
+ if (damage _x >= DZE_DamageBeforeMaint) then {
+ _objectUID = _x getVariable ["ObjectUID","0"];
+ _objectID = _x getVariable ["ObjectID","0"];
+ _objects_filtered set [count _objects_filtered, [_x, _objectID, _objectUID]];
+ _count = _count + 1;
+ };
+} count _objects;
+
+_option = if (typeName _this == "ARRAY") then {_this select 3} else {_this};
+
+switch _option do {
+ case "maintain": {
+ if (_count != 0) then {
+ [_objects_filtered] call _maintain;
+ } else {
+ systemChat localize "STR_EPOCH_PLOTMANAGEMENT_MAINTAIN_NONE";
+ };
+ };
+ case "preview": {
+ if (_count == 0) then {
+ _message1 = localize "STR_EPOCH_PLOTMANAGEMENT_MAINTAIN_NONE";
+ if (DZE_permanentPlot) then {
+ _ctrl = (uiNamespace getVariable "PlotManagement") displayCtrl 7012;
+ _ctrl ctrlSetText _message1;
+ } else {
+ _message1 call dayz_rollingMessages;
+ };
+ } else {
+ _requirements = _count call _req;
+ _message1 = format [localize "STR_EPOCH_PLOTMANAGEMENT_MAINTAIN_PRICE", _count,[_requirements select 1] call BIS_fnc_numberText,_requirements select 2];
+ if (DZE_permanentPlot) then {
+ _ctrl = (uiNamespace getVariable "PlotManagement") displayCtrl 7012;
+ _ctrl ctrlSetText _message1;
+ } else {
+ _message1 call dayz_rollingMessages;
+ };
+ };
+ _requirements = count _objects call _req;
+ _message2 = format [localize "STR_EPOCH_PLOTMANAGEMENT_MAINTAIN_FORCE",count _objects,[_requirements select 1] call BIS_fnc_numberText,_requirements select 2];
+ if (_count != count _objects) then {
+ if (DZE_permanentPlot) then {
+ _ctrl = (uiNamespace getVariable "PlotManagement") displayCtrl 7013;
+ _ctrl ctrlSetText _message2;
+ } else {
+ _message2 call dayz_rollingMessages;
+ };
+ };
+ };
+ case "force": {
+ _count = 0;
+ _objects_filtered = [];
+ {
+ _objectUID = _x getVariable ["ObjectUID","0"];
+ _objectID = _x getVariable ["ObjectID","0"];
+ _objects_filtered set [count _objects_filtered, [_x, _objectID, _objectUID]];
+ _count = _count + 1;
+ } count _objects;
+
+ [_objects_filtered] call _maintain;
+ };
+};
+
dayz_actionInProgress = false;
s_player_maintain_area = -1;
+s_player_maintain_area_force = -1;
s_player_maintain_area_preview = -1;
diff --git a/SQF/dayz_code/compile/fn_selfActions.sqf b/SQF/dayz_code/compile/fn_selfActions.sqf
index 43ddbe54d..bf5ff4d0c 100644
--- a/SQF/dayz_code/compile/fn_selfActions.sqf
+++ b/SQF/dayz_code/compile/fn_selfActions.sqf
@@ -666,17 +666,18 @@ if (!isNull _cursorTarget && !_inVehicle && !_isPZombie && (player distance _cur
} else {
if (s_player_maintain_area < 0) then {
s_player_maintain_area = player addAction [format["%1",localize "STR_EPOCH_ACTIONS_MAINTAREA"], "\z\addons\dayz_code\actions\plotManagement\maintain_area.sqf", "maintain", 5, false];
+ s_player_maintain_area_force = player addAction [format["%1",localize "STR_EPOCH_ACTIONS_FORCE_MAINTAREA"], "\z\addons\dayz_code\actions\plotManagement\maintain_area.sqf", "force", 5, false];
s_player_maintain_area_preview = player addAction [format["%1",localize "STR_EPOCH_ACTIONS_MAINTPREV"], "\z\addons\dayz_code\actions\plotManagement\maintain_area.sqf", "preview", 5, false];
};
};
_PlotsmarkersNear = count (_cursorTarget nearEntities ["Land_coneLight", DZE_PlotPole select 0]);
if (s_player_plot_boundary_on < 0) then {
- If (_PlotsmarkersNear == 0 ) then{
+ if (_PlotsmarkersNear == 0) then{
s_player_plot_boundary_on = player addAction ["Show plot boundary", "\z\addons\dayz_code\actions\A_Plot_for_Life\object_showPlotRadius.sqf", "", 1, false];
};
};
if (s_player_plot_boundary_off < 0) then {
- If (_PlotsmarkersNear > 0 ) then{
+ if (_PlotsmarkersNear > 0) then{
s_player_plot_boundary_off = player addAction ["Remove plot boundary", "\z\addons\dayz_code\actions\A_Plot_for_Life\object_removePlotRadius.sqf", "", 1, false];
};
};
@@ -695,6 +696,8 @@ if (!isNull _cursorTarget && !_inVehicle && !_isPZombie && (player distance _cur
s_player_plotManagement = -1;
player removeAction s_player_maintain_area;
s_player_maintain_area = -1;
+ player removeAction s_player_maintain_area_force;
+ s_player_maintain_area_force = -1;
player removeAction s_player_maintain_area_preview;
s_player_maintain_area_preview = -1;
player removeAction s_player_plot_boundary_on;
@@ -1185,6 +1188,8 @@ if (!isNull _cursorTarget && !_inVehicle && !_isPZombie && (player distance _cur
s_player_SurrenderedGear = -1;
player removeAction s_player_maintain_area;
s_player_maintain_area = -1;
+ player removeAction s_player_maintain_area_force;
+ s_player_maintain_area_force = -1;
player removeAction s_player_maintain_area_preview;
s_player_maintain_area_preview = -1;
player removeAction s_player_tamedog;
diff --git a/SQF/dayz_code/init/variables.sqf b/SQF/dayz_code/init/variables.sqf
index b14bf54a9..dbb5f5efb 100644
--- a/SQF/dayz_code/init/variables.sqf
+++ b/SQF/dayz_code/init/variables.sqf
@@ -234,6 +234,7 @@ dayz_resetSelfActions = {
s_halo_action = -1;
s_player_SurrenderedGear = -1;
s_player_maintain_area = -1;
+ s_player_maintain_area_force = -1;
s_player_maintain_area_preview = -1;
s_player_heli_lift = -1;
s_player_heli_detach = -1;
diff --git a/SQF/dayz_code/stringtable.xml b/SQF/dayz_code/stringtable.xml
index 3130399ca..65828c532 100644
--- a/SQF/dayz_code/stringtable.xml
+++ b/SQF/dayz_code/stringtable.xml
@@ -13231,6 +13231,9 @@
Maintenir la zone
Údržba oblasti
+
+ Force Maintain Area
+
Maintain Area Preview
Kostenvoranschlag für Instandhaltung
@@ -13254,7 +13257,6 @@
Hotwire %1
%1 kurzschliessen
Угнать %1
- Hotwire %1
Démarrer avec les fils %1
Pokusit se Dostat do Vozidla %1
@@ -13347,6 +13349,9 @@
Maintenir
Opravit
+
+ Force Maintain
+
Stop Generator
Generator abschalten
@@ -15011,36 +15016,28 @@
-
- Objects to maintain: %1
+
+ Objects to maintain: 0, No maintenance required.
-
- Price to maintain: %1 %2
+
+ Price to maintain %1 objects: %2 %3
-
- No maintenance needed.
- Деньги не требуются.
+
+ Success! %1 objects maintained for %2 %3.
-
- SUCCESS: Objects maintained: %1
+
+ Price to force maintain %1 objects: %2 %3.
-
- SUCCESS: Maintenance cost: %1 %2!
-
-
- FAILED: Objects maintained: 0
-
-
- FAILED: Money needed: %1 %2!
- ОШИБКА: Требуется денег: %1 %2!
+
+ Failed to maintain %1 objects. You need %2 %3.
- That user is already on the list
+ That user is already on the list.
Уже в списке друзей
Schon auf der Liste
- Only %1 friends are allowed
+ Only %1 friends are allowed.
Можно добавить друзей: %1
Nur %1 Freunde erlaubt
@@ -15055,7 +15052,6 @@
Name
- Name
Имя
Nome
Nombrar
diff --git a/SQF/dayz_server/system/server_monitor.sqf b/SQF/dayz_server/system/server_monitor.sqf
index a1b165628..eaf92371a 100644
--- a/SQF/dayz_server/system/server_monitor.sqf
+++ b/SQF/dayz_server/system/server_monitor.sqf
@@ -92,6 +92,7 @@ diag_log ("HIVE: Streamed " + str(_val) + " objects");
_storageMoney = _x select 9;
//set object to be in maintenance mode
+ _maintenanceMode = false;
_maintenanceModeVars = [];
_dir = 90;
@@ -487,4 +488,4 @@ _debugMarkerPosition = [(_debugMarkerPosition select 0),(_debugMarkerPosition se
_vehicle_0 = createVehicle ["DebugBox_DZ", _debugMarkerPosition, [], 0, "CAN_COLLIDE"];
_vehicle_0 setPos _debugMarkerPosition;
_vehicle_0 setVariable ["ObjectID","1",true];
-*/
\ No newline at end of file
+*/