Benutzer-Werkzeuge

Webseiten-Werkzeuge


comfort:nachschlagewerk

Nachschlagewerk für den Spieler

Quelle Siedler-Maps.de Forum by Noigi Zitat:

Neue Version 1.1!

Anstatt Einträge ins Questmenü zu machen, damit Spieler sich dauerhaft über Besonderheiten der Map informieren können, kann man dafür ein eigenes Fenster benutzen: Das Lektionen-Fenster.

Ich habe hier wieder das BuyHero-Fenster zweckentfremdet , da es perfekte Voraussetzungen bietet und im SP sonst nicht (unbedingt) gebraucht wird.

Von Story bis Steuerung kann alles rein, was während der Map für den Spieler interessant oder nützlich sein könnte. Die Anzahl der Lektionen ist nicht begrenzt.

-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- ### NOIGI COMFORT: Lektionen ###
-- ### Version: 1.10   (19.09.2011)
-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
--[[ DOKU
	Nachschlagewerk für den Spieler
	benötigte andere Comforts:
		- 
 
	PARAMETER (NeueLektion):
		- table mit Titel der Lektion, dem Textinhalt und dem Icon
 
		BEISPIEL:
			NeueLektion{
				title = "LEKTIONEN ",
				text = "Dies ist das Lektionen-Fenster! @cr Lektionen dienen als Einführung und Nachschlagewerk zu wichtigen Besonderheiten der Karte. @cr @cr Eine Übersicht über alle Euch zur Verfügung stehenden Lektionen findet Ihr links. @cr Mit den Pfeil-Buttons könnt Ihr scrollen, also den Anzeigebereich verschieben, und mit einem Klick auf eines der Icons könnt Ihr Euch die jeweilige Lektion anzeigen lassen. @cr @cr Öffnen und Schliessen könnt Ihr das Lektionen-Menü per Klick auf den gleichnamigen Reiter am oberen Bildschirmrand. @cr Das Statistik-Menü, für das dieser Reiter bisher zuständig war, lässt sich nach wie vor über die Taste [f5] aufrufen.",
				icon = "Research_Debenture",
			};
 
		LEKTION LÖSCHEN:
			ErsteLektion = NeueLektion{
				...
			}
			...
			RemoveLektion(ErsteLektion);
 
		LEKTION ÄNDERN:
			ZweiteLektion = NeueLektion{
				...
			}
			...
			Lektion_SetTitle(ZweiteLektion, "neuer Titel"); -- Titel ändern
			Lektion_SetText(ZweiteLektion, "neuer Text"); -- Text ändern
			Lektion_SetIcon(ZweiteLektion, "Hero6_Bless"); -- Icon ändern
--]]
-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
function Lektionen_Init()
	XGUIEng.SetText("TopStatisticsMenuTextButton", "@center Lektionen");
 
	gvLektionen = {
		counter = 0, -- aktuelle Anzahl Lektionen
		pointer_top = 0, -- welche Lektion ist z.Zt. oben in der Liste?
		pointer_open = -1, -- welche Lektion wird z.Zt. angezeigt? (-1: nichts)
		incPointer = function( _pointer, _offset )
			local limit = math.max( 6, gvLektionen.counter);
			return math.mod( limit + _pointer + _offset, limit );
		end,
		id_counter = 0,
 
		buttonAction = {
			[XGUIEng.GetWidgetID("BuyHeroWindowBuyHero1")] = function()
				-- Message("Scroll nach unten (pointer_top--)");
				gvLektionen.pointer_top = gvLektionen.incPointer( gvLektionen.pointer_top, -1 );
			end,
			[XGUIEng.GetWidgetID("BuyHeroWindowBuyHero8")] = function()
				-- Message("Scroll nach oben (pointer_top++)");
				gvLektionen.pointer_top = gvLektionen.incPointer( gvLektionen.pointer_top, 1 );
			end,
 
			[XGUIEng.GetWidgetID("BuyHeroWindowBuyHero2")] = function()
				gvLektionen.pointer_open = gvLektionen.incPointer( gvLektionen.pointer_top, 0 );
			end,
			[XGUIEng.GetWidgetID("BuyHeroWindowBuyHero3")] = function()
				gvLektionen.pointer_open = gvLektionen.incPointer( gvLektionen.pointer_top, 1 );
			end,
			[XGUIEng.GetWidgetID("BuyHeroWindowBuyHero4")] = function()
				gvLektionen.pointer_open = gvLektionen.incPointer( gvLektionen.pointer_top, 2 );
			end,
			[XGUIEng.GetWidgetID("BuyHeroWindowBuyHero5")] = function()
				gvLektionen.pointer_open = gvLektionen.incPointer( gvLektionen.pointer_top, 3 );
			end,
			[XGUIEng.GetWidgetID("BuyHeroWindowBuyHero6")] = function()
				gvLektionen.pointer_open = gvLektionen.incPointer( gvLektionen.pointer_top, 4 );
			end,
			[XGUIEng.GetWidgetID("BuyHeroWindowBuyHero7")] = function()
				gvLektionen.pointer_open = gvLektionen.incPointer( gvLektionen.pointer_top, 5 );
			end,
 
			[XGUIEng.GetWidgetID("BuyHeroWindowBuyHero9")] = function()
			end,
		},
	};
 
	AddEmptyLektion = function(_pos)
		local t = {
			title = "",
			text = "",
			id = 0,
			icon = "TutorialResourceHighlighter",
		};
		gvLektionen[_pos] = t;
	end
 
	AddEmptyLektion(0);
	AddEmptyLektion(1);
	AddEmptyLektion(2);
	AddEmptyLektion(3);
	AddEmptyLektion(4);
	AddEmptyLektion(5);
 
	BuyHeroWindow_UpdateInfoLine_OrigLektionen = BuyHeroWindow_UpdateInfoLine;
	BuyHeroWindow_UpdateInfoLine = function() end;
	BuyHeroWindow_Update_BuyHero_OrigLektionen = BuyHeroWindow_Update_BuyHero;
	BuyHeroWindow_Update_BuyHero = function() end;
	BuyHeroWindow_Action_BuyHero_OrigLektionen = BuyHeroWindow_Action_BuyHero;
	BuyHeroWindow_Action_BuyHero = function( _heroType )
		local wID = XGUIEng.GetCurrentWidgetID();
		assert( gvLektionen.buttonAction[wID], "invalid ButtonID: "..wID );
		gvLektionen.buttonAction[wID]();
		Lektionen_UpdateDisplay();
	end
 
	GUIAction_ToggleMenu_OrigLektionen = GUIAction_ToggleMenu;
	GUIAction_ToggleMenu = function(_widget, _flag)
		if ((_widget == gvGUI_WidgetID.StatisticsWindow) or (_widget == "StatisticsWindow")) and (_flag == 1) then
			Lektionen_OpenWindow();
		else
			GUIAction_ToggleMenu_OrigLektionen(_widget, _flag);
		end
	end
 
	Mission_OnSaveGameLoaded_OrigLektionen = Mission_OnSaveGameLoaded;
	Mission_OnSaveGameLoaded = function()
		Mission_OnSaveGameLoaded_OrigLektionen()
		XGUIEng.SetText("TopStatisticsMenuTextButton", "@center Lektionen");
	end
 
	Lektionen_OpenWindow = function()
		GUIAction_ToggleMenu( "BuyHeroWindow", -1 );
		Lektionen_UpdateDisplay();
	end
 
	Lektionen_UpdateDisplay = function()
		if XGUIEng.IsWidgetShown("BuyHeroWindow") == 1 then
			XGUIEng.SetText( "BuyHeroWindowHeadline", COLOR1.."LEKTIONEN" );
 
			-- ### Scroll rauf
			XGUIEng.SetWidgetPositionAndSize( "BuyHeroWindowBuyHero1", 4, 4, 32, 32 );
			XGUIEng.TransferMaterials("OptionsMenu20_Keys_Up", "BuyHeroWindowBuyHero1" )
 
			-- ### Lektions-Buttons
			XGUIEng.SetWidgetPositionAndSize( "BuyHeroWindowBuyHero2", 0, 40, 32, 32 );
			XGUIEng.TransferMaterials( gvLektionen[ gvLektionen.incPointer( gvLektionen.pointer_top, 0 ) ].icon, "BuyHeroWindowBuyHero2" )
			XGUIEng.SetWidgetPositionAndSize( "BuyHeroWindowBuyHero3", 0, 76, 32, 32 );
			XGUIEng.TransferMaterials( gvLektionen[ gvLektionen.incPointer( gvLektionen.pointer_top, 1 ) ].icon, "BuyHeroWindowBuyHero3" )
			XGUIEng.SetWidgetPositionAndSize( "BuyHeroWindowBuyHero4", 0, 112, 32, 32 );
			XGUIEng.TransferMaterials( gvLektionen[ gvLektionen.incPointer( gvLektionen.pointer_top, 2 ) ].icon, "BuyHeroWindowBuyHero4" )
			XGUIEng.SetWidgetPositionAndSize( "BuyHeroWindowBuyHero5", 0, 148, 32, 32 );
			XGUIEng.TransferMaterials( gvLektionen[ gvLektionen.incPointer( gvLektionen.pointer_top, 3 ) ].icon, "BuyHeroWindowBuyHero5" )
			XGUIEng.SetWidgetPositionAndSize( "BuyHeroWindowBuyHero6", 0, 184, 32, 32 );
			XGUIEng.TransferMaterials( gvLektionen[ gvLektionen.incPointer( gvLektionen.pointer_top, 4 ) ].icon, "BuyHeroWindowBuyHero6" )
			XGUIEng.SetWidgetPositionAndSize( "BuyHeroWindowBuyHero7", 0, 220, 32, 32 );
			XGUIEng.TransferMaterials( gvLektionen[ gvLektionen.incPointer( gvLektionen.pointer_top, 5 ) ].icon, "BuyHeroWindowBuyHero7" )
 
			-- ### Scroll runter
			XGUIEng.SetWidgetPositionAndSize( "BuyHeroWindowBuyHero8", 2, 258, 32, 32 );
			XGUIEng.TransferMaterials("OptionsMenu20_Keys_Down", "BuyHeroWindowBuyHero8" )
 
			-- ### angezeigte Lektion
			XGUIEng.SetWidgetPositionAndSize( "BuyHeroWindowBuyHero9", 56, 0, 32, 32 );
			local t = gvLektionen[ gvLektionen.pointer_open ];
			if t then
				XGUIEng.ShowWidget( "BuyHeroWindowBuyHero9", 1 );
				XGUIEng.TransferMaterials( t.icon, "BuyHeroWindowBuyHero9" )
				XGUIEng.SetText( "BuyHeroWindowInfoLine", t.title.." @cr @cr @cr @cr "..t.text );
			else
				XGUIEng.ShowWidget( "BuyHeroWindowBuyHero9", 0 );
				XGUIEng.SetText( "BuyHeroWindowInfoLine", "" );
			end
			XGUIEng.SetWidgetPosition( "BuyHeroWindowInfoLine", 120, 40);
 
			-- ### Buttons verfügbar machen, Restbuttons ausblenden
			for i = 1,9 do
				XGUIEng.DisableButton("BuyHeroWindowBuyHero"..i,0);
			end
			for i = 10,12 do
				XGUIEng.ShowWidget("BuyHeroWindowBuyHero"..i,0);
			end
		end
	end
end
 
function NeueLektion( _t )
	assert( type(_t) == "table" );
	assert( type(_t.title) == "string", "NeueLektion: \"title\" fehlt!" );
	assert( type(_t.text) == "string", "NeueLektion: \"text\" fehlt!" );
	assert( (type(_t.icon) == "string") or (type(_t.icon) == "number" ), "NeueLektion: \"icon\" fehlt!" );
 
	if not gvLektionen then
		Lektionen_Init();
	end
 
	local id = gvLektionen.id_counter +1;
	_t.id = id;
	gvLektionen[ gvLektionen.counter ] = _t;
	gvLektionen.counter = gvLektionen.counter +1;
	gvLektionen.id_counter = id;
 
	Lektionen_UpdateDisplay();
	return id;
end
 
function RemoveLektion( _id )
	assert(_id > 0);
	for i = 0,table.getn(gvLektionen) do
		local t = gvLektionen[i];
		if t.id == _id then
			table.remove(gvLektionen,i);
			local count = gvLektionen.counter -1;
			for l=count,5 do
				AddEmptyLektion(l);
			end
			gvLektionen.counter = count;
 
			Lektionen_UpdateDisplay();
			return t;
		end
	end
	return false;
end
 
function GetLektion( _id )
	assert( (type(_id) == "number") and (_id > 0), "GetLektion: Lektions-ID \""..tostring(_id).."\" ist ungueltig!" );
	for i = 0,table.getn(gvLektionen) do
		local t = gvLektionen[i];
		if t.id == _id then
			return t;
		end
	end
	return false;
end
 
function Lektion_SetTitle( _id, _title )
	assert( type(_title) == "string", "Lektion_SetTitle: \""..tostring(_title).."\" ist kein gueltiger Titel!" );
	local t = GetLektion(_id);
	assert( t, "Lektion_SetTitle: Lektions-ID \""..tostring(_id).."\" ist ungueltig!" );
	t.title = _title;
	Lektionen_UpdateDisplay();
end
 
function Lektion_SetText( _id, _text )
	assert( type(_text) == "string", "Lektion_SetText: \""..tostring(_text).."\" ist kein gueltiger Text!" );
	local t = GetLektion(_id);
	assert( t, "Lektion_SetText: Lektions-ID \""..tostring(_id).."\" ist ungueltig!" );
	t.text = _text;
	Lektionen_UpdateDisplay();
end
 
function Lektion_SetIcon( _id, _icon )
	assert( (type(_icon) == "string") or (type(_icon) == "number" ), "Lektion_SetIcon: \""..tostring(_icon).."\" ist kein gueltiges Icon!" );
	local t = GetLektion(_id);
	assert( t, "Lektion_SetIcon: Lektions-ID \""..tostring(_id).."\" ist ungueltig!" );
	t.icon = _icon;
	Lektionen_UpdateDisplay();
end
 
-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
comfort/nachschlagewerk.txt · Zuletzt geändert: 2021/09/18 19:15 (Externe Bearbeitung)