Datentypen
C4Script unterstützt die folgenden Datentypen für Variablen, Parameter und Rückgabewerte:
Typname | Voller Name | Variableninhalt | Beispiel |
---|---|---|---|
int |
Integer | Eine ganze Zahl im Bereich von -2.147.483.648 bis +2.147.483.647. | 42 |
bool |
Boolean | "wahr" (Wert true ) oder "falsch" (Wert false ). Wird von vielen Kontrollstrukturen wie if und while als Parameter erwartet. |
true |
string |
Zeichenkette | Ein beliebiger Text. | "This is a text!" |
array |
Array | Ein Typ, der eine Reihe weiterer durchnummerierter Variablen enthält, deren Anzahl mit GetLength abgefragt werden kann, und die mit array[index] abgerufen werden können. |
[0,23,Clonk] |
proplist |
Objekt | Ein allgemeiner Objekttyp. Mit GetProperty und SetProperty können Eigenschaften abgefragt bzw. gesetzt werden. Wenn die Eigenschaft "Prototype" gesetzt ist und eine nicht gesetzte Eigenschaft abgefragt wird, wird im Prototyp nachgeguckt. |
{ foo = 0, "bar baz" = 13, Prototype = Clonk } |
func |
Funktion | A function. At the moment, this is only used to store them in proplists. | Flint.Hit |
nil |
Der Typ von nil . |
nil |
|
any |
Wenn als Parametertyp für eine Funktion benutzt wird die Typüberprüfung nicht vorgenommen. | ||
def |
Objektdefinition | Repräsentiert eine DefCore.txt und die angeschlossene Script.c. Eine spezielle Proplist. | Clonk |
object |
Spielobjekt | Eine Instanz einer Object Definition. Eine spezielle Proplist. | CreateObject(Clonk) |
effect |
Effekt | Eine spezielle Proplist mit Timer und Stapel-Callbacks. | AddEffect("Shiny", nil, 1) |
Arrays
Arrays können entweder direkt durch
[Ausdruck 1, Ausdruck 2, ...]
oder CreateArray() erstellt werden. Sie werden bei Zugriff auf ein Element gegebenenfalls automatisch verlängert, jedoch ist es schneller, das Array gleich mit der benötigten Länge zu erstellen. Arrays verhalten sich wie Objekte, man kann nur Referenzen von ihnen speichern. Beispiel: var a = CreateArray(), b = a; b[0] = 42; // a ist nnun [42]
Eine Kopie von a
erhält man mit a[:]
, Erklärung sihe unten.Zugriff auf ein Element
i
eines Arrays a
erfolgt über a[i]
. Dabei entspricht i=0
dem ersten Element. Für negative Indizes wird vom Ende des Arrays gezählt, so dass a[-1]
auf das letzte Element des Arrays zugreift.Man kann eine Kopie eines Teilbereichs eines Arrays mit
a[i:j]
erzeugen. Das resultierende Array enthält alle Einträge, deren Indizes im halboffenen Intervall [i,j)
liegen. Negative Indizes werden dabei wie beim Zugriff auf einzelne Elemente interpretiert. Beide Indizes sind optional und werden als 0
bzw. GetLength(a)
aufgefasst, falls sie nicht angegeben sind.Beispiel 1
func ArraySum(array a) { var l = GetLength(a); var result = 0; for (var i = 0; i < l; ++i) { result += a[i]; } return (result); }
Diese Funktion summiert alle Elemente eines Arrays.
Beispiel 2
func RandomID() { var a = [Clonk, Wipf, Bird]; return (a[Random(3)]); }
Diese Funktion wählt zufällig aus einer der vier ids aus und gibt diese zurück.
Beispiel 3
func DetonateNearest() { var a = FindObjects(Find_ID(Dynamite), Sort_Distance()); for (var dyna in a[:6]) { dyna->DoExplode(); } }
Diese Funktion ruft
DoExplode()
auf die sechs naheliegendsten Dynamit-Objekte auf.Ein array darf nicht mehr als 1000000 Elemente haben
Proplisten
Proplists sind ein Datentyp der Strings Werte zuordnet und Prototyp-Vererbung unterstützt.
Proplisten können mit
{Schlüssel 1=Ausdruck 1, Schlüssel 1=Ausdruck 1, ...}
oder mit CreateProplist erzeugt werden.Konvertierung
- Alle Werte bis auf
false
,nil
und0
werden alstrue
behandelt wenn ein boolescher Werte verlangt ist. -
nil
undfalse
können zu0
konvertiert werden.true
kann zu1
konvertiert werden. -
nil
kann immer als Funktionsparameter verwendet werden wenn die Funktion keine separate Überprüfung vornimmt. - Objekte, Definitionen und Effekte können in eine Proplist und zurück konvertiert werden. Ansonsten können Proplisten nicht in diese konvertiert werden.