diff --git a/addons/repair/ACE_Repair.hpp b/addons/repair/ACE_Repair.hpp index 219945003d..a8aac18690 100644 --- a/addons/repair/ACE_Repair.hpp +++ b/addons/repair/ACE_Repair.hpp @@ -8,7 +8,7 @@ class ACE_Repair { requiredEngineer = QGVAR(engineerSetting_Wheel); repairingTime = 10; repairingTimeSelfCoef = 1; - items[] = {"ToolKit"}; + items = QGVAR(wheelRepairRequiredItems); condition = QUOTE(call FUNC(canReplaceWheel)); itemConsumed = 0; @@ -35,6 +35,7 @@ class ACE_Repair { requiredEngineer = 0; repairingTime = 15; callbackSuccess = QUOTE(call FUNC(doRepair)); + items[] = {"ToolKit"}; }; class RepairTrack: MiscRepair { displayName = CSTRING(Repairing); diff --git a/addons/repair/ACE_Settings.hpp b/addons/repair/ACE_Settings.hpp index fc3f063fb1..22e68ce3e9 100644 --- a/addons/repair/ACE_Settings.hpp +++ b/addons/repair/ACE_Settings.hpp @@ -68,4 +68,13 @@ class ACE_Settings { value = 1; category = ECSTRING(OptionsMenu,CategoryLogistics); }; + class GVAR(wheelRepairRequiredItems) { + displayName = CSTRING(wheelRepairRequiredItems_name); + description = CSTRING(wheelRepairRequiredItems_description); + category = ECSTRING(OptionsMenu,CategoryLogistics); + typeName = "SCALAR"; + value = 0; + values[] = {"None", "ToolKit"}; + _values[] = {{}, {"ToolKit"}}; + }; }; diff --git a/addons/repair/CfgVehicles.hpp b/addons/repair/CfgVehicles.hpp index e9ca5258ba..83d44592ce 100644 --- a/addons/repair/CfgVehicles.hpp +++ b/addons/repair/CfgVehicles.hpp @@ -97,6 +97,15 @@ class CfgVehicles { typeName = "BOOL"; defaultValue = 1; }; + class wheelRepairRequiredItems { + displayName = CSTRING(wheelRepairRequiredItems_name); + description = CSTRING(wheelRepairRequiredItems_description); + typeName = "NUMBER"; + class values { + class None { name = "None"; value = 0; default = 1;}; + class ToolKit { name = "ToolKit"; value = 1; }; + }; + }; }; class ModuleDescription { description = CSTRING(moduleDescription); diff --git a/addons/repair/functions/fnc_canRepair.sqf b/addons/repair/functions/fnc_canRepair.sqf index bb44a3dcd4..8fb2a4938e 100644 --- a/addons/repair/functions/fnc_canRepair.sqf +++ b/addons/repair/functions/fnc_canRepair.sqf @@ -21,7 +21,7 @@ params ["_caller", "_target", "_hitPoint", "_className"]; TRACE_4("params",_caller,_target,_hitPoint,_className); -private ["_config", "_engineerRequired", "_items", "_locations", "_return", "_condition", "_vehicleStateCondition"]; +private ["_config", "_engineerRequired", "_items", "_locations", "_return", "_condition", "_vehicleStateCondition", "_settingName", "_settingItemsArray"]; _config = (ConfigFile >> "ACE_Repair" >> "Actions" >> _className); if !(isClass _config) exitwith {false}; // or go for a default? @@ -38,7 +38,17 @@ _engineerRequired = if (isNumber (_config >> "requiredEngineer")) then { }; if !([_caller, _engineerRequired] call FUNC(isEngineer)) exitwith {false}; -_items = getArray (_config >> "items"); +//Items can be an array of required items or a string to a ACE_Setting array +_items = if (isArray (_config >> "items")) then { + getArray (_config >> "items"); +} else { + _settingName = getText (_config >> "items"); + _settingItemsArray = getArray (configFile >> "ACE_Settings" >> _settingName >> "_values"); + if ((isNil _settingName) || {(missionNamespace getVariable _settingName) >= (count _settingItemsArray)}) exitWith { + ERROR("bad setting"); ["BAD"] + }; + _settingItemsArray select (missionNamespace getVariable _settingName); +}; if (count _items > 0 && {!([_caller, _items] call FUNC(hasItems))}) exitwith {false}; _return = true; diff --git a/addons/repair/functions/fnc_moduleRepairSettings.sqf b/addons/repair/functions/fnc_moduleRepairSettings.sqf index aad1e7a8d1..98ff354662 100644 --- a/addons/repair/functions/fnc_moduleRepairSettings.sqf +++ b/addons/repair/functions/fnc_moduleRepairSettings.sqf @@ -33,4 +33,6 @@ if (!isServer) exitWith {}; [_logic, QGVAR(addSpareParts), "addSpareParts"] call EFUNC(common,readSettingFromModule); +[_logic, QGVAR(wheelRepairRequiredItems), "wheelRepairRequiredItems"] call EFUNC(common,readSettingFromModule); + ACE_LOGINFO("Repair Module Initialized."); diff --git a/addons/repair/functions/fnc_repair.sqf b/addons/repair/functions/fnc_repair.sqf index 4fa1c2d903..fd3b4f032b 100644 --- a/addons/repair/functions/fnc_repair.sqf +++ b/addons/repair/functions/fnc_repair.sqf @@ -21,7 +21,7 @@ params ["_caller", "_target", "_hitPoint", "_className"]; TRACE_4("params",_calller,_target,_hitPoint,_className); -private["_callbackProgress", "_callerAnim", "_calller", "_condition", "_config", "_consumeItems", "_displayText", "_engineerRequired", "_iconDisplayed", "_items", "_locations", "_repairTime", "_repairTimeConfig", "_return", "_usersOfItems", "_vehicleStateCondition", "_wpn"]; +private["_callbackProgress", "_callerAnim", "_calller", "_condition", "_config", "_consumeItems", "_displayText", "_engineerRequired", "_iconDisplayed", "_items", "_locations", "_repairTime", "_repairTimeConfig", "_return", "_usersOfItems", "_vehicleStateCondition", "_wpn", "_settingName", "_settingItemsArray"]; _config = (ConfigFile >> "ACE_Repair" >> "Actions" >> _className); if !(isClass _config) exitwith {false}; // or go for a default? @@ -37,7 +37,18 @@ _engineerRequired = if (isNumber (_config >> "requiredEngineer")) then { }; if !([_caller, _engineerRequired] call FUNC(isEngineer)) exitwith {false}; if (isEngineOn _target) exitwith {false}; -_items = getArray (_config >> "items"); + +//Items can be an array of required items or a string to a ACE_Setting array +_items = if (isArray (_config >> "items")) then { + getArray (_config >> "items"); +} else { + _settingName = getText (_config >> "items"); + _settingItemsArray = getArray (configFile >> "ACE_Settings" >> _settingName >> "_values"); + if ((isNil _settingName) || {(missionNamespace getVariable _settingName) >= (count _settingItemsArray)}) exitWith { + ERROR("bad setting"); ["BAD"] + }; + _settingItemsArray select (missionNamespace getVariable _settingName); +}; if (count _items > 0 && {!([_caller, _items] call FUNC(hasItems))}) exitwith {false}; _return = true; diff --git a/addons/repair/stringtable.xml b/addons/repair/stringtable.xml index 77687ae9cc..8de9b07d90 100644 --- a/addons/repair/stringtable.xml +++ b/addons/repair/stringtable.xml @@ -901,5 +901,11 @@ <Polish>Ilość wybranych części zamiennych.</Polish> <Portuguese>Número de partes sobressalentes.</Portuguese> </Key> + <Key ID="STR_ACE_Repair_wheelRepairRequiredItems_name"> + <English>Wheel repair requirements</English> + </Key> + <Key ID="STR_ACE_Repair_wheelRepairRequiredItems_description"> + <English>Items required to remove/replace wheels</English> + </Key> </Package> </Project>