Undokumentiertes
Aus Clonk Wiki
Dies ist eine Liste von nicht vollständig oder überhaupt nicht dokumentierten Funktionen, oder anderen Dingen, über die man so im Laufe der Zeit stolpert. Wir möchten die offizielle Dokumentation ergänzen, damit nützliche Dinge nicht verloren gehen. Wir erheben keinerlei Anspruch auf Vollständigkeit, ein paar der Beschreibungen sind sogar nur Mitschnitte aus dem IRC.
DefCore.txt
Diverse DefCore-Einträge.
ClosedContainer
Der Wert 2 ist nicht offiziell dokumentiert.
<Sven2> int32_t ClosedContainer; // if set, contained objects are not damaged by lava/acid etc. 1: Contained objects can't view out; 2: They can
RequireDef
Die Definition wird nur geladen, wenn die angegebene Definition auch geladen wurde. So lassen sich Errors vermeiden, wenn sich beispielsweise im Script ein #include C4ID befindet, diese Definiton aber nicht vorhanden ist, weil sie sich in einem nicht geladenen Pack befindet.
Scenario.txt
Szenarioeinstellungen.
Sektion [Game]
LandscapeInsertThrust
Betrifft die Verdrängung von Flüssigkeiten durch Material. Vor Clonk Rage wurde beispielsweise Wasser einfach ersetzt, wenn man einen Erdklumpen hinein warf. In Clonk Rage steigt dagegen der Wasserspiegel. Man aktiviert das alte Verhalten durch das Setzen von:
LandscapeInsertThrust=0
Script
Scriptfunktionen, Callbacks, Parameter.
BlastFree
bool BlastFree(x, y, radius);
x,y globale Koordinaten
CallMessageBoard
bool CallMessageBoard(object pCallbackObject, bool bCapitalize, string szTitle, int iPlayer)
Zeigt eine Eingabezeile (ähnlich der Chat-Eingabe) für den Spieler iPlayer (ggf. mit Verzögerung). Wenn die Eingabe abgeschlossen wird, wird in pCallbackObject
InputCallback(string szInput)
aufgerufen (szInput ist die Eingabe des Spielers). szTitle ist der Text, der links neben dem Eingabefeld steht. Wenn bCapitalize wahr ist, wird das Ergebnis in Großbuchstaben zurückgegegeben.
ClearLastPlrCom
<Sven2> asiaclonk: Es gibt wimni ClearLastPlrCom oder sowas <asiaclonk> mh <asiaclonk> das macht dinge auch einfacher. <Sven2> Schau mal im Kombomenü <asiaclonk> sie ist undokumentiert? <Sven2> Das verhindert zum Beispiel irgendwie, dass ein ControlDig als Ende einer Kombo später als ControlDigSingle biem Clonk ankommt und dieser zu Graben beginnt <Sven2> Vermutlich undokumentiert
DebugLog
Wie Log, nur dass die Nachricht nur bei aktiviertem Debugmodus erscheint.
DebugLog(string message);
DoWealth
Gibt dem Spieler iPlr die angegebene Menge an Clunkern zu seinem Kontostand hinzu.
DoWealth(int iPlr, int iAmount);
EliminatePlayer
Falls der 2. Parameter wahr ist, wird keine Nachricht und kein Sound ausgegeben. Weiterhin wird seine Spielerdatei nicht abgespeichert, analog zu einem Verbindungsabbruch bei einem Netzwerkspiel. Außerdem wird die übliche Wartezeit zwischen Aufruf und endgültigem Entfernen übersprungen.
EliminatePlayer(int iPlr, bool fQuiet);
FatalError
Löst einen Error aus, der bei aktiviertem Debug-Modus im Log und als Nachricht erscheint. Die aktuelle Ausführung wird abgebrochen und der Stacktrace wird ausgegeben.
FatalError(string message);
Fx*Info
<ck> Ich glaube das wird angezeigt wenn du Info über ein Objekt abfragst, im Kontextmenü. <ck> Dann wird zum Beispiel angzeigt, ob das getragene Objekt brennt, oder so <Compufreak> Achso, werd ich mal testen, danke. <Compufreak> stimmt, dafür ist es da <Compufreak> danke
GameCallEx
Analog zu GameCall, nur dass die Calls auch in allen Spielregeln/Spielzielen gemacht werden.
<Guenther> das ruft die funktion auch in spielregeln auf <Guenther> und wimni auch in zielen und umweltobjekten
GetIndexOf
Gibt den Index eines Wertes innerhalb eines Arrays zurück. Falls der Wert nicht gefunden wird gibt GetIndexOf -1 zurück. Der Wert darf aber kein eigenes Feld sein, oder eine Zeichenkette sein die länger als 255 Zeichen ist, ansonsten ist die Rückgabe immer -1.
int GetIndexOf(any value, array aArray);
GetTeamConfig
GetTeamConfig(int iConfig);
Gibt Eigenschaften aus der Teams.txt oder Lobby-Einstellungen zurück.
Konstanten für iConfig: TEAM_Custom (1), TEAM_Active (2), TEAM_AllowHostilityChange (3), TEAM_Dist (4), TEAM_AllowTeamSwitch (5), TEAM_AutoGenerateTeams (6), TEAM_TeamColors (7)
Bei TEAM_Dist werden die Lobby-Teameinstellungen zurückgegeben. Dort muss jedoch unterschieden werden, ob TEAM_AutoGenerateTeams aktiviert ist, denn je nach Einstellung sind andere Lobby-Einstellungen verfügbar.
Für TEAM_AutoGenerateTeams = true werden die Konstanten TEAMDIST_Free (0, freie Teamwahl), TEAMDIST_Host (1, Host stellt ein) oder 2 (keine entspr. Konstante, keine Teams) zurückgegeben. Ohne TEAM_AutoGenerateTeams (also in der Regel bei festen Teams) werden TEAMDIST_Free (0), TEAMDIST_Host (1), TEAMDIST_Random (2, Zufall) oder TEAMDIST_RandomInv (3, zufällig & unsichtbar) zurückgegeben.
InitializePlayer
<Clonkonaut> protected func InitializePlayer(int iPlr, int iX, int iY, object pBase, int iTeam)
LocateFunc
Gibt den Pfad zur Datei per Log aus, aus der angegebene Funktion geladen wurde und zeigt Überladungen an. Weiterhin kann über pObject direkt in einem Objekt gesucht werden, oder falls pObject==0 in einer Definition über idDefinition.
bool LocateFunc(string szFunctionName, object pObject, id idDefinition);
Message() und Co.
<mOwl> Wie lange bleibt eine CustomMessage() eigentlich stehen? <Maikel> zwei mal der zeichenlange in frames
OnClonkDeath
Beim Tod eines Clonks werden das Szenarienscript, alle Spielzielobjekte und alle Regelobjekte benachrichtigt.
<Simsi> ja weil im clonk steht doch iwas von wegen GameCallEx("OnClonkDeath", this()) oder so
In der Tat steht dort:
- protected
func
Death(int
iKilledBy) - {
// Info-Broadcasts für sterbende Clonks
GameCallEx("OnClonkDeath",
this(),
iKilledBy);
// ... restliche Funktion ausgelassen...- }
SetAction
Der 4. Parameter ist undokumentiert.
bool SetAction(string szAction, object pTarget1, object pTarget2, bool fDirect);
<Limeox> Der 4. Parameter von SetAction ist undokumentiert, geben tuts ihn trotzdem, und er tut dasselbe <Limeox> wie der 5. von SetObjectAction: Umgeht Start/AbortCalls und setzt die Aktion trotz NoOtherAction (wie es bei "Dead" der Fall ist).
SetCommand: "Get"
Um das Holen-Menü für ein Objekt zu öffnen, muss der Data-Parameter auf true gesetzt sein. Beispiel:
- func
ControlLeft(
object
byObj
)
{
// Holen-Menü öffnen
SetCommand(
byObj,
"Get",
this(),
0,
0,
0,
true
);- }
Script für eine Kiste: Fasst ein Clonk sie an und drückt "Links", wird für ihn das Holen-Menü geöffnet, so dass er nicht alles in die Kiste ablegen muss, was er trägt, um per "Werfen" zum Holen-Menü zu gelangen.
SetKiller
bool SetKiller( int playerIndex, object killedObject)
SetObjectLayer
Von http://bbgen.net/csdoc/SetObjectLayer :
bool SetObjectLayer(C4Object pnewlayer, C4Object pobj);
Ändert das Layerobjekt von pobj auf pnewlayer und alle Inhalte auch. Standardmäßig sind alle Objekte im globalen Layer 0. Wenn pnewlayer 0 ist, dann setzt man den Layer wird in den globalen Layer. Objekte können nur miteinander interagieren, wenn sie im selben Layer sind.
C4Object pnewlayer: Zukünftiger Layer
C4Object pobj: Objekt, dessen Layer geändert werden soll. 0 für lokalen Aufruf.
<Gurkenglas> [...] wird das Layerobjekt [Anm: pnewlayer ist damit gemeint] gelöscht, werden alle Objekte die dessen Layer hatten zu layer 0 [Anm: Der Standardlayer] zugeordnet
SetPlrViewRange
Der dritte Parameter ist nicht dokumentiert.
bool SetPlrViewRange(int iRange, object pObj, bool fExact)
<JCaesar> Parameter 3 muss wahr sein, um werte kleiner 128 wählen zu können.
SetViewCursor
Setzt vermutlich die Sicht auf das Zielobjekt fest.
SetViewCursor(int iPlr, object pTargetView);
_Update()
- protected
func
ContainedUpdate(object
clonk,
int
comdir,
bool
dig,
bool
throw)
<Nachtschatten> btw. Was ist ContainedUpdate()? Steht nicht in der Doku, ist aber im U-Boot-Script. <Milkman> Das ist doch bestimmt wie ControlUpdate
ScenarioSections
Mit ScenarioSections können Landschaften nachgeladen werden ("Levelwechsel"). Einige Leute aus der Community haben sich die genauen Infos bereits erarbeitet:
- Die ursprüngliche Erklärung von Sven2
- Ein Tutorial im CNDG-Forum
- Ein weiteres Tutorial, ebenfalls im CNDG-Forum
Anmerkung: Koordinaten
Weil es im ersten Thread des CNDG-Forums etwas weiter hinten steht: Wichtig zu beachten ist, dass die Objekte nach dem Laden der neuen Sektion immer noch die Koordinaten haben, die sie in der alten Sektion hatten. Deshalb kann es vorkommen, dass Objekte nach dem Laden gelöscht werden, weil sie nun außerhalb der Landschaft liegen. Du musst also möglicherweise die Position der Objekte vor dem Sektionswechsel neu setzen, um dies zu verhindern.
MoreMusic.txt
<Clonkonaut> PeterW: ist MoreMusic.txt irgendwo dokumentiert? <PeterW> Zu GWE-Zeiten war glaube ich mal eine Erklärung dabei @ Clonkonaut <Clonkonaut> kriegt man die noch irgendwie? Bzw. weißt du wie geth? <PeterW> Wimre gibt man einfach einen Pfad an <PeterW> Oder Pfade. Die werden dann zusätzlich durchsucht. <Clonkonaut> und wo legt man die Datei hin? <PeterW> Engine-Verzeichnis <PeterW> Wenn man irgendwo noch "#clear" rein schreibt, wird außerdem noch keine Original-Musik gespielt. <PeterW> Musik laden geht btw auch mit gepackten Gruppen. "Knights.c4f\Music.c4g" führt also dazu, dass man überall die Rittermusik dabei hat.
Musikformate
<PeterW> mid, xm, it, s3m, mod, ogg <- die lässt die Engine durch