[[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