ShortMessages
» Siedler Map Source Forum » Siedler DEdK Script Forum » ShortMessages
Seiten: 1
MadShadow
|
#1 22.07.2016 15:24 Beiträge: 372 |
ShortMessages
Hallo alle zusammen,
ich sitze mal wieder vor einem Problem und finde die Lösung nicht. Es geht um die ShortMessages, dass sind die kleinen Nachrichten auf der linken Seite, die einem beispielsweise anzeigen dass eine Technologie erforscht wurde oder man angegriffen wird.
(Beispiel auf diesem Screen, links am Rand: http://www.siedler-maps.de/screenshots/1/image-75.htm )
Ich möchte die Erforschung einer Technologie simulieren und dafür die passende ShortMessage anzeigen lassen. Leider habe ich keinerlei Verweise darauf gefunden, wie diese ShortMessages von Siedler angezeigt bzw. aufgerufen werden.
Der Container der Messages heißt "ShortMessageListWindow" und es gibt auch ein paar GUI-Funktionen dazu, allerdings ist nichts dabei was mir weiterhilft.
GUI.ShortMessages_ButtonClicked(_buttonIndex) GUI.ShortMessages_ButtonUpdateInfoString(_buttonIndex) GUI.ShortMessages_GetLastPosition()
Ich freue mich sehr, wenn mir jemand einen Tipp geben kann.
mcb
|
#2 22.07.2016 17:46 Beiträge: 1472 |
Ich befürchte, das wurde in C hardcoded...
Du könntest aber versuchen, eine ungenutzte Technologie per Script zu erforschen (notfalls zwischendurch verbieten und wieder erlauben), damit das Widget angezeigt wird. Danach noch den Tooltip verändern, fertig.
MadShadow
|
#3 22.07.2016 20:12 Beiträge: 372 |
Gut, dann werde ich das so machen müssen. Dankeschön für die Antwort.
MadShadow
|
#4 22.07.2016 20:12 Beiträge: 372 |
Gut, dann werde ich das so machen müssen. Dankeschön für die Antwort.
Siedler1997
|
#5 04.06.2017 18:31 Beiträge: 132 |
Hallo zusammen
Mich würde auch die Lösung interessieren, da ich irgendwie nicht weiss, wie ich vorgehen soll.
Laut der gui_elements gibt es bis zu 20 ShortMessages auf einmal. Wie komme ich dann an meine dran? Und was muss ich dann explizit ändern, um dessen Tooltip und ButtonClicked zu ändern?
Sorry, aber ich stehe gerade echt auf dem Schlauch
MfG
Patrick
____________________
"Sieh mal, ein dreiköpfiger Affe!"
- Guybrush Threepwood, ein mächtiger Pirat
MadShadow
|
#6 04.06.2017 23:17 Beiträge: 372 |
Hi, ich habe eine Lösung gefunden, leider bin ich gerade nicht daheim, irgendwann morgen kann ich dir die Lösung schicken.
MadShadow
|
#7 05.06.2017 16:20 Beiträge: 372 |
Okay, ich sehe gerade ich habe für meine Zwecke nur die Technologie Shortmessages verwendet, indem ich eine nicht verwendete Technologie (Technologies.B_Headquartes) wieder und wieder erforscht und dann alle Shortmessages in einem Job kontrolliert habe. Hab das jetzt mal so rauskopiert und ein wenig angepasst, da es in einem etwas größeren Skript eingebettet war - theoretisch sollte es funktionieren, kann aber doch sein das noch etwas fehlt.
Anwendung ist folgende, du setzt SMC.LastResearch auf den Index der in dem von dir definierten Tooltip table SMC.Tooltips auf einen entsprechenden Text verweist.
Anschließend erforscht du per Skript Technologies.B_Headquarters und danach setzt du die Tech wieder zurück.
Verstanden?
Als zb.
playerId = 1; SMC.LastResearch = 1; ResearchTechnology(Technologies.B_Headquarter, playerId); Logic.SetTechnologyState(PlayerId, Technologies.B_Headquarter,0);
Dann würde der Eintrag 1 aka "Mein erster Tooltip" angezeigt.
Es gibt auch ein Buttonclicked callback, dafür müsstest du dir halt zum Tooltip noch die GebäudeId abspeichern.
Für alle anderen Shortmessages wüsste ich gerade nichts, weil wie mcb schon gesagt hat, sind die nicht ohne weitere zu erreichen..
-- Short Message Control SMC = {}; SMC.Tooltips = { [1] = " Mein erster Tooltip", [2] = "Mein 2ter Tooltip", [3] = "Blabla blub", }; SMC.Timestamp = 0; SMC.GameCallback_OnTechnologyResearched = GameCallback_OnTechnologyResearched; GameCallback_OnTechnologyResearched = function( _PlayerID, _TechnologyType ) SMC.Timestamp = Logic.GetTimeMs(); SMC.GameCallback_OnTechnologyResearched( _PlayerID, _TechnologyType ); end SMC.ShortMessages = {}; SMC.ShownShortMessages = 0; -- when a new technology is researched it will be put into message queue SMC.ButtonUpdateInfoString = GUI.ShortMessages_ButtonUpdateInfoString; GUI.ShortMessages_ButtonUpdateInfoString = function(_index) SMC.ButtonUpdateInfoString(_index); local t = XGUIEng.GetText("ShortMessagesOutputWindowInfoString"); if SMC.TooltipKeys[_index] ~= nil and SMC.TooltipKeys[_index] ~= "" then -- we found a shortmessage key -> lets overwrite the old tooltip if string.find(t, "B_Headquarter", 1, true) then -- is valid to overwrite XGUIEng.SetText("ShortMessagesOutputWindowInfoString", SMC.Tooltips[SMC.TooltipKeys[_index]]); else Message("error: this message shouldnt be overwritten! - stop"); end end end SMC.ShortMessages_ButtonClicked = GUI.ShortMessages_ButtonClicked; GUI.ShortMessages_ButtonClicked = function(_index) -- TODO: find building SMC.ShortMessages_ButtonClicked(_index); end -- keys are used to identfiy tooltips SMC.TooltipKeys = {}; SMC_ShortMessageControl = function() local c = 0; for i = 0,9 do if XGUIEng.IsWidgetShown("ShortMessagesListWindowOutputButton0"..i) == 1 then c = c + 1; end if XGUIEng.IsWidgetShown("ShortMessagesListWindowOutputButton1"..i) == 1 then c = c + 1; end end if c > SMC.ShownShortMessages then -- a shortmessage appeared local timedifference = Logic.GetTimeMs() - SMC.Timestamp; if timedifference < 1000 then -- the shortmessage was a research - lets see whether we got a tooltip key SMC.TooltipKeys[c-1] = SMC.LastResearch; SMC.LastResearch = ""; end elseif c < SMC.ShownShortMessages then -- a shortmessage disappeared - we have to resort our keys! for j = 1, SMC.ShownShortMessages - c do for i = 1,19 do SMC.TooltipKeys[i-1] = SMC.TooltipKeys[i]; end end end SMC.ShownShortMessages = c; end SMC.ShortMessageControl = StartSimpleHiResJob("SMC_ShortMessageControl");
Siedler1997
|
#8 05.06.2017 17:51 Beiträge: 132 |
Hi Mad
fehlt offenbar nichts, denn es klappt einwandfrei. Nur ist in meinem Fall bei den Banktechs nicht der Umweg über B_Headquarters nötig, den ich aber nicher noch brauchen werde.
Und was anderes als Technologie Shortmessages brauch ich eh nicht, ist also alles bestens.
Beim Buttonclicked schau ich mal, wobei ich aber nicht glaube, dass der Spieler den unbedingt braucht...
Auf jeden Fall aber ein großes Danke für deine Lösung
MfG
Patrick
____________________
"Sieh mal, ein dreiköpfiger Affe!"
- Guybrush Threepwood, ein mächtiger Pirat
Seiten: 1