Cuando se necesita una capa nativa#

Los cambios XML ordinarios y las ventanas de la UI generalmente no necesitan uno. Use FFI o un DLL personalizado cuando esté disponible MD y Lua UI no pueden expresar la tarea. Las funciones Lua incorporadas, las exportaciones de FFI y los módulos C Lua personalizados son diferentes en virtud de diferentes contratos.

Declarando la ABI#

El ejemplo siguiente ilustra las declaraciones utilizadas con la correspondiente compilación de juegos. cdef no demuestra la disponibilidad de las exportaciones. pcall no hace una firma incorrecta segura. Verifique los tipos, llamando a la convención y soporte en su propia versión X4.

LUA
local ffi = require("ffi")
if ffi.cdef then
    pcall(ffi.cdef, [[
        bool IsGamePaused(void);
        bool IsStartmenu(void);
    ]])
end

Componentes de terceros#

X4Native es una biblioteca separada con cargador propio y ABI, no una dependencia requerida para cada mod de Lua. Declararlo y verificarlo sólo cuando se utiliza. El modo protegido de UI también afecta a los mecanismos de carga; desactivarlo no es el primer paso para un parche de datos ordinario.

Tipos de valor#

Un puntero, uint64_t y el número Lua no son intercambiables. Leer Precisión del ID Los ajustes de memoria directa dependen aún más fuertemente de la construcción. Establezca una readback segura y una identidad de objeto antes de probar una mutación.