Tooltipps für das Kaufen von Militäreinheiten
» Siedler Map Source Forum » Siedler DEdK Script Forum » Tooltipps für das Kaufen von Militäreinheiten
Seiten: 1
Play4FuN
|
#1 19.02.2014 11:40 Beiträge: 704 |
Tooltipps für das Kaufen von Militäreinheiten
Ich möchte die Tooltipps ändern, die für das Kaufen von Einheiten in Kaserne, Schiessanlage, Stall und Kanonengießerei nötig sind (neue für alle Einheiten!).
Dazu habe ich das gefunden:
GUITooltip_BuyMilitaryUnit_Orig = GUITooltip_BuyMilitaryUnit GUITooltip_BuyMilitaryUnit = function(_c1,_c2,_c3,_c4,_c5) GUITooltip_BuyMilitaryUnit_Orig(_c1,_c2,_c3,_c4,_c5) newString, numberOfChanges = string.gsub( _c2, "MenuBarracks/BuyLeaderSword_normal", "" ) if numberOfChanges == 1 then -- ...
Das in eine Funktion und hinten dran kommt dann der Text/Tooltip mit
XGUIEng.SetText( gvGUI_WidgetID.TooltipBottomText, "@color:180,180,180 TITEL @cr TEXT." ) XGUIEng.SetText( gvGUI_WidgetID.TooltipBottomCosts, "Taler: 150 @cr Eisen: 30" )
Das funktioniert für Schwertkämpfer, Speerträger und Bogenschützen auch ohne Probleme. Auf die gleiche Art und Weise wollte ich das auch mit den TTs bei Reitern und Kanonen machen, erhalte aber im Spiel, sobald ich mit dem Cursor über IRGENDEINEN Tooltip fürs Einheit-kaufen fahre, die Fehlermeldung eines "stack overflow".
Mir ist der Syntax der GUITooltip_BuyMilitaryUnit-Tooltipps bekannt. Hier ein Beispiel für leichte Kavallerie:
GUITooltip_BuyMilitaryUnit(UpgradeCategories.LeaderCavalry,"MenuStables/BuyLeaderCavalryLight_normal","MenuStables/BuyLeaderCavalryLight_disabled", Technologies.MU_LeaderLightCavalry,"KeyBindings/BuyUnits1")
Klappt ja bei dem Fußvolk ohne Probleme - was passt hier nicht? Bitte um Hilfe!
____________________
LG Play4FuN
Siedler DEdK Mapping + Scripting Tutorials
Fire_Bird
|
#2 19.02.2014 15:02 Beiträge: 719 |
Hast du daran gedacht, auch immer den original-Tooltip aufzurufen, wenn der aktuelle Tooltip nicht dein gewünschter ist?
Außerdem könnte es noch daran liegen, in welcher Funktion du das mit dem Tooltip machst.
Play4FuN
|
#3 19.02.2014 15:27 Beiträge: 704 |
Zitat von Fire_Bird:
Hast du daran gedacht, auch immer den original-Tooltip aufzurufen, wenn der aktuelle Tooltip nicht dein gewünschter ist?
Es ist analog zu einwandfrei funktionierenden Codes im SELBEN Prinzip.
Zitat von Fire_Bird:
Außerdem könnte es noch daran liegen, in welcher Funktion du das mit dem Tooltip machst.
Ich weiß was Du meinst, habe leider grade keine Zeit mehr, ich melde mich spätestens morgen wieder. Aber eigentlich sagt das schon alles:
GUITooltip_BuyMilitaryUnit = function(_c1,_c2,_c3,_c4,_c5)
____________________
LG Play4FuN
Siedler DEdK Mapping + Scripting Tutorials
Fire_Bird
|
#4 19.02.2014 15:32 Beiträge: 719 |
Zitat von Play4FuN:
Aber eigentlich sagt das schon alles:
GUITooltip_BuyMilitaryUnit = function(_c1,_c2,_c3,_c4,_c5)
Das heißt, dass du diesen Tooltiphack einfach irgendwo im Script stehen hast?
warrior1024
|
#5 19.02.2014 21:32 Beiträge: 345 |
Sieht dein Code etwa so aus?
GUITooltip_BuyMilitaryUnit_Orig = GUITooltip_BuyMilitaryUnit GUITooltip_BuyMilitaryUnit = function(_c1,_c2,_c3,_c4,_c5) --GUIHack für Kaserne end [...] GUITooltip_BuyMilitaryUnit_Orig = GUITooltip_BuyMilitaryUnit GUITooltip_BuyMilitaryUnit = function(_c1,_c2,_c3,_c4,_c5) --GUIHack für Kavallerie end
Wenn ja, dann wird die Originalfunktion in "GUITooltip_BuyMilitaryUnit_Orig" gespeichert und die Funktion für die Kaserne richtig überschrieben.
Im zweiten Teil wird die gehackte Funktion "GUITooltip_BuyMilitaryUnit" ( Mit dem Aufruf von "GUITooltip_BuyMilitaryUnit_Orig" ) erneut in "GUITooltip_BuyMilitaryUnit_Orig" gespeichert und damit ruft "GUITooltip_BuyMilitaryUnit_Orig" sich selbst auf.
Eine Lösung wäre diese:
GUITooltip_BuyMilitaryUnit_Orig_Kaserne = GUITooltip_BuyMilitaryUnit GUITooltip_BuyMilitaryUnit = function(_c1,_c2,_c3,_c4,_c5) --GUIHack für Kaserne end [...] GUITooltip_BuyMilitaryUnit_Orig_Kavallerie = GUITooltip_BuyMilitaryUnit GUITooltip_BuyMilitaryUnit = function(_c1,_c2,_c3,_c4,_c5) --GUIHack für Kavallerie end
Alternativ ginge auch folgende Comfortfunktion:http://www.siedler-maps.de/for...-Hack-leicht-gemacht-13344.htm
____________________
"Banken machen keine Fehlentscheidungen! Haben Euch das Eure Eltern nicht beigebracht?"
- Bankier Samael Silren, Enderal
Dieser Beitrag wurde von warrior1024 am 19.02.2014 um 21:51 editiert.
bobby
|
#6 19.02.2014 23:16 Beiträge: 393 |
Hier mal die genauen Namen der Parameter der Funktion:
(c1, c2, usw. ist nicht gerade übersichtlich und würde ich auch nicht verwenden)
GUITooltip_BuyMilitaryUnit(_UpgradeCategory, _NormalTooltip, _DisabledTooltip, _TechnologyType, _ShortCut)
Dementsprechend erscheint mir das string.gsub mit den "NumberOfChanges" auch nicht sehr sinnvoll...
Ich denke so können wir hier nur raten du solltest mal den gesamten Code posten
____________________
Tools und Verbesserungen für Siedler: settlers.pro
Neues:
Cutscene Editor
LuaDebugger v0.5.2
Play4FuN
|
#7 20.02.2014 10:56 Beiträge: 704 |
Zitat von bobby:
Hier mal die genauen Namen der Parameter der Funktion:
(c1, c2, usw. ist nicht gerade übersichtlich und würde ich auch nicht verwenden)
Richtig, den Code habe ich auch nur übernommen ("Clankrieg", auch von der SMS).
Zitat von bobby:
Ich denke so können wir hier nur raten du solltest mal den gesamten Code posten
Hier:
-- FMA ... TT_1() TT_2() TT_3() TT_4() -- im Skript: function TT_1() -- Buttontooltip: Schwertkämpfer kaufen GUITooltip_BuyMilitaryUnit_Orig = GUITooltip_BuyMilitaryUnit GUITooltip_BuyMilitaryUnit = function(_c1,_c2,_c3,_c4,_c5) GUITooltip_BuyMilitaryUnit_Orig(_c1,_c2,_c3,_c4,_c5) newString, numberOfChanges = string.gsub( _c2, "MenuBarracks/BuyLeaderSword_normal", "" ) if numberOfChanges == 1 then XGUIEng.SetText( gvGUI_WidgetID.TooltipBottomText, "@color:180,180,180 TITEL @cr @color:255,255,255 TEXT" ) XGUIEng.SetText( gvGUI_WidgetID.TooltipBottomCosts, "Taler: 150 @cr Eisen: 30" ) end end end function TT_2() -- Buttontooltip: Speerträger kaufen GUITooltip_BuyMilitaryUnit_OrigA = GUITooltip_BuyMilitaryUnit GUITooltip_BuyMilitaryUnit = function(_c1,_c2,_c3,_c4,_c5) GUITooltip_BuyMilitaryUnit_OrigA(_c1,_c2,_c3,_c4,_c5) newString, numberOfChanges = string.gsub( _c2, "MenuBarracks/BuyLeaderSpear_normal", "" ) if numberOfChanges == 1 then XGUIEng.SetText( gvGUI_WidgetID.TooltipBottomText, "@color:180,180,180 TITEL @cr @color:255,255,255 TEXT" ) XGUIEng.SetText( gvGUI_WidgetID.TooltipBottomCosts, "Taler: 80 @cr Holz: 50" ) end end end function TT_3() -- Buttontooltip: Bogenschützen kaufen GUITooltip_BuyMilitaryUnit_OrigC = GUITooltip_BuyMilitaryUnit GUITooltip_BuyMilitaryUnit = function(_c1,_c2,_c3,_c4,_c5) GUITooltip_BuyMilitaryUnit_OrigC(_c1,_c2,_c3,_c4,_c5) newString, numberOfChanges = string.gsub( _c2, "MenuArchery/BuyLeaderBow_normal", "" ) if numberOfChanges == 1 then XGUIEng.SetText( gvGUI_WidgetID.TooltipBottomText, "@color:180,180,180 TITEL @cr @color:255,255,255 TEXT" ) XGUIEng.SetText( gvGUI_WidgetID.TooltipBottomCosts, "Taler: xxx @cr Holz: xxx" ) end end end function TT_4() -- Buttontooltip: Schwere Kavalerie kaufen GUITooltip_BuyMilitaryUnit_OrigC = GUITooltip_BuyMilitaryUnit GUITooltip_BuyMilitaryUnit = function(_c1,_c2,_c3,_c4,_c5) GUITooltip_BuyMilitaryUnit_OrigC(_c1,_c2,_c3,_c4,_c5) newString, numberOfChanges = string.gsub( _c2, "MenuStables/BuyLeaderCavalryLight_normal", "" ) if numberOfChanges == 1 then XGUIEng.SetText( gvGUI_WidgetID.TooltipBottomText, "@color:180,180,180 TITEL @cr @color:255,255,255 TEXT" ) XGUIEng.SetText( gvGUI_WidgetID.TooltipBottomCosts, "Taler: xxx @cr Holz: xxx" ) end end end
Ich probiere als nächstes gleich Mal den Vorschlag von Warrior aus, indem ich für die zwischengespeicherte Funktion andere Namen verwende...
____________________
LG Play4FuN
Siedler DEdK Mapping + Scripting Tutorials
Play4FuN
|
#8 20.02.2014 11:06 Beiträge: 704 |
Okay, mit Warriors Hinweis funzt es. Habe total übersehen, dass da immernoch ein Buchstabe drann stand, eben um die zwischengespeicherte Funktion nicht erneut zu überschreiben. Naja ich denke mir, der BlackOut772 wird schon gewusst haben, wie das geht und habe das ganze KOPIERT und bearbeitet. Dabei habe ich das mit den besagten Buchstaben übersehen und schon hauts nich mehr hin.
Ich danke sehr für die Hilfe. Eins interessiert mich trotzdem noch, wie kann ich das ganze schreiben ohne dieses "numberOfChanges" - wozu hatte BlackOut772 das verwendet?
____________________
LG Play4FuN
Siedler DEdK Mapping + Scripting Tutorials
Dieser Beitrag wurde von Play4FuN am 20.02.2014 um 13:03 editiert.
totalwarANGEL
|
#9 20.02.2014 14:00 Beiträge: 2123 |
Zitat von Play4FuN:
Ich danke sehr für die Hilfe. Eins interessiert mich trotzdem noch, wie kann ich das ganze schreiben ohne dieses "numberOfChanges" - wozu hatte BlackOut772 das verwendet?
Weil er es so aus ItM rauskopiert hat, würde ich mal vermuten.
____________________
Die Welt ist arschlochförmig und wir leben in der Mitte.
Play4FuN
|
#10 20.02.2014 14:45 Beiträge: 704 |
@twA Das wollte ich eigentlich nicht wissen
Mir ging es darum: braucht man das? bzw. was ist mit "newstring", der (varcheck) sagt, dass das nicht gebraucht wird...!?
____________________
LG Play4FuN
Siedler DEdK Mapping + Scripting Tutorials
bobby
|
#11 20.02.2014 17:23 Beiträge: 393 |
newString, nrOfChanges = string.gsub("foo bar", "foo", "")
Im string "foo bar" wird nach "foo" gesucht und wenn gefunden durch "" ersetzt.
In newString wird der resultierende String gepseichert -> " bar"
und in nrOfChanges wie oft "foo" durch "" ersetzt wurde also 1
____________________
Tools und Verbesserungen für Siedler: settlers.pro
Neues:
Cutscene Editor
LuaDebugger v0.5.2
Seiten: 1