ACE3/addons/common/functions/fnc_setCaptivityStatus.sqf

45 lines
1.5 KiB
Plaintext
Raw Normal View History

/*
* Author: commy2
* Set the captivity status of an unit. This allows the handling of more than one reason to set a unit captive.
*
2015-09-19 18:34:07 +00:00
* 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
*
2015-09-19 18:34:07 +00:00
* Public: No
*/
2015-01-13 19:56:02 +00:00
#include "script_component.hpp"
2015-09-19 18:34:07 +00:00
params ["_unit", "_reason", "_status"];
2015-09-19 18:34:07 +00:00
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 {
2015-05-14 18:06:06 +00:00
_captivityReasons pushBack _reason;
2015-05-14 18:06:06 +00:00
ACE_captivityReasons = _captivityReasons;
publicVariable "ACE_captivityReasons";
};
// get reasons why the unit is captive already and update to the new status
2015-01-11 18:20:14 +00:00
_unitCaptivityReasons = [_unit] call FUNC(getCaptivityStatus);
_captivityReasonsBooleans = [];
{
2015-05-14 18:06:06 +00:00
_captivityReasonsBooleans set [_forEachIndex, (_captivityReasons select _forEachIndex) in _unitCaptivityReasons];
} forEach _captivityReasons;
_captivityReasonsBooleans set [_captivityReasons find _reason, _status];
2015-01-11 18:20:14 +00:00
_bitmask = _captivityReasonsBooleans call FUNC(toBitmask);
// actually apply the setCaptive command globaly
2015-01-11 18:20:14 +00:00
[[_unit, _bitmask], "{(_this select 0) setCaptive (_this select 1)}", _unit] call FUNC(execRemoteFnc);