Inhaltsverzeichnis
Schatztruhen
Die Suche nach Schatztruhen ist eine gute Möglichkeit, die frühen Aufbauphasen durch zusätzliche Ressourcen zu beschleunigen und motiviert darüber hinaus, die Karte möglichst gründlich zu erkunden. Außerdem können Schatztruhen auch in Quests verstrickt sein und wichtige Items, wie z.B. Schlüssel, enthalten.
Im Folgenden stellen wir also einige Funktionen vor, mit denen funktionierende Schatztruhen auf der Karte platziert werden können. Im Anschluss folgt ein Abschnitt zur "Aktivierung" von Schatztruhen, der für alle Arten von Schatztruhen wichtig ist.
CreateChest
CreateChest(_Position, _Callback)
ist die generischste aller Schatztruhen. An der Position _Position
wird eine Schatztruhe platziert, deren Öffnung die Funktion _Callback
auslöst. Die Funktion eignet sich deshalb besonders, wenn ganz spezielle, nicht zufällige Ressourcenmengen oder Questitems in der Schatztruhe zu finden sein sollen. Einige Beispiele:
An der Position der ScriptEntity
namens „ChestWood“
sollen genau 1400 Einheiten (veredeltes) Holz zu finden sein.
-- Irgendwo, beispielsweise in der Funktion FirstMapAction, muss die Truhe erschaffen werden: CreateChest(GetPosition("ChestWood"), CallbackChestWood) -- Die Schatztruhe muss hierunter noch aktiviert werden, siehe den Abschnitt weiter unten -- Die Funktion, die als Callback angegeben wurde, muss definiert werden: function CallbackChestWood() AddWood(1400) end
In einem anderen Beispiel soll der Schlüssel zu einem Tor namens „Gate“
in einer Kiste an der Position der ScriptEntity
namens „ChestKey“
versteckt sein:
function FirstMapAction() -- Zu Beginn hat der Spieler den Schlüssel zum Tor noch nicht gefunden PlayerHasGateKey = false -- Ein SimpleJob soll prüfen, ob der Spieler das Tor öffnen kann StartSimpleJob("OpenGate") -- Die Truhe mit dem Schlüssel wird platziert CreateChest(GetPosition("ChestKey"), CallbackChestKey) -- Hierunter muss die Schatztruhe noch aktiviert werden, siehe den Abschnitt weiter unten end function CallbackChestKey() -- Im Callback der Schatztruhe setzen wir den Schlüssel als gefunden fest PlayerHasGateKey = true end function OpenGate() -- Wir suchen nach Einheiten von Spieler 1 in der Nähe des Tores local PositionGate = GetPosition("Gate") local NumberOfEntities, _ = Logic.GetPlayerEntitiesInArea(1, 0, PositionGate.X, PositionGate.Y, 1000, 1, 2) -- Wenn mindestens eine Einheit von Spieler 1 in der Nähe des Tores ist... if NumberOfEntities > 0 then -- ...prüfe, ob er den Schlüssel besitzt if PlayerHasGateKey then -- wenn ja, öffne das Tor ReplaceEntity("Gate", Entities.XD_WallStraightGate) -- und beende den Job return true else -- wenn nicht, zeige eine Nachricht an, dass der Schlüssel fehlt Message("Ihr könnt dieses Tor nicht öffnen, da Euch der Schlüssel fehlt.") end end end
Oft will man aber gar nicht spezielle Schatztruhen bauen, sondern einfach eine Position angeben und dem Spiel zufällig den Inhalt überlassen. Wird keine Funktion als _Callback
angegeben, enthält die Kiste 1000 Einheiten einer zufälligen Ressource oder nichts.
CreateRandomGoldChest
Mit CreateRandomGoldChest(_Position)
kann an die Position _Position
eine Truhe platziert werden, deren Inhalt ein zufälliger Betrag an Talern zwischen 100 und 500 ist.
CreateRandomChests
Mit CreateRandomChests()
werden an die Positionen aller Entities, deren Skriptnamen mit dem Präfix „RandomChest“
durchnummeriert sind, Truhen platziert, die 1000 Einheiten einer zufälligen Ressource oder nichts enthalten.
Wenn du etwa 6 ScriptEntities
mit den Namen „RandomChest1“
bis „RandomChest6“
auf die Karte setzt, kannst du mit einem einzigen Aufruf von CreateRandomChests()
6 zufällig gefüllte Truhen platzieren.
CreateRandomGoldChests
Mit CreateRandomGoldChests()
werden an die Positionen aller Entities, deren Skriptnamen mit dem Präfix „GoldChest“
durchnummeriert sind, Truhen platziert, die einen zufälligen Betrag an Talern zwischen 100 und 500 enthalten.
Wenn du etwa 6 ScriptEntities
mit den Namen „GoldChest1“
bis „GoldChest6“
auf die Karte setzt, kannst du mit einem einzigen Aufruf von CreateRandomGoldChests()
6 zufällig mit Talern gefüllte Truhen platzieren.
Schatztruhen aktivieren
Alle Arten von Schatztruhen haben gemeinsam, dass sie ohne Weiteres nicht interaktiv sind. Damit Schatztruhen funktionieren, muss festgelegt werden, wer sie öffnen kann. In der Regel sind das die Helden. Die dafür notwendige Funktion ist CreateChestOpener(_Entity)
. Außerdem muss mit der Funktion StartChestQuest()
der automatisch ablaufende Test gestartet werden, der prüft, ob einer der Truhenöffner in der Nähe einer der Truhen ist. Letzteres sollte genau 1 mal passieren.
Wenn auf deiner Karte ein Dario mit dem Skriptnamen „Dario“
ist, kann er so zum Truhenöffner bestimmt werden:
CreateChestOpener("Dario")
Es ist allerdings nicht zwingend notwendig, dass der Truhenöffner ein Held ist. Auch ein Kundschafter mit dem Skriptnamen „Scout“
kann mit dem entsprechenden Aufruf Truhen öffnen.
CreateChestOpener("Scout")
Zusammen mit einer zufälligen Schatztruhe sowie Dario und dem Kundschafter als Truhenöffner ließe sich so eine zufällig gefüllte Truhe an die Position des ScriptEntity
mit dem Skriptnamen „Chest1“
setzen und interaktiv machen:
function FirstMapAction() CreateChest(GetPosition("Chest1")) CreateChestOpener("Dario") CreateChestOpener("Scout") StartChestQuest() end
Das nächste Kapitel befasst sich kurz damit, wie funktionierende Söldnerquartiere definiert werden können.
Voriges Kapitel: Das Auftragsmenü
Nächstes Kapitel: Söldnerquartiere
Zurück nach oben