Message erweiterungen - diskussion

» Siedler Map Source Forum » Siedler DEdK Script Forum » Message erweiterungen - diskussion

Seiten: 1

kingsia
#1
20.02.2010 13:40
Beiträge: 750

Message erweiterungen - diskussion

aCid hat mich per Email gebeten den Code und eine Anleitung hier zu posten.

Den Code brauchen wir IMHO hier nicht weil jede kann es aus den Demokarte exportieren oder kopieren.

Aber ein kurze Anleitung wäre vielleicht für die ein oder andere Hilfreich sein.

jKR_ActivateMessageExpansion() muss nur einmal aufgerufen werden um die Funktionen zu initialisieren. Am besten macht man das im FMA und nachdem ActivateBriefingsExpansion() aufgerufen ist.

Danach ist der normale Message Funktion durch jKR_ME_Add() überschrieben.
jKR_Message_Run()läuft komplett automatisch und nur dann wenn ein Message angezeigt wird.

Alle Moglichkeiten werden ähnlich aufgerufen und zwar im Form
Message(_text[,optionale Parametern])
oder
x = Message(_text[,optionale Parametern])

Die optionale Parametern sind
1) "Lauf", "Flash", "Ticker" & "Scroll" .Falls nicht benutzt wird die Message ganz normal angezeigt.
2) Anzeigedauer im Sekunden. Wenn nicht benutzt ist ein Default von 15 Sekunden benutzt.
3) Color1 bei "Flash" und Textbreite bei "Scroll" & "Ticker"
4) Color2 bei "Flash"
5) Flash-intervall im Sekunden

Gruss
Kingsia

kingsia
#2
20.02.2010 15:35
Beiträge: 750

Noch ein erweiterung

Vielleicht wollt ihr dass ein Message permanent angezeigt wird und erst gelöscht wenn ein bestimmte Ereignis passiert.
Mit diese neue Version ist es moglich.
Einfach den Message aufrufen mit
_Variable = Message( usw. und setze die Anzeigedauer sehr hoch.

Wenn die Message dann ausgeschaltet soll,
jKR_ME_Sub(_Variable)

Gruss
Kingsia

Code entfernt

Dieser Beitrag wurde von kingsia am 27.02.2010 um 17:56 editiert.

kingsia
#3
27.02.2010 17:58
Beiträge: 750

Ich bin informiert worden dass meine Funktion verträgt sich nicht mit der CreateRobArmee Funktion.

Ich glaube zu wissen wieso und sofort dass ich ein Lösung gefunden habe werde ich ein neue Version veröffentlichen.

Gruss
Kingsia

jugl
#4
27.02.2010 18:08
Beiträge: 803

Zitat von kingsia:

Ich glaube zu wissen wieso .......
Gruss
Kingsia



In der Funktion "Lebensfaden" ??
Gruß jugl

____________________
Si tus vi late, in isse tabernit.

Siedler_Team
#5
27.02.2010 18:25
Beiträge: 847

Zitat von kingsia:

Ich glaube zu wissen wieso .......
Gruss
Kingsia


Ich auch.

Zitat von jugl:

In der Funktion "Lebensfaden" ??
Gruß jugl


Nö... nö... die funktioniert! Zumindest die letzten 1000 Jahre. Das Problem liegt an zwei Message-Funktionen die sich zwischen kingsias neuer Message-Funktion und einer Message-Funktion der bewährten RobArmee-Funktion im Abschnitt function LebensFaden() "beissen".

Von daher liegt Deine Vermutung schon richtig jugl.

____________________
Wer altes Wissen ehrt und neues Wissen erlangt, ist bereit, ein Lehrer zu sein. ( -Konfuzius- )

kingsia
#6
28.02.2010 21:52
Beiträge: 750

Die Inkompatibilität lag an die Sache das CreateRobArmee manchmal ein Message erzeugt im Form
Message(_text) und _text hat nicht existiert.
Bei der normale Message-funktion wird dann NIL als Message angezeigt und der Spiel läuft weiter. Sozusagen ein kleine Schonheitsfehler das viele Spieler überhaupt nicht merken werden.

Bei meine Funktion kam es zum Absturz wegen ein versuchte Concatenation wobei diese "Message" wirklich ein String sein soll/muss.

Diese neue Version fängt den Problem ab und ersetzt ein True or False mit "" sodass kein Absturz erfolgt. Von drei Leute erfolgreich getestet.

Gruss
Kingsia

function jKR_ActivateMessageExpansion()
	jKR_ME_Count = 0	-- Weil maximal 10 Messages gezeigt wird
	jKR_ME_Table = {}	-- Initialise Tabelle
	jKR_ME_Running = nil
	jKR_ME_ID = 0
	jKR_ME_Status = "Simple"

	-- Überschreibe normale Message funktion
	jKR_ME_orig = Message
    Message = function(_varA, _varB, _varC, _varD, _varE, _varF)
		local _ID
		_ID = jKR_ME_Add(_varA, _varB, _varC, _varD, _varE, _varF)
		return _ID
	end
end
function jKR_ME_Sub(_ID)
	local x
	for x = jKR_ME_Count, 1, -1 do
		if jKR_ME_Table[x].ID == _ID then
			table.remove(jKR_ME_Table, x)
			jKR_ME_Count = jKR_ME_Count - 1
			return true
		end
	end
end
function jKR_ME_Add(_varA, _varB, _varC, _varD, _varE, _varF) -- Diese Funktion wird gerufen statt nomale Message funktion
	jKR_ME_ID = jKR_ME_ID +1
	local x, total, NextChar
	if type(_varA) ~= "string" and type(_varA) ~= "number" then _varA = "" end
	local data = { -- Default Werte
		ID = jKR_ME_ID,
		text = _varA,
		Text = _varA,
		Type = _varB or "",
		TypeNumber = 1,
		Zeit = _varC or 15,
		Color = _varD or "@color:255,255,255 ", --Weiss 
		Color1 = _varD or "@color:255,255,255 ", --Weiss 
		Color2 = _varE or "@color:255,255,255 ", --Weiss
		counter = _varF or 1,		
		counter2 = 0,		-- gebraucht für Flash funktion
		counter3 = 0,		-- gebraucht für Scroll funktion
	}
	if _varB =="Lauf" then
		data.Zeit = (string.len(_varA)/10) +5
		if data.Zeit < 15 then data.Zeit = 15 end
		data.TypeNumber = 11
		data.Text = ""
	end
	
	if _varB =="Flash" then
		data.TypeNumber = 11
	end
	
	if _varB =="Ticker" then
		data.counter = _varD or 40
		data.Color = "@color:0,0,0,0 "
		data.Text = "@color:0,0,0,0 "..string.rep(". ", data.counter).."@color:255,255,255 "
		data.TypeNumber = 11
	end
	
	if _varB =="Scroll" then
		data.Color = "@color:0,0,0,0 "
		data.counter2 = 0
		repeat
			NextChar = jKR_ME_GetNextChar(data.text)
			data.text = string.sub(data.text, (string.len(NextChar)+1))
			data.counter2 = data.counter2 + 1
		until data.text == ""
		data.Text = "@color:255,255,255 "..data.Text
		data.text = "rechts"
		data.counter3 = (_varD or 40) - data.counter2
		data.counter2 = 0
		data.TypeNumber = 11
	end

	jKR_ME_Count = jKR_ME_Count + 1
	table.insert(jKR_ME_Table, jKR_ME_Count, data)

	total = 0
	for x = 1, table.getn(jKR_ME_Table) do
		total = total + jKR_ME_Table[x].TypeNumber
	end
	if total>10 then 
		jKR_ME_Status_Neu = "HiRes"
		jKR_ME_modifier = 0.1
		if jKR_ME_Status == "Simple" and jKR_ME_Running then
			EndJob( jKR_ME_Running ) 	-- Stoppt Job
			jKR_ME_Running = nil
		end
	else
		jKR_ME_Status_Neu = "Simple"
		jKR_ME_modifier = 1
	end
	jKR_ME_Status = jKR_ME_Status_Neu
	if not jKR_ME_Running then
		if jKR_ME_Status == "Simple" then
			jKR_ME_Running = StartSimpleJob("jKR_Message_Run")
		else
			jKR_ME_Running = StartSimpleHiResJob("jKR_Message_Run")
		end
	end
	
	return data.ID
end
function jKR_Message_Run()
	local x,j, data={}

-- Delete Messages if abgelaufen
	for x = jKR_ME_Count, 1, -1 do
		jKR_ME_Table[x].Zeit = jKR_ME_Table[x].Zeit - jKR_ME_modifier
		if jKR_ME_Table[x].Zeit <= 0 then	--Message abgelaufen
			table.remove(jKR_ME_Table, x)
			jKR_ME_Count = jKR_ME_Count - 1
		end
	end

-- Tabelle muss 10 Einträge haben um vertikale Scrollen zu verhindern	
	data={
		ID = 0,
		Text = "\a",
		Color = "@color:255,255,255 ", --Weiss 
		TypeNumber = 0,
	}
	if jKR_ME_Count > 10 then 	-- Erste Eintrag entfernen
		table.remove(jKR_ME_Table, 1)
		jKR_ME_Count = jKR_ME_Count - 1
	else 								-- 
		x = table.getn(jKR_ME_Table) + 1
		if x<11 then  		-- Extra Einträge zufugen
			for j = 10, x, -1  do
				table.insert(jKR_ME_Table, data)
			end
		end
	end

--Messages falls nötig ändern
	for x = 1,10 do
		if jKR_ME_Table[x].Type == "Lauf" then -- Lauf-funktion von aCid entwickelt ****optimiert und geändert bei Kingsia um mit den anderen Erweiterungen zu funktionierien
			NextChar = jKR_ME_GetNextChar(jKR_ME_Table[x].text)
			if string.len(NextChar) > 0 then
				jKR_ME_Table[x].Text = jKR_ME_Table[x].Text..NextChar
				jKR_ME_Table[x].text = string.sub(jKR_ME_Table[x].text, (string.len(NextChar)+1))
			end
		end
		if jKR_ME_Table[x].Type == "Flash" then -- Flash-funktion von Kingsia
			jKR_ME_Table[x].counter2 = jKR_ME_Table[x].counter2 + jKR_ME_modifier
			if jKR_ME_Table[x].counter2 >= jKR_ME_Table[x].counter then
				if jKR_ME_Table[x].Color == jKR_ME_Table[x].Color1 then 
					jKR_ME_Table[x].Color = jKR_ME_Table[x].Color2
				else
					jKR_ME_Table[x].Color = jKR_ME_Table[x].Color1
				end
				jKR_ME_Table[x].counter2 = 0
			end
		end
		if jKR_ME_Table[x].Type == "Ticker" then -- Ticker-funktion von Kingsia
			NextChar = jKR_ME_GetNextChar(jKR_ME_Table[x].Text)
			if string.len(NextChar) > 5 then
				jKR_ME_Table[x].Color = NextChar
			end
			jKR_ME_Table[x].text = jKR_ME_Table[x].text..NextChar
			jKR_ME_Table[x].Text = string.sub(jKR_ME_Table[x].Text, (string.len(NextChar)+1))
			NextChar = jKR_ME_GetNextChar(jKR_ME_Table[x].text)
			jKR_ME_Table[x].Text = jKR_ME_Table[x].Text..NextChar
			jKR_ME_Table[x].text = string.sub(jKR_ME_Table[x].text, (string.len(NextChar)+1))
		end
		if jKR_ME_Table[x].Type == "Scroll" then -- Scroll-funktion von Kingsia
			if jKR_ME_Table[x].text == "rechts" then
				jKR_ME_Table[x].Text = ". "..jKR_ME_Table[x].Text
				jKR_ME_Table[x].counter2 = jKR_ME_Table[x].counter2 + 1
				if jKR_ME_Table[x].counter2 == jKR_ME_Table[x].counter3 then
					jKR_ME_Table[x].text = "links"
				end
			else
				jKR_ME_Table[x].Text = string.sub(jKR_ME_Table[x].Text, 3)
				jKR_ME_Table[x].counter2 = jKR_ME_Table[x].counter2 - 1
				if jKR_ME_Table[x].counter2 == 0 then
					jKR_ME_Table[x].text = "rechts"
				end
			end
		end
	end

	for x = 1,10 do -- Zeige Messages	
		AngezeigteText = jKR_ME_Table[x].Color..jKR_ME_Table[x].Text
		jKR_ME_orig(AngezeigteText)
	end
	
	if jKR_ME_Count == 0 then --Alle messages abgelaufen
		jKR_ME_Running = nil
		return true -- Job beenden
	end

end

function jKR_ME_GetNextChar(_Text) 
	local text = _Text
	local NextChar = ""
	local NextZeichen
	if text ~= "" then
		if string.len(text) > 2 then
			NextChar = string.sub(text, 1, 3) --check für @cr
			if NextChar == "@cr" then 
				return NextChar
			elseif string.len(text) > 5 then --check für @color
				NextChar = string.sub(text, 1, 6)
				if NextChar == "@color" then
					text = string.sub(text, 7)
					repeat
						NextZeichen = string.sub(text, 1, 1)
						NextChar = NextChar..NextZeichen
						text = string.sub(text, 2)
					until NextZeichen == " "
					return NextChar
				end
			end
		end
		NextChar = string.sub(text, 1, 1)
		return NextChar
	end
	return NextChar
end

Seiten: 1

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

Impressum