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 ).
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.
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:
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.
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