Usar cupón WELCOME para guardar 20%

$ USD
  • $ USD
  • € EUR
  • £ GBP
  • $ AUD
  • R$ BRL
  • CHF CHF
  • ¥ yenes
Lenguajes de codificación FiveM: ¿Cuáles son compatibles?

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

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ón Buena opción Límite importante Flujo de trabajo típico
Lua Marcos Lua existentes, recursos compactos y ejemplos directos de FiveM CfxLua es un entorno de ejecución Lua 5.4 modificado, no una instalación Lua de sistema arbitraria Edita los archivos fuente y cárgalos a través del manifiesto de recursos
JavaScript Equipos que utilizan herramientas JavaScript/TypeScript y npm Los scripts de cliente no reciben APIs de navegador o Node.js; los scripts de servidor usan el entorno de ejecución de Node de FiveM Ejecuta la fuente directamente o compila/agrupa TypeScript en JavaScript listado en el manifiesto
C# Equipos .NET, código de dominio tipado y proyectos compilados El recurso debe enviar los ensamblados y archivos esperados por el entorno de ejecución de Cfx.re Compila 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 del entorno de ejecución JavaScript describe el soporte para ES2017 y una distinción fundamental entre cliente y servidor. Los scripts de cliente se ejecutan en el entorno de FiveM y no disponen de API del navegador ni de Node.js. Los scripts de servidor utilizan un entorno Node.js personalizado. En el entorno Legacy, la versión predeterminada documentada del servidor es Node.js 16; un recurso puede elegir Node.js 22 mediante node_version '22' en fxmanifest.lua.

No des por hecho que un paquete que funciona en un proyecto Node normal también funciona en un script de cliente de FiveM. Mantén las dependencias de sistema de archivos, base de datos y npm del lado del servidor en el servidor. Para el editor y las definiciones de TypeScript, Cfx.re publica los paquetes @citizenfx/client y @citizenfx/server. Mejoran la comprobación de tipos, pero no proporcionan API de las que carece el entorno de ejecución seleccionado.

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

La documentación del entorno de ejecución C# proporciona plantillas de proyecto e instrucciones de compilación actuales. Empieza por ahí en lugar de copiar una estructura antigua de ensamblados de otra aplicación .NET. Un recurso C# normalmente incluye un proyecto que referencia los ensamblados CitizenFX compatibles, compila su código y coloca los archivos resultantes donde el manifiesto pueda 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.

Deja una respuesta