======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 {{briefingactions_samplemap_ex1.7z|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 [[http://www.siedler-portal.de|Siedler-Portal]] melden
\\
\\
==Siehe auch==
* [[reference:briefing]]
* [[tutorials:kurzbriefings|Kurzbriefings]]
* [[tutorials:normale_briefings]]
* [[tutorials:vergleich_briefings]]
* [[tutorials:briefings_mit_auswahlmoeglichkeit]]
* [[reference:createnpc|CreateNPC]]
\\
FIXME
\\
\\
[[:tutorials:index|Zur Tutorial-Übersicht]]