Dies ist eine alte Version des Dokuments!
Inhaltsverzeichnis
Tribute
In diesem Artikel wird beschrieben, wie einem Spieler ein Tribut zur Verfügung gestellt werden kann, den er im F3-Menü unter einem einstellbaren Ressourceneinsatz bezahlen kann. Oft werden Ressourcen direkt eingetauscht, Truppen gekauft, Diplomatie verändert oder Tore geöffnet, sobald ein Tribut bezahlt wurde.
Damit die im Folgenden beschriebenen Codebeispiele funktionieren, muss sich folgende Komfortfunktion ebenfalls in deinem Skript befinden:
-- Komfortfunktion für das Bereitstellen von Tributen function AddTribute(_tribute) assert(type(_tribute) == "table", "Tribut muß ein Table sein"); assert(type(_tribute.text) == "string", "Tribut.text muß ein String sein"); assert(type(_tribute.cost) == "table", "Tribut.cost muß ein Table sein"); assert(type(_tribute.playerId) == "number", "Tribut.playerId muß eine Nummer sein"); assert(not _tribute.Tribute, "Tribut.Tribute darf nicht vorbelegt sein"); -- Hier wird eine globale Variable gesetzt, die außerhalb dieser Funktion nicht manipuliert werden sollte uniqueTributeCounter = uniqueTributeCounter or 1; _tribute.Tribute = uniqueTributeCounter; uniqueTributeCounter = uniqueTributeCounter + 1; local tResCost = {}; for k, v in pairs(_tribute.cost) do assert(ResourceType[k]); assert(type(v) == "number"); table.insert(tResCost, ResourceType[k]); table.insert(tResCost, v); end Logic.AddTribute(_tribute.playerId, _tribute.Tribute, 0, 0, _tribute.text, unpack(tResCost)); SetupTributePaid(_tribute); return _tribute.Tribute; end
Die Tribut-Handhabung wird dadurch deutlich erleichtert.
Einfache Tribute erstellen
Die oben gezeigte Funktion AddTribute(_tribute)
hat nur einen Parameter _tribute
. _tribute
muss ein Table sein, das den zu erstellenden Tribut beschreibt. Ein Standard-Tribut hat nur wenige notwendige Parameter:
Key | Value-Typ | Bedeutung |
---|---|---|
playerId | Player Id (Ganze Zahl 1-8) | Spieler-Id des Spielers, der den Tribut bezahlen kann |
text | String | Text, der im Tributmenü angezeigt wird. Er sollte die Kosten des Tributs und dessen Wirkung beschreiben |
cost | Table | Die Kosten des Tributs in einem assoziativen Table, bei dem der Ressourcentyp Key und die geforderte Menge Value ist (siehe auch die folgenden Beispiele) |
Callback | Funktion | Funktion, die aufgerufen wird, sobald der Tribut bezahlt wurde |
Wichtig: Beachte bei den Keys des _tribute
-Tables sowie des cost
-Tables darin auf die korrekte Groß- und Kleinschreibung! Die ist leider nicht über alle Parameter hinweg konsistent.
In einem einfachen Tribut-Beispiel soll Spieler 1 die Eisengrube eines Verbündeten für 500 Gold und 300 Holz erstehen können. Die Eisengrube existiert auf der Karte und hat den Skriptnamen „IronMine“
.
function CreateTributeBuyIronMine() local Tribute = { playerId = 1, text = "Für 500 Taler und 300 Holz erhaltet Ihr die Eisenmine Eures Verbündeten", cost = { -- Die Namen der Ressourcen werden groß geschrieben Gold = 500, Wood = 300 }, Callback = CallbackTributeBuyIronMine } AddTribute(Tribute) end function CallbackTributeBuyIronMine() -- ChangePlayer ändert den Spieler, dem diese Entity gehört -- Mehr dazu findest du in der Comfort-Referenz oder im Artikel zu "Belohnungen" auf Ebene 2 ChangePlayer("IronMine", 1) end
Optionale Parameter
Die Verwendung einer Callback-Funktion erlaubt es dir, maximal flexibel auf die Entrichtung eines Tributs zu reagieren. Für einige Standardfälle gibt es allerdings vorgefertigte, optionale Parameter, die ein Standard-Callback automatisch generieren und ausführen.