Inhaltsverzeichnis
Quest-Informationen
Viele von euch haben bestimmt in Missionen schon die Quest-Informationen mit einem Icon, einem Counter und einem Tooltip gesehen. Da die richtigen Funktionen allerdings recht umständlich sind, erstellt man sich eigene ( oder lässt sich welche erstellen ).
Ein Sonderfall: Der Tooltip-Text
Das Tooltip der Quest-Informationen verwendet das interne String-Table (vielleicht findet Chromix heraus, ob wir selber Einträge erstellen können), das heißt, es können nur die Keys verwendet werden, die schon in den Entwickler-Missionen verwendet wurden. Unter anderem heißt der Tooltip-Key in der Legenden-Mission „Neuland“ „CM03_01_NewBeginning/QI_rescueSheep“. Auch alle anderen String-Table-Keys können verwendet werden, machen allerdings normalerweise keinen Sinn.
Die Comfort-Funktionen
Den Rest kann man vollständig selbst bestimmen, doch wie oben schon geschrieben, sind die meisten Funktionen umständlich geschrieben. Deswegen habe ich drei Comfort-Funktionen geschrieben. Diese werden nun der Reihe nach erklärt:
SetupQuestInformation()
wird zum Erstellen einer Quest-Information benötigt. Wenn aktuell noch eine Quest-Information läuft, wird mit einer Fehlermeldung abgebrochen. Dabei muss oder kann ein Table folgende Indizes besitzen (werden teilweise am Ende näher erläutert):
Index | Beschreibung |
---|---|
texture | Enthält den Namen des Icons |
counter | Den Wert des Counters zu Beginn |
update | Die Update-Funktion |
tooltip | Der Tooltip-Key. Optional |
path | Ein anderer Pfad als der Standard-Pfad. Optional |
event | Das Update-Event (standardmäßig ein Sekunden-Job). Optional |
UpdateQuestInformation()
aktuallisiert die Quest-Information. Es muss, wie bei SetupQuestInformation()
, ein Table mit folgenden möglichen Indizes übergeben werden:
Index | Beschreibung |
---|---|
texture | Enthält den Namen des Icons |
counter | Den aktuellen Wert des Counters |
tooltip | Der neue Tooltip-Text |
Wenn diese Werte undefiniert bleiben, passiert nichts
DisableQuestInformation()
beendet die Quest-Information. An diese Funktion wird nichts übergeben.
Die Update-Funktion hat ein paar besondere Eigenschaften:
- Sie kann ein Table zurückgeben, das zur Aktuallisierung der Quest-Information verwendet wird.
- Sie kann true zurückgeben, wodurch die Quest-Information beendet wird.
texture ist der Name des Icons. Standardmäßig sind folgende Icons verfügbar:
Sheep (nur in Legenden, Schaf) Ruin (Ruine) Well (Brunnen) Caravan (Wagen) Tower (Turm) Serf (Leibeigener) Bridge (Brücke) Fire (Feuer) Attack (Angriff) Nephilim (Nebel-Mensch) Nephtower (Behausung des Nebelvolkes) Stone (Stein)
Außerdem können weitere Icons hinzugefügt werden. Dazu muss path angegeben werden und das Icon muss ein PNG-Bild sein.
So setzt sich der abgeänderte Pfad dann zusammen: path .. „\\“ .. texture .. „.png“
counter ist der String, der unter dem Icon angezeigt wird.
Wer will, kann die Funktionalität erweitern.
Code
function SetupQuestInformation(_quest) assert(not GUIQuestTools.QuestTable); --no running quest information before assert(type(_quest) == "table"); --_quest needs to be a table assert(type(_quest.texture) == "string"); --assert(type(_quest.tooltip) == "string"); --not necessary, because quest information tooltips need keys. --two key examples: CM_GenericText/Mentor ( "Mentor" ), CM_GenericText/Hermit ( "Einsiedler" / "Hermit" ). --these keys can be created by calling String.GenericKey(), example: String.GenericKey( "Mentor" ) assert(type(_quest.counter) == "string"); --counter must be a string assert(type(_quest.update) == "function"); --update will be called every second to update the quest information by return GUIQuestTools.QuestTable = _quest; GUIQuestTools.StartQuestInformation( _quest.texture, _quest.tooltip or "", 1, 1 ); GUIQuestTools.UpdateQuestInformationTooltip(); GUIQuestTools.UpdateQuestInformationString( _quest.counter ); GUIQuestTools.UpdateQuestInformationCounter(); --another path??? if _quest.path ~= nil then assert(type(_quest.path) == "string"); local texturePath = _quest.path .. "\\" .. _quest.texture .. ".png"; for i = 0, 4, 1 do XGUIEng.SetMaterialTexture( "QuestInformationIcon", i, texturePath ); end end --start update job if _quest.event then _quest.job = Trigger.RequestTrigger( _quest.event, nil, "GUIQuestTools_UpdateQuestInformation", 1 ); else _quest.job = StartSimpleJob( "GUIQuestTools_UpdateQuestInformation" ); end end function DisableQuestInformation() if GUIQuestTools.QuestTable then -- end update job EndJob( GUIQuestTools.QuestTable.job ); end GUIQuestTools.DisableQuestInformation(); GUIQuestTools.QuestCounterString = nil; GUIQuestTools.QuestTooltip = nil; GUIQuestTools.QuestInformationTexture = nil; GUIQuestTools.QuestTable = nil; end function GUIQuestTools_UpdateQuestInformation() if UpdateQuestInformation(GUIQuestTools.QuestTable.update()) == true then DisableQuestInformation(); end end function UpdateQuestInformation(_quest) if type(_quest) ~= "table" then return _quest; end if _quest.tooltip then --needs keys GUIQuestTools.QuestTable.tooltip = _quest.tooltip; GUIQuestTools.QuestTooltip = _quest.tooltip; GUIQuestTools.UpdateQuestInformationTooltip(); end if _quest.counter then GUIQuestTools.QuestTable.counter = _quest.counter; GUIQuestTools.UpdateQuestInformationString( _quest.counter ); GUIQuestTools.UpdateQuestInformationCounter(); end if _quest.texture then GUIQuestTools.QuestInformationTexture = _quest.texture; GUIQuestTools.QuestTable.texture = _quest.texture; GUIQuestTools.InitQuestInformation(); if GUIQuestTools.QuestTable.path ~= nil then assert(type(GUIQuestTools.QuestTable.path) == "string"); local texturePath = GUIQuestTools.QuestTable.path .. "\\" .. _quest.texture .. ".png"; for i = 0, 4, 1 do XGUIEng.SetMaterialTexture( "QuestInformationIcon", i, texturePath ); end end end end