Inhaltsverzeichnis
Aktionen zu Beginn einer Briefing-Seite
Dieses Thema wurde nach der neuen Form der Briefing-Erstellung umgeschrieben. Wer das Original lesen will (mit der alten Schreibweise), sollte im Siedler-Portal vorbei schauen.
Bisher konnte man nichts beim Beginn einer Briefingseite aufrufen. Ich habe zusammen mit Chromix eine Möglichkeit dafür geschaffen.
Der Code dafür steht nach der nächsten Erweiterung. Die Umlaute-Funktion wird, genauso wie die automatische Umlaute-Umwandlung, automatisch eingefügt, das heißt, der Code aus dem Umlaute-Tutorial ist nicht nötig. Diese Erweiterung wird durch den Aufruf der Funktion ActivateBriefingsExpansion()
aktiviert.
Was bringt dieser Code? Man kann eine Funktion einbauen, die vor dem Beginn einer Briefingseite aufgerufen wird:
AP{ --normale Seitenerstellung action = function() Anweisungen; end };
Ein Beispiel dazu hier: Mit dem Befehl LookAt schauen sich Personen im Briefing an, einfach in die erste Briefingseite mit einfügen.
AP{ --Die erste Briefingseite title = "", text = "", position = GetPosition(""), dialogCamera = true, action = function() LookAt("ker", "scout1"); --Kerberos schaut den Kundschafer an LookAt("scout1", "ker"); --Der Kundschafter schaut Kerberos an end };
Die Funktion kann natürlich auch global definiert sein:
AP{ action = MyFunction };
Zusätzlich kann man noch Parameter übergeben:
AP{ parameters = "hallo" };
Diese Form ermöglicht nur einen Parameter. Möchte man aber mehrere Parameter oder ein Table übergeben, muss eine andere Form verwendet werden:
AP{ parameters = { "hallo", "tschüss" }, --oder parameters = { { X = 0, Y = 0 } } };
Die Parameterübergabe hat Vorteile. Dank ihr müssen Funktionen nicht verpackt werden. So kann man statt
AP{ action = function() CreateEntity(1, Entities.PU_Hero2, { X = 1000, Y = 1000 } ); end };
Das hier verwenden:
AP{ action = CreateEntity, parameters = { 1, Entities.PU_Hero2, { X = 1000, Y = 1000 } } };
Außerdem kann durch die Parameter-Übergabe das Speicher-Problem mit lokalen Variablen bei NPC-Briefings umgangen werden.
Eine Nebelreich-Beispielmap findet ihr hier.
Escape verhindern
Der Spieler kann Briefings mit Escape abbrechen. Dieser Code definiert einen neuen Befehl im Briefing-Table, noEscape.
Nach dem Ende des Briefings wird Escape wieder aktviert.
Dazu muss auch der weiter unten angegebene Code eingefügt werden und die Funktion ActivateBriefingsExpansion()
in der FirstMapAction() aufgerufen werden. Der Umlaute-Code wird automatisch aktiviert.
Der neue Befehl wird einfach in das Briefing-Table eingefügt:
local briefing = { noEscape = true };
Code
Muß in der FirstMapAction aufgerufen werden: ActivateBriefingsExpansion()
function ActivateBriefingsExpansion() if not unpack{true} then local unpack2; unpack2 = function( _table, i ) i = i or 1; assert(type(_table) == "table"); if i <= table.getn(_table) then return _table[i], unpack2(_table, i); end end unpack = unpack2; end Briefing_ExtraOrig = Briefing_Extra; Briefing_Extra = function( _v1, _v2 ) for i = 1, 2 do local theButton = "CinematicMC_Button" .. i; XGUIEng.DisableButton(theButton, 1); XGUIEng.DisableButton(theButton, 0); end if _v1.action then assert( type(_v1.action) == "function" ); if type(_v1.parameters) == "table" then _v1.action(unpack(_v1.parameters)); else _v1.action(_v1.parameters); end end Briefing_ExtraOrig( _v1, _v2 ); end; GameCallback_EscapeOrig = GameCallback_Escape; StartBriefingOrig = StartBriefing; EndBriefingOrig = EndBriefing; MessageOrig = Message; CreateNPCOrig = CreateNPC; StartBriefing = function(_briefing) assert(type(_briefing) == "table"); if _briefing.noEscape then GameCallback_Escape = function() end; briefingState.noEscape = true; end StartBriefingOrig(Umlaute(_briefing)); end EndBriefing = function() if briefingState.noEscape then GameCallback_Escape = GameCallback_EscapeOrig; briefingState.noEscape = nil; end EndBriefingOrig(); end; Message = function(_text) MessageOrig(Umlaute(tostring(_text))); end; CreateNPC = function(_npc) CreateNPCOrig(Umlaute(_npc)); end; Umlaute = function(_text) local texttype = type(_text); if texttype == "string" then _text = string.gsub( _text, "ä", "\195\164" ); _text = string.gsub( _text, "ö", "\195\182" ); _text = string.gsub( _text, "ü", "\195\188" ); _text = string.gsub( _text, "ß", "\195\159" ); _text = string.gsub( _text, "Ä", "\195\132" ); _text = string.gsub( _text, "Ö", "\195\150" ); _text = string.gsub( _text, "Ü", "\195\156" ); return _text; elseif texttype == "table" then for k, v in _text do _text[k] = Umlaute( v ); end return _text; else return _text; end end; end
Probleme bitte im Siedler-Portal melden