diff --git a/addons/repair/XEH_preInit.sqf b/addons/repair/XEH_preInit.sqf index a827a2aba9..8e39bcb48d 100644 --- a/addons/repair/XEH_preInit.sqf +++ b/addons/repair/XEH_preInit.sqf @@ -5,6 +5,7 @@ ADDON = false; PREP(addRepairActions); PREP(doRepair); PREP(getWheelHitPointsWithSelections); +PREP(normalizeHitPoints); PREP(removeWheel); PREP(repairVehicle); PREP(replaceWheel); diff --git a/addons/repair/functions/fnc_normalizeHitPoints.sqf b/addons/repair/functions/fnc_normalizeHitPoints.sqf new file mode 100644 index 0000000000..0e49c56a8e --- /dev/null +++ b/addons/repair/functions/fnc_normalizeHitPoints.sqf @@ -0,0 +1,55 @@ +/* + * Author: commy2 + * + * Used to normalize dependant hitpoints. May overwrite some global variables that are named like hitpoints or "Total" though... + * + * Arguments: + * 0: A local vehicle with hitpoints. (Object) + * + * Return Value: + * NONE + */ +#include "script_component.hpp" + +private "_vehicle"; + +_vehicle = _this select 0; + +// can't execute all commands if the vehicle isn't local. exit here. +if !(local _vehicle) exitWith {}; + +private ["_hitPoints", "_config"]; + +_hitPoints = [_vehicle] call EFUNC(common,getHitPoints); + +_config = configFile >> "CfgVehicles" >> typeOf _vehicle >> "HitPoints"; + +// define global variables. Needed to parse the depends config entries. Also find dependent hitpoints. + +private ["_dependentHitPoints", "_dependentHitPointScripts"]; + +_dependentHitPoints = []; +_dependentHitPointScripts = []; + +Total = damage _vehicle; + +{ + missionNamespace setVariable [_x, _vehicle getHitPointDamage _x]; + + if (isText (_config >> _x >> "depends")) then { + _dependentHitPoints pushBack _x; + _dependentHitPointScripts pushBack compile getText (_config >> _x >> "depends"); + }; + +} forEach _hitPoints; + +// apply normalized damage to all dependand hitpoints + +{ + private "_damage"; + + _damage = call (_dependentHitPointScripts select _forEachIndex); + + _vehicle setHitPointDamage [_x, _damage]; + +} forEach _dependentHitPoints;