[[http://www.siedler-games.de|{{:sg-link.jpg|}}]] ======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 8-O ''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