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(). | |
| MenuQueryCancel | int selection, object menu_object | Wird in einem Objekt aufgerufen, wenn der Spieler ein benutzerdefiniertes Menu schließen will. Bei Rückgabewert true bleibt das Menu geöffnet. |
| 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). |


