Ressourceneinstellungen
Das Einstellen der Startressourcen ist eines der einfachsten Scripts. Es besteht nur aus der Zeile
SetPlayerStartResources( PLAYER_1, 10, 10, 10, 10, 10, 10, 10000);
Die erste Variable gibt den Spieler an, der diese Startessourcen erhalten soll. Die folgenden Zahlen beschreiben die Menge von Holz, Stein, Quecksilber, Kristall, Schwefel, Edelsteinen und schließlich Gold. Wichtig ist das Semikolon am Ende des Befehls.
Etwas schwieriger ist es, die Rohstoffe später um einen bestimmten Betrag zu erhöhen (siehe weiter unten).
Regionen blockieren
Oft ist es wichtig, dass ein gegnerischer Held, der in einer Stadt stationiert ist, diese nicht verlassen kann. Dazu erstellt man direkt vor dem Stadteingang eine Region, die hier den Namen "rbarierre" besitzen soll. (Wie man Regionen erstellt, kann man im Editor-Praxis-Handbuch finden, das man hier runterladen kann.) Ist der Gegner Spieler 2, dann verwendet man das Script
SetRegionBlocked("rbarriere",not nil, PLAYER_2);
Setzt man
SetRegionBlocked("rbarriere",not nil, -1);
so ist die Region für alle Spieler unpassierbar.
SetRegionBlocked("rbarriere", nil, PLAYER_2);
sollte die Blockierung wieder aufheben. (Habe ich aber noch nicht ausprobiert.)
Regionale Auslöser
Beispiel 1: Wettrennen
Wir wollen erreichen, dass der erste Held, der die Region "rziel" erreicht, als Belohnung 10 Erzengel erhält. Dazu muss man eine Funktion definieren, die dann durch einen Trigger ausgelöst wird:
function Ziel(heroname)
AddHeroCreatures( heroname, CREATURE_ARCHANGEL, 10 );
Trigger( REGION_ENTER_AND_STOP_TRIGGER, "rziel", nil);
end;
Trigger( REGION_ENTER_AND_STOP_TRIGGER, "rziel", "Ziel" );
Erklärung
In die erste Zeile schreibt man also "function" und dahinter einen beliebigen Namen (hier: Ziel, der Name sollte aber kein ö, ü oder so enthalten). Die Funkton hängt von der Variable "heroname" ab, in die das Script automatisch den Namen des Helden einsetzt, der die Region gerade betritt. In der zweiten Zeile formuliert man den gewünschten Befehl, der dem Held die Kreaturen gibt. Die IDs wie CREATURE_ARCHANGEL findet man über das Startmenü unter
Ubisoft > Tribes of the East > Andere Handbücher > Handbuch zum Karteneditor > IDs für Scripte
Der letzte Parameter (hier: 10) gibt die Anzahl der Kreaturen an. Die dritte Zeile bewirkt, dass die Funktion nur einmal ausgelöst wird, d.h. der Held kann nicht unbegrenzt Erzengel sammeln, indem er immer wieder die Region betritt. Der Befehl in der fünften Zeile bewirkt schließlich, dass beim Betreten der Region "rziel" die Funktion "Ziel" ausgeführt wird.
Beispiel 2: Festgelegter Held
Soll nur ein bestimmter Held die Erzengel erhalten können, so ersetzt man obiges Script durch
function Ziel( heroname )
if heroname == "Wulfstan" then
AddHeroCreatures( heroname, CREATURE_ARCHANGEL, 10 );
Trigger( REGION_ENTER_AND_STOP_TRIGGER, "rziel", nil );
end;
end;
Trigger( REGION_ENTER_AND_STOP_TRIGGER, "rziel", "Ziel" );
Um die IDs für Helden wie hier Wulfstan, (die nicht immer mit den Heldennamen im Spiel übereinstimmen) zu bekommen, wählt man den Held im Editor mit der Leertaste an; dort findet man den Namen unter "Settings".
Temporäre Auslöser
Mit der Funktion "GetDate(DAY)" kann man Ereignisse zu festgelegten Zeitpunkten eintreten lassen.
function Zeit()
if GetDate(DAY) == 3 then
Invasion()
end;
end;
Trigger( NEW_DAY_TRIGGER, "Zeit" );
startet z.B. die (getrennt zu definierende) Funktion "Invasion()" am Tag 3.
Beispiel: Steuereinnahmen
Wir wollen erreichen, dass der Spieler 1 nach einem Monat durch Steuereinnahmen zusätzlich 10000 Gold bekommt. Da es keinen Befehl der Form AddResource gibt, muss man eine Variable "Res" einfügen, die die Menge das gerade vorhandenen Goldbestands angibt und zu dieser 10000 hinzufügen:
Res = 0;
function Steuer()
if GetDate(DAY) == 29 then
Res = GetPlayerResource( PLAYER_1, GOLD )+10000;
sleep(2);
SetPlayerResource( PLAYER_1, GOLD, Res);
Trigger( NEW_DAY_TRIGGER, nil );
end;
end;
Trigger( NEW_DAY_TRIGGER, "Steuer" );
Erklärung
In der ersten Zeile wird die Variable "Res" definiert und gleich 0 gesetzt. Mit der
Funktion "GetPlayerResource( PLAYER_1, GOLD )" wird am Tag 29 bestimmt, wie viel Gold Spieler 1 besitzt und "Res" wird um 10000 höher festgesetzt. Der "sleep(2)"- Befehl soll sicherstellen, dass dieser Wert erst berechnet wird, bevor die nächsten Schritte im Script ausgeführt werden. Zeile 6 setzt den Goldbestand dann auf den berechneten Wert. Mit "Trigger( NEW_DAY_TRIGGER, nil );" wird die Möglichkeit von Zeitauslösern abgeschaltet; diese Funktion darf also erst in den "spätesten" Zeitauslöser eingebaut werden.
Nachrichten-Boxen
Um in einem Szenario Pläne, Aufträge oder allgemein die Handlung voranzutreiben, braucht man meistens Textboxen, die zu bestimmten Zeiten oder nach bestimmten Ereignissen auftauchen. Dazu verwendet man folgendes Script:
function Warnung()
if GetDate(DAY) == 2 then
MessageBox("Maps/SingleMissions/Gantrithor/Warnung.txt" );
Trigger( NEW_DAY_TRIGGER, nil );
end;
end;
Trigger( NEW_DAY_TRIGGER, "Warnung" );
Es wird dann am Tag 2 die Textnachricht, die unter "Warnung.text" im Ordner
HeroesV\Editor\H5MMods\<Kartenname>\Maps\SingleMissions\<Kartenname>\
abgespeichert ist, angezeigt. Den Pfad ab "Maps" schreibt man in die Klammer hinter "MessageBox". Die Nachricht muss mit Unicode-Codierung abgespeichert werden, damit das Ganze funktioniert. Eine noch genauere Beschreibung, wie diese Textdateien erstellt werden können, gibt euch makrise.
So, das reicht für heute. Beim nächsten mal erklär ich euch, wie man Gebäude umfunktionieren kann und Invasionen programmiert.