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

SiteEngine v1.5.0 by nevermind, ©2005-2007
Design by SpiderFive (www.siedler-games.de) - English translation by juja

Impressum