From cc8ac69feb4c188de3612e654d7b562c0c376507 Mon Sep 17 00:00:00 2001 From: VKing Date: Tue, 5 Jan 2016 23:40:27 +0100 Subject: [PATCH] Add function and action to detonate all explosives on a detonator --- addons/explosives/XEH_preInit.sqf | 1 + .../functions/fnc_addDetonateActions.sqf | 22 ++++++++++++++- .../functions/fnc_detonateExplosiveAll.sqf | 27 +++++++++++++++++++ 3 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 addons/explosives/functions/fnc_detonateExplosiveAll.sqf diff --git a/addons/explosives/XEH_preInit.sqf b/addons/explosives/XEH_preInit.sqf index 470cae661d..fec63776ff 100644 --- a/addons/explosives/XEH_preInit.sqf +++ b/addons/explosives/XEH_preInit.sqf @@ -28,6 +28,7 @@ PREP(canDefuse); PREP(canDetonate); PREP(defuseExplosive); PREP(detonateExplosive); +PREP(detonateExplosiveAll); PREP(dialPhone); PREP(dialingPhone); diff --git a/addons/explosives/functions/fnc_addDetonateActions.sqf b/addons/explosives/functions/fnc_addDetonateActions.sqf index 04e78f0f82..e306b2fe30 100644 --- a/addons/explosives/functions/fnc_addDetonateActions.sqf +++ b/addons/explosives/functions/fnc_addDetonateActions.sqf @@ -19,18 +19,21 @@ params ["_unit", "_detonator"]; TRACE_2("params",_unit,_detonator); -private ["_result", "_item", "_children", "_range", "_required"]; +private ["_result", "_item", "_children", "_range", "_required","_explosivesList"]; _range = getNumber (ConfigFile >> "CfgWeapons" >> _detonator >> "ACE_Range"); _result = [_unit] call FUNC(getPlacedExplosives); _children = []; +_explosivesList = []; { if (!isNull(_x select 0)) then { _required = getArray (ConfigFile >> "ACE_Triggers" >> (_x select 4) >> "requires"); if (_detonator in _required) then { _item = ConfigFile >> "CfgMagazines" >> (_x select 3); + _explosivesList pushBack _x; + _children pushBack [ [ @@ -49,4 +52,21 @@ _children = []; }; } forEach _result; +// Add action to detonate all explosives tied to the detonator +if (count _explosivesList > 0) then { + _children pushBack [ + [ + "Explosive_All", + "Detonate All", + getText(ConfigFile >> "CfgWeapons" >> _detonator >> "picture"), + {(_this select 2) call FUNC(detonateExplosiveAll);}, + {true}, + {}, + [ACE_player,_range,_explosivesList] + ] call EFUNC(interact_menu,createAction), + [], + ACE_Player + ]; +}; + _children diff --git a/addons/explosives/functions/fnc_detonateExplosiveAll.sqf b/addons/explosives/functions/fnc_detonateExplosiveAll.sqf new file mode 100644 index 0000000000..e1bc39cfd3 --- /dev/null +++ b/addons/explosives/functions/fnc_detonateExplosiveAll.sqf @@ -0,0 +1,27 @@ +/* + * Author: VKing + * Causes the unit to detonate all passed explosives. + * + * Arguments: + * 0: Unit + * 1: Range (-1 to ignore) + * 2: Explosives to detonate + * 0: Explosive + * 1: Fuse time + * + * Return Value: + * None + * + * Example: + * [player, -1, "Command"] call ACE_Explosives_fnc_detonateExplosive; + * + * Public: No + */ +#include "script_component.hpp" + +params ["_unit", "_range", "_explosivesList"]; +TRACE_3("Params",_unit,_range,_explosivesList); + +{ + [_unit,_range,_x] call FUNC(detonateExplosive); +} forEach _explosivesList;