====== Nachschlagewerk für den Spieler ======
[[http://www.siedler-maps.de/forum/Siedler-DEdK-Script-Forum/Nachschlagewerk-fuer-den-Spieler-13347.htm|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.
{{:comfort:nachschlagewerk:noigi_lektionnachschlagewerk.jpg|}}
-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- ### 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
-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++