Scripten lernen (Em4)

Wir verwenden Cookies, um Inhalte und Anzeigen zu personalisieren, Dienste bereitzustellen und die Zugriffe auf unsere Website zu analysieren. Außerdem werden durch unsere Partner Informationen zu Ihrer Nutzung für soziale Medien, Werbung und Analysen erfasst. Weitere Informationen

  • In dieser Anleitung wird versucht dir das Thema Scripting für Emergency 4 etwas näher zu bringen. Alle Dinge, die für den Anfang wichtig sind werden hier aufgegriffen und möglichst verständlich erklärt und beschrieben

    r große Vorteil an Emergency 4 ist, dass es für Anfänger einen einfachen Einstieg ermöglicht, da das Software Development Kit (SDK)sehr übersichtlich ist, was die Befehle angeht. Trotzdem wird sich dieses Tutorial nicht mit allen Bereichen des Programmierens beschäftigen (können). Mit dieser Anleitung wird man danach auch nicht sofort jedes Scriptproblem lösen können, es bietet aber eine gute Möglichkeit, sich dem Bereich des Scripting zu nähern. Manchmal kann es sein, dass der Leser die Strukturierung dieses Tutorials nicht komplett nachvollziehen kann. Jedoch sind viele Themen so komplex miteinander verknüpft, dass wir versucht haben, die einzelnen
    Themen in eine möglichst logische Reihenfolge zu bringen. Sollte die Reihenfolge einmal nicht ganz logisch erscheinen, ist ein Springen zwischen dei Einzelnenen Themenblöcken problemlos möglich.

    1 Grundlagen

    1.1 Das passende Programm
    Doch bevor man wirklich beginnen kann Scripts zu schreiben, benötigt man ein Textprogramm. Im Grunde kann dazu einfach der unter Windows standardmäßig installierte Editor verwendet werden, der jedoch beispielsweise kein farbliches Absetzten von bestimmten Wörtern unterstützt, was den ganzen Vorgang deutlich erschwert. Wir empfehlen das kostenlose Programm Sublime Text2 zu verwenden und mit der Erweiterung für Emergency 4 von em-modder zu versehen.
    Wer Probleme mit der Einbindung des Package hat, der kann die Anleitung des Modders noBlubb verwenden.
    Das Schöne an dem Programm ist, dass durch das Erweiterungspaket das SDK mit eingebunden ist und Vorschläge gegeben werden, die zu dem gerade eingegebenen Text passen.
    Jetzt haben wir die Grundlage geschaffen, jedoch macht einen das auch nicht zum Meister des Scriptens.


    1.2 Compiler
    Der Computer verwendet keine Hochsprache wie wir es in unserem täglichen Lebe zur Kommunikation tun. Der Computer kann nur die zwei Zahlen 0 und 1 verarbeiten. So bedeutet 10100110 im Binärsystem 160 in unserem Dezimalsystem. Da wir in einer Welt aufwachsen, die sich aus dem Dezimalsystem heraus aufbaut, können wir die Sprache des Computers nicht effektiv beherrschen. Der Compiler ist sozusagen ein Dolmetscher, der unserer Hochsprache (hier die Programmiersprache von Emergency 4) in die Sprache des Computer übersetz.

    Eine Zeile muss immer mit einem Strichpunkt (;) abgeschlossen werden. Ausnahmen bilden hier Methoden und Schleifen.



    1.3 Kommentare
    Eine wichtige Funktion beim Programmieren ist die Kommentarfunktion. Je größer ein Script wird, desto unübersichtlicher wird es. Arbeiten mehrere Entwickler an einem Script, so weiß Programmierer1 nicht, was sich Programmierer2 bei seinem geschriebenen Code gedacht hat. Pausiert die Entwicklung eines Scripts längere Zeit, weiß oftmals der alleinige Ersteller nach Monaten nicht mehr, was er sich damals beim Programmieren gedacht hat. Aus diesem Grund ist es sinnvoll, bestimmte Bereiche mit Kommentaren zu versehen. Kommentare sind Teile im Script, die der Compiler nicht beachtet. Hier kann also die normale Sprache verwendet werden. Solche Zeilen haben keinen Einfluss auf das spätere Programm.

    1.3.1 Einzeilige Kommentare
    Einzeilige Kommentare werden durch einen Doppel-Slash markiert.

    PHP-Quellcode

    1. void Hallo()
    2. {
    3. //Hier wird das Wort “Hallo” auf dem Bildschirm ausgegeben
    4. Game::ShowHelpText(„Hallo“);
    5. }







    1.3.2 Mehrzeilige Kommentare
    Wenn man mehrere Zeilen auskommentieren möchte, wäre es sehr zeitaufwändig vor jeder Zeile einen Doppel-Slash zu setzten. Bei drei Zeilen ist dieses Verfahren noch durchaus tragbar, wird jedoch bei 100 Zeilen der Zeitaufwand untragbar. Hierzu setzt man vor die erste Zeile ein „/*“ und beendet die letzte Zeile mit einem „*/“. Der Textinhalt zwischen diesen beiden Zeichen wird somit wieder nicht vom Compiler beachtet.

    PHP-Quellcode

    1. /*
    2. In diesem Teil
    3. des Scripts wird
    4. ein Wort auf dem
    5. Bildschirm ausgegeben
    6. */
    7. void Hallo()
    8. {
    9. //Hier wird das Wort “Hallo” auf dem Bildschirm ausgegeben
    10. Game::ShowHelpText(„Hallo“);
    11. }
    Alles anzeigen

    2 Variablen
    Du hast einen Freund, der sich jeden Monat eine neue Festnetznummer und Handynummer zuweisen lässt, um nicht von irgendwelchen Geheimdiensten abgehört zu werden. Zu Beginn jeden neuen Monats kommt er zu dir nach Hause und sagt dir seine neuen Nummern. Da du auch weißt, dass er monatlich seine Nummern ändert schreibst du nur mit Bleistift, um die alten Nummern wegzuradieren und die Neuen darüber zu schreiben. Da es dir schwer fällt eine Handynummer von einer Festnetznummer zu unterscheiden, schreibst du immer „Festnetz Franz“ und „Handy Franz“ vor die jeweilige Nummer.
    Beim Scripten verhält es sich mit Variablen ähnlich wie in dem Beispiel mit den Telefonnummern.
    • Der Bezeichnung der Nummer (Festnetz Franz/ Handy Franz) ist der Name der Variable
    • Die Nummer entspricht dem Wert der Variable
    • Der Zusatz Festnetz bzw. Handy bestimmt den Datentyp der Variable

    2.1 Deklaration von Variablen
    Unter Deklaration versteht man das Definieren von Variablen.

    PHP-Quellcode

    1. int Zahl = 1;
    2. int Zahl;
    Im ersten Beispiel wird eine Variable mit dem Namen Zahl erzeugt und zeitgleich auf den Wert 1 bestimmt. In der zweiten Zeile wird nur die Variable bestimmt ohne sie mit einem Inhalt zu füllen. Das muss an einer anderen Stelle geschehen.
    Nun steht allen untergeordneten Bereichen des Scripts die Variable Zahl zur Verfügung. Wurde die Variable anfangs noch mit keinem Inhalt gefüllt, könnte ein späterer Teil des Scripts so aussehen

    PHP-Quellcode

    1. Zahl = 5;
    2. Zahl = Zahl +3;
    Da im Script die Variable Zahl ohne Inhalt definiert wurde, weisen wir ihr zuerst den Wert 5 zu, um danach, die Zahl 3 zu addieren. Wird später im Script nun die Variable Zahl verwendet, hat sie den Inhalt 8.

    2.2 Datentypen
    Im oberen Beispiel mit den Telefonnummern von Franz konnten wir nicht zwischen Handy- und Festnetznummer unterscheiden. Deshalb haben wir Handy und Festnetz davor geschrieben. Der Computer ist noch „dümmer“ und kann beispielsweise auch nicht zwischen Text und Zahl unterscheiden. Aus diesem Grund müssen wir bei der Deklaration immer dem Compiler sagen, was für eine Art von Wert er vor sich hat.





    CodeBezeichnungBedeutungBeispiel
    intintegerganzzahlige Werteint Zahl1 = 1;
    float-----------Gleitkommazahlenfloat Zahl2 = 1.5;
    charcharacterBuchstaben (-riehe mit [] )char Wort[] = "Hallo"
    boolbooleanWahrheitswert (true/false)bool Wahrheit = true;





    Durch einen Vorsatz von const wird die Variable als konstant deklariert. Es kommt also zu einem Fehler, falls der Wert dieser Variable im späteren Verlauf des Scripts verändert wird.
    Daneben kann in Emergency beispielsweise Vehicle auch als Datentyp verwendet werden. Der Compiler muss auch wissen, dass zum Beispiel die Variable v ein Fahrzeug ist und keine Zahl oder ein Wort.


    2.3 Benennung

    Die Benennung von Variablen sollte gut überlegt sein. So ist beispielsweise der Name AnzahlFahrzeuge aussagekräftiger als der Name Zahl. Das hilft zum einen anderen Entwicklern das Programm schneller und leichter zu verstehen und zum anderen kann man so leichter den Überblick über sein eigenes Script behalten, was bei langen Scripts sehr wichtig ist.
    Man muss auch einige Regeln beachten, damit der Compiler die Variable verarbeiten kann.
    • Der Name darf nur aus Buchstaben, Ziffern und Unterstrichen bestehen (Leerzeichen ist unzulässig)
    • Groß- und Kleinschreibung ist relevant (zahl ist nicht das gleiche wie Zahl)
    • Der Name darf kein Befehl oder Schlüsselwort sein
    Zudem sollte man darauf achten, jeden Variablennamen nur einmal zu verwenden, da es sonst zu Überschreibungen von Inhalten einer Variable kommen kann.

    Eine Variable wird immer ohne „“ verwendet. Der Inhalt eines character jedoch wird immer von „“ begleitet. Wird also irgendwo im Script Hallo ohne „“ verwendet, ist Hallo eine Variable mit einem Inhalt. Wird „Hallo“ mit „“ verwendet, wird wirklich das Wort Hallo verarbeitet.

    C-Quellcode

    1. const char Hallo[] = “Moin”; //Deklaration der Variable Hallo mit unbestimmter Anzahl an möglichen Zeichen
    2. Game::ShowHelpText(Hallo); //Hier wird der Inhalt der Variable Hallo (Moib) am Bildschirm angezeigt
    3. Game::ShowHelpText(„Hallo“); // Hier wird das Wort Hallo auf dem Bildschirm angezeigt.
    2.4 Operatoren

    2.4.1 Zuweisung
    Den einfachsten Operator, das =, haben wir bereits bei der Zuweisung von Werten zu einer Variable verwendet. Auf der linken Seite des = steht die Variable, die einen neuen Wert annehmen soll, rechts neben dem = steht der neue Wert. Ein konstanter Wert, eine Formel oder eine andere Variable.

    C-Quellcode

    1. int a = 5;
    2. int b = 3;
    3. //Setzten der Variable a auf einen konstanten Wert
    4. a = 1;
    5. //Erhöhen der Variable a um 5
    6. a = a + 5;
    7. //Setzten des Werts von Variable a auf den Wert von Variable b
    8. a = b;
    Alles anzeigen



    2.4.2 Inkrement und Dekrement
    Wird ein Wert einer Variable nur um eins erhöht oder erniedrigt, bietet es sich an die Inkrement und Dekrement-Operatoren zu verwenden. Das nachfolgende Beispiel zeigt den Vorteil dieser Operatoren.

    C-Quellcode

    1. int a = 5;
    2. int b = 3;
    3. //a ohne Inkrement-Operator erhöhen
    4. a = a + 1;
    5. //a mit Inkrement-Operatorerhöhen
    6. a++;
    7. //b ohne Dekrement-Operator erniedrigen
    8. b = b - 1;
    9. //b mit Dekrement-Operator erniedrigen
    10. b--;
    Alles anzeigen

    2.4.3 Rechenoperatoren
    In den Scripts können natürlich Rechnungen ausgeführt werden. Hierfür stehen uns die ganz normalen Rechenoperatoren und Rechenregeln zur Verfügung, die wir aus der Mathematik kennen.
    Auch hier gibt es wieder eine kurze Version, Rechnungen darzustellen.

    C-Quellcode

    1. int a = 0;
    2. int b = 1;
    3. a += 2; //gleich wie a = a + 2, a ist 1
    4. a += b * 4 //a ist 6 (durch vorherige Rechnung ist Ausgangswert für a 2)
    5. a /= 2; // a ist 3
    2.5 Typenumwandlung

    Muss der Spieler beispielsweise in ein Textfeld eine Zahl eingeben, wird diese vom Computer jedoch wie eine Buchstabenkette behandelt. Eine Rechnung damit ist also nicht möglich. Umgekehrt ist es ebenfalls möglich und manchmal nötig. Hierzu bietet uns das SDK von Emergency 4 Möglichkeiten einen Wert in einen anderen Datentyp umzuwandeln.

    integer zu character

    C-Quellcode

    1. int Zahl = 50; //Deklaration der Variable Zahl
    2. char Wort[5]; //Deklaratio der Variable Wort mit 5 möglichen Stellen. Es werden nur die ersten 5 Zeichen dargestellt. Haustür --> Haust. Anzahl der möglich Zeichen frei wählbar.
    3. snprintf(Wort, 5, „%i“, Zahl); //Der Variable Wort wird ein neuer Wert zugeordet. Wort hat 5 mögliche Stellen (zuvor defniert). In „“ folgt der Text. Durch %wird angegeben, dass an diese Stelle etwas eingesetzt werden sollte. Durch i kann ein integerer Wert eingesetzt werden. Dahinter folgt der Wert, der für %i eingesetzt werden sollte, hier Zahl mit 50


    float zu character

    C-Quellcode

    1. float Zahl = 50.1; //Deklaration der Variable Zahl
    2. char Wort[5]; //Deklaratio der Variable Wort mit 5 möglichen Stellen. Es werden nur die ersten 5 Zeichen dargestellt. Haustür --> Haust. Anzahl der möglich Zeichen frei wählbar.
    3. snprintf(Wort, 5, „%f“, Zahl); //Der Variable Wort wird ein neuer Wert zugeordet. Wort hat 5 mögliche Stellen (zuvor defniert). In „“ folgt der Text. Durch %wird angegeben, dass an diese Stelle etwas eingesetzt werden sollte. Durch f kann ein float Wert eingesetzt werden. Dahinter folgt der Wert, der für %f eingesetzt werden sollte, hier Zahl mit 50.1

    character zu integer

    C-Quellcode

    1. char Wort[5] = „50“; //Deklaration der Variable Wort
    2. int Zahl = Math::atoi (Wort); //Deklaration der Variable Zahl und setzten des Wertes auf den Inhalt der Variable Wort

    character zu float

    C-Quellcode

    1. char Wort[5] = „50.1“; //Deklaration der Variable Wort
    2. float Zahl = Math::atof (Wort); //Deklaration der Variable Zahl und setzten des Wertes auf den Inhalt der Variable Wort


    3 Verzweigunen

    Oft ist es wichtig ein Teil eines Script nur dann ausführen zu lassen, wenn etwas anderes erfüllt ist.



    In dieser Zeichnung wir verdeutlicht, dass der Wert der Variable Zahl gebprüft werden soll. Wenn der Wert 0 beträgt, dann soll auf dem Bildschirm die Meldung ausgegeben werden, dass Zahl in Inhalt 0 hat. Wenn der Wert nicht 0 ist. Also größer oder kleiner, dann wird die Meldung ausgegeben, dass Zahl größer ist. Da wir in diesem Beispiel immer einen positiven Inhalt wollen, prüfen wir vorher, ob die Zahl positiv, also größer-gleich 0 ist.


    3.1 Vergleichsoperatoren




    istGleich
    ==
    Ungleich!=
    größer>
    kleiner>
    größerGleich>=
    kleinerGleich<=




    3.2 Logische Operatoren




    Negation!
    UND-Operator
    &&
    ODER-Operator||




    Man kann natürlich auch vergleichen, ob ein character einen bestimmten Inhalt hat. Hier funktioniert in Emergency 4 die IstGleich- oder Ungleich- Variante nicht wirklich zuverlääsig, jedoch gibt es eine Möglichkeit zwei characters miteinander zu vergleichen.

    C-Quellcode

    1. const char Wort1[] = "Hallo";
    2. const char Wort2[] = "Servus";
    3. if( StrCompare(Wort1, Wort2) == 0 )
    4. {
    5. //Die Bedingung ist erfüllt, wenn der Unterschied der Buchstaben 0 ist. Jeder Buchstabe ist also bei den
    6. beiden Worten immer gleich
    7. }

    Sind Wörter nicht gleich, so gibt StrCompare die Anzahl an unterschiedlichen Buchstaben aus. Vergleicht man zum Beispiel die Wörter „Hallo“ und „Halli“, so wäre der zurückgegeben Wert 1, also Ungleich 0

    C-Quellcode

    1. const char Wort1[] = "Hallo";
    2. const char Wort2[] = "Servus";
    3. if( StrCompare(Wort1, Wort2) != 0 )
    4. {
    5. //Die Bedingung ist erfüllt, wenn die Wörter nicht gleich sind
    6. }



    4. Schleifen

    4.1 if und else

    Eine Verzweigung innerhalb des Scripts wird durch eine Bedingung gesteuert. Wenn Zahl gleich 0, dann gebe die Meldung aus, dass Zahl gleich 0 ist.

    Solche Bedingungen werden mit Hilfe einer if und else Anweisung realisiert. Nach if folgt in runden Klammern eine Bedingung, die erfüllt sein muss, um in den Teil mit geschwungenen Klammern der unmittelbar danach folgt auszuführen.
    Sollte die Bedingung in der if-Klammer nicht erfüllt sein, wird der Befehl in der else-Klammer ausgeführt. Das else-Statement kann auch weggelassen werden, falls nur etwas ausgeführt werden soll, wenn die if-Bedingung erfüllt ist.

    C-Quellcode

    1. int Zahl = 0;
    2. if(Zahl == 0)
    3. {
    4. Game::ShowHelpText("Die Variable Zahl hat den Wert 0");
    5. }
    6. else
    7. {
    8. Game::ShowHelpText("Die Variable Zahl hat nicht den Wert 0");
    9. }
    Man kann das else-Statement auch noch mit einer weiteren zu erfüllenden Bedingung koppeln.

    C-Quellcode

    1. int Zahl = 0;
    2. if(Zahl == 0)
    3. {
    4. Game::ShowHelpText("Die Variable Zahl hat den Wert 0");
    5. }
    6. else if(Zahl> 0)
    7. {
    8. Game::ShowHelpText("Die Variable Zahl hat einen Wert, der größer als 0 ist");
    9. }
    10. else if(Zahl <0)
    11. {
    12. Game::ShowHelpText("Die Variable Zahl hat einen Wert, der kleiner als 0 ist");
    13. }
    Alles anzeigen
    In einer if oder else-Klammer kann auch noch eine weitere if-Abfrage folgen. Sollte beispielsweise etwas ausgeführt werden, wenn zwei Bedingungen erfüllt sind, lohnt es sich den UND-Operator bzw. ODER-Operator zu verwenden. So spart man sich eine unübersichtliche Verschachtelung von vielen if-Statements.


    4.2 switch case


    Oftmals muss man mehrere Bedingungen nebeneinander betrachten, ob diese erfüllt sind, um dann bestimmte Teile des Scripts auszuführen.
    Neben der if-Anweisung gibt es die switch-Anweisung. Nach dem Schlüsselwort switch folgt in runden Klammern die Variable, die wir überprüfen wollen. In dem danach folgendem Block, eingeklammert mit geschwungenen Klammern, werden mit dem Schlüsselwort case die verschiedenen Fälle betrachtet. Danach folgt nach einem Doppelpunkt der auszuführende Befehl, der mit dem Statement break; beendet wird. Soll etwas ausgeführt werden, wenn keine der oberen Bedingungen zutrifft, wird dass mit dem Schlüsselwort default eingeleitet

    C-Quellcode

    1. int Zahl = 2;
    2. switch(Zahl)
    3. {
    4. case 1:
    5. Game::ShowHelpText("Inhalt der Variable Zahl beträgt 1");
    6. break;
    7. case 2:
    8. Game::ShowHelpText("Inhalt der Variable Zahl beträgt 2");
    9. break;
    10. case 3:
    11. Game::ShowHelpText("Inhalt der Variable Zahl beträgt 3");
    12. break;
    13. default:
    14. Game::ShowHelpText("Inhalt der Variable Zahl beträgt nicht 1, 2 oder 3");
    15. break;
    16. }
    Alles anzeigen
    Das selbe Prinzip ist auch mit character möglich.

    C-Quellcode

    1. const char Wort[] = "Hallo";
    2. switch(Wort)
    3. {
    4. case "Hallo":
    5. Game::ShowHelpText("Inhalt der Variable Wort beträgt Hallo");
    6. break;
    7. default:
    8. Game::ShowHelpText("Inhalt der Variable Wort beträgt nicht Hallo");
    9. break;
    10. }
    Alles anzeigen


    4.3 for-Schleifen


    Eine for-Schleife ist wie schon der Name sagt, eine Schleife, die eine bekannte Anzahl an Wiederholungen ausgeführt wird.
    Man benötigt also immer eine integere Variable, die zum Zählen der Durchläufe verwendet wird. Überlicherweise wird hierfür die Variable mit dem Buchstaben i benannt. Es ist aber jeder andere Name auch möglich, jedoch wird meistens nur ein Kleinbuchstabe verwendet.
    Eine solche Schleife wird mit dem Schlüsselwort for eingeleitet. Danach folgen in runde Klammern drei Bereiche, die mit Strichpunkten voneinander getrennt sind.
    • Bereich 1: Startwert und Deklaration der Zählervariable, z.B. int i = 0
    • Bereich 2: Endebedingung der Durchläufe, z.B. i ⇐ 5 (solange i ⇐ 5 ist, wird die Schleife ausgeführt)
    • Bereich 3: Rechenoperation der Zählervariable pro Durchlauf, z.B. i++ (pro Durchlauf wir i hier um eins erhöht)

    C-Quellcode

    1. for(int i = 0; i <= 5; i++)
    2. {
    3. System::Log("Der Zaehler hat den Wert %i", i);
    4. //Pro Durchlauf wird ein Text erzeugt, der in der Logfile ausgegeben wird. Der Befehl System::Log() funktioniert wie snprintf. An %i wird ein integer Wert gesetzt, hier die Variable i, der Zähler
    5. }
    Ausgabe in der Logfile

    C-Quellcode

    1. !Der Zaehler hat den Wert 0
    2. !Der Zaehler hat den Wert 1
    3. !Der Zaehler hat den Wert 2
    4. !Der Zaehler hat den Wert 3
    5. !Der Zaehler hat den Wert 4
    6. !Der Zaehler hat den Wert 5

    Es ist ebenfalls möglich mehrere for-Schleifen ineinander zu verschachteln. Hierbei muss jedoch jeder Zähler anders benannt werden.
    Werden mehrere for-Schleifen verwendet, die jedoch nicht ineinanderverschachtelt sind, kann der Zähler gleich benannt werden, wie in einer vorhergegangen Schleife.


    5 Methoden

    Grundsätzlich hat man beim Programmieren die Möglichkeiten neue Methoden zu definieren. Eine Methode ist ein Bereich im Script, in dem bestimmte Dinge passieren. Wird diese Methode aufgerufen, werden alle Befehle ausgeführt. Muss man immer wieder die gleichen Schritte passieren lassen, macht es Sinn diese Schritte in eine neue Methode auszulagern und immer wieder diese auszuführen. Das spart Ressourcen, die wir vielleicht an einer anderen Stelle benötigen würden. Jedoch steht uns diese Möglichkeit in Emergency 4 nur in Missionsscripten zu Verfügung. Hat man jedoch das Grundprinzip verstanden, kann man leichter Missionsscripte schreiben und den Transfer auf CommandScripts herstellen. Mehr dazu kann man aber in den einzelnen Unterkapiteln der speziellen Scriptarten lesen.

    5.1 Methoden erstellen

    Eine neue Methode beginnt meistens mit dem Schlüsselwort void. Danach folgen zwei runde Klammern. In den geschwungenen Klammern stehen dann die Befehel die ausgeführt werden sollen.

    C-Quellcode

    1. void Start()
    2. {
    3. Addieren(); //Ausführen der Methode Addieren
    4. {
    5. void Addieren()
    6. {
    7. int Zahl1 = 5;
    8. int Zahl2 = 4;
    9. int Zahl3 = Zahl1 + Zahl2;
    10. }
    Alles anzeigen

    5.2 Parameter

    Wenn wir zwei Zahlen addieren wollen ist es sinnvoller, der Methode zu sagen, welche Zahlen addiert werden sollen, als immer die fix festgelegten Zahlen 5 und 4 zu addieren.
    Hierzu ist es möglich, der Methode bestimmte Paramter zu übergeben, die beim Aufrufen der Methode übergeben werden. Die Paramter stehen in der Methode dann als bereits deklariete Variablen zu Verfügung.

    C-Quellcode

    1. void Start()
    2. {
    3. Addieren(5, 4); //Ausführen der Methode Addieren
    4. {
    5. void Addieren(int summand1, int summand2)
    6. {
    7. int Zahl3 = summand1 + summand2;
    8. }
    In diesem Beispie müssen der Methode Addieren beim Aufrufen integere Werte übergeben werden. Hier können natürlich alle Variablen verschiedener Datentypen übergeben werden

    C-Quellcode

    1. void Methode1(int Zahl)
    2. {}
    3. void Methode2(const char *Name)
    4. {}
    5. void Methode3(float Gleitkommazahl)
    6. {}
    7. void Methode4(bool Wahrheit)
    8. {}
    9. void Methode5(GameObject *Objekt)
    10. {}
    Alles anzeigen




    6 Lists

    Lists (engl. list = Liste) stellt eine Möglichkeit dar Objekte auf der Karte von Emergency 4 zu erfassen und zu speichern. Wir können uns das ganze wie eine leere Tabelle vorstellen, die beim Initialisieren der List mit Inhalten gefüllt wird, die von uns nach bestimmten Kritierien ausgewählt werden.
    Eine List ist vergleichbar mit einem Array, auch Feld genannt. Wer mehr über Arrays erfahren möchte, kann gerne einen Suchmaschinendurchlauf nach dem Eintrag programmieren array starten. Dort sind einige interessante Dinge zu lesen, die das Verständnis für Lists in Emergency 4 erleichtern. Wie anfangs jedoch beschrieben, geht diess Tutorial nicht sehr in die Tiefe.
    Der Zweck von Lists besteht darin bestimmte Objekte zu erfassen, die man später im Script weiterverwenden kann, beispielsweise Fahrzeuge zu einem bestimmten Ort fahren zu lassen.

    6.1 Initialisierung und Arten von Lists

    Es gibt bei Emergency 4 acht verschiedene Arten von Lists
    • ActorList
    • GameObjectList
    • PersonList
    • VehicleList
    • FireObjectList
    • OpenHouseList
    • PathList
    • SpawnPointList


    Wie die Namen der Lists schon verraten, muss man für verschiedene Objekte verschiedene Arten von Lists verwenden.

    Wir nehmen jetzt ein Beispiel, und wollen alle Fahrzeuge auf der Map mit dem Namen „Fahrzeug“ in eine List schreiben. Da ein Vehicle auch ein GameObject ist, könnten wir eine GameObjectList verwenden, um aber zu gewährleisten, dass nur Fahrzeuge in die List aufgenommen werden, verwenden wir in diesem Beispiel eine VehicleList.

    C-Quellcode

    1. VehicleList vl("Fahrzeug"); //Initialisierung einer VehicleList mit dem Namen vl, nur Fahrzeuge mit dem Namen //Fahrzeug // werden in die List aufgenommen
    Schauen wir uns mal die verschiedenen Arten von GameObjectLists an sehen wir, dass wir sehr viele Möglichkeiten haben zu entscheiden, wie wir unsere List füllen wollen.

    C-Quellcode

    1. GameObjectList gl(); //Schreibt alle GameObjects in eine List
    2. GameObjectList gl(const char *Name_); //Schreibt alle GameObjects mit bestimmten Namen in eine List
    3. GameObjectList gl(const GameObjectList &Copy_); //Übernimmt die GameObjects aus einer bereits initialisierten List
    4. GameObjectList gl = Game::GetGameObjects(GameObjectType type_); //Schreibt alle GameObjects eines Typs in eine List
    5. GameObjectList gl = Game::GetGameObjectsWithPrefix(const char* Prefix_); //Schreibt alle GameObjects mit einem Prefix in einer List
    6. GameObjectList gl = Game::GetSelectedGameObjects() //Schreibt die momentan selektieren GameObjects in eine List


    6.2 Lists durchlaufen

    Nun haben wir aus dem vorherigen Beispiel eine VehicleList mit allen Fahrzeugen mit dem Namen Fahrzeug. Nun wollen wir auch etwas damit machen. Zum Beispiel von allen Fahrzeugen die Anzahl an Insassen auslesen und in die LogFile eintragen. Um eine List zu durchlaufen benötigen wir eine sich wiederholende Schleife, eine for-Schleife, die den ersten Eintrag der List (denkt an das Beispiel mit der Tabelle) durchgeht. Jede Zeile in dieser „Tabelle“ hat eine Nummer, einen sogenannten Index, der immer von 0 an begonnen wird zu zählen.
    Index 0 = erster Eintrag in List
    Index 1 = zweiter Eintrag in List

    Die Wiederholungen unserer Schleife sollen sich natürlich an der Anzahl der Einträge der List richten. Dazu benutzen wir folgenden Code, der uns die Anzahl an Einträge als integer-Wert zurück gibt

    C-Quellcode

    1. int Anzahl = vl.GetNumVehicles();
    In unserem Fall mit dem Schlüsselwort for sieht der Code wie folgend aus

    C-Quellcode

    1. for(int i = 0; i <vl.GetNumVehicles(); i++)
    2. {
    3. //Code
    4. }

    Nun wollen wir noch den Eintrag aus der List mit dem gerade passenden Index verwenden

    C-Quellcode

    1. for(int i = 0; i <vl.GetNumVehicles(); i++)
    2. {
    3. int PassagierZahl = vl.GetVehicle(i)->GetNumPassengers();
    4. System::Log("%i", PassagierZahl);
    5. }



    7 Abschluss

    Einige werden sich jetzt trotzdem fragen, wie sie eigene Scripts schreiben können. Das ist natürlich nicht nach kurzem Durchlesen dieses Tutorials möglich. Das Scripten lernen ist ein langwieriger Prozess.
    Schaut euch zu Beginn leichte, kurze Scripts aus der an und versucht nur den wirklichen Ablauf des Scripts zu verstehen. Versucht nazuvollziehen was das Script InGame bewirkt und versucht euch die verwendeten Funktionen und Methoden zu verstehen und zu merken. So erweitert ihr ständig euer Wissen und ihr könnt immer komplizierter Scripts verstehen.
    Ihr könnt auch gerne in der Unterkategorie MissionsScript und CommandScript nachlesen, um weitere Tipps und Tricks zu erhalten.
    Ihr werdet euch auch daran gewöhnen müssen, dass ein Script nicht sofort funktioniert. Bei praktisch jedem Script und bei den bessten Scriptern kommt es anfangs zu Fehlern im Script. Kommt ein Error, könnt ihr in der LogFile die genau Fehlermeldung auslesen. Dort steht welches Script den Fehler beinhaltet, in welcher Zeile und was genau das Problem ist.

    Dann bleibt uns nichts mehr anderes übrig als euch viel Spaß beim Lernen und Scripten zu wünschen

    168 mal gelesen