Saltar al contenido
RPScripts

Lenguajes de programación de FiveM: Lua, JavaScript y C# comparados

Por Luke

Lenguajes de codificación FiveM: ¿Cuáles son compatibles?

FiveM es compatible oficialmente con Lua, JavaScript y C#. Elige el entorno de ejecución que se adapte a tu framework, las habilidades de tu equipo y las bibliotecas necesarias, no una supuesta clasificación de rendimiento universal. Los tres pueden llamar a las funciones nativas de FiveM, manejar eventos y exponer API de recursos. Las diferencias prácticas son el límite del entorno de ejecución, el ecosistema de paquetes, el flujo de trabajo de compilación y el código ya utilizado por tus dependencias.

Los ejemplos de configuración y código aquí están dirigidos a FiveM para GTA V Legacy. Enhanced tiene diferentes reglas de tiempo de ejecución y compatibilidad; consulta los cambios de Legacy a Enhanced de Cfx.re antes de aplicarlos a un servidor Enhanced.

Comparación de lenguajes de FiveM

Entorno de ejecuciónBuena opciónLímite importanteFlujo de trabajo típico
LuaMarcos Lua existentes, recursos compactos y ejemplos directos de FiveMCfxLua es un entorno de ejecución Lua 5.4 modificado, no una instalación Lua de sistema arbitrariaEdita los archivos fuente y cárgalos a través del manifiesto de recursos
JavaScriptEquipos que utilizan herramientas JavaScript/TypeScript y npmLos scripts de cliente no reciben APIs de navegador o Node.js; los scripts de servidor usan el entorno de ejecución de Node de FiveMEjecuta la fuente directamente o compila/agrupa TypeScript en JavaScript listado en el manifiesto
C#Equipos .NET, código de dominio tipado y proyectos compiladosEl recurso debe enviar los ensamblados y archivos esperados por el entorno de ejecución de Cfx.reCompila a partir de una plantilla de Cfx.re y después despliega los archivos generados.

Lua: la ruta directa del framework

Cfx.re documenta CfxLua como un entorno de ejecución modificado de Lua 5.4. Eso importa cuando comparas el código de FiveM con tutoriales antiguos de Lua: las características del lenguaje y el comportamiento del entorno de ejecución deben verificarse con CfxLua, no inferirse del paquete del sistema operativo de un servidor.

Lua suele ser la opción menos disruptiva cuando el framework y los recursos vecinos ya están escritos en Lua. Puedes mantener eventos, exportaciones y configuración compartida en el mismo lenguaje y evitar agregar un paso de compilación solo por estilo. Un pequeño manifiesto puede listar scripts de cliente, servidor y compartidos separados. Mantén los secretos y las comprobaciones de autoridad solo del servidor fuera de los archivos del cliente, incluso cuando ambos lados usen Lua.

La sintaxis corta facilita el escaneo de los manejadores de eventos, pero no reemplaza el diseño de la interfaz. Documenta cada carga útil de evento, valida los valores en el servidor y evita tratar un evento de cliente como prueba de que el dinero, el inventario o los permisos son válidos.

JavaScript y TypeScript: saber qué lado se está ejecutando

La guía oficial Guía de entorno de ejecución de JavaScript describe el soporte de ES2017 y una división crítica cliente/servidor. Los scripts de cliente se ejecutan en el entorno de ejecución del cliente de FiveM y no tienen APIs de navegador o Node.js. Los scripts de servidor usan un entorno de ejecución de Node.js personalizado. Para el entorno de ejecución Legacy, el valor predeterminado documentado del servidor es Node.js 16; un recurso puede optar por Node.js 22 con node_version '22' en fxmanifest.lua.

No asumas que un paquete que funciona en un proyecto Node ordinario también funciona en un script de cliente FiveM. Coloca las dependencias de sistema de archivos, base de datos y npm del lado del servidor en el límite del servidor. Para las definiciones de editor y TypeScript, Cfx.re publica los @citizenfx/client y @citizenfx/server paquetes. Mejoran la verificación de tipos, pero no otorgan APIs que el tiempo de ejecución seleccionado carece.

FiveM también documenta las restricciones de afinidad de subprocesos para algunas llamadas nativas del lado del servidor. Cuando el código asíncrono de Node necesite volver al hilo principal del juego, sigue la guía de entorno de ejecución y usa setImmediate donde sea necesario. Prueba el JavaScript compilado que realmente implementas, incluidos los mapas de origen y el orden de inicio, en lugar de solo el código fuente TypeScript.

C#: usa la forma de proyecto compatible

El Documentación de entorno de ejecución de C# proporciona plantillas de proyectos actuales y guía de compilación. Comienza allí en lugar de copiar un diseño de ensamblado antiguo de una aplicación .NET no relacionada. Un recurso C# normalmente tiene un proyecto que hace referencia a los ensamblados CitizenFX compatibles, compila su código y coloca los archivos resultantes donde el manifiesto puede cargarlos.

C# puede ser una buena opción cuando el equipo ya utiliza tipos, herramientas y prácticas de prueba de .NET. La contrapartida es operativa: los colaboradores y la CI necesitan el SDK y el comando de compilación correctos, y el artefacto implementado debe permanecer sincronizado con su origen. Registra la plantilla, el marco de destino y el proceso de lanzamiento en el repositorio para que una actualización del servidor sea reproducible.

El modelo compartido: manifiestos, nativos, eventos y exportaciones

La elección del lenguaje no cambia el contrato del recurso. Cada recurso necesita un fxmanifest.lua que declara metadatos y los archivos a cargar. El código del cliente se ejecuta para los jugadores conectados; el código del servidor se ejecuta bajo FXServer. Los archivos compartidos se entregan a ambas partes, por lo que no deben contener credenciales ni decisiones de confianza solo del servidor.

  • Nativos exponen funciones del juego y de la plataforma. Consulta la referencia nativa actual y si una función nativa es del lado del cliente o del servidor.
  • Eventos mueven mensajes dentro o a través del límite cliente/servidor. Trata la entrada de red como no confiable y valídala en el lado del servidor.
  • Exportaciones publican funciones para otros recursos. Mantén documentados los nombres, parámetros, valores de retorno y dependencias de inicio.
  • Dependencias pertenecen al manifiesto o al orden de inicio del servidor cuando otro recurso debe estar disponible primero.

Un servidor de lenguaje mixto es normal. El límite estable es el evento o la exportación documentados, no el lenguaje de implementación detrás de ellos. Esto hace posible reemplazar un recurso sin reescribir toda la pila.

Cómo elegir para un proyecto real

  1. Empieza con el framework. Si el servidor depende de un ESX, QBCore, Qbox o recurso independiente establecido, utiliza sus puntos de extensión y convenciones de lenguaje compatibles.
  2. Lista las bibliotecas requeridas. Confirma que cada controlador de base de datos, puente UI y paquete sea compatible con el entorno de ejecución del cliente o servidor donde se ejecutará.
  3. Adapta la elección al equipo. Prefiere el lenguaje que los colaboradores puedan revisar, probar y mantener después de que el autor original se vaya.
  4. Define la compilación. Lua puede enviarse directamente; TypeScript y C# suelen necesitar una compilación reproducible y un directorio de salida claro.
  5. Crea un prototipo de la interfaz entre componentes. Prueba una llamada nativa, un evento de red validado por el servidor, una exportación y un reinicio de dependencia antes de construir la función completa.

Lista mínima de comprobaciones

  • Inicia el recurso en un servidor de prueba e inspecciona los registros del servidor y del cliente F8.
  • Vuelve a conectar un cliente limpio y reinicia el recurso para exponer archivos faltantes o suposiciones de orden.
  • Envía cargas útiles de eventos no válidas y no autorizadas y confirma que el servidor las rechaza.
  • Verifica la versión de Node documentada o la salida de compilación de .NET en el host de implementación real.
  • Fija las versiones de las dependencias y guarda una copia de reversión del último recurso que funcionó.

No hay ninguna razón basada en la evidencia para considerar que uno de los tres lenguajes de programación de FiveM sea siempre el más rápido o el más popular para todos los recursos. Selecciona Lua, JavaScript/TypeScript o C# según las características documentadas que admite su entorno de ejecución, el framework que lo rodea y el coste de mantenimiento que tu equipo realmente pueda asumir.

Diferencias del entorno de ejecución Enhanced

Enhanced cambia el entorno de ejecución de JavaScript y C# y algunos comportamientos de la plataforma. Utiliza la documentación de la edición exacta de cliente/servidor en lugar de aplicar suposiciones de Legacy Node o Mono. Reconstruye y prueba las dependencias contra ese entorno.

Selección premium para tu servidor

  • elevador de coches
    • ESX
    • QBCore
    • vRP
    4,99 US$4,99 €3,99 GBP7,99 AUD25,99 BRL4,99 CHF790 JPY
  • Vista previa del recurso FiveM de la pantalla de carga KS
      13,99 US$12,99 €10,99 GBP20,99 AUD71,99 BRL11,99 CHF2220 JPY
    • Policía de Origen
      • QBCore
      23,00 US$20,99 €17,99 GBP33,99 AUD116,99 BRL18,99 CHF3640 JPY
    • Capó Mirror Park
        8,00 US$7,99 €6,99 GBP11,99 AUD40,99 BRL6,99 CHF1270 JPY
      • Policía de Origen
        • ESX
        23,00 US$20,99 €17,99 GBP33,99 AUD116,99 BRL18,99 CHF3640 JPY
      Ver la tienda