-
Notifications
You must be signed in to change notification settings - Fork 739
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Medical AI - Add command actions to heal injured units (#10164)
* Add AI command menu for healing * Moved actions to separate function * Minor cleanup
- Loading branch information
Showing
3 changed files
with
92 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,4 @@ | ||
PREP(addHealingCommandActions); | ||
PREP(canRequestMedic); | ||
PREP(healingLogic); | ||
PREP(healSelf); | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
88 changes: 88 additions & 0 deletions
88
addons/medical_ai/functions/fnc_addHealingCommandActions.sqf
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,88 @@ | ||
#include "..\script_component.hpp" | ||
/* | ||
* Author: johnb43 | ||
* Adds ACE actions for the player to command medics to heal injured units. | ||
* | ||
* Arguments: | ||
* None | ||
* | ||
* Return Value: | ||
* None | ||
* | ||
* Example: | ||
* call ace_medical_ai_fnc_addHealingCommandActions | ||
* | ||
* Public: No | ||
*/ | ||
|
||
if (!hasInterface) exitWith {}; | ||
|
||
private _action = [ | ||
QGVAR(heal), | ||
localize "STR_A3_Task180_name", | ||
"", | ||
{}, | ||
{_player == leader _player}, | ||
{ | ||
private _units = units _player; | ||
|
||
(_units select {_x call EFUNC(common,isAwake) && {_x call EFUNC(medical_treatment,isMedic)} && {!(_x call EFUNC(common,isPlayer))}}) apply { | ||
[ | ||
[ | ||
QGVAR(medicHeal_) + str _x, | ||
format ["%1: (%2)", [_x, false, true] call EFUNC(common,getName), groupID _x], | ||
"", | ||
{}, | ||
{true}, | ||
{ | ||
(_this select 2) params ["_healer", "_units"]; | ||
|
||
(_units select {_x call FUNC(isInjured)}) apply { | ||
[ | ||
[ | ||
QGVAR(healUnit_) + str _x, | ||
format [localize "str_action_heal_soldier", ([_x, false, true] call EFUNC(common,getName)) + " (" + str groupID _x + ")"], | ||
"", | ||
{ | ||
(_this select 2) params ["_healer", "_target"]; | ||
|
||
private _assignedMedic = _target getVariable [QGVAR(assignedMedic), objNull]; | ||
|
||
// Remove from previous medic's queue | ||
if (!isNull _assignedMedic && {_healer != _assignedMedic}) then { | ||
private _healQueue = _assignedMedic getVariable [QGVAR(healQueue), []]; | ||
|
||
_healQueue deleteAt (_healQueue find _target); | ||
|
||
_assignedMedic setVariable [QGVAR(healQueue), _healQueue]; | ||
}; | ||
|
||
_target setVariable [QGVAR(assignedMedic), _healer]; | ||
|
||
// Add to new medic | ||
private _healQueue = _healer getVariable [QGVAR(healQueue), []]; | ||
|
||
_healQueue deleteAt (_healQueue find _target); | ||
_healQueue insert [0, [_target]]; | ||
|
||
_healer setVariable [QGVAR(healQueue), _healQueue]; | ||
}, | ||
{true}, | ||
{}, | ||
[_healer, _x] | ||
] call EFUNC(interact_menu,createAction), | ||
[], | ||
_x | ||
] | ||
}; | ||
}, | ||
[_x, _units] | ||
] call EFUNC(interact_menu,createAction), | ||
[], | ||
_x | ||
] | ||
}; | ||
} | ||
] call EFUNC(interact_menu,createAction); | ||
|
||
["CAManBase", 1, ["ACE_SelfActions"], _action, true] call EFUNC(interact_menu,addActionToClass); |