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

IndexBeschreibung
textureEnthält den Namen des Icons
counterDen Wert des Counters zu Beginn
updateDie Update-Funktion
tooltipDer Tooltip-Key. Optional
pathEin anderer Pfad als der Standard-Pfad. Optional
eventDas 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:

IndexBeschreibung
textureEnthält den Namen des Icons
counterDen aktuellen Wert des Counters
tooltipDer 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:

  1. Sie kann ein Table zurückgeben, das zur Aktuallisierung der Quest-Information verwendet wird.
  2. 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