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.
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:
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.;)