Missionen (Scenarios) für P3D

Einleitung | Warum | Missionen | Tutorial | FIP

Einführung | FlugErstellen | MissionErstellen | MissionErweitern | MissionVollenden ||||| MissionAusbauen 1 | 2 | 3 | 4 | 5 | 6
Beispiel Flug ausbauen (Teil1)

Herzlich willkommen zum 1.Teil dieser Beispiel-Flug-Erweiterung.
Ich finde toll, dass du immer noch interessiert mitmachst.

Eigentlich kannst du mit der bisherigen Einführung problemlos deine erste kleine Mission basteln.
Allerdings gibt es noch viele kleine Stolperfallen und Grundwissen zu weiteren Funktionen, welche bestimmt hilfreich sind.

Weil ich mir alles selber beigebracht habe, war ich bei einigen Problemen wochenlang auf der Suche nach einer Lösung.
Einige dieser Probleme kann ich dir hoffentlich mit der Erweiterung dieser Mission ersparen.


Zuerst eine grundsätzliche Erklärung zu Missionen:
Eine Mission hat keinen fest definierten Startpunkt.

Das war für mich als Anfänger im Missions-Erstellen damals schwer zu verstehen. Ich habe versucht, vorhandene Missionen zu analysieren, um den "Startpunkt" dieser Mission zu ermitteln.

Fazit: Es gibt keinen klar definierten Startpunkt, wie bei einem Buch, welches auf Seite 1 beginnt.
Eine Mission beginnt genau dann, wenn der Flug startet.
Es passiert so lange nichts, bis der erste aktive Trigger ausgelöst wird, und irgendeine Action auslöst.
Bei diesem Beispielflug ist das der "5s bis Start"-Trigger, wenn dieser nicht vorhanden wäre, ist der "AreaTrigger", welcher nach dem Losrollen den Timer startet, der Startpunkt.

Ein fest definiertes Missions-Ende ist übrigens nur dann vorhanden, wenn Goals in der Mission vorhanden sind. Sobald alle Goals als "erfüllt" gewertet wurden, poppt ein Fenster auf, mit Text "Mission erfüllt".


Um weitere Funktionen im SimDirector zu erklären, erweitern wir den Beispielflug.

Gehen wir davon aus, dass die Maule schon sehr alt ist und viele tausend Flugstunden auf dem Buckel hat. Darum muss der Motor schonend behandelt werden.
Das bisher "eingebaute" Öl-Leck soll nur auftreten, wenn der Motor über längere Zeit mit voller Propellerdrehzahl betrieben wird.
Wenn man bald nach dem Start die Propellerdrehzahl auf 2400 RPM reduziert, stoppt der Öl-Leck Timer und wird zurückgesetzt.
Reduktion auf 2400 RPM wird übrigens auch in der Checkliste der Maule beim Steigflug empfohlen.

Bauen wir das also in die Mission ein.

Öffne den SimDirector und lade den ExampleFlight.

Für bessere Übersicht erzeugen wir eine neue Gruppe.

Schalte die Hauptanzeige um auf "Visualization" und ziehe einen Rahmen um die im Bild gezeigten 5 Objekte (oder klicke die Objekte mit gedrückt gehaltener "ctrl-Taste" einzen an).

Rechtsklick, Group (5) / New Group auswählen.

Benenne die neue Gruppe "TimerFailure". Verlasse durch klick auf "Grouped Graph" die Gruppe und du siehst, die Übersicht ist noch aufgeräumter.

Öffne wieder die Gruppe "TimerAusfall", in dem du das Symbol unten links bei der Gruppe anklickst (roter Kreis).

Die jetzt vorhandene DelayAction (4,5min. bis OilLeack) ist für die geplante Erweiterung nicht geeignet, denn die Action läuft, sobald sie einmal aktiviert ist, die eingestellten 270 Sekunden ab und startet das Öl-Leck. Ein Stoppen ist nicht möglich.

Also benötigen wir stattdessen einen TimeTrigger. Suche im Catalog unter Triggers den "TimeTrigger" und ziehe ihn ins Visualisations-Fenster.

Wenn du dich fragst, warum ich nicht von Anfang an einen TimeTrigger verwendet habe:
1) Für die Anfangs geplante Mission reicht eine schlichte DelayAction, welche schnell erstellt und eingebaut ist.
2) Beim Herstellen einer Mission, kommen oft erst beim Zusammenbauen neue Ideen, wie man den Flug interessanter und herausfordernder machen kann. Darum muss man gelegentlich eine Funktion komplett umbauen.

Doch nun weiter, mit dem TimeTrigger:

Benenne den Trigger "4,5min. to OilLeak". Stelle bei "StartTime" 270 und bei StopTime" 0 ein. Schalte "OnScreenTimer" auf YES, so kannst du beim Testflug kontrollieren, ob der Timer macht, was geplant ist. Bei "Activated" ganz unten schalte um auf NO, der Trigger bekommt einen roten Punkt.

Als Nächstes wird ein "PropertyTrigger" benötigt. Wie gewohnt im Catalog unter Triggers suchen und ins Visualisations-Fenster ziehen.

Ein PropertyTrigger kann unterschiedlichste Dinge auswerten, z.b. die Geschwindigkeit, die Flughöhe, oder Klappenstellung des Flugzeuges. In diesem Falle werden wir die RPM des Propellers auswerten und überwachen.

Benenne den Trigger bei Object Name ">2400RPM". Bei Activated schalte um auf NO.

Jetzt muss eine Logik erstellt werden, klick dazu auf "EDIT LOGIC".

Der Hauptbereich hat nun eine neue Lasche "Conditional Logic". Klick auf "Create Logical Expression Tree". Klick mit der rechten Maustaste auf das neu entstandene "And" und wähle im Menü "Change Typ" den Punkt "Greater Than" (rotes Rechteck).

Unter "Greater Than" sind 2 neue Objekte entstanden, welche mit Werten gefüllt werden müssen.

Klick mit rechter Maustaste auf das linke Objekt und wähle im Menü "Change Type" den Punkt "Property" (rotes Rechteck).

Rechts musst du bei Property Name "PROP RPM" auswählen. Die Liste ist irre lang, darum:
1) Schreibe im Feld Property Filter "prop", dadurch wird die Auswahl bei Property Name erheblich verkürzt.
2) Wähle jetzt bei Property Name "PROP RPM".
3) Bei Index gibst du "1" ein, das ist wichtig, ansonsten funktioniert die Auswertung nicht.

"1" bedeutet, die RPM vom Motor 1 wird ausgewertet, bei mehrmotorigen Maschinen kann, mit Index 1-4, die RPM jedes einzelnen Motors ausgewertet werden.

Als Nächstes muss der Vergleichswert eingegeben werden: Klick mit linker Maustaste das Objekt "Constant" an und gib bei Value "2450" ein. (Weil bei der Maule die RPM-Anzeige nur ungefähr abgelesen werden kann, gebe ich 50RPM Toleranz hinzu.)

TimeTrigger und PropertyTrigger müssen jetzt verknüpft werden.
Schalte das Hauptfenster um auf Visalization.

Es wird eine ObjectActivationAction benötigt. Du kannst diese im Catalog unter Actions suchen, oder schlicht die vorhandene Action mit Namen "LeakText on" im Visualisations-Fenster duplizieren.

Benenne die Action ">2400RPM on", NewObjectState muss auf ACTIVATE gestellt sein, bringe unter ObjectReferenceList den Trigger ">2400RPM" in das Feld "Referenced".

Dupliziere die ObjectActivationAction "LeakText on" und benenne das Duplikat "Timer OilLeak on". NewObjectState steht auf ACTIVATE, bringe nun den Trigger "4,5min. to OilLeack", unter ObjectReferenceList ins Feld "Referenced".

Klicke den PropertyTrigger ">2400RPM" an und bringe unter Actions die ObjectActivationAction "Timer OilLeak on" ins Feld Referenced. Bei OneShot stellst du um auf NO, das bedeutet, der Trigger kann mehrfach auslösen (roter Rahmen).
Steht OneShot auf YES, zündet der Trigger nur 1x und bleibt danach inaktiv.

Die 4 neuen Objekte müssen noch in die Mission eingebunden werden:

Klick auf "StartTimer" und bringe unter OnEnterActions die ObjectActivationAction Namens ">2400RPM on" in das Feld Referenced.
Achtung: "OnEnterActions" (grün) nicht mit "OnEnterFilter", "OnExtitFilter", oder "OnExitActions" (rot) verwechseln, diese sind für andere Funktionen vorgesehen.

Klicke den TimeTrigger namens "4,5min. to OilLeack" an und bringe unter Actions die FailureAction namens "OilLeak" in das Feld Referenced.

Als Letztes muss noch die DelayAction namens "4,5min. bis Öl-Leck" entfernt werden.

Mit linker Maustaste anklicken, dann mit rechter Maustaste klicken und im Menü Delete wählen.

Mission speichern, wenn alles richtig gemacht wurde, ist bei Validation Output kein Fehler mehr gelistet.

Nun probieren wir eine weitere Funktion des SimDirector: "Preview Scenario"

Anstatt den SimDirector beenden, Flug im Prepar3D starten und testen, dabei nicht wissen, warum eine Funktion nicht funktioniert, testen wir gleich im SimDirector.

Das hat den Vorteil, dass man nebenbei beobachten kann, wann welche Action, ausgelöst wird und im Falle des ">2400RPM"-Trigger kann man in der Logic genau sehen, welche RPM-Werte aktuell gemessen werden.

Vorher solltest du aber unbedingt speichern. Der P3d stürzt zwar äusserst selten ab, aber genau bei dieser "Preview Scenario"-Funktion, kann es durchaus zu einem Programmabsturz kommen.
P3d muss hier doppelt arbeiten: Nebst der Darstellung des Fluges, werden alle Daten des SimDirector dargestellt, sammt Echtzeit-Werten.

1) Klicke im oberen Menü-Band auf "Mode".
2) Klicke auf "Preview Scenario".
3) Bestätige die Nachfrage "EnterPreviewmode?" mit Yes.
(Mit klick auf den grün markierten Bereich, kommst du übrigens zurück zum SimDirector.)

Da wir hauptsächlich sehen wollen, was der PropertyTrigger ">2400RPM" auswertet, muss die "Conditional Logic neben dem Prepar3D Fenster sichtbar sein.

Ziehe also mit gedrückt gehaltener Maustaste die Prepar3D-Laschein den Hauptbereich.
Verkleinere das Prepar3D Fenster und schiebe es wie in der Animation unten gezeigt an eine geeignete Stelle. (Falls du einen zweiten Bildschirm besitzt, kannst du das Prepar3D Fenster auch auf diesen Bildschirm verschieben.)
Öffne die Gruppe "TimerFailure", klicke den PropertyTrigger ">2400RPM" an und klicke anschliessend auf "INSPECT LOGIC".

Du siehst jetzt die Auswertung des Triggers: Links dein Flugzeug mit aktuell gemessenen Propeller RPM, rechts bei Constant der eingestellte Wert. Darüber die Auswertung "Greater Than" mit dem Wert "False" (also falsch, bzw. weniger als 2450RPM).

Klick in das Prepar3D-Fenster und betätige "P", um den Pausemodus zu deaktivieren.

Alternativ kannst du auch die Steuerelemente ganz oben rechts verwenden (Play, Simulationsrate ändern, mit den Doppelpfeilen kannst du die Simulation neu starten).

Gib vollen Schub, die RPM werden hochgehen auf 2700RPM und bei "GreaterThan" wird "False" in "True" wechseln. Der Trigger wertet also korrekt aus und wird den Timer für das Öl-Leck aktivieren.

Wechsle zum Bearbeitungsmodus, mit Klick auf "Mode", Sim Editor".

Der ganze Aufwand, welcher hier betrieben wurde, bringt im Flug das gleiche Ergebnis, wie vorher, mit der DelayAction.
Allerdings sind wir noch lange nicht fertig, dies war nur die Vorbereitung, damit die nächsten Erweiterungen funktionieren.


Wie gewohnt: Wer diese Anleitung nicht selber nachbauen will, kann dieses zip herunterladen und die darin enthaltenen Files in sein Speicherverzeichnis kopieren, um das Ergebnis zu sehen.

ExampleFlightExpand1.zip

Ich hoffe, euch machen diese Flüge Spass, wenn ja, gebt doch bitte eine Rückmeldung an p3d@andi20.ch.
Auch Fehlermeldungen (Schreibfehler, falsche Angaben, usw.) an mich senden, ich freue mich über jede Rückmeldung.
Einführung | FlugErstellen | MissionErstellen | MissionErweitern | MissionVollenden ||||| MissionAusbauen 1 | 2 | 3 | 4 | 5 | 6

Einleitung | Warum | Missionen | Tutorial | FIP