Bases de Lua para desarrollo en FiveM
Lua es el lenguaje principal para desarrollar scripts en FiveM. Aunque es un lenguaje relativamente sencillo, dominar sus patrones específicos en el contexto de FiveM requiere comprensión de los eventos, threads, natives y la división cliente-servidor. Esta guía introduce los conceptos básicos que todo desarrollador de FiveM debería conocer para escribir su primer recurso funcional.
Sintaxis básica
Lua es simple de aprender. Variables sin tipado explícito, funciones como ciudadanas de primera clase, tablas como estructura de datos principal (que sirven tanto de array como de diccionario). Los comentarios van con -- para una línea o --[[...]] para bloques. Las palabras clave principales son local, function, if/then/else/end, for/do/end, while/do/end, return.
Natives de FiveM
FiveM expone cientos de natives de GTA V como funciones Lua llamables. GetPlayerPed, GetEntityCoords, CreateVehicle, SendNUIMessage son natives. La documentación oficial en docs.fivem.net lista todas. Al empezar, familiarízate con las natives más comunes para manipulación de jugadores, vehículos, peds y UI. Los ejemplos de scripts populares son excelente material de aprendizaje.
Cliente vs servidor
FiveM separa scripts de cliente (corren en cada jugador) y servidor (corren en el servidor central). Lo que decidas dónde vive depende del contexto: renderizado en cliente, autoridad de datos y validación en servidor. Los dos se comunican mediante eventos (TriggerServerEvent, TriggerClientEvent) y callbacks. Entender esta división es clave: código sensible nunca debe estar en cliente.
Eventos y threads
Los eventos son el mecanismo principal de comunicación. Regístralos con RegisterNetEvent y escucha con AddEventHandler. Para tareas que corren periódicamente usa CreateThread con bucles que incluyen Wait para liberar CPU. Los threads son corrutinas, no threads reales del OS, así que son ligeros. Evita bucles infinitos sin Wait, bloquearán tu script.
Primeros pasos prácticos
Crea una carpeta nueva en resources, añade un fxmanifest.lua básico y archivos client.lua y server.lua. Escribe un simple handler de evento que al dispararlo desde cliente imprima un mensaje en consola del servidor. Ensure el recurso en server.cfg, conéctate al servidor y disparalo con TriggerServerEvent('my-event') desde consola F8. Este hello world es el pilar sobre el que construir scripts más complejos.
