/* Name: FUNC(setForceWalkStatus) Author: Pabst Mirror (from captivity by commy2) Description: Sets the forceWalk status of an unit. This allows the handling of more than one reason to set forceWalk. Unit will force walk until all reasons are removed. Parameters: 0: OBJECT - Unit 1: STRING - Reason for forcing walking 2: BOOL - Is the reason still valid. True to force walk, false to remove restriction. Returns: None Example: [ACE_Player, "BrokenLeg", true] call FUNC(setForceWalkStatus) */ #include "script_component.hpp" private ["_unit", "_reason", "_status", "_forceWalkReasons", "_unitForceWalkReasons", "_forceWalkReasonsBooleans", "_bitmaskNumber"]; _unit = _this select 0; _reason = _this select 1; _status = _this select 2; _forceWalkReasons = missionNamespace getVariable ["ACE_forceWalkReasons", []]; // register new reason (these reasons are shared publicly, since units can change ownership, but keep their forceWalk status) if !(_reason in _forceWalkReasons) then { _forceWalkReasons pushBack _reason; ACE_forceWalkReasons = _forceWalkReasons; publicVariable "ACE_forceWalkReasons"; }; // get reasons why the unit is forceWalking already and update to the new status _unitForceWalkReasons = [_unit] call FUNC(getForceWalkStatus); _forceWalkReasonsBooleans = []; { _forceWalkReasonsBooleans set [_forEachIndex, (_forceWalkReasons select _forEachIndex) in _unitForceWalkReasons]; } forEach _forceWalkReasons; _forceWalkReasonsBooleans set [_forceWalkReasons find _reason, _status]; _bitmaskNumber = _forceWalkReasonsBooleans call FUNC(toBitmask); _unit setVariable ["ACE_forceWalkStatusNumber", _bitmaskNumber, true]; // actually apply the forceWalk command globaly [[_unit], QUOTE(FUNC(applyForceWalkStatus)), _unit] call FUNC(execRemoteFnc);