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