---
title: Operadores y funciones comunes: XML, MD y Lua
summary: Una hoja de engaño para principiantes explicando símbolos, pequeños ejemplos y errores frecuentes en lenguaje sencillo.
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/"]
---
## Cómo usar esta hoja de trucos
XPath, MD y Lua expresan intenciones similares de manera diferente. Esta es una selección útil para leer estos ejemplos y código del proyecto, no un ranking estadístico o una referencia completa del idioma. [cómo funciona el código de X4](wiki:x4-code-basics) Los nuevos fragmentos son ejemplos de aprendizaje, no se reclaman pruebas en el juego.
## Cuatro conceptos básicos
Una variable almacena un valor. Una condición elige si hacer algo. Una función recibe argumentos y realiza trabajo, a veces devuelve un resultado. Un manejador de eventos es una función o nodo MD que se ejecuta para un evento en particular. `getName`, llamando `getName()` y almacenar su valor devuelto.
## Elementos XML, atributos y selectores
| Forma | Significado |
| --- | --- |
| `` | Un elemento con un atributo y sin contenido secundario |
| ` ... ` | Un contenedor comienza y termina |
| `` | Comentario XML |
| `replace`, `add`, `remove` | Operaciones Diff para reemplazar, añadir o eliminar el contenido seleccionado |
| `/properties/hull/@max` | XPath a un atributo |
| `[@name='example']` | Filtro de atributo XPath |
Dentro de un atributo XML, ampersands escape como `&` y menos que como `<`. XML se analiza antes de las expresiones MD, por lo que lt/le/gt/ge son comparaciones convenientes. Un lector diff se y una expresión do_if usan diferentes gramáticas.
## MD: Una acción pequeña cada vez
| Construir | Finalidad |
| --- | --- |
| `set_value` | Asignar o actualizar un valor |
| `do_if`, `do_elseif`, `do_else` | Seleccionar una rama |
| `do_for_each` | Elementos de la lista de procesos |
| `append_to_list` | Añadir un elemento |
| `remove_value` | Eliminar una variable o registro |
| `debug_text` | Escribir diagnósticos |
| `run_actions` | Ejecute una biblioteca de acción apropiada |
| `event_ui_triggered` | Recibir un evento de la UI en condiciones de entrada |
| `raise_lua_event` | Enviar un evento a Lua |
Estos son nombres de elementos MD, no funciones XML estándar. El motor define atributos y contexto válido. El ejemplo de acciones a continuación crea su propia lista y termina con Count igual a 2. `operation=add exact=1` aumenta; El elemento denota el elemento actual.
```xml
```
### Expresiones MD
| Forma | Significado |
| --- | --- |
| `$Count`, `Init.$States` | Una variable, o una variable en un contexto de entrada explícito |
| `==`, `!=` | Igual, no igual |
| `lt`, `le`, `gt`, `ge` | Menos, menos o igual, más, más o menos igual |
| `and`, `or`, `not` | Operaciones lógicas |
| `+`, `-`, `*`, `/`, `%` | Aritmético; porcentaje es el resto |
| `'Name: ' + $Label` | Concatenación de cadenas |
| `$Value?`, `$Object.exists` | Resolución de variables/property versus existencia de objetos |
| `typeof $D == datatype.list` | Ensayo de tipo de valor |
| `$D.{1}`, `$D.count` | Primera lista de elementos y elementos |
| `table[]`, `[]` | Tabla vacía y lista vacía |
| `if $Ready then 'yes' else 'no'` | Una expresión de valor condicional |
Las listas de MD mostradas comienzan en 1. Una variable revocable puede contener falso; la existencia y la verdad son diferentes. [contexto de la variable](wiki:md-variables), especialmente con cues instantáneos.
## Lua: Leer una función normal
El ejemplo independiente a continuación no utiliza funciones X4. Su resultado es 8, asumiendo que cada elemento tiene un campo de cantidad de la moneda. `{}` crea una tabla, utilizada para ambas secuencias y registros con nombre. `item.amount` significa `item["amount"]`. In `for _, item`, la primera variable recibe el índice; el subrayado es un nombre ordinario que marca convencionalmente un valor no utilizado.
```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}})
```
### Operadores Lua
| Forma | Significado |
| --- | --- |
| `=` | Asignación |
| `==`, `~=` | Igual, no igual |
| `<`, `<=`, `>`, `>=` | Comparaciones |
| `and`, `or`, `not` | Operaciones lógicas |
| `+`, `-`, `*`, `/`, `%` | Aritmético |
| `..` | Concatenación de cadenas |
| `#value` | Longitud del byte de cadena o límite de secuencia |
| `object.field` | Acceso al campo de la tabla |
| `object:method(x)` | Equivalente a `object.method(object, x)` |
`#table` no es un recuento de teclas arbitrarias. Las teclas de agujeros y cadenas no forman una secuencia densa. Las longitudes de cadena cuentan bytes, lo que importa para UTF-8. Sólo las falsas y las niles son falsas en Lua; 0 y una cadena vacía son verdaderas. `value or fallback` También reemplaza false. Lógica y/o devuelve un valor seleccionado, no necesariamente un booleano.
### Funciones estándar de Lua
`type` informa de un tipo de valor; `tostring` formatos de un valor; `tonumber` intenta la conversión y puede devolver nil. `ipairs` camina índices densos desde 1 hasta un elemento que falta; `pairs` no tiene garantía de orden. `table.insert`, `table.remove` y `table.concat` manipular secuencias. `string.format` construye texto formateado; match/gsub usa patrones Lua. `math.min` y `math.max` seleccionar límites de la condicional. `pcall` capturas de errores de Lua; `require` carga módulos bajo reglas ambientales.
No todos los módulos están disponibles en la UI del juego. No asumas el acceso a los archivos o debug. Revisa la bandera de pcall y el error en lugar de ocultar silenciosamente un fallo. Una llamada Lua protegida no hace que una llamada nativa no sea válida. Vea las referencias primarias Lua 5.1 y LuaJIT abajo.
## Funciones X4 versus funciones mod
Un número aleatorio, nombre de la nave, ID de red, mango de la UI y UniverseID no son intercambiables: [Precisión del ID](wiki:ids-and-precision).
## Cinco errores que puedes detectar mientras lees
1. Usos de Lua `~=`, mientras que MD utiliza `!=` por la desigualdad.
2. Lua une cadenas con `..`; Usos de MD `+` en los formularios mostrados.
3. La asignación Lua es `=`, comparación es `==`.
4. Cambiar el texto de la ventana no prueba cambiar el objeto del mundo.
5. Una definición de controlador todavía necesita un archivo cargado, un evento recibido y una entrada validada.
Lee [Lua ↔ MD](wiki:md-lua-bridge) y explicar cada línea antes de instalar el ejemplo en un perfil de prueba.