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 in Szenarioscripten

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()
{
  Message("Hallo"); 
  CreateObject(HUT1,250,200,0);
  ScriptGo(1);
}
Fortlaufende Scriptausführung: zu Beginn der Runde steht der interne Sciptzähler auf 0. Wurde mit ScriptGo die Scriptausführung aktiviert, so erhöht die Engine im Lauf der Runde in jedem zehnten Frame (Bild) den Scriptzähler um 1 und ruft, wenn vorhanden, die dazugehörige Script-Funktion im Szenario-Script auf.
func Script26()
{
  Message("Diese Funktion wird nach 260 Frames ausgeführt.");
}
Der Scriptzähler kann mit dem Befehl goto() auch manuell auf einen bestimmten Wert gesetzt werden.
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(iPlr)
{
  // Eine Meldung für diesen Spieler
  Message( "Spieler Nr. %d ist beigetreten", 0, iPlr );
  Sound("Ding");
  // Ersten Clonk des Spielers doch an einer anderen Stelle starten lassen
  SetPosition( Random(LandscapeWidth()), Random(LandscapeHeight()), GetCrew(iPlr));
}
Analog dazu ruft die Engine die Funktion RemovePlayer auf, wenn ein Spieler die Runde verlässt.
Wird eine Runde durch szenariobedingte Spielziele wie Spielereliminierung, Materialabbau, usw. (siehe Scenario.txt Sektion [Game]) oder durch den Scriptbefehl GameOver beendet (also nicht bei abgebrochenen Runden), ruft die Engine im Szenario-Script die Funktion OnGameOver auf.
func OnGameOver()
{
  Sound("Trumpet");
  // Hier bietet sich die Möglichkeit für spezielle Rundenauswertung in der Log-Datei Clonk4.log
  Log("Vermögen von Spieler 1: %d", GetWealth(0));
}
Sven2, April 2002