mirror of
https://github.com/acemod/ACE3.git
synced 2024-08-30 18:23:18 +00:00
Added deployment API and waypoint
This commit is contained in:
parent
fc54b1180c
commit
b8a4349c10
11
addons/fastroping/CfgWaypoints.hpp
Normal file
11
addons/fastroping/CfgWaypoints.hpp
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
class CfgWaypoints {
|
||||||
|
class ACE {
|
||||||
|
displayName = "ACE";
|
||||||
|
class Fastrope {
|
||||||
|
displayName = CSTRING(Waypoint_Fastrope);
|
||||||
|
displayNameDebug = "Fastrope";
|
||||||
|
file = QUOTE(PATHTOF(functions\fnc_deployAIWaypoint.sqf));
|
||||||
|
icon = QUOTE(PATHTOF(UI\Icon_Waypoint.paa));
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
BIN
addons/fastroping/UI/Icon_Waypoint.paa
Normal file
BIN
addons/fastroping/UI/Icon_Waypoint.paa
Normal file
Binary file not shown.
@ -8,6 +8,7 @@ PREP(canFastRope);
|
|||||||
PREP(canPrepareFRIES);
|
PREP(canPrepareFRIES);
|
||||||
PREP(checkVehicleThread);
|
PREP(checkVehicleThread);
|
||||||
PREP(cutRopes);
|
PREP(cutRopes);
|
||||||
|
PREP(deployAI);
|
||||||
PREP(deployRopes);
|
PREP(deployRopes);
|
||||||
PREP(equipFRIES);
|
PREP(equipFRIES);
|
||||||
PREP(fastRope);
|
PREP(fastRope);
|
||||||
|
@ -15,3 +15,4 @@ class CfgPatches {
|
|||||||
#include "CfgEventHandlers.hpp"
|
#include "CfgEventHandlers.hpp"
|
||||||
#include "CfgMoves.hpp"
|
#include "CfgMoves.hpp"
|
||||||
#include "CfgVehicles.hpp"
|
#include "CfgVehicles.hpp"
|
||||||
|
#include "CfgWaypoints.hpp"
|
||||||
|
95
addons/fastroping/functions/fnc_deployAI.sqf
Normal file
95
addons/fastroping/functions/fnc_deployAI.sqf
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
/*
|
||||||
|
* Author: BaerMitUmlaut
|
||||||
|
* Auomatically deploy a helicopter filled with AI units.
|
||||||
|
*
|
||||||
|
* Arguments:
|
||||||
|
* 0: The helicopter <OBJECT>
|
||||||
|
* 1: Deploy special roles (gunners, copilot) (default: false) <BOOL>
|
||||||
|
* 2: Create deployment group (default: true) <BOOL>
|
||||||
|
*
|
||||||
|
* 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 {
|
||||||
|
["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 EFUNC(common,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 EFUNC(common,waitUntilAndExecute);
|
||||||
|
}, [_vehicle, _unitsToDeploy], 1] call EFUNC(common,waitAndExecute);
|
||||||
|
} else {
|
||||||
|
[{
|
||||||
|
private _deployedRopes = _this getVariable [QGVAR(deployedRopes), []];
|
||||||
|
({_x select 5} count (_deployedRopes)) == 0
|
||||||
|
}, {
|
||||||
|
[_this] call FUNC(cutRopes);
|
||||||
|
driver _this enableAI "MOVE";
|
||||||
|
}, _vehicle] call EFUNC(common,waitUntilAndExecute);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
[FUNC(deployAIRecursive), [_vehicle, _unitsToDeploy], _deployTime + 4] call EFUNC(common,waitAndExecute);
|
42
addons/fastroping/functions/fnc_deployAIWaypoint.sqf
Normal file
42
addons/fastroping/functions/fnc_deployAIWaypoint.sqf
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
/*
|
||||||
|
* Author: BaerMitUmlaut
|
||||||
|
* Waypoint function for the fast rope waypoint.
|
||||||
|
*
|
||||||
|
* Arguments:
|
||||||
|
* 0: Group <GROUP>
|
||||||
|
* 1: Waypoint position <ARRAY>
|
||||||
|
*
|
||||||
|
* Return Value:
|
||||||
|
* true
|
||||||
|
*
|
||||||
|
* Example:
|
||||||
|
* [_group, [6560, 12390, 0]] call ace_fastroping_fnc_deployAIWayoint
|
||||||
|
*
|
||||||
|
* Public: No
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "script_component.hpp"
|
||||||
|
params [["_group", grpNull, [grpNull]], ["_position", [0, 0, 0], [[]], 3]];
|
||||||
|
private ["_vehicle", "_commander", "_speedMode"];
|
||||||
|
|
||||||
|
_vehicle = vehicle leader _group;
|
||||||
|
_commander = effectiveCommander _vehicle;
|
||||||
|
_speedMode = speedMode _group;
|
||||||
|
|
||||||
|
// - Approach -----------------------------------------------------------------
|
||||||
|
if (_vehicle distance2D _position > 50) then {
|
||||||
|
_group setSpeedMode "LIMITED";
|
||||||
|
_vehicle flyInHeight 20;
|
||||||
|
_commander doMove _position;
|
||||||
|
waitUntil {_vehicle distance2D _position < 50};
|
||||||
|
waitUntil {vectorMagnitude (velocity _vehicle) < 3};
|
||||||
|
//doStop _commander;
|
||||||
|
};
|
||||||
|
|
||||||
|
// - Deployment ---------------------------------------------------------------
|
||||||
|
[_vehicle] call FUNC(deployAI);
|
||||||
|
waitUntil {!((_vehicle getVariable [QGVAR(deployedRopes), []]) isEqualTo [])};
|
||||||
|
waitUntil {(_vehicle getVariable [QGVAR(deployedRopes), []]) isEqualTo []};
|
||||||
|
_group setSpeedMode _speedMode;
|
||||||
|
|
||||||
|
true
|
@ -57,5 +57,9 @@
|
|||||||
<French>Equipe l'hélicoptère sélectionné avec un Fast Rope Insertion Extraction System</French>
|
<French>Equipe l'hélicoptère sélectionné avec un Fast Rope Insertion Extraction System</French>
|
||||||
<Spanish>Equipa el helicoptero seleccionado con un Sistema de Inserción Extracción Fast Rope</Spanish>
|
<Spanish>Equipa el helicoptero seleccionado con un Sistema de Inserción Extracción Fast Rope</Spanish>
|
||||||
</Key>
|
</Key>
|
||||||
|
<Key ID="STR_ACE_Fastroping_Waypoint_Fastrope">
|
||||||
|
<English>LET UNITS FAST ROPE</English>
|
||||||
|
<German>EINHEITEN ABSEILEN LASSEN</German>
|
||||||
|
</Key>
|
||||||
</Package>
|
</Package>
|
||||||
</Project>
|
</Project>
|
||||||
|
Loading…
Reference in New Issue
Block a user