Questhandling Establish
function SetupEstablish( _Quest )
Mit dieser Funktion kann man sehr leicht überprüfen, ob der Spieler (an einem bestimmten Punkt) gewisse Gebäude gebaut hat. Ihr braucht keinen zusätzlichen Code in euer Script zu kopieren, diese Funktion stellt das Spiel von sich aus bereit.
_Quest ist ein Table, das folgende Werte enthalten kann:
Player: Optionale SpielerID. Wird sie nicht angegebenen wird gegen den menschlichen Spieler geprüft.
AreaPos: Optionaler Entityname oder EntityID. Gebäude müssen in der Nähe dieser Position gebaut werden. Muss ein Entityname oder eine Entity Id sein. (Kein Positionstable!)
AreaSize: Der Radius um AreaPos in Siedlerzentimetern in der die Gebäude gebaut werden müssen. Dies muss nur angegeben werden, wenn AreaPos gesetzt ist. Hinweis: Das Gebiet sollte so gewählt werden, daß dem Spieler auch klar ist wo er bauen soll.
EntityTypes: Table mit den Gebäuden die gebaut werden müssen und der erforderlichen Anzahl (siehe Beispiel).
Any: Optional. Wenn dies auf true gesetzt wird, muss nur ein einziges Gebäude (egal welchen Typs) gebaut werden um den Quest zu erfüllen. Wird es weggelassen, müssen alle Gebäude mit der vorgegebenen Anzahl aufgebaut werden.
Callback = Die Funktion die aufgerufen wird, wenn der Quest erfüllt ist. Der Callback Funktion wird der selbsterstellte Quest-Table als Parameter übergeben. Das ist ganz praktisch, da man den Table hier mit eigenen zusätzlichen Infos füllen und das in der Callback Funktion verwenden kann.
Beispiel:
function SetupQuest_Build() -- Zunächst wird das quest Table mit allen Informationen gefüllt local quest = { -- Im "Grenzgebiet" soll gebaut werden (das ist z.B. eine Scriptentity mit dem Namen "Grenzgebiet")... -- Wenn man diesen Wert nicht setzt, wird die gesamte Karte überprüft AreaPos = "Grenzgebiet", -- Und zwar im Radius von 500 Siedler Zentimetern AreaSize = 500, -- Es sollen 3 Aussichtstürme und eine normale Kaserne dort gebaut werden EntityTypes = { {Entities.PB_Tower1, 3}, {Entities.PB_Barracks1, 1} }, -- Wenn "Any" gesetzt ist, wird EntityTypes ignoriert, und es reicht ein beliebiges Gebäude aus. Wenn Any nicht -- gesetzt ist, muss von jedem angegebenen Entitytyp mindestens die angegebene Anzahl errichtet werden. Any = nil, -- Wenn das erledigt wurde, wird Callback_QuestBuild aufgerufen. Diese Funktion kann man natürlich, -- wie schon im Briefingtutorial demonstriert, auch gleich hier erstellen Callback = Callback_QuestBuild, -- Jetzt noch ein paar zusätliche Infos für später merken -- Man könnte auch "egal" anstatt "MessageText" schreiben, hauptsache man holt den Wert mit diesem Namen später wieder heraus MessageText = "Super, die Grenze ist jetzt gut verteidigt" }; -- Nun wird der BauCheck gestartet SetupEstablish( quest ) end function Callback_QuestBuild( _Quest ) -- Hier wird die zuvor gespeicherte Nachricht ausgegeben. -- Mit einer festen Nachricht macht das natürlich wenig Sinn, aber möglicherweise fällt jemandem eine bessere Verwendungsmöglichkeit ein Message( _Quest.MessageText ) end