mirror of
https://github.com/acemod/ACE3.git
synced 2024-08-30 18:23:18 +00:00
45 lines
1.5 KiB
Plaintext
45 lines
1.5 KiB
Plaintext
/*
|
|
* Author: commy2
|
|
* Set the captivity status of an unit. This allows the handling of more than one reason to set a unit captive.
|
|
*
|
|
* Arguments:
|
|
* 0: Unit <OBJECT>
|
|
* 1: The reason of the captivity <STRING>
|
|
* 2: Is the reason still valid? True for setting this reason, false for removing it <BOOL>
|
|
*
|
|
* Return Value:
|
|
* None
|
|
*
|
|
* Public: No
|
|
*/
|
|
#include "script_component.hpp"
|
|
|
|
params ["_unit", "_reason", "_status"];
|
|
|
|
private ["_captivityReasons", "_unitCaptivityReasons", "_captivityReasonsBooleans", "_bitmask"];
|
|
|
|
_captivityReasons = missionNamespace getVariable ["ACE_captivityReasons", []];
|
|
|
|
// register new reason (these reasons are shared publicly, since units can change ownership, but keep their captivity status)
|
|
if !(_reason in _captivityReasons) then {
|
|
_captivityReasons pushBack _reason;
|
|
|
|
ACE_captivityReasons = _captivityReasons;
|
|
publicVariable "ACE_captivityReasons";
|
|
};
|
|
|
|
// get reasons why the unit is captive already and update to the new status
|
|
_unitCaptivityReasons = [_unit] call FUNC(getCaptivityStatus);
|
|
|
|
_captivityReasonsBooleans = [];
|
|
{
|
|
_captivityReasonsBooleans set [_forEachIndex, (_captivityReasons select _forEachIndex) in _unitCaptivityReasons];
|
|
} forEach _captivityReasons;
|
|
|
|
_captivityReasonsBooleans set [_captivityReasons find _reason, _status];
|
|
|
|
_bitmask = _captivityReasonsBooleans call FUNC(toBitmask);
|
|
|
|
// actually apply the setCaptive command globaly
|
|
[[_unit, _bitmask], "{(_this select 0) setCaptive (_this select 1)}", _unit] call FUNC(execRemoteFnc);
|