Arma 3
Not enough ratings
UnitCapture & UnitPlay (Fahrzeug-Bewegungen aufnehmen & abspielen)
By Joshua9797💾
Ausführliche Erklärung und Beispiele zur Verwendung von Unit Play und Unit Capture (Aufnehmen sowie Abspielen von Fahrzeugbewegungen)
   
Award
Favorite
Favorited
Unfavorite
Inhalt
❗[Disclaimer] Es ist keinesfalls meine Absicht Falschinformationen zu verbreiten. Es kann allerdings dennoch sehr leicht vorkommen, dass ich mit meinen Erklärungen nicht komplett oder sogar ganz falsch liege. Ich lerne selbst noch SQF und kann dementsprechend nicht für eine 100% Korrektheit garantieren.

❗Dieses Dokument setzt Kenntnisse über SQF-Skript-Dateien voraus. Ein Dokument zu diesem Thema gibt es hier.
❗Dieses Dokument setzt Kenntnisse über das Mitgeben von Parametern voraus. Ein Dokument zu diesem Thema gibt es hier.

Inhalt:
  1. Allgemein
  2. Aufnahme
  3. Abspielen
  4. Motor starten
  5. Skripts nach dem Abspielen
  6. Warten auf Spieler
  7. Tipps & Tricks
  8. Letztes großes Beispiel

1. Allgemein
Wenn man das Fahren oder Fliegen der KI überlässt, dann ist die Katastrophe vorprogrammiert.
Die KI wird nie genau das machen, was man sich ursprünglich vorgestellt hat. Sie fährt gegen oder durch Map-Objekte, verhält sich wie ein 8-Jähriger am Steuer und wird im schlimmsten Fall...während dessen explodieren.🙄

Glücklicherweise bietet Arma eine Lösung für genau dieses Problem an. Es nennt sich "UnitCapture[community.bistudio.com]" (Einheiten Aufnahme).

Eine Aufnahme beschreibt dabei den Missionsbauer, welcher in einem Fahrzeug auf "Aufnahme" drückt und seine Bewegungen (und/oder Waffen) aufzeichnet, um sie später von der KI abspielen zu lassen.

Ein Fahrzeug aufzunehmen ist sinnvoll, wenn dieses eine ganz bestimmte Route abfahren/fliegen soll, oder wenn das jeweilige Fahrzeug seine Waffen zu einem bestimmten Zeitpunkt abschießen soll.

Vorteile:
  • Aufgenommene Fahrzeuge fahren ihre Route sehr genau und zuverlässig ab.
  • Aufgenommene Fahrzeuge können Fahr-/Flug-Manöver abspielen, welche sonst nur von einem Spieler durchgeführt werden könnten.
  • Aufgenommene Fahrzeuge können ihre Waffen zu einer bestimmten Millisekunde abfeuern.

Nachteile:
  • Aufgenommene Fahrzeuge können ihre Route nicht ändern.
    Dazu müsste die Aufnahme in mehrere kleine Aufnahmen aufgeteilt werden und dann in der gewünschten Reinfolge abgespielt werden (sehr anstrengend und kompliziert)
  • Aufgenommene Fahrzeuge reagieren nicht auf ihr Umfeld.
    Sie können zwar explodieren aber selbst in einem zerstörten Zustand wird das Fahrzeug die Route gnadenlos weiter abfahren. Auch weitere Einflüsse wie Gegenstände, welche im Weg stehen oder Beschuss interessiert die Aufnahme nicht. (Es verhält sich also ähnlich wie der Zug im Onlinemodus von GTA V).
2. Aufnahme
Um eine Route aufzunehmen, wird die Funktion "BIS_fnc_unitCapture[community.bistudio.com]" verwendet. Diese wird mit "spawn[community.bistudio.com]" aufgerufen und bekommt einige Parameter übergeben.

Sobald die Funktion aufgerufen wird, startet die Aufnahme.

Die Parameter:
  1. Das Fahrzeug welches aufgenommen werden soll.
    ("vehicle player" ist hier sehr praktisch, da es das aktuelle Fahrzeug zurückgibt, in welchem sich der Spieler zur Zeit des Aufrufes befindet.)
  2. Die maximale Zeit welche aufgenommen werden soll in Sekunden.
    (Soll verhindern, dass die Aufnahme unendlich lange läuft.
    Die Aufnahme kann also auch schon z.B. nach 100 Sekunden beendet werden, auch wenn man bei dem Aufruf 300 Sekunden angegeben hat.
    Wenn man die angegebene Zeit überschreitet, dann wird die Aufnahme allerdings frühzeitig beendet.)
  3. Die Frames per Second (FPS) welche angeben, wie flüssig das Fahrzeug sich bewegen soll.
    (Eine höhere FPS-Zahl wird auch deutlich mehr Speicher in Anspruch nehmen. So kann z.B. eine 5Minütige Aufnahme mit 60fps leicht 10mb beanspruchen.)
  4. Angabe ob auch die Waffen mit aufgenommen werden sollen. ("true" oder "false", wahr oder falsch)

[vehicle player,300,30,true] spawn BIS_fnc_unitCapture;

Aufruf der Funktion:
Aufgerufen werden kann die Funktion selbstverständlich von überall.

Ich empfehle allerdings, die Verwendung eines Radio-Triggers. Dadurch kann man die Aufnahme bequem über das Mausrad-Menü starten:


Nachdem der Radio-Trigger ausgelöst wurde, startet die Aufnahme und ein Hinweis darüber erscheint an der oberen rechten Ecke:



Beenden der Aufnahme:
Um die Aufnahme zu beenden, muss lediglich die "ESC" (Escape) Taste zwei Mal gedrückt werden.
Das erste Mal, um das Menü zu öffnen und das zweite Mal, um wieder in das Spiel zu kommen.

Wenn man wieder in dem Spiel ist, wird das Fahrzeug eingefroren sein, und in der oberen rechten Ecke werden durch einen Hint die zwei Optionen präsentiert:
  • F1 Drücken, um die Bewegungs-Daten zu kopieren
  • F2 Drücken, um die Waffen-Daten zu kopieren


Beide Optionen kann man so häufig ausführen, wie man möchte, solange man den Editor nicht verlässt

Bei beiden Optionen werden die jeweiligen Daten in die Zwischenablage kopiert. Bei den Daten handelt es sich um einen gegebenenfalls sehr langen Text aus Zahlen, Klammern und Kommas.

Den jeweiligen Text sollte man sich einzeln in einem Text-Editor gut voneinander getrennt ablegen, um diese später unter dem Punkt "Abspielen" verwenden zu können.
3. Abspielen
Um die aufgenommenen Daten abzuspielen, werden diese in eine SQF-Datei abgelegt und von dort aufgerufen.
Am besten verwendet man dafür eine Variable mit einem Unterstrich "_":


(❗Wichtig ist, dass nach den kopierten Daten ein Semikolon vorhanden sein muss ";")


_movementdata = [[0,[11484.9,6405.11,1.36345],[-0.443961,-0.895987,0.0103379],....];

der Unterstrich "_" bedeutet für Arma, dass es sich um eine "private Variable" handelt. Siehe dazu: "Variablen Bereiche (Scopes)[community.bistudio.com]") (Der Vorteil bei einer privaten Variable ist der Name, welcher nur innerhalb des Skriptes bekannt ist. Der Name z.B. "_movementdata" kann also in mehreren Skripts verwendet werden.


Bewegungen abspielen:
Die Funktion, um die Bewegungs-Daten abzuspielen heißt "BIS_fnc_unitPlay[community.bistudio.com]". Diese wird mit "spawn[community.bistudio.com]" aufgerufen und bekommt einige Parameter übergeben.


Die Parameter:
  1. Das Fahrzeug welches die Bewegungen abspielen soll.
  2. Die Variable mit den Bewegungs-Daten.
_movementdata = [[0,[11484.9,6405.11,1.36345],[-0.443961,-0.895987,0.0103379],....]; [MeinFahrzeug, _movementdata] spawn BIS_fnc_unitPlay;

Das Fahrzeug muss sich zum Start des Abspielens der Aufnahme nicht an derselben Position befinden, an der die Aufnahme ursprünglich aufgenommen wurde. Wenn sich das Fahrzeug z.B. 1 Kilometer weiter nördlich befindet. Dann wird sich das Fahrzeug nach dem Start des Abspielens der Aufnahme an die richtige Position teleportieren und dann den Aufgenommenen Pfad normal abfliegen:


Das angegebene Fahrzeug muss nicht zwingend das gleiche Fahrzeug sein, mit dem die Daten aufgenommen wurden. Das Fahrzeug muss auch nicht vom selben Typen sein. Es muss noch nicht einmal ein Fahrzeug sein. Es ist z.B. möglich, die Aufnahme eines Helis auf ein Objekt wie z.B. einem Gebäude anzuwenden. Dadurch wird das Objekt dann den gleichen Pfad abfliegen, wie ursprünglich der Heli.


Waffen abspielen:
Die Funktion, um die Waffen-Daten abzuspielen heißt "BIS_fnc_unitPlayFiring[community.bistudio.com]". Diese wird mit "spawn[community.bistudio.com]" aufgerufen und bekommt einige Parameter übergeben.


Die Parameter:
Das Fahrzeug welches die Waffen abfeuern soll.
Die Variable mit den Waffen-Daten.

_firingdata = [[10.828,"vnrocket_ffar_275in_launcher_m229"],[12.682,"vn_rocket_ffar_275in_launcher_m229"]]; [MeinFahrzeug, _firingdata] spawn BIS_fnc_unitPlayFiring;

Eine Datei mit Bewegungs-Daten & Waffen-Daten könnte wie folgt aussehen:

_movementdata = [[0,[11484.9,6405.11,1.36345],[-0.443961,-0.895987,0.0103379],....]; _firingdata = [[2.828,"vnrocket_ffar_275in_launcher"],[4.682,"vn_rocket_ffar_275in_launcher"]]; [MeinFahrzeug, _movementdata] spawn BIS_fnc_unitPlay; [MeinFahrzeug, _firingdata] spawn BIS_fnc_unitPlayFiring;


Besonderheit bei Waffen zu beachten:
Die aufgenommenen Waffen werden ausschließlich von dem Schützen abgeschossen. Dabei ist es egal, ob man die Waffen bei der Aufnahme zuvor mit "Manuelles Feuer" aufgenommen hat oder nicht.

Besonders wenn die Waffen standardmäßig von dem Fahrer / Piloten abgefeuert werden, muss man darauf achten, im Editor diese auf den Schützen zu legen. Dazu muss man in den Attributen des Fahrzeuges, das kleine Icon neben der jeweiligen Waffe auf das Fadenkreuz stellen:


❗Waffen, die nicht umgestellt werden können und standardmäßig von dem Fahrer / Piloten abgefeuert werden, funktionieren leider mit dem gesamten Aufnahme-Abspielen-Konzept nicht.

Die Minigun im Beispiel oben, wird standardmäßig von dem Schützen abgefeuert. Ob eine Waffe für die Aufnahme verwendet werden kann, muss also ausprobiert werden.
4. Motor starten
Bei einem aufgenommenen Fahrzeug wird sich der Motor nicht von selbst starten.
Dazu muss die Funktion „engineOn“ manuell im gewünschten Moment aufgerufen werden. Auf der rechten Seite wird durch ein „true“ (wahr) oder einem „false“ (falsch) angegeben, ob der Motor gestartet oder gestoppt werden soll:
MeinFahrzeug engineOn true;

Um den Motor während des Abspielens der Aufnahme im perfekten Moment zu starten, ist es zu empfehlen, den Motor während des Prozesses der Aufnahme, direkt nach dem Betätigen des „Aufnahme-Knopfes“ über das Mausrad-Menü zu starten.

Dadurch ist die Zeit, die der Motor braucht in den Daten der Aufnahme enthalten.

Wenn der Motor jetzt über das „engineOn“ unmittelbar vor oder nach dem „BIS_fnc_unitPlay“ gestartet wird, dann verhält dieser sich sehr ähnlich zu dem Moment, in welchem die Aufnahme aufgenommen wurde:
_movementdata = [[0,[11484.9,6405.11,1.36345],[-0.443961,-0.895987,0.0103379],....]; [MeinFahrzeug, _movementdata] spawn BIS_fnc_unitPlay; MeinFahrzeug engineOn true;
5. Skripts nach dem Abspielen
Um eine Aktion nach einer Aufnahme einzubauen, z.B. eine zweite Aufnahme oder ein "Hint[community.bistudio.com]", wird wieder ein "Script Handle[community.bistudio.com]" sowie eine Kombination aus den Befehlen "waitUntil[community.bistudio.com]" und "scriptDone[community.bistudio.com]" verwendet.
(Ähnlich wie bereits in dem Dokument "SQF-Skript-Dateien" erklärt)

Der Script Handle wird von dem BIS_fnc_unitPlay zurückgegeben und kann in eine Variable abgespeichert werden.

Mit dem waitUntil und scriptDone kann man dann wieder auf das Ende des Skripts bzw. der Aufnahme warten:
_sequence = [HeliCombat_1, _movementdata] spawn BIS_fnc_unitPlay; waitUntil {scriptDone _sequence}; hint "ich werde erst nach dem BIS_fnc_unitPlay ausgeführt";

Wenn man weiß, wie lang die Aufnahme geht, kann man auch Aktionen zwischen dem Start und dem Ende der Aufnahme einbauen.

Als Beispiel kann man einen "Hint" einige Zeit nach dem Beginn der Aufnahme einbauen und trotzdem auf das Ende der Aufnahme mit "waitUntil" und "scriptDone" warten. Dazu wird ein "Sleep[community.bistudio.com]" verwendet, welcher eine bestimmte Sekundenanzahl abwartet, bevor mit dem aktuellen Skript fortgeführt wird:
_sequence = [HeliCombat_1, _movementdata] spawn BIS_fnc_unitPlay; sleep 20; hint "ich werde 20 Sekunden nach dem BIS_fnc_unitPlay ausgeführt"; waitUntil {scriptDone _sequence}; hint "ich werde erst nach dem BIS_fnc_unitPlay ausgeführt";

Da die Bewegungs-Daten und Waffen-Daten über BIS_fnc_unitPlayFiring & BIS_fnc_unitPlayFiring mit "spawn" aufgerufen wurden, sind diese von dem Sleep nicht betroffen.
6. Warten auf Spieler
❗Die folgenden Abfragen funktionieren aufgrund der Variable „playableUnits[community.bistudio.com]nur im Multiplayer Modus!
Dazu kann man z.B. im Editor die Mission als „Multiplayer Mission“ starten:



Allgemein:
Wenn die Spieler in einer Mission von einem Heli Abgeholt werden sollen oder in eine Mission hineingeflogen werden, dann muss der Missionsbauer darauf achten, den Spielern genügend Zeit zum Einsteigen bzw. Aussteigen zu geben.

Eine effektive Möglichkeit ist, abzufragen ob sich alle Spieler in dem Heli befinden oder nicht.
Mithilfe so einer Abfrage könnte der Heli z.B. erst dann wieder losfliegen, wenn sich alle Spieler in diesem befinden oder alle Spieler aus diesem ausgestiegen sind.

Eine Möglichkeit diese Abfrage einzubauen, ist über das „waitUntil[community.bistudio.com]“, wie es in dem Abschnitt „Skripts nach dem Abspielen“ oberhalb von diesem Abschnitt beschrieben wird.

Diese Abfrage ist aber auch über der Verwendung von Helis hinaus anwendbar. Z.B. bei Autos, Truppentransportern, Flugzeugen oder Booten


Alle eingestiegen:
Im Folgenden eine Abfrage, ob sich alle Spieler in einem Fahrzeug „Heli1“ befinden. (Tote Spieler werden ausgeschlossen):
({alive _x && (!(_x in Heli1))} count playableUnits ) == 0;

Hintergrund:
Hierbei werden durch das „count[community.bistudio.com]“ alle Spielbaren Einheiten, welche sich in „playableUnits[community.bistudio.com]“ befinden, einzeln überprüft und in der Variable „_x“ zwischengespeichert. Die Abfrage auf den Zwischengespeicherten Spieler in „_x“ lautet: „Ist dieser am Leben und befindet sich nicht in dem Heli?“. Wenn diese Abfrage zutrifft, dann wird im Hintergrund eine Zahl erhöht. Am Ende wird dann durch das „==[community.bistudio.com]“ auf der rechten Seite abgefragt, ob die Zahl im Hintergrund eine 0 ist.

Wenn sich also auch nur 1 lebendiger Spieler nicht im Heli befindet, dann ist die Zahl im Hintergrund nicht 0 und somit ist das Ergebnis der Finalen Abfrage = Nein.

❗Die Mitglieder der Gruppe müssen als „Spielbar“ gekennzeichnet werden, damit diese in der Abfrage in „playableUnits“ vorhanden sind:



Alle ausgestiegen:
Wenn die Abfrage lauten soll, ob sich keine Spieler mehr in einem Fahrzeug befinden, dann muss die folgende Abfrage verwendet werden:
({alive _x && (!(_x in Heli1))} count playableUnits ) == (count playableUnits);


Mit Gruppen:
Es ist auch möglich, abzufragen, ob sich eine bestimmte Gruppe Spieler in einem Fahrzeug befinden. (als Beispiel „Gruppe1“):


Dazu wird das „playableUnits“ durch „(units Gruppe1)“ ersetzt:
({alive _x && (!(_x in Heli1))} count (units Gruppe1)) == 0;
Wenn stattdessen alle Spieler aus „Gruppe1“ nicht mehr in dem Heli sitzen sollen, dann sieht die Abfrage wie folgt aus:
({alive _x && (!(_x in Heli1))} count (units Gruppe1)) == (count (units Gruppe1));


Mit mehreren Fahrzeugen:
Es ist außerdem auch möglich, die Abfrage auf mehrere Fahrzeuge zu erweitern.
Dabei wird abgefragt, ob sich alle Spieler in den 2 Helis befinden (Heli1 und Heli2). Unabhängig davon, wo sich welcher Spieler genau befindet.
Es kann z.B. sein, dass alle Spieler nur in den ersten Heli eingestiegen sind und kein Spieler in dem zweiten Heli sitzt. Die Abfrage würde in diesem Fall trotzdem ausgelöst werden.
Dazu wird jedes Fahrzeug in eigene Klammern gesetzt und mit einem &&[community.bistudio.com] miteinander kombiniert:
({alive _x && (!(_x in Heli1) && !(_x in Heli2))} count playableUnits ) == 0;
(Bei so langen Abfragen muss man besonders auf die Anzahl der runden Klammern achten!)


Einbau in Mission:
Um auf das Einbauen in die Mission zurückzukommen, im Folgenden ein Beispiel mit „waitUntil“.
Als erstes ein Beispiel, in welchem der Heli die Spieler abholt:
_sequence = [HeliCombat_1, _movementdata] spawn BIS_fnc_unitPlay; // Landung des Helis waitUntil {({alive _x && (!(_x in Heli1))} count playableUnits ) == 0}; // Warten auf Spieler _sequence = [HeliCombat_1, _movementdataFlyOff] spawn BIS_fnc_unitPlay; // Abflug des Helis

Da die Spieler es sehr wahrscheinlich nicht schaffen, in den Heli einzusteigen, bevor dieser gelandet ist bzw. seine Sequenz abgeschlossen hat, kann man die zweite Sequenz sofort starten so bald alle Spieler in dem Heli sitzen.

(Die alternative wäre es, mit einem weiteren „waitUntil[community.bistudio.com]“ darauf zu warten, dass der Heli wirklich seine Sequenz abgeschlossen hat)

In dem zweiten Beispiel bringt der Heli die Spieler zum Ziel.

Hierbei sollte man darauf warten, dass der Heli wirklich gelandet ist, bevor dieser wieder losfliegt.

(Es könnte ja sein, dass die Spieler bereits ein paar Meter in der Luft abspringen
Wenn dies alle Spieler tun würden und nicht darauf gewartet wird, dass der Heli seine Sequenz abgeschlossen hat, dann würde der Heli sofort mit der zweiten Sequenz anfangen und sich dementsprechend an die Startposition der zweiten Sequenz teleportieren.)
_sequence = [HeliCombat_1, _movementdata] spawn BIS_fnc_unitPlay; // Landung des Helis waitUntil {scriptDone _sequence}; // Ende der aufgenommenen Sequenz (Heli ist gelandet) waitUntil {({alive _x && (!(_x in Heli1))} count playableUnits ) == (count playableUnits)}; // 2es waitUntil _sequence = [HeliCombat_1, _movementdataFlyOff] spawn BIS_fnc_unitPlay; // Abflug des Helis
7. Tipps & Tricks
  • Damit die Spieler nicht aus Versehen oder absichtlich in einem Moment aus dem Fahrzeug springen, welcher nicht von dem Missionsbauer vorgesehen ist, kann man das Fahrzeug verschließen und wieder öffnen.

    Dazu wird die Funktion „setVehicleLock[community.bistudio.com]“ verwendet.

    Dabei kann man auf der rechten Seite mit „LOCKED“ das Fahrzeug verschließen und mit „UNLOCKED“ aufschließen:
    MeinFahrzeug setVehicleLock "LOCKED";
    In welchem Moment diese Funktion verwendet wird, ist dem Missionsbauer überlassen.

    Das Fahrzeug könnte z.B. direkt beim Start der aufgenommenen Daten verschlossen werden und erst wieder geöffnet werden,
    wenn über ein „waitUntil[community.bistudio.com]“ die Aufnahme beendet ist:
    MeinFahrzeug setVehicleLock "LOCKED"; _movementdata = [[0,[11484.9,6405.11,1.36345],[-0.443961,-0.895987,0.0103379],....]; _sequence = [MeinFahrzeug, _movementdata] spawn BIS_fnc_unitPlay; waitUntil {scriptDone _sequence}; MeinFahrzeug setVehicleLock "UNLOCKED";

  • Um Performance zu sparen, sollte das Fahrzeug am Ende der Aufnahme gelöscht werden. (Sofern dieses außerhalb der Sichtweite der Spieler ist)

    Dazu wird mit einem "waitUntil" und "scriptDone[community.bistudio.com]" auf die Beendigung der Aufnahme gewartet und anschließend die folgende Zeile Code aufgerufen:
    waitUntil {scriptDone sequence}; {deleteVehicle x} forEach crew MeinFahrzeug + [MeinFahrzeug]; // Löschen des Fahrzeuges und Besatzung
    Diese Zeile löscht bei dem Aufruf das Fahrzeug „MeinFahrzeug“ und die Besatzung in einem

  • Wenn ein KI-Pilot in einem Flugzeug oder Helikopter am Steuer sitzt, wird sich das Fahrzeug etwas ruckelfreier bewegen.
    Das liegt daran, dass das Skript nur in den angegebenen FPS (Millisekunden) das Steuer in der Hand hat. Dadurch gibt es einige Millisekunden, in denen das Fahrzeug unkontrolliert fällt.

    Eine KI am Steuer würde die Kontrolle in diesen Millisekunden übernehmen und das Fahrzeug etwas reuiger fliegen.

    Leider hat eine KI am Steuer aber auch einen Nachteil, welcher im nächsten Tipp behandelt wird.

  • Wenn eine KI am Steuer sitzt, wird diese nach der abgespielten Aufnahme wieder die volle Kontrolle haben, und z.B. von dem Landungsort wieder wegfliegen. Meistens weil die KI fliehen möchte.

    Um dies zu unterdrücken, sind die Funktionen "flyInHeight[community.bistudio.com]" sowie "allowFleeing[community.bistudio.com]" sehr praktisch.

    Die Funktion flyInHeight definiert eine Flughöhe, in welcher der Pilot fliegen soll. Wenn dieser bei einem Helikopter auf 0 gesetzt wird, kann der Pilot nicht mehr abheben:
    MeinHelikopter flyInHeight 0; // Verhindert das Abheben der KI
    Die Aufnahme wird das glücklicherweise aber nicht interessieren
    Die Funktion allowFleeing kann die KI dazu zwingen, niemals zu fliehen.
    Eine 1 bedeutet, dass die KI sehr schnell fliehen wird und eine 0 bedeutet das die KI niemals fliehen wird.
    Die Funktion muss entweder an der Gruppe angewendet werden oder an jedem einzelnen Mitglied der Gruppe
    MeineGruppeOderEinheit allowFleeing 0;
8. Letztes großes Beispiel
Als letztes noch ein Beispiel von allen beschriebenen Funktionen:

❗Der Inhalt von "_movementdata" ist nur beispielhaft und unvollständig!
❗Dieses Beispiel funktionieren aufgrund der Variable „playableUnits[community.bistudio.com]“ nur im Multiplayer Modus!
Dazu kann man z.B. im Editor die Mission als „Multiplayer Mission“ starten:


// Außerhalb des Skripts (z.B. in einem Trigger): [] execVM "DerFlug.sqf"; // Im inneren des Skripts "DerFlug.sqf": MeinFahrzeug setVehicleLock "LOCKED"; // Verschließen der Türen MeinPilot allowFleeing 0; MeinFahrzeug flyInHeight 0; MeinFahrzeug engineOn true; // Starten des Motors sleep 6; // Warten auf den Motor _movementdata = [[0,[11484.9,6405.11,1.36345],[-0.443961,-0.895987,0.0103379],....]; _firingdata = [[2.828,"vnrocket_ffar_275in_launcher_m229"],[4.682,"vn_rocket_ffar_275in_launcher_m229"]]; _sequence = [MeinFahrzeug, _movementdata] spawn BIS_fnc_unitPlay; [MeinFahrzeug, _firingdata] spawn BIS_fnc_unitPlayFiring; sleep 20; hint "Ich werde 20 Sekunden nach dem Beginn der Aufnahme ausgeführt"; // Hier z.B. das Fahrwerk ausfahren waitUntil {scriptDone _sequence}; hint "Ich werde erst nach der Aufnahme ausgeführt"; MeinFahrzeug setVehicleLock "UNLOCKED"; // Öffnen der Türen, um die Spieler rauszulassen waitUntil {({alive _x && (!(_x in Heli1))} count playableUnits ) == (count playableUnits)}; // Warten auf Spieler hint "Ich werde erst nach dem Aussteigen aller Spieler ausgeführt"; _movementdata = [[0,[11484.9,6405.11,1.36345],[-0.443961,-0.895987,0.0103379],....]; _sequence = [MeinFahrzeug, _movementdata] spawn BIS_fnc_unitPlay; hint "Ich werde erst beim Start des Abflugs ausgeführt"; waitUntil {scriptDone _sequence}; hint "Ich werde erst am Ende des Abflugs ausgeführt"; {deleteVehicle _x} forEach crew MeinFahrzeug + [MeinFahrzeug]; // Löschen des Fahrzeuges und Besatzung