Tutorial: Textbox erstellen

  • Weil ich lange nach der Lösung dieses Problems gesucht habe, möchte ich meine Erkenntnisse hier für alle, die das Problem auch hatten, zusammenfassen.


    Ziel


    Ergebnis dieses Tutorials ist es, im Spiel beim Betreten eines bestimmten Gebietes mit dem LUA-Script eine MessageBox mit einem eigenen Text anzuzeigen.


    Vorraussetzung
    Die Map muss bereits spielbar sein ;)
    Edit: Es scheint nur zu funktionieren, wenn man die Karte als Einzelspieler-Map spielt, weil im Multiplayer die Scripte scheinbar deaktiviert sind. :(


    Tutorial


    1.) Die Vorbereitung der Karte
    [BILD]
    Ich habe hier eine Testkarte erstellt, in der der Startheld des Spielers auf einer StraÃe steht, die zu seiner Stadt führt. Die StraÃe ist von einem Wald umgrenzt, damit der Held auf der StraÃe bleiben muss.
    Die Nachricht soll etwa angezeigt werden, wenn der Held die Hälfte der StraÃe entlanggeritten ist.


    2.) Region erstellen
    [BILD]
    Jetzt öffnen wir im rechten Bereich des Editors die Registerkarte "Region" und wählen den Button "New Region" aus. Wir ziehen einen rechteckigen Bereich mitten über die StraÃe. Der Editor nennt diesen Bereich nach dem er erstellt wurde automatisch "unnamed 0".Wir klicken also das Textfeld über der Liste an und geben einen aussagekräftigeren Namen ein, etwa "Textbox1" und bestätigen die Eingabe mit Enter. Der Name wird auch in der Liste geändert.


    3.) Missionsordner finden
    [BILD]
    Wir speichern die Karte im Editor erstmal ab und minimieren ihn. Jetzt öffnen wir im Windows-Explorer den Ordner Heroes-Installationsordner\Editor\H5MMods\. Darin ist je ein Ordner für jede Karte, die mit dem Editor erstellt wurde. Wir doppelklicken dann auf den Odner, der den Namen unserer Karte trägt und gehen in den Unterordner \Maps\Multiplayer\<Kartenname\
    Wir befinden uns jetzt im Ordner:
    HeroesV\Editor\H5MMods\<Kartenname>\Maps\Multiplayer\<Kartenname>\
    Wenn beim Erstellen der Karte natürlich Single MIssion ausgewählt wurde heiÃt der Ordner Multiplayer natürlich anders.


    4.) Textdatei erstellen
    [BILD]
    Wir klicken auf eine freie Stelle in dem Ordner und wählen "Neu\Textdokument" aus. Wir benennen die "Neu Textdatei.txt" um, etwa in "hallo_welt.txt". Wir doppelklicken auf die Datei, um sie im Windows-Editor(notepad) zu öffnen. Jetzt müssen wir den Text schreiben, der nachher in der Nachricht angezeigt wird. Für den Anfang reicht etwa "Hallo Welt!". Im Datei Menü wählen wir "Speichern unter..." aus.(Wichtig: beim ersten Speichern der neuen Datei darf nicht nur "Speichern" benutzt werden, sonst funktioniert es nicht.) Im Fenster "Datei speichern unter" wählen wir die Textdatei, die wir erstellt haben aus. Jetzt muss in dem Auswahlfeld neben "Codierung:" der Wert "Unicode" eingestellt werden. Nach dem Klick auf Speichern muss nur noch die Frage zum Ãberschreiben der Datei bestätigt werden.


    5.) Das Script erstellen
    [BILD]
    Editor und Windows-Explorer können wieder geschlossen werden, wir wenden uns jetzt wieder dem Karteneditor zu.
    Unter "View" wählen wir die "Map Properties" aus. Nach kurzer Zeit öffnet sich das entsprechende Fenster. Darin wählen wir oben die Registerkarte "Script" aus und klicken dann "Edit Script" an. Es öffnet sich der Script-Editor. Darin geben wir folgendes Script ein:

    Code
    function hallo_welt()
    	MessageBox("/Maps/Multiplayer/MessageBox/hallo_welt.txt");--Zeigt die Nachricht aus der Textdatei an
    	Trigger(REGION_ENTER_WITHOUT_STOP_TRIGGER,"Textbox1",nil);--Schaltet den Auslöser wieder ab, um das Ereignis nicht nochmal auszulösen
    end;
    Trigger(REGION_ENTER_WITHOUT_STOP_TRIGGER,"Textbox1","hallo_welt()");--Setzt den Auslöser zum Aufruf der Funktion


    Erklärung des Scripts:
    Zeile 1: Leitet die Funktion mit dem Namen "hallo_welt" ein.
    Zeile 2: Zeigt den Text aus der Textdatei, die wir vorher erstellt haben, an. Die Pfadangabe beginnt mit einem Schrägstrich "/" und stellt den Pfad zu Textdatei dar. Meine Testkarte hieà "MessageBox", deshalb steht das da. Das muss natürlich durch den Namen eurer Karte ersetzt werden.(Multiplayer evtl auch wieder durch den Ordnernamen für Einzelspieler-Karten)
    Zeile 3: siehe unten
    Zeile 4: beendet die Definition der Funktion
    Zeile 5: Weist dem Auslöser(Trigger) für das Ereignis "Held betritt die Region und muss nicht anhalten", für die Region "Textbox1"(haben wir am Anfang als Name für die Region eingegeben), den Wert "hallo_welt()" zu, um diese Funktion beim Eintreten des Ereignisses zu starten. In Zeile 3 wird der Auslöser wieder entfernt, in dem als Funktion der Wert nil übergeben wird. Dadurch wird die Funktion beim erneuten Betreten des Gebiets nicht noch einmal ausgelöst.


    6.) Das Ergebnis
    [BILD]
    Im Script-Editor klicken wir auf OK, in den Map-Properties auch.
    SchlieÃlich speichern wir die Karte im Editor ab und starten das Spiel.
    Unter Einzelspieler/Einzelszenario(evtl. Multiplayer Karten anzeigen) sollte die Karte zu finden sein. Wenn wir sie jetzt starten und unseren Helden die StraÃe entlang auf die Stadt zu bewegen, sollte die Textbox erscheinen, sobald der Held das Gebiet betritt.


    Weitere Möglichkeiten
    In der Funktion hallo_welt kann man natürlich noch weiteren Code unterbringen, etwa um dem Helden Kreaturen zu geben oder anderes.
    Mehrere MessageBoxen auf einer Karte sind natürlich möglich, man muss nur dementsprechend die Namen der region/Funktion/Textdatei ändern.


    Ich hoffe, ich habe nichts vergessen und wünsche euch viel Spaà beim Ausprobieren :)


    Edit: Falls mir ein Fehler unterlaufen ist oder irgendetwas nicht so funktioniert wie beschrieben, sagt bitte hier Bescheid, damit ich das korrigieren kann.;)

    "Well, things just got simpler. And a lot more complicated."

    6 Mal editiert, zuletzt von makrise ()

  • Ich glaube, eigentlich war es gar nicht geplant, überhaupt Textboxen anzuzeigen oder Dateien zu der Karte hinzuzufügen :(
    Am einfachsten wäre es gewesen, wenn man der MessageBox Funktion einfach den Text zum anzeigen übergeben könnte, aber das hat Ubi wohl nicht so gemacht, weil sie sonst für jede Sprachversion die Scripte hätten ändern müssen. :crazy:

    "Well, things just got simpler. And a lot more complicated."

  • Vermutlich war dieses Vorgehen auch mit der eher wagen Beschreibung gemeint, es werde keine Textboxen mehr geben.
    Ist allerdings wirklich etwas umständlich gelöst, na ja, mal sehen, wie es sich beim Aufbau auswirkt.


    Aber Danke für die ausführliche Beschreibung mitsamt den Screenshots, sieht sehr gut aus.

  • Zitat

    Original von Maedwick
    Ist allerdings wirklich etwas umständlich gelöst, na ja, mal sehen, wie es sich beim Aufbau auswirkt.


    Aber Danke für die ausführliche Beschreibung mitsamt den Screenshots, sieht sehr gut aus.


    Weil es so kompliziert ist habe ich das hier auch erst geschrieben, weil ich lnage gebracuht habe um das herauszufinden, und ich denke es werden auch andere gerne sowas in die Karten einbauen wollen ;)

    "Well, things just got simpler. And a lot more complicated."

  • Die Erklärung ist super.


    Und das erklärt endlich auch, warum es sowenig Karten von Nival gab :).


    Der Editor ist ja noch verbessert worden, bis wir ihn bekommen haben. Und Wenn Nival dies (und alles, was jetzt funktioniert, im Ursprung aber nicht im Editor war) alles per Hand machen musste, dann kann man in der Zeit wirklich nicht viel Karten machen :D.

  • Forum

    Hat das Thema geschlossen.