ACE3/addons/medical_ai/functions/fnc_addHealingCommandActions.sqf
johnb432 c31ef9e16b
Medical AI - Add command actions to heal injured units (#10164)
* Add AI command menu for healing

* Moved actions to separate function

* Minor cleanup
2024-08-05 02:39:35 -07:00

89 lines
3.3 KiB
Plaintext

#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);