Medical AI - Add command actions to heal injured units (#10164)

* Add AI command menu for healing

* Moved actions to separate function

* Minor cleanup
This commit is contained in:
johnb432 2024-08-05 11:39:35 +02:00 committed by GitHub
parent cd678c5b90
commit c31ef9e16b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 92 additions and 0 deletions

View File

@ -1,3 +1,4 @@
PREP(addHealingCommandActions);
PREP(canRequestMedic);
PREP(healingLogic);
PREP(healSelf);

View File

@ -20,6 +20,9 @@
_unit setVariable [QGVAR(lastSuppressed), CBA_missionTime];
}] call CBA_fnc_addClassEventHandler;
// Add command actions to command AI medics to treat other units
call FUNC(addHealingCommandActions);
if (GVAR(requireItems) == 2) then {
["CAManBase", "InitPost", {
[{

View File

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