Objektscripte

Objektscripte kontrollieren die komplexen Verhaltensweisen eines Objekts. Für eine Beschreibung der Scriptsprache C4Script siehe C4Script-Dokumentation.

Erzeugung

Für jedes Objekt ruft die Engine bei der Erschaffung des Objekts die Funktion Initialize im Objektscript auf.
func Initialize()
{
  CreateContents(Rock);
}  
Ein Objekt mit diesem Script enthält sofort nach seiner Erschaffung einen Stein. Die Initialisierungsfunktion wird erst aufgerufen, nachdem das Objekt seine volle Größe erreicht hat. Bei Bauwerken also erst, nachdem sie vollständig gebaut wurden und bei Lebewesen erst, wenn sie voll ausgewachsen sind.

ActMap

Ein aktives Objekt kann außerdem in seiner Aktivitätsdefinition Script-Aufrufe enthalten. Die als StartCall definierte Funktion wird immer dann aufgerufen wird, wenn die Aktivitätsschleife erneut startet. EndCall wird aufgerufen, wenn die Aktivitätsschleife endet. PhaseCall wird bei jedem Animationsschritt aufgerufen (da dies äußerst rechenintensiv ist, sollte PhaseCall nur bei seltenen und kurzzeitig ausgeführten Aktivitäten eingesetzt werden). Die Frequenz der Aufrufe bestimmt sich aus der Aktivitätsgeschwindigkeit.

#include

Ein Objektscript kann auf dem Script eines anderen Objekts basieren:
#include Clonk
At this position the complete script of the specified object definition (that of the clonk, in this case) is inserted, including all scripts that that script includes or got via #appendto. The only exception is that every script is included only once, so including both the Clonk script and a script that is included by the Clonk script doesn't include that script twice. Other Obviously, the included definition must be valid and loaded. Declared functions can be overloaded by functions of the same name that occur later in the script. Also see inherited().

Interaction from other scripts

Other scripts can call functions of an object obj with the -> and ->~ operators.
var obj = CreateObject(Flint); obj->Hit();

Objekt-Calls der Engine

Die Engine ruft zu Zeiten die folgenden Funktionen in Objektscripten auf.
Funktion Parameter Beschreibung
Initialize Wenn das Objekt fertiggestellt wird (Con größer gleich 100).
Construction object by_object Wenn das Objekt erzeugt wird. Als Parameter wird das Objekt übergeben, in dem das erzeugende Script steht. Siehe auch Construction
Destruction Wenn das Objekt gelöscht wird.
Hit Wenn das Objekt bei hoher Geschwindigkeit (>= 15) mit der Landschaft kollidiert oder aufgenommen wird (Collection)
Hit2 Wie Hit, bei Geschwindigkeiten >= 20 (siehe OCF_HitSpeed2).
Hit3 Wie Hit, bei Geschwindigkeiten >= 60 (siehe OCF_HitSpeed3).
Grab object target, bool grab Wenn das Objekt ein anderes Objekt anfasst oder loslässt.
Grabbed object by_object, bool grab Wenn das Objekt durch ein anderes Objekt angefasst oder losgelassen wird.
Get object target Wenn das Objekt ein Objekt aus einem anderen Objekt herausnimmt.
Put Wenn das Objekt ein Objekt in einem anderen Objekt ablegt.
Damage int change, int cause, int by_player Wenn das Objekt beschädigt wird. Siehe Fx*Damage für Werte von cause.
DeepBreath Wenn das Lebewesen nach dem Auftauchen mehr als die Hälfte seiner Atemkapazität auffüllt.
Incineration int by_player Wenn das Objekt entzündet wird. Achtung: Bei Objekten, die ihre Definition mit BurnTo ändern, findet der Aufruf im verbrannten Objekt statt!
IncinerationEx int by_player Wenn das Objekt in einer löschenden Flüssigkeit gesprengt, und damit nicht angezündet wird. Aufruf analog zu Incineration.
Death Wenn ein Lebwesen stirbt.
Activate object by_object Aktivierung durch einen Doppelklick auf Graben. Nur getragene Objekte und direkt spielergesteuerte Objekte. Wird aufgerufen, nachdem die interne Befehlskette (z.B. Bäume fällen) abgearbeitet wurde.
Contact_ Wenn das Objekt die Landschaft berührt. Siehe CNAT - Contact Attachment.
Control_ object by_object Wenn das Objekt von außen gesteuert wird. Siehe Control-Funktionen.
Contained_ object by_object Wenn das Objekt von innen gesteuert wird. Siehe Control-Funktionen.
ControlCommand string command, object target, int x, int y, object target2, int data, object command_object Wenn dem Objekt durch den Spieler ein selbständig auszuführender Befehl gegeben wurde. Siehe Control-Funktionen.
ControlCommandFinished string command, object target, int x, int y, object target2, any Data Wenn das Objekt einen selbständigen auszuführenden Befehl vollendet hat oder die Ausführung des Befehls fehlgeschlagen ist.
ControlTransfer object obj, int x, int y Wenn ein durch die Wegfindungsroutine gesteuertes Objekt (obj) die Transferzone dieses Objekts zum Zielpunkt x/y passieren möchte. Die Transferfunktion kann dem Objekt entsprechende Kommandos geben und sollte bei erfolgreicher Bearbeitung true zurückliefern. Siehe auch SetTransferZone().
UpdateTransferZone Wenn ein Objekt geladen oder synchronisiert wird. Objekte mit einer TransferZone sollten diese bei jedem Aufruf von UpdateTransferZone neu setzen. Siehe auch SetTransferZone().
IsFulfilled Nur bei Spielziel-Objekten. Bei Rückgabewert true ist das Spielziel erfüllt.
ControlContents id target Wenn ein neues Inhaltsobjekt angewählt wird. Siehe Control-Funktionen.
Selection object container Wenn das Objekt durch einen Inventarwechsel ausgewählt wird. Wenn die Funktion abgefangen wird, sollte ein eigener Auswahlsound abgespielt werden.
CatchBlow int level, object by Wenn das Objekt von einem anderen Objekt geschlagen oder getroffen wird.
QueryCatchBlow object by Bevor das Objekt von einem anderen Objekt geschlagen oder getroffen wird. Wenn QueryCatchBlow true zurückgibt, können damit physikalische Treffer abgefangen werden.
LineBreak int cause Wenn ein Leitungsobjekt unterbrochen wird. cause: 0 durch Bewegung, 1 durch fehlendes oder unvollständiges Zielobjekt.
BuildNeedsMaterial id material_definition, int amount Wenn das Objekt ein anderes Objekt baut und noch Baumaterial benötigt wird. Parameter sind Typ und Menge des ersten noch benötigten Baustoffs. Durch Rückgabewert true kann die Textmeldung über fehlendes Material abgefangen werden.
AttachTargetLost Wenn das Objekt eine ATTACH-Aktivität besessen hatte, aber das Actiontarget verloren hat. Die Aktivität ist beim Aufruf bereits zurückgesetzt.
CrewSelection bool deselect, bool cursor_only Bei Änderung der Crewauswahl. cursor_only gibt an, ob nur das Mannschaftsmitglied angewählt wurde, welches den Cursor hat.
GetObject2Drop object for_collection_of_object Zur Ermittlung des am wenigsten gebrauchten Objekts, wenn der Clonk versucht, ein neues aufzunehmen. Die Funktion sollte das abzulegende Objekt zurückliefern, oder nil für keins.
OnMenuSelection int index, object menu_object Wenn ein Menueintrag ausgewählt wurde.
CalcValue object in_base, int for_player Ermittelt den Wert eines Objekts. Siehe auch GetValue().
CalcDefValue object in_base, int for_player Ermittelt den Wert eines (noch nicht gekauften) Objekttyps. Siehe auch GetValue().
CalcBuyValue id item, int value Rückgabewert ist Einkaufspreis des Objekttyps.
CalcSellValue object obj, int object_value Rückgabewert ist Verkaufspreis des Objekttyps.
LiftTop Wenn das Objekt bei einer LIFT-Aktivität ein anderes Objekt höher angehoben hat als in der DefCore angegeben.
Stuck Wird aufgerufen, wenn das Ziel einer PUSH- oder LIFT-Aktivität festhängt.
GrabLost Wenn das Ziel einer PUSH- oder PULL-Aktion verloren geht.
Collection object obj, bool put Wenn das Objekt ein anderes Objekt (obj) aufgenommen hat (nur durch einsammeln oder anfassen und ablegen).
Collection2 object obj Wenn das Objekt ein anderes Objekt (obj) aufgenommen hat (immer, auch durch Scriptbefehl Enter)
ContentsDestruction object destroyed Wenn ein Inhaltsobjekt dieses Objekts zerstört wird. Zum Aufrufzeitpunkt existiert das Objekt noch und wird erst danach zerstört.
Departure object container Wenn das Objekt ein anderes Objekt (container) verlassen hat.
Ejection object obj Wenn ein Objekt (obj) dieses Objekt verlassen hat (auch durch Scriptbefehl Exit).
Entrance object container Wenn das Objekt ein anderes Objekt (container) betreten hat.
ActivateEntrance object by_object Wenn ein anderes Objekt versucht, das Objekt durch Entrance zu betreten.
RejectCollect id def, object obj Wird vor Collection aufgerufen. Wenn RejectCollect true zurückgibt, kann damit die Aufnahme des anderen Objekts verhindert werden.
RejectEntrance object into_object Wird vor Entrance aufgerufen. Wenn RejectEntrance true zurückgibt, kann damit das Hineinversetzen in das andere Objekt verhindert werden.
InitializePlayer int player Aufruf in Spielziel, -regel und Umweltobjekten nach der Platzierung eines beitretenden Spielers, und vor dem entsprechenden Aufruf im Szenarioscript.
SellTo int by_player Wenn das Objekt verkauft wird. Rückgabewert nil oder die ID des Objekts, welches dem Heimatbasismaterial hinzugefügt wird.
Sale int by_player Wenn das Objekt verkauft wird.
Purchase int by_player, object buy_object Wenn das Objekt gekauft wird.
Recruitment int player Wenn das Objekt der Crew eines Spielers hinzugefügt wird.
RejectTeamSwitch int player, int new_team Aufruf in Spielziel, -regel und Umweltobjekten und dem Szenarioscript. Wenn RejectTeamSwitch true zurückgibt, kann der Teamwechsel eines Spielers (durch SetPlayerTeam) verhindert werden.
OnTeamSwitch int player, int new_team, int old_team Aufruf in Spielziel, -regel und Umweltobjekten und dem Szenarioscript. Wenn ein Spieler erfolgreich von old_team zu new_team transferiert wurde (durch SetPlayerTeam).
sulai, 2003-11
Sven2, 2004-02
matthes, 2004-07
Clonkonaut, 2008-04