/* * Author: BaerMitUmlaut * Auomatically deploy a helicopter filled with AI units. * * Arguments: * 0: The helicopter * 1: Deploy special roles (gunners, copilot) (default: false) * 2: Create deployment group (default: true) * * Return Value: * None * * Example: * [_vehicle] call ace_fastroping_fnc_deployAI * * Public: Yes */ #include "script_component.hpp" params [["_vehicle", objNull, [objNull]], ["_deploySpecial", false, [true]], ["_createDeploymentGroup", true, [true]]]; private ["_config", "_configEnabled", "_deployTime", "_unitsToDeploy", "_deployGroup"]; if (isNull _vehicle || {!(_vehicle isKindOf "Helicopter")}) exitWith { if (hasInterface) then { // Note: BIS_fnc_guiMessage causes a CTD with call, so spawn is used instead. ["deployAI was called with an invalid or non-existant vehicle.", QFUNC(deployAI)] spawn BIS_fnc_guiMessage; }; ACE_LOGERROR('FUNC(deployAI): deployAI was called with an invalid or non-existant vehicle.'); }; _config = configFile >> "CfgVehicles" >> typeOf _vehicle; _configEnabled = getNumber (_config >> QGVAR(enabled)); if (_configEnabled == 0) exitWith { if (hasInterface) then { [format ["You cannot fast rope from a ""%1"" helicopter.", getText (_config >> "DisplayName")], QFUNC(deployAI)] spawn BIS_fnc_guiMessage; }; ACE_LOGERROR_1('FUNC(deployAI): You cannot fast rope from a "%1" helicopter.',getText (_config >> "DisplayName")); }; if (_configEnabled == 2 && {isNull (_vehicle getVariable [QGVAR(FRIES), objNull])}) exitWith { if (hasInterface) then { [format ["""%1"" requires a FRIES for fastroping, but has not been equipped with one.", getText (_config >> "DisplayName")], QFUNC(deployAI)] spawn BIS_fnc_guiMessage; }; ACE_LOGERROR_1('FUNC(deployAI): "%1" requires a FRIES for fastroping but has not been equipped with one.',getText (_config >> "DisplayName")); }; _unitsToDeploy = crew _vehicle; if (_deploySpecial) then { _unitsToDeploy deleteAt (_unitsToDeploy find driver _vehicle); } else { _unitsToDeploy = _unitsToDeploy select {(assignedVehicleRole _x) select 0 == "cargo"}; }; if (_unitsToDeploy isEqualTo []) exitWith { ACE_LOGWARNING_1('FUNC(deployAI): Found no units to deploy in "%1".',getText (_config >> "DisplayName")); }; if (_createDeploymentGroup) then { _deployGroup = createGroup side (_unitsToDeploy select 0); _unitsToDeploy joinSilent _deployGroup; }; _deployTime = 0; if (getText (_config >> QGVAR(onPrepare)) != "") then { _deployTime = [_vehicle] call (missionNamespace getVariable (getText (_config >> QGVAR(onPrepare)))); }; [{[_this] call FUNC(deployRopes)}, _vehicle, _deployTime] call CBA_fnc_waitAndExecute; driver _vehicle disableAI "MOVE"; DFUNC(deployAIRecursive) = { params ["_vehicle", "_unitsToDeploy"]; private _unit = _unitsToDeploy deleteAt 0; unassignVehicle _unit; [_unit, _vehicle] call FUNC(fastRope); if !(_unitsToDeploy isEqualTo []) then { [{ [{ params ["_vehicle"]; private _deployedRopes = _vehicle getVariable [QGVAR(deployedRopes), []]; ({!(_x select 5)} count (_deployedRopes)) > 0 }, FUNC(deployAIRecursive), _this] call CBA_fnc_waitUntilAndExecute; }, [_vehicle, _unitsToDeploy], 1] call CBA_fnc_waitAndExecute; } else { [{ private _deployedRopes = _this getVariable [QGVAR(deployedRopes), []]; ({_x select 5} count (_deployedRopes)) == 0 }, { [_this] call FUNC(cutRopes); driver _this enableAI "MOVE"; }, _vehicle] call CBA_fnc_waitUntilAndExecute; }; }; [FUNC(deployAIRecursive), [_vehicle, _unitsToDeploy], _deployTime + 4] call CBA_fnc_waitAndExecute;