Skip to content

Enforce Script Spickzettel

Startseite | Spickzettel


Einseitige Kurzreferenz für DayZ Enforce Script. Lesezeichen setzen.


Typen

TypBeschreibungStandardBeispiel
int32-Bit vorzeichenbehaftete Ganzzahl0int x = 42;
float32-Bit Gleitkommazahl0.0float f = 3.14;
boolBooleanfalsebool b = true;
stringUnveränderlicher Werttyp""string s = "hello";
vector3-Komponenten Float (x,y,z)"0 0 0"vector v = "1 2 3";
typenameTyp-Referenznulltypename t = PlayerBase;
ClassWurzel aller Referenztypennull--
voidKein Rückgabewert----

Grenzen: int.MAX = 2147483647, int.MIN = -2147483648, float.MAX, float.MIN


Array-Methoden (array<T>)

MethodeRückgabeHinweise
Insert(item)int (Index)Anhängen
InsertAt(item, idx)voidAn Position einfügen
Get(idx) / arr[idx]TZugriff per Index
Set(idx, item)voidAn Index ersetzen
Find(item)intIndex oder -1
Count()intElementanzahl
IsValidIndex(idx)boolGrenzprüfung
Remove(idx)voidUngeordnet (tauscht mit letztem!)
RemoveOrdered(idx)voidErhält die Reihenfolge
RemoveItem(item)voidFinden + entfernen (geordnet)
Clear()voidAlle entfernen
Sort() / Sort(true)voidAufsteigend / absteigend
ShuffleArray()voidZufällig mischen
Invert()voidUmkehren
GetRandomElement()TZufällige Auswahl
InsertAll(other)voidAlle aus anderem anhängen
Copy(other)voidMit Kopie ersetzen
Resize(n)voidGröße ändern (füllt mit Standards)
Reserve(n)voidKapazität vorab zuweisen

Typedefs: TStringArray, TIntArray, TFloatArray, TBoolArray, TVectorArray


Map-Methoden (map<K,V>)

MethodeRückgabeHinweise
Insert(key, val)boolNeuen Eintrag hinzufügen
Set(key, val)voidEinfügen oder aktualisieren
Get(key)VGibt Standard zurück wenn fehlend
Find(key, out val)boolSicheres Abrufen
Contains(key)boolExistenz prüfen
Remove(key)voidNach Schlüssel entfernen
Count()intEintragsanzahl
GetKey(idx)KSchlüssel an Index (O(n))
GetElement(idx)VWert an Index (O(n))
GetKeyArray()array<K>Alle Schlüssel
GetValueArray()array<V>Alle Werte
Clear()voidAlle entfernen

Set-Methoden (set<T>)

MethodeRückgabe
Insert(item)int (Index)
Find(item)int (Index oder -1)
Get(idx)T
Remove(idx)void
RemoveItem(item)void
Count()int
Clear()void

Klassen-Syntax

c
class MyClass extends BaseClass
{
    protected int m_Value;                  // Feld
    private ref array<string> m_List;       // besessene Referenz

    void MyClass() { m_List = new array<string>; }  // Konstruktor
    void ~MyClass() { }                              // Destruktor

    override void OnInit() { super.OnInit(); }       // Überschreibung
    static int GetCount() { return 0; }              // statische Methode
};

Zugriff: private | protected | (standardmäßig öffentlich) Modifikatoren: static | override | ref | const | out | notnullModded: modded class MissionServer { override void OnInit() { super.OnInit(); } }


Kontrollfluss

c
// if / else if / else
if (a > 0) { } else if (a == 0) { } else { }

// for
for (int i = 0; i < count; i++) { }

// foreach (Wert)
foreach (string item : myArray) { }

// foreach (Index + Wert)
foreach (int i, string item : myArray) { }

// foreach (Map: Schlüssel + Wert)
foreach (string key, int val : myMap) { }

// while
while (condition) { }

// switch (KEIN Durchfallen!)
switch (val) { case 0: Print("null"); break; default: break; }

String-Methoden

MethodeRückgabeBeispiel
s.Length()int"hello".Length() = 5
s.Substring(start, len)string"hello".Substring(1,3) = "ell"
s.IndexOf(sub)int-1 wenn nicht gefunden
s.LastIndexOf(sub)intSuche vom Ende
s.Contains(sub)bool
s.Replace(old, new)intÄndert in-place, gibt Anzahl zurück
s.ToLower()voidIn-place!
s.ToUpper()voidIn-place!
s.TrimInPlace()voidIn-place!
s.Split(delim, out arr)voidTeilt in TStringArray
s.Get(idx)stringEinzelnes Zeichen
s.Set(idx, ch)voidZeichen ersetzen
s.ToInt()intInt parsen
s.ToFloat()floatFloat parsen
s.ToVector()vector"1 2 3" parsen
string.Format(fmt, ...)string%1..%9 Platzhalter
string.Join(sep, arr)stringArray-Elemente verbinden

Math-Methoden

MethodeBeschreibung
Math.RandomInt(min, max)[min, max) max exklusiv
Math.RandomIntInclusive(min, max)[min, max]
Math.RandomFloat01()[0, 1]
Math.RandomBool()Zufällig true/false
Math.Round(f) / Floor(f) / Ceil(f)Rundung
Math.AbsFloat(f) / AbsInt(i)Absolutwert
Math.Clamp(val, min, max)Auf Bereich begrenzen
Math.Min(a, b) / Max(a, b)Min/Max
Math.Lerp(a, b, t)Lineare Interpolation
Math.InverseLerp(a, b, val)Inverse Lerp
Math.Pow(base, exp) / Sqrt(f)Potenz/Wurzel
Math.Sin(r) / Cos(r) / Tan(r)Trigonometrie (Bogenmaß)
Math.Atan2(y, x)Winkel aus Komponenten
Math.NormalizeAngle(deg)Auf 0-360 normalisieren
Math.SqrFloat(f) / SqrInt(i)Quadrat

Konstanten: Math.PI, Math.PI2, Math.PI_HALF, Math.DEG2RAD, Math.RAD2DEG

Vector: vector.Distance(a,b), vector.DistanceSq(a,b), vector.Direction(a,b), vector.Dot(a,b), vector.Lerp(a,b,t), v.Length(), v.Normalized()


Häufige Muster

Sicherer Downcast

c
PlayerBase player;
if (Class.CastTo(player, obj))
{
    player.DoSomething();
}

Inline-Cast

c
PlayerBase player = PlayerBase.Cast(obj);
if (player) player.DoSomething();

Null-Schutz

c
if (!player) return;
if (!player.GetIdentity()) return;
string name = player.GetIdentity().GetName();

IsAlive prüfen (erfordert EntityAI)

c
EntityAI eai;
if (Class.CastTo(eai, obj) && eai.IsAlive()) { }

Foreach Map-Iteration

c
foreach (string key, int value : myMap)
{
    Print(key + " = " + value.ToString());
}

Enum-Konvertierung

c
string name = typename.EnumToString(EDamageState, state);
int val; typename.StringToEnum(EDamageState, "RUINED", val);

Bitflags

c
int flags = FLAG_A | FLAG_B;       // Kombinieren
if (flags & FLAG_A) { }           // Testen
flags = flags & ~FLAG_B;          // Entfernen

Was NICHT existiert

Fehlendes FeatureWorkaround
Ternär ? :if/else
do...whilewhile(true) { ... break; }
try/catchSchutzklauseln + frühes Return
MehrfachvererbungEinfach + Komposition
OperatorüberladungBenannte Methoden (außer [] via Get/Set)
LambdasBenannte Methoden
nullptrnull / NULL
\\ / \" in StringsVermeiden (CParser bricht ab)
#includeconfig.cpp files[]
NamensräumeNamenspräfixe (MyMod_, VPP_)
Interfaces / abstraktLeere Basismethoden
Switch-DurchfallenJeder Case ist unabhängig
#define-Werteconst verwenden
Standard-Param-AusdrückeNur Literale/NULL
Variadische Parameterstring.Format oder Arrays
Variablen-Neudeklaration in else-ifEindeutige Namen pro Zweig

Widget-Erstellung (Programmatisch)

c
// Workspace abrufen
WorkspaceWidget ws = GetGame().GetWorkspace();

// Aus Layout erstellen
Widget root = ws.CreateWidgets("MyMod/gui/layouts/MyPanel.layout");

// Kind-Widget finden
TextWidget title = TextWidget.Cast(root.FindAnyWidget("TitleText"));
if (title) title.SetText("Hallo Welt");

// Anzeigen/Verbergen
root.Show(true);
root.Show(false);

RPC-Muster

Registrieren (Server):

c
// In 3_Game oder 4_World Init:
GetGame().RPCSingleParam(null, MY_RPC_ID, null, true, identity);  // Engine-RPC

// Oder mit string-geroutetem RPC (MyRPC / CF):
GetRPCManager().AddRPC("MyMod", "RPC_Handler", this, 2);  // CF
MyRPC.Register("MyMod", "MyRoute", this, MyRPCSide.SERVER);  // MyMod

Senden (Client an Server):

c
Param2<string, int> data = new Param2<string, int>("itemName", 5);
GetGame().RPCSingleParam(null, MY_RPC_ID, data, true);

Empfangen (Server-Handler):

c
void RPC_Handler(CallType type, ParamsReadContext ctx, PlayerIdentity sender, Object target)
{
    if (type != CallType.Server) return;
    if (!sender) return;

    Param2<string, int> data;
    if (!ctx.Read(data)) return;

    string itemName = data.param1;
    int quantity = data.param2;
    // Verarbeiten...
}

Fehlerbehandlung

c
ErrorEx("nachricht");                              // Standard ERROR-Schweregrad
ErrorEx("info", ErrorExSeverity.INFO);           // Info
ErrorEx("warnung", ErrorExSeverity.WARNING);     // Warnung
Print("Debug-Ausgabe");                           // Script-Log
string stack = DumpStackString();                // Aufrufstapel abrufen

Datei-E/A

c
// Pfade: "$profile:", "$saves:", "$mission:", "$CurrentDir:"
bool exists = FileExist("$profile:MyMod/config.json");
MakeDirectory("$profile:MyMod");

// JSON
MyConfig cfg = new MyConfig();
JsonFileLoader<MyConfig>.JsonLoadFile(path, cfg);  // Gibt VOID zurück!
JsonFileLoader<MyConfig>.JsonSaveFile(path, cfg);

// Rohdatei
FileHandle fh = OpenFile(path, FileMode.WRITE);
if (fh != 0) { FPrintln(fh, "zeile"); CloseFile(fh); }

Objekt-Erstellung

c
// Einfach
Object obj = GetGame().CreateObject("AK101", pos, false, false, true);

// Mit Flags
Object obj = GetGame().CreateObjectEx("Barrel_Green", pos, ECE_PLACE_ON_SURFACE);

// Im Spielerinventar
player.GetInventory().CreateInInventory("BandageDressing");

// Als Anbauteil
weapon.GetInventory().CreateAttachment("ACOGOptic");

// Löschen
GetGame().ObjectDelete(obj);

Wichtige globale Funktionen

c
GetGame()                          // CGame-Instanz
GetGame().GetPlayer()              // Lokaler Spieler (nur CLIENT, null auf Server!)
GetGame().GetPlayers(out arr)      // Alle Spieler (Server)
GetGame().GetWorld()               // World-Instanz
GetGame().GetTickTime()            // Serverzeit (float)
GetGame().GetWorkspace()           // UI-Workspace
GetGame().SurfaceY(x, z)          // Geländehöhe
GetGame().IsServer()               // true auf Server
GetGame().IsClient()               // true auf Client
GetGame().IsMultiplayer()          // true wenn Multiplayer

Vollständige Dokumentation: DayZ Modding Wiki | Fallstricke | Fehlerbehandlung

Released under CC BY-SA 4.0 | Code examples under MIT License