====== 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 -- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++