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 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 |
|---|---|
<hull max="1800" /> |
Un elemento con un atributo y sin contenido secundario |
<actions> ... </actions> |
Un contenedor comienza y termina |
<!-- comment --> |
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.
<set_value name="$Items" exact="['Корпус', 'Двигатель']" />
<set_value name="$Count" exact="0" />
<do_for_each name="$Item" in="$Items">
<set_value name="$Count" operation="add" exact="1" />
</do_for_each>
<do_if value="$Count == 2">
<debug_text text="'Обработано два элемента'" />
</do_if>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, 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.
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.
Cinco errores que puedes detectar mientras lees#
- Usos de Lua
~=, mientras que MD utiliza!=por la desigualdad. - Lua une cadenas con
..; Usos de MD+en los formularios mostrados. - La asignación Lua es
=, comparación es==. - Cambiar el texto de la ventana no prueba cambiar el objeto del mundo.
- Una definición de controlador todavía necesita un archivo cargado, un evento recibido y una entrada validada.
Lee Lua ↔ MD y explicar cada línea antes de instalar el ejemplo en un perfil de prueba.