Nachschlagewerk für den Spieler
» Siedler Map Source Forum » Siedler DEdK Script Forum » Nachschlagewerk für den Spieler
Seiten: 1
Noigi
|
#1 11.09.2011 19:11 Beiträge: 772 |
Nachschlagewerk für den Spieler
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.
Code (Anwendungsbeispiele stehen oben in der Doku):
-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -- ### 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 -- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Dieser Beitrag wurde von Noigi am 19.09.2011 um 19:27 editiert.
Anarki
|
#2 12.09.2011 05:32 Beiträge: 518 |
habe mich schon gewundert wie du das in Schach gemacht hast denke mal da kam das so oder ähnlich zum Einsatz?
Mein Multiplayer-Skript erlaubt mittlerweile schon XX Regeleinstellungen und ich hab mir schon überlegt ob man da nicht was anderes als das Tributfenster nutzen kann.
Wird zwar ein schönes Stück Arbeit... aber das scheint mir ne gute Grundlage für ein neues Regelauswahl-Interface.
Danke!
____________________
Siedler V Tool: Selbstextrahierende Maps erstellen
Bitte testen und kommentieren
daniBIGdani
|
#3 12.09.2011 15:09 Beiträge: 153 |
Hi,
danke Noigi, genau so eine Funktion hab ich gesucht um meine Steuerung und meine Tipps unterzubringen. Das Moviefenster ist einfach zu klein für viiiiel Text.
Gruß Daniel
FastBow
|
#4 12.09.2011 20:33 Beiträge: 353 |
Vielen Dank
Wow Noigi das ist einfach großartig !! Das super Ding kann man für viele Sachen einsetzten
Liebe Grüße
FastBow
tws113
|
#5 15.09.2011 17:07 Beiträge: 256 |
Moin Noigi coole Funktion hast du da gebastellt
echt Spitze
Lg_Tws113
Noigi
|
#6 15.09.2011 19:43 Beiträge: 772 |
Danke für die Rückmeldungen!
Bei Problemen oder Vorschlägen einfach nachfragen.
daniBIGdani
|
#7 18.09.2011 15:20 Beiträge: 153 |
Hi Noigi,
wie kann man Lektionen wieder löschen bzw. durch mehr Text erweitern?
Gruß Daniel
Noigi
|
#8 18.09.2011 21:38 Beiträge: 772 |
Zitat von daniBIGdani:
Hi Noigi,
wie kann man Lektionen wieder löschen bzw. durch mehr Text erweitern?
Gruß Daniel
Hallo!
Das geht in der aktuellen Version nicht bzw nur sehr umständlich.
Ich werde die Optionen bei Gelegenheit einbauen.
Noigi
|
#9 19.09.2011 19:30 Beiträge: 772 |
So, der Code im ersten Beitrag ist auf Version 1.10 "geupdatet".
Neue Optionen sind Ändern und Löschen von Lektionen über IDs (wie z.B. bei Quest-IDS). Die ID einer Lektion wird automatisch vergeben und kann beim Erstellen der Lektion gespeichert werden, um die Lektion beim Ändern/Löschen damit anzusprechen.
Seiten: 1