Skip to content

Ściągawka Enforce Script

Strona główna | Ściągawka


Jednostronicowa ściągawka dla DayZ Enforce Script. Dodaj do zakładek.


Typy

TypOpisDomyślnaPrzykład
int32-bitowa liczba całkowita ze znakiem0int x = 42;
float32-bitowa liczba zmiennoprzecinkowa0.0float f = 3.14;
boolWartość logicznafalsebool b = true;
stringNiezmienny typ wartościowy""string s = "hello";
vector3-składnikowy float (x,y,z)"0 0 0"vector v = "1 2 3";
typenameReferencja do typunulltypename t = PlayerBase;
ClassKorzeń wszystkich typów referencyjnychnull
voidBrak wartości zwracanej

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


Metody tablicy (array<T>)

MetodaZwracaUwagi
Insert(item)int (indeks)Dodaj na koniec
InsertAt(item, idx)voidWstaw na pozycję
Get(idx) / arr[idx]TDostęp po indeksie
Set(idx, item)voidZastąp na indeksie
Find(item)intIndeks lub -1
Count()intLiczba elementów
IsValidIndex(idx)boolSprawdzenie zakresu
Remove(idx)voidNieuporządkowane (zamienia z ostatnim!)
RemoveOrdered(idx)voidZachowuje kolejność
RemoveItem(item)voidZnajdź i usuń (uporządkowane)
Clear()voidUsuń wszystko
Sort() / Sort(true)voidRosnąco / malejąco
ShuffleArray()voidLosowe przemieszanie
Invert()voidOdwróć
GetRandomElement()TLosowy wybór
InsertAll(other)voidDodaj wszystko z innej
Copy(other)voidZastąp kopią
Resize(n)voidZmień rozmiar (wypełnia domyślnymi)
Reserve(n)voidWstępna alokacja pojemności

Aliasy typów: TStringArray, TIntArray, TFloatArray, TBoolArray, TVectorArray


Metody mapy (map<K,V>)

MetodaZwracaUwagi
Insert(key, val)boolDodaj nowy
Set(key, val)voidWstaw lub zaktualizuj
Get(key)VZwraca domyślną jeśli brak
Find(key, out val)boolBezpieczne pobranie
Contains(key)boolSprawdź istnienie
Remove(key)voidUsuń po kluczu
Count()intLiczba wpisów
GetKey(idx)KKlucz na indeksie (O(n))
GetElement(idx)VWartość na indeksie (O(n))
GetKeyArray()array<K>Wszystkie klucze
GetValueArray()array<V>Wszystkie wartości
Clear()voidUsuń wszystko

Metody zbioru (set<T>)

MetodaZwraca
Insert(item)int (indeks)
Find(item)int (indeks lub -1)
Get(idx)T
Remove(idx)void
RemoveItem(item)void
Count()int
Clear()void

Składnia klas

c
class MyClass extends BaseClass
{
    protected int m_Value;                  // pole
    private ref array<string> m_List;       // posiadana referencja

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

    override void OnInit() { super.OnInit(); }       // nadpisanie
    static int GetCount() { return 0; }              // metoda statyczna
};

Dostęp: private | protected | (publiczne domyślnie) Modyfikatory: static | override | ref | const | out | notnullModded: modded class MissionServer { override void OnInit() { super.OnInit(); } }


Sterowanie przepływem

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

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

// foreach (wartość)
foreach (string item : myArray) { }

// foreach (indeks + wartość)
foreach (int i, string item : myArray) { }

// foreach (mapa: klucz + wartość)
foreach (string key, int val : myMap) { }

// while
while (condition) { }

// switch (BEZ przenikania!)
switch (val) { case 0: Print("zero"); break; default: break; }

Metody łańcuchów znaków

MetodaZwracaPrzykład
s.Length()int"hello".Length() = 5
s.Substring(start, len)string"hello".Substring(1,3) = "ell"
s.IndexOf(sub)int-1 jeśli nie znaleziono
s.LastIndexOf(sub)intSzuka od końca
s.Contains(sub)bool
s.Replace(old, new)intModyfikuje w miejscu, zwraca liczbę
s.ToLower()voidW miejscu!
s.ToUpper()voidW miejscu!
s.TrimInPlace()voidW miejscu!
s.Split(delim, out arr)voidDzieli na TStringArray
s.Get(idx)stringPojedynczy znak
s.Set(idx, ch)voidZastąp znak
s.ToInt()intParsuj liczbę całkowitą
s.ToFloat()floatParsuj liczbę zmiennoprzecinkową
s.ToVector()vectorParsuj "1 2 3"
string.Format(fmt, ...)stringSymbole zastępcze %1..%9
string.Join(sep, arr)stringPołącz elementy tablicy

Metody matematyczne

MetodaOpis
Math.RandomInt(min, max)[min, max) max wyłączne
Math.RandomIntInclusive(min, max)[min, max]
Math.RandomFloat01()[0, 1]
Math.RandomBool()Losowe true/false
Math.Round(f) / Floor(f) / Ceil(f)Zaokrąglanie
Math.AbsFloat(f) / AbsInt(i)Wartość bezwzględna
Math.Clamp(val, min, max)Ogranicz do zakresu
Math.Min(a, b) / Max(a, b)Min/max
Math.Lerp(a, b, t)Interpolacja liniowa
Math.InverseLerp(a, b, val)Odwrotna interpolacja
Math.Pow(base, exp) / Sqrt(f)Potęga/pierwiastek
Math.Sin(r) / Cos(r) / Tan(r)Trygonometria (radiany)
Math.Atan2(y, x)Kąt ze składowych
Math.NormalizeAngle(deg)Normalizuj do 0-360
Math.SqrFloat(f) / SqrInt(i)Podniesienie do kwadratu

Stałe: Math.PI, Math.PI2, Math.PI_HALF, Math.DEG2RAD, Math.RAD2DEG

Wektor: 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()


Typowe wzorce

Bezpieczne rzutowanie w dół

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

Rzutowanie inline

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

Sprawdzenie null

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

Sprawdzenie IsAlive (wymaga EntityAI)

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

Iteracja po mapie za pomocą foreach

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

Konwersja typu wyliczeniowego

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

Flagi bitowe

c
int flags = FLAG_A | FLAG_B;       // łączenie
if (flags & FLAG_A) { }           // testowanie
flags = flags & ~FLAG_B;          // usuwanie

Czego NIE MA

Brakująca funkcjaObejście
Operator trójargumentowy ? :if/else
do...whilewhile(true) { ... break; }
try/catchKlauzule ochronne + wczesny return
Dziedziczenie wielokrotnePojedyncze + kompozycja
Przeciążanie operatorówNazwane metody (oprócz [] przez Get/Set)
LambdyNazwane metody
nullptrnull / NULL
\\ / \" w łańcuchachUnikać (CParser się psuje)
#includeconfig.cpp files[]
Przestrzenie nazwPrefiksy nazw (MyMod_, VPP_)
Interfejsy / abstrakcyjnePuste metody bazowe
Przenikanie switchKażdy case jest niezależny
Wartości #defineUżywaj const
Wyrażenia w parametrach domyślnychTylko literały/NULL
Parametry wariadycznestring.Format lub tablice
Redeklaracja zmiennych w else-ifUnikalne nazwy dla każdej gałęzi

Tworzenie widgetów (programowo)

c
// Pobierz przestrzeń roboczą
WorkspaceWidget ws = GetGame().GetWorkspace();

// Utwórz z layoutu
Widget root = ws.CreateWidgets("MyMod/gui/layouts/MyPanel.layout");

// Znajdź widget potomny
TextWidget title = TextWidget.Cast(root.FindAnyWidget("TitleText"));
if (title) title.SetText("Hello World");

// Pokaż/ukryj
root.Show(true);
root.Show(false);

Wzorzec RPC

Rejestracja (serwer):

c
// W 3_Game lub 4_World init:
GetGame().RPCSingleParam(null, MY_RPC_ID, null, true, identity);  // Engine RPC

// Lub z RPC kierowanym przez łańcuch znaków (MyRPC / CF):
GetRPCManager().AddRPC("MyMod", "RPC_Handler", this, 2);  // CF
MyRPC.Register("MyMod", "MyRoute", this, MyRPCSide.SERVER);  // MyMod

Wysyłanie (klient do serwera):

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

Odbieranie (handler na serwerze):

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;
    // Przetwarzanie...
}

Obsługa błędów

c
ErrorEx("message");                              // Domyślna ważność ERROR
ErrorEx("info", ErrorExSeverity.INFO);           // Info
ErrorEx("warning", ErrorExSeverity.WARNING);     // Ostrzeżenie
Print("debug output");                           // Log skryptu
string stack = DumpStackString();                // Pobierz stos wywołań

Operacje na plikach

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

// JSON
MyConfig cfg = new MyConfig();
JsonFileLoader<MyConfig>.JsonLoadFile(path, cfg);  // Zwraca VOID!
JsonFileLoader<MyConfig>.JsonSaveFile(path, cfg);

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

Tworzenie obiektów

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

// Z flagami
Object obj = GetGame().CreateObjectEx("Barrel_Green", pos, ECE_PLACE_ON_SURFACE);

// W ekwipunku gracza
player.GetInventory().CreateInInventory("BandageDressing");

// Jako załącznik
weapon.GetInventory().CreateAttachment("ACOGOptic");

// Usunięcie
GetGame().ObjectDelete(obj);

Kluczowe funkcje globalne

c
GetGame()                          // Instancja CGame
GetGame().GetPlayer()              // Lokalny gracz (tylko KLIENT, null na serwerze!)
GetGame().GetPlayers(out arr)      // Wszyscy gracze (serwer)
GetGame().GetWorld()               // Instancja świata
GetGame().GetTickTime()            // Czas serwera (float)
GetGame().GetWorkspace()           // Przestrzeń robocza UI
GetGame().SurfaceY(x, z)          // Wysokość terenu
GetGame().IsServer()               // true na serwerze
GetGame().IsClient()               // true na kliencie
GetGame().IsMultiplayer()          // true jeśli multiplayer

Pełna dokumentacja: Wiki moddingu DayZ | Pułapki | Obsługa błędów

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