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

Günther, 2010-2011
PeterW, 2006-04