ARMA 3 - MISSION EDITING & SCRIPTING Arma 3 - Landezone durch Bombe erstellen
Arma 3 - Landezone durch Bombe erstellen
Quelle: Gametwitter.de Forum | views: 314

In Missionen mit viel Bewaldung ist eine näherliegende LZ so manches mal wichtiger, wenn es nicht möglich ist eine LZ zu erreichen die wesentlich weiter weg liegt. In den guten Maps ist es hier entsprechend schwer einen Heli zu landen um die Trupps oder in Teilen aufzunehmen.

Hierzu habe ich mir zwei Skripte erstellt. Zum einen für das Flugzeug "GT_Planespawn.sqf" und zum anderen für die Bombe "GT_AIrbomb.sqf".

Der Aufbau des GT_Planespawn.sqf

Zunächst suche ich mir im Editor einen Flieger der für die Aufgabe passt und wenn auch nur optisch ;) .

Hier sind des 2 des gleichen Typs, so das ich mir das jederzeit auch für mehrere Flugzeuge ändern kann.

private _randomPlane = selectRandom ["vn_b_air_f4b_navy_gbu","vn_b_air_f4b_navy_gbu"];

Ich bestimme eine Spawn-Position im Editor und trage diese ins das Skript ein

private _spawnsector = [17815.3,-1221.98,0];

Es wird eine zufällige Flughöhe gewählt

_airheight = selectRandom [40,60,80,100];
_newPlane flyinheight _airHeight;

Die Wahl eines Angriffsektors bzw. Bereiches, wo die Bombe nachher abgeworfen wird durch Ermittlung der Position eines zufällig gewähltem Spieler

private _randomTarget = selectRandom (allPlayers - entities "HeadlessClient_F");
_attacksector = [(getpos _randomTarget), 80, 250, 10, 0, 20, 0] call BIS_fnc_findSafePos;

Es folgt die Wegplanung des Fliegers + Auslösung des Bombenskriptes

_wp1 = (group _newPlane) addWaypoint [(getpos _randomTarget), 0];

_wp1 setWaypointType "Move";

_wp1 setWaypointSpeed "LIMITED";

_wp1 setWaypointBehaviour "COMBAT";

_wp1 setWaypointStatements ["true", "[this,'Bo_GBU12_LGB'] execVM 'GTscripts\GT_Airbomb.sqf';"];

[(group _newPlane), 2] setWaypointCompletionRadius 400;

Dann soll der Flieger noch einen kurzen Moment verbleiben und anschließend zurück zu seinem Spawnpunkt fliegen und dort wieder gelöscht werden.

sleep 60;
_wp2 = (group _newPlane) addWaypoint [_spawnsector, 0];
_wp2 setWaypointSpeed "FULL";
_wp2 setWaypointStatements ["true", "{deleteVehicle _x} forEach crew (vehicle this) + [vehicle this];"];

Das Skript "GT_Planespawn.sqf" einmal komplett:

if (!isServer) exitWith {};


private _randomPlane = selectRandom ["vn_b_air_f4b_navy_gbu","vn_b_air_f4b_navy_gbu"];
private _spawnsector = [17815.3,-1221.98,0];


private _newPlane = createVehicle [_randomPlane, _spawnsector, [], 0, "FLY"];
createVehicleCrew _newPlane;

_airheight = selectRandom [40,60,80,100];
_newPlane flyinheight _airHeight;

private _randomTarget = selectRandom (allPlayers - entities "HeadlessClient_F");
_attacksector = [(getpos _randomTarget), 80, 250, 10, 0, 20, 0] call BIS_fnc_findSafePos;

_wp1 = (group _newPlane) addWaypoint [(getpos _randomTarget), 0];
_wp1 setWaypointType "Move";
_wp1 setWaypointSpeed "LIMITED";
_wp1 setWaypointBehaviour "COMBAT";
_wp1 setWaypointStatements ["true", "[this,'Bo_GBU12_LGB'] execVM 'GTscripts\GT_AIRBomBspawn.sqf';"];
[(group _newPlane), 2] setWaypointCompletionRadius 400;

sleep 60;
_wp2 = (group _newPlane) addWaypoint [_spawnsector, 0];
_wp2 setWaypointSpeed "FULL";
_wp2 setWaypointStatements ["true", "{deleteVehicle _x} forEach crew (vehicle this) + [vehicle this];"];

Nun die GT_Airbomb.sqf

//[this,"vn_bomb_gbu8_he_launcher"] execVM 'GTscripts\AIRBomBspawn.sqf; //Der Aufruf am Wegpunkt des Fliegers

if (!isServer) exitWith {};

private["_ammo","_plane"];
_plane = _this select 0;
_ammo = _this select 1;

if (alive _plane) then{
_bomb = _ammo createvehicle ([getPos _plane select 0,getPos _plane select 1,(getPos _plane select 2)- 4]);

waituntil {!isnull _bomb};

_bomb setDir (getDir _plane);
_bomb setvectorUp [0,1,0];
_bomb attachto [_plane,[0,-4.5,-2]];
sleep 1;
detach _bomb;


    _bomb setVelocity [-5 + (random 10),-5 + (random 10),-50];
    _nul = [_bomb] spawn{
        _bomb = _this select 0;
        _pos = [];
        while {!isNull _bomb} do
        {
            _pos = getPosASL _bomb;
            sleep 0.1;
        };
        [_pos] remoteExec  ["A3A_fnc_napalm"];
        { _x hideObjectGlobal true } foreach (nearestTerrainObjects [_pos,[],45])
    };
};

Es gibt sicherlich elegantere Lösungen, das ist jedoch meine um neben der Erstellung der LZ auch die Bombe dazu fliegen zu sehen :)

Eine Kommentarfunktion ist in diesem Blog nicht vorgesehen.
Bei Problemen zum Skript bitte im Gametwitter.de Forum registieren und dort die Kommentarfunktion nutzen.