Skip to content

Commit

Permalink
feat: Added Code for IED Zeus Module
Browse files Browse the repository at this point in the history
  • Loading branch information
cow-co committed Jan 14, 2025
1 parent c328d52 commit 41b6241
Show file tree
Hide file tree
Showing 11 changed files with 201 additions and 0 deletions.
1 change: 1 addition & 0 deletions components/functions.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ class F
#include "gearScript\functions.hpp"
#include "gravestones\functions.hpp"
#include "identity\functions.hpp"
#include "ied\functions.hpp"
#include "joinInProgress\functions.hpp"
#include "killTracker\functions.hpp"
#include "logiVehicle\functions.hpp"
Expand Down
80 changes: 80 additions & 0 deletions components/ied/fn_addDefuseActionsToObject.sqf
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
params ["_object", "_isLarge"];
_failed = {
params ["_args", "_elapsedTime", "_totalTime", "_errorCode"];
_bomb = _args select 0;
_isLarge = _args select 1;
[_bomb, _isLarge] call f_fnc_iedBoom;
};

_condition_power = {
_canDefuse = [_player, "ACE_DefusalKit" ] call BIS_fnc_hasItem;
_isDefused = _target getVariable ["defused_power", false];
(_canDefuse == true) and (_isDefused == false);
};
_finish_power = {
params ["_args", "_elapsedTime", "_totalTime", "_errorCode"];
_bomb = _args select 0;
_bomb setVariable ["defused_power", true, true];
};
_statement_power = {
params ["_target", "_player", "_params"];
_finish_code = _params select 0;
_failed_code = _params select 1;
_isLarge = _params select 2;
[60, [_target, _isLarge], _finish_code, _failed_code, "Defusing Power Source..."] call ace_common_fnc_progressBar;
};

_action_power = ["Defuse Power Source", "Defuse Power Source", "", _statement_power, _condition_power, {}, [_finish_power, _failed, _isLarge]] call ace_interact_menu_fnc_createAction;
[_object, 0, ["ACE_MainActions"], _action_power] call ace_interact_menu_fnc_addActionToObject;

_condition_init = {
_canDefuse = [_player, "ACE_DefusalKit" ] call BIS_fnc_hasItem;
_isDefused = _target getVariable ["defused_init", false];
(_canDefuse == true) and (_isDefused == false);
};
_finish_init = {
params ["_args", "_elapsedTime", "_totalTime", "_errorCode"];
_bomb = _args select 0;
_bomb setVariable ["defused_init", true, true];
};
_statement_init = {
params ["_target", "_player", "_params"];
_finish_code = _params select 0;
_failed_code = _params select 1;
_isLarge = _params select 2;
_previousStepDone = _target getVariable ["defused_power", false];
if (_previousStepDone == false) then {
_target setDamage 1;
} else {
[60, [_target, _isLarge], _finish_code, _failed_code, "Defusing Initiator..."] call ace_common_fnc_progressBar;
};
};

_action_init = ["Defuse Initiator", "Defuse Initiator", "", _statement_init, _condition_init, {}, [_finish_init, _failed, _isLarge]] call ace_interact_menu_fnc_createAction;
[_object, 0, ["ACE_MainActions"], _action_init] call ace_interact_menu_fnc_addActionToObject;

_condition_det = {
_canDefuse = [_player, "ACE_DefusalKit" ] call BIS_fnc_hasItem;
_isDefused = _target getVariable ["defused", false];
(_canDefuse == true) and (_isDefused == false);
};
_finish_det = {
params ["_args", "_elapsedTime", "_totalTime", "_errorCode"];
_bomb = _args select 0;
_bomb setVariable ["defused", true, true];
};
_statement_det = {
params ["_target", "_player", "_params"];
_finish_code = _params select 0;
_failed_code = _params select 1;
_isLarge = _params select 2;
_previousStepDone = _target getVariable ["defused_init", false];
if (_previousStepDone == false) then {
_target setDamage 1;
} else {
[60, [_target, _isLarge], _finish_code, _failed_code, "Defusing Detonator..."] call ace_common_fnc_progressBar;
};
};

_action_det = ["Defuse Detonator", "Defuse Detonator", "", _statement_det, _condition_det, {}, [_finish_det, _failed, _isLarge]] call ace_interact_menu_fnc_createAction;
[_object, 0, ["ACE_MainActions"], _action_det] call ace_interact_menu_fnc_addActionToObject;
13 changes: 13 additions & 0 deletions components/ied/fn_addIEDToObject.sqf
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
/*
Created By: JC
*/
#include "macros.hpp"

// TODO Handle the case where we run this twice against the same object (set a var on the object saying "isIED"?)
params ["_object", "_isLarge", "_isProxy", "_proxySide", "_proxyRange"];
[_object, _isLarge] call f_fnc_addDefuseActionsToObject;
[_object, _isLarge] call f_fnc_addZeusDetonationToIED;

if (_isProxy == true) then {
[_object, _isLarge, _proxySide, _proxyRange] call f_fnc_addProxyFuseTriggerToIED;
};
13 changes: 13 additions & 0 deletions components/ied/fn_addProxyFuseTriggerToIED.sqf
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
/*
Created By: JC
*/
#include "macros.hpp"
params ["_object", "_isLarge", "_proxySide", "_proxyRange"];
private _proxy = createTrigger ["EmptyDetector", getPos _object];
// TODO Test when multiplee proxy-fused IEDs are on field
_proxy setVariable ["iedObj", _object];
_proxy setTriggerActivation [str _proxySide, "PRESENT", false];
_proxy setTriggerArea [_proxyRange, _proxyRange, 0, false, _proxyRange * 2]; // *2 because the z axis goes above and below the ground
private _onAct = "thisTrigger getVariable ""iedObj"" setDamage 1;";
private _cond = "thisList findIf {_x != thisTrigger getVariable ""iedObj""} > -1";
_proxy setTriggerStatements [_cond, _onAct, ""];
10 changes: 10 additions & 0 deletions components/ied/fn_addZeusDetonationToIED.sqf
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
// Allows Zeus to detonate the IED by setting its HP to 0 (done by way of a trigger)
// In so doing, also prevents the object from taking damage (so that stray bullets don't detonate it!)

params ["_object", "_isLarge"];
_object allowDamage false;
_object setVariable ["isLargeIED", _isLarge];
_object addEventHandler ["Killed", {
params ["_unit", "_killer"];
[_unit, _unit getVariable ["isLargeIED", false]] call f_fnc_iedBoom;
}];
15 changes: 15 additions & 0 deletions components/ied/fn_iedBoom.sqf
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
params ["_object", "_isLarge"];
_isDefused = _object getVariable ["defused", false];
if (_isDefused == false) then {
if (_isLarge == true) then {
_explosive1 = "SatchelCharge_Remote_Ammo_Scripted" createVehicle (getPos _object);
_explosive1 setDamage 1;
_explosive2 = "SatchelCharge_Remote_Ammo_Scripted" createVehicle (getPos _object);
_explosive2 setDamage 1;
_explosive3 = "SatchelCharge_Remote_Ammo_Scripted" createVehicle (getPos _object);
_explosive3 setDamage 1;
} else {
_explosive = "DemoCharge_Remote_Ammo_Scripted" createVehicle (getPos _object);
_explosive setDamage 1;
};
};
26 changes: 26 additions & 0 deletions components/ied/functions.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
class ied
{
file = "components\ied";
class addDefuseActionsToObject
{
};
class addIEDToObject
{
};
class addZeusDetonationToIED
{
};
class iedBoom
{
};
class addProxyFuseTriggerToIED
{
};
};
class ied_zen
{
file = "components\ied\zen";
class zen_makeIED
{
};
};
1 change: 1 addition & 0 deletions components/ied/macros.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
#include "../../macros.hpp"
30 changes: 30 additions & 0 deletions components/ied/zen/fn_zen_makeIED.sqf
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
/*
Created By: JC
*/
#include "../macros.hpp"

CLIENT_ONLY;

params ["_object"];

if (isNull _object) then
{
["No object selected."] call zen_common_fnc_showMessage;
} else {
["Create IED",
[
["CHECKBOX", "Large IED?", false],
["CHECKBOX", "Is proximity-fused?", false],
["SIDES", "Activated by side (for proximity fuses)", west],
["SLIDER:RADIUS", "Proximity fusing range (metres)", [0, 100, 10, 1, _object, [1, 0, 0, 1]]]
],
{
params ["_dialogValues", "_args"];
_dialogValues params ["_isLarge", "_isProxy", "_proxySide", "_proxyRange"];
_args params ["_object"];
[_object, _isLarge, _isProxy, _proxySide, _proxyRange] remoteExec ["f_fnc_addIEDToObject", 2];
["Adding IED to '%1'.", _object] call zen_common_fnc_showMessage;
},
{},
[_object]] call zen_dialog_fnc_create;
};
11 changes: 11 additions & 0 deletions components/ied/zen_modules.sqf
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
call
{
private _iedCreate = { [_this#1] call f_fnc_zen_makeIED };
[
"[CAFE3] IEDs",
"Make object into IED",
_iedCreate

] call zen_custom_modules_fnc_register;

};
1 change: 1 addition & 0 deletions components/zen_modules.sqf
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#include "aiCache\zen_modules.sqf"
#include "ceasefire\zen_modules.sqf"
#include "ied\zen_modules.sqf"
#include "gearScript\zen_modules.sqf"
#include "logiVehicle\zen_modules.sqf"
#include "miscClient\zen_modules.sqf"
Expand Down

0 comments on commit 41b6241

Please sign in to comment.