---
title: Betreiber und gemeinsame Funktionen: XML, MD und Lua
summary: Ein Anfänger-Schummel, der Symbole, kleine Beispiele und häufige Fehler in der Klartextsprache erklärt.
section: scripting
kind: guide
status: reference
updated: 2026-10-26
tags: ["X4","modding","x4","language","cheatsheet"]
sources: ["https://www.lua.org/manual/5.1/","https://luajit.org/extensions.html","https://wiki.egosoft.com/X%20Rebirth%20Wiki/Modding%20support/Mission%20Director%20Guide/"]
---
## Wie man dieses Cheat-Sheet verwendet
Identifizieren Sie zuerst die Sprache. XPath, MD und Lua drücken ähnliche Absichten anders aus. Dies ist eine Auswahl, die zum Lesen dieser Beispiele und Projektcode nützlich ist, keine statistische Rangfolge oder vollständige Sprachreferenz. [wie X4-Code funktioniert](wiki:x4-code-basics) wenn die Begriffe nicht bekannt sind. Neue Schnipsel sind Lernbeispiele, die nicht in-game-Tests beansprucht werden.
## Vier Grundkonzepte
Eine Variable speichert einen Wert. Eine Bedingung wählt, ob etwas getan werden soll. Eine Funktion erhält Argumente und führt Arbeit aus, manchmal gibt sie ein Ergebnis zurück. Ein Ereignishandler ist eine Funktion oder MD-Node-Run für ein bestimmtes Ereignis. `getName`, Anruf `getName()` und die Speicherung des zurückgegebenen Wertes.
## XML-Elemente, Attribute und Selektoren
| Vordruck | Bedeutung |
| --- | --- |
| `` | Ein Element mit einem Attribut und ohne Kindinhalt |
| ` ... ` | Beginn und Ende eines Behälters |
| `` | XML-Kommentar |
| `replace`, `add`, `remove` | Diff Operationen zum Ersetzen, Hinzufügen oder Entfernen ausgewählter Inhalte |
| `/properties/hull/@max` | XPath zu einem Attribut |
| `[@name='example']` | XPath Attributfilter |
Innerhalb eines XML-Attributs, Escape Ampersands als `&` und weniger als `<`. XML wird vor MD-Ausdrücken geparst, weshalb lt/le/gt/ge bequeme Vergleiche sind. Ein Diff Selektor und ein do_if-Ausdruck verwenden verschiedene Grammatiken.
## MD: Eine kleine Aktion nach der anderen
| Bauen | Zweck |
| --- | --- |
| `set_value` | Einen Wert zuweisen oder aktualisieren |
| `do_if`, `do_elseif`, `do_else` | Einen Zweig auswählen |
| `do_for_each` | Prozesslistenelemente |
| `append_to_list` | Ein Element anhängen |
| `remove_value` | Eine Variable entfernen oder aufzeichnen |
| `debug_text` | Schreibdiagnostik |
| `run_actions` | Führen Sie eine entsprechende Aktionsbibliothek aus |
| `event_ui_triggered` | Erhalten Sie ein UI Ereignis unter Stichwortbedingungen |
| `raise_lua_event` | Senden Sie ein Ereignis an Lua |
Das sind MD-Elementenamen, nicht Standard-XML-Funktionen. Die Engine definiert Attribute und gültigen Kontext. Das untenstehende Aktionsbeispiel erstellt eine eigene Liste und endet mit Count gleich 2. `operation=add exact=1` erhöht es; Element bezeichnet das aktuelle Element.
```xml
```
### MD-Ausdrücke
| Vordruck | Bedeutung |
| --- | --- |
| `$Count`, `Init.$States` | Eine Variable oder eine Variable in einem expliziten Cue-Kontext |
| `==`, `!=` | Gleich, nicht gleich |
| `lt`, `le`, `gt`, `ge` | Weniger, weniger oder gleich, größer, größer oder gleich |
| `and`, `or`, `not` | Logische Operationen |
| `+`, `-`, `*`, `/`, `%` | Arithmetik; Prozent ist Rest |
| `'Name: ' + $Label` | Streichkonditionierung |
| `$Value?`, `$Object.exists` | Variable/Eigentumsauflösung versus Objektexistenz |
| `typeof $D == datatype.list` | Prüfung der Wertart |
| `$D.{1}`, `$D.count` | Erste Liste Element und Element zählen |
| `table[]`, `[]` | Leere Tabelle und leere Liste |
| `if $Ready then 'yes' else 'no'` | Ein bedingter Wertausdruck |
Die angezeigten MD-Listen beginnen bei 1. Eine resolvierbare Variable kann falsch enthalten; Existenz und Wahrheit sind unterschiedlich. [Variablenkontext](wiki:md-variables), besonders mit instantisierten Stichworten.
## Lua: Eine gewöhnliche Funktion lesen
Das unten stehende Beispiel verwendet keine X4-Funktionen. Sein Ergebnis ist 8, vorausgesetzt, jedes Element hat ein numerisches Mengenfeld. `{}` erstellt eine Tabelle, die sowohl für Sequenzen als auch für benannte Datensätze verwendet wird. `item.amount` Mittel `item["amount"]`. DieIn `for _, item`, Die erste Variable erhält den Index; Unterstrich ist ein gewöhnlicher Name, der konventionell einen nicht verwendeten Wert markiert.
```lua
local function total(items)
if type(items) ~= "table" then
return 0
end
local result = 0
for _, item in ipairs(items) do
result = result + item.amount
end
return result
end
local amount = total({{amount = 3}, {amount = 5}})
```
### Lua-Betreiber
| Vordruck | Bedeutung |
| --- | --- |
| `=` | Zuweisung |
| `==`, `~=` | Gleich, nicht gleich |
| `<`, `<=`, `>`, `>=` | Vergleiche |
| `and`, `or`, `not` | Logische Operationen |
| `+`, `-`, `*`, `/`, `%` | Arithmetik |
| `..` | Streichkonditionierung |
| `#value` | String Bytelänge oder Sequenzgrenze |
| `object.field` | Zugang zum Tabellenfeld |
| `object:method(x)` | Äquivalent zu `object.method(object, x)` |
`#table` ist keine Anzahl beliebiger Schlüssel. Holes und String-Schlüssel bilden keine dichte Sequenz. Stringlängen zählen Bytes, was für UTF-8 wichtig ist. Nur false und nil sind false in Lua; 0 und ein leerer String sind wahr. `value or fallback` Ersetzt auch false. Logisch und/oder gibt einen ausgewählten Wert zurück, nicht unbedingt ein Boolean.
### Lua-Standardfunktionen
`type` einen Werttyp meldet; `tostring` Formate eines Wertes; `tonumber` nel zurück. `ipairs` die dichten Indizes von 1 bis zu einem fehlenden Gegenstand gehen; `pairs` hat keine Auftragsgarantie. `table.insert`, `table.remove` und `table.concat` Sequenzen manipulieren. `string.format` erstellt formatierten Text; Match/gsub verwenden Lua-Muster. `math.min` und `math.max` Wählen Sie numerische Grenzen. `pcall` Lua-Fehler; `require` Lademodule unter Umweltvorschriften.
Nicht jedes Modul ist in Spiel UI verfügbar. Nehmen Sie nicht den Debug- oder Dateizugriff an. Überprüfen Sie die Aufruf-Flagge und Fehler, anstatt einen Fehler still zu verbergen. Ein geschützter Lua-Aufruf macht keinen ungültigen nativen Anruf-Safe. Siehe die Primärreferenzen Lua 5.1 und LuaJIT unten.
## X4-Funktionen versus Mod-Funktionen
Lösen Sie Objekt-IDs in der korrekten Darstellung. Eine Zufallszahl, Schiffsname, Netzwerk-ID, UI-Handle und UniverseID sind nicht austauschbar: [ID-Präzision](wiki:ids-and-precision).
## Fünf Fehler, die Sie beim Lesen erkennen können
1. Verwendung von Lua `~=`, während MD verwendet `!=` für Ungleichheit.
2. Lua verbindet Strings mit `..`; MD-Verwendungen `+` in den gezeigten Formen.
3. Lua-Zuweisung ist `=`, Vergleich ist `==`.
4. Fenstertext ändern beweist nicht, dass sich das Weltobjekt verändert.
5. Eine Handler-Definition benötigt noch eine geladene Datei, ein empfangenes Ereignis und validierte Eingaben.
Lies [Lua ↔ MD](wiki:md-lua-bridge) und erklären Sie jede Zeile, bevor Sie das Beispiel in einem Testprofil installieren.