From cd36871f90f36687bb3b5a429bde3d730619fb50 Mon Sep 17 00:00:00 2001 From: Tim Beswick Date: Fri, 28 Jul 2023 04:32:30 +0100 Subject: [PATCH] Repair - Fix bug in detection for ignoring hitpoints (#9261) * Fix bug in detection for ignoring repair hitpoints * Use define for array any * Add warning if hitpoint group would be ignored * Apply suggestions from code review Co-authored-by: Grim <69561145+LinkIsGrim@users.noreply.github.com> * Change ANY to ANY_OF --------- Co-authored-by: PabstMirror Co-authored-by: Grim <69561145+LinkIsGrim@users.noreply.github.com> --- addons/main/script_macros.hpp | 1 + addons/repair/CfgVehicles.hpp | 5 +---- addons/repair/functions/fnc_getHitPointsToIgnore.sqf | 11 +++++++++-- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/addons/main/script_macros.hpp b/addons/main/script_macros.hpp index af91e31401..96d96f5dd5 100644 --- a/addons/main/script_macros.hpp +++ b/addons/main/script_macros.hpp @@ -38,6 +38,7 @@ #define GETEGVAR(var1,var2,var3) GETMVAR(EGVAR(var1,var2),var3) #define ARR_SELECT(ARRAY,INDEX,DEFAULT) (if (count ARRAY > INDEX) then {ARRAY select INDEX} else {DEFAULT}) +#define ANY_OF(ARRAY,CONDITION) (ARRAY findIf {CONDITION} != -1) // ACEX Merge #define ACEX_PREFIX acex diff --git a/addons/repair/CfgVehicles.hpp b/addons/repair/CfgVehicles.hpp index c1641e52ec..71ac5ea750 100644 --- a/addons/repair/CfgVehicles.hpp +++ b/addons/repair/CfgVehicles.hpp @@ -437,10 +437,7 @@ class CfgVehicles { transportRepair = 0; }; - class Helicopter_Base_H; - class Heli_Transport_04_base_F: Helicopter_Base_H { - GVAR(hitpointGroups)[] = { {"HitEngine", {"HitEngine1", "HitEngine2"}} }; - }; + class Heli_Transport_04_base_F; class O_Heli_Transport_04_repair_F: Heli_Transport_04_base_F { GVAR(canRepair) = 1; transportRepair = 0; diff --git a/addons/repair/functions/fnc_getHitPointsToIgnore.sqf b/addons/repair/functions/fnc_getHitPointsToIgnore.sqf index 24f2d9a207..df0082d873 100644 --- a/addons/repair/functions/fnc_getHitPointsToIgnore.sqf +++ b/addons/repair/functions/fnc_getHitPointsToIgnore.sqf @@ -18,7 +18,7 @@ params ["_vehicle"]; private _type = typeOf _vehicle; -TRACE_2("getHitPointsToIgnore", _vehicle,_type); +TRACE_2("getHitPointsToIgnore",_vehicle,_type); private _initializedClasses = missionNamespace getVariable [QGVAR(hitPointsToIgnoreInitializedClasses), createHashMap]; if (_type in _initializedClasses) exitWith {_initializedClasses get _type}; @@ -118,12 +118,19 @@ private _processedSelections = []; /*#ifdef DEBUG_MODE_FULL systemChat format ["Skipping depends hitpoint, hitpoint %1, index %2, selection %3", _hitpoint, _forEachIndex, _selection]; #endif*/ + + private _groupIndex = _hitpointGroups findIf {_x # 0 == _hitpoint}; + if (_groupIndex != -1) then { + ERROR_2("[%1] hitpoint [%2] is both a group-parent and a depends and will be unrepairable",_type,_hitpoint); + ERROR_1("group: %1",_hitpointGroups # _groupIndex); + }; + _hitPointsToIgnore pushBackUnique _hitpoint; _processedSelections pushBack _selection; continue }; - if ((_hitpointGroups findIf {(_x select 1) == _hitpoint}) != -1) then { // skip child hitpoints + if (ANY_OF(_hitpointGroups, ANY_OF(_x select 1, _x == _hitpoint))) then { // skip child hitpoints TRACE_3("Skipping child hitpoint",_hitpoint,_forEachIndex,_selection); /*#ifdef DEBUG_MODE_FULL systemChat format ["Skipping child hitpoint, hitpoint %1, index %2, selection %3", _hitpoint, _forEachIndex, _selection];