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

Siehe auch


FIXME

Zur Tutorial-Übersicht