Szenarioscripte

In Szenarioscripten kann ein globaler Handlungsablauf und szenarienspezifische Besonderheiten wie Rejoins oder spezielle Spielerplatzierungen festgelegt werden. Für eine Beschreibung der Scriptsprache C4Script siehe C4Script-Dokumentation.

Callbacks Übersicht

The following callbacks are made to the scenario script. All callbacks except Initialize that are made to scenario script from the engine are also made to all goals, rules and environment objects in the game. Other scripts can access local variables of the scenario and call scenario functions with the global proplist Scenario. With the functions GameCall and GameCallEx, callbacks to the scenario script can be made from scripts.
Funktion Parameter Beschreibung
Initialize Wird bei Start der Runde aufgerufen.
InitializePlayer int player, int x, int y, object base, int team, id extra_data Wird aufgerufen nachdem ein neuer Spieler das Spiel beigetreten ist. An dieser Stelle sind bereits die Clonks, Materialien, Gebäude usw. and der in der Scenario.txt angegebenen Stelle platziert. x und y geben die Startposition des Spielers an, base ist die Basis des Spielers (falls er eine hat), team ist das Team des Spielers. Wegen extra_data, siehe CreateScriptPlayer
InitializePlayers Called after all initial players joined. Can be used e.g. to start intros.
RelaunchPlayer int player, int killed_by_player Wird aufgerufen bevor ein Spieler eliminiert wird weil alle seine Mannschaftsmitglieder gestorben sind.
RemovePlayer int player, int team Wird aufgerufen wenn ein Spieler vom Spiel entfernt wird.
RejectHostilityChange int player1, int player2, bool hostile Wenn die Verfeindung von zwei Spielern geändert werden soll, wird diese Funktion zuerst aufgerufen. Wenn sie true zurückgibt, wird die Verfeindung nicht geändert. Siehe SetHostility.
OnHostilityChange int player1, int player2, bool hostile, bool old_hostility Wird aufgerufen wenn die Verfeindung zweier Spieler geändert wird. Siehe SetHostility.
RejectTeamSwitch int player, int new_team Wenn das Team eines Spielers geändert werden soll, wird diese Funktion zuerst aufgerufen. Wenn sie true zurückgibt, wird das Team des Spielers nicht geändert. Siehe SetPlayerTeam
OnTeamSwitch int player, int new_team, int old_team Wird aufgerufen nachdem das Teamzugehörigkeit eines Spielers geändert wurde. Siehe SetPlayerTeam
OnGameOver Wird eine Runde durch Spielziele wie Spielereliminierung, Materialabbau, usw. (wie in der Scenario.txt definiert) oder durch den Scriptbefehl GameOver beendet (also nicht bei abgebrochenen Runden), wird diese Funktion aufgerufen.
OnWealthChanged int player Wird aufgerufen wenn das Vermögen des Spielers geändert wurde.
InitializeAmbience Called on game initialization in Frame zero (i.e. not in savegames). To be used to create sound and music controller objects. If not defined and Objects.ocd is loaded, falls back to a global function defined in Ambience.ocd which creates the default ambience controller.

Fortlaufende Scriptausführung

Beim Start der Runde (Und VOR dem Beitritt der Spieler!) ruft die Engine, wenn vorhanden, die Funktion "Initialize" im Script des Szenarios auf. Innerhalb dieser Funktion können z.B. Objekte erzeugt werden, die beim Start der Runde vorhanden sein sollen. Außerdem kann die fortlaufende Scriptausführung gestartet werden.
func Initialize()
{
  Log("Hello"); 
  CreateObject(WindGenerator,250,200);
}
Nach der Platzierung eines beitretenden Spielers ruft die Engine, wenn vorhanden, die Funktion InitializePlayer im Scenario-Script für diesen Spieler auf. Die Funktion wird aufgerufen, nachdem die in Scenario.txt beschriebenen Startkonditionen (Positionierung und Platzierung von Mannschaft, Gebäude, Fahrzeuge, Material) verarbeitet wurden. Mit dieser Funktion können weitere spielerabhängige Startkonditionen geschaffen werden.
func InitializePlayer(int player)
{
  Log( "Player nr. %d has joined the game", player );
  Sound("Ding");
  // The first clonk of the player starts at a random position in the landscape
  GetCrew(player,0)->SetPosition( Random(LandscapeWidth()), Random(LandscapeHeight()));
}
Sven2, 2002-04