ESX Legacy para FiveM: qué es, errores comunes y la skill de IA
237 instalaciones en skills.sh
¿No quieres gestionar las skills tú mismo? Consigue la app completa.
ESX Legacy es el framework que corre en buena parte de los servidores de roleplay de FiveM: gestiona jugadores, trabajos, dinero, inventario y armas a través del recurso es_extended. Si escribes scripts para un servidor ESX, hablas con él mediante el objeto ESX, el objeto xPlayer en el servidor y PlayerData en el cliente. Esta página explica qué cubre la skill de ESX de FiveAI, los errores que más rompen scripts ESX y cómo instalar la skill en tu asistente de IA.
Qué te da la skill de ESX
La skill es un archivo SKILL.md con un archivo de reglas por cada parte del framework:
core-concepts: cómo se inicializaes_extended, qué contienePlayerDataen el cliente y qué contienexPlayeren el servidor.client-functionsyserver-functions:ESX.IsPlayerLoaded()yESX.PlayerDataen el cliente,ESX.GetPlayerFromId(source)en el servidor, callbacks y triggers.xplayer-methods: los métodos para dinero, items, armas, inventario, trabajos y metadata.jobs-economy: definición de trabajos, salarios, las cuentasmoneyybank, gestión de sociedades.inventory-itemsyweapons-loadout: registro de items, items usables, peso, armas, componentes, munición y tintes.events-callbacks: eventos de ESX, callbacks de servidor y cliente, ySecureNetEventpara eventos que dispara el cliente.best-practices: comprobaciones de nil, cacheo de objetos de jugador, nombres en camelCase, pocas globales y ox_lib para menús, notificaciones y barras de progreso en lugar de la UI de ESX.
Úsala cuando crees un recurso ESX, añadas un trabajo, toques la economía o escribas cualquier cosa que lea datos del jugador.
Errores comunes con ESX
- Usar
xPlayersin comprobar nil. Síntoma: “attempt to index a nil value” en la consola del servidor cuando un jugador se desconecta en mitad de un evento o el source no es válido. Solución:local xPlayer = ESX.GetPlayerFromId(source)seguido deif not xPlayer then return end. - Mezclar las APIs de ESX y QBCore. Síntoma: una llamada a
QBCore.Functions.GetPlayero aPlayer.Functions.AddMoneydentro de un script ESX y un error de nil en ejecución. Pasa cuando el script se copió de un tutorial de QBCore. Solución: usaESX.GetPlayerFromIdy los métodos dexPlayer, nada más. - Leer
ESX.PlayerDataantes de que el jugador cargue. Síntoma: trabajo o dinero vacíos en el cliente durante los primeros segundos tras el spawn. Solución: compruebaESX.IsPlayerLoaded()o espera al evento de jugador cargado antes de leerPlayerData. - Confiar en las cantidades de dinero que envía el cliente. Síntoma: un tramposo dispara tu evento con una cantidad inventada y el servidor la paga. Solución: calcula precios y recompensas en el servidor, valida el source y usa
SecureNetEventpara los eventos que dispara el cliente. - Llamar a
ESX.GetPlayerFromIddentro de bucles. Síntoma: un hilo del servidor que se ejecuta cada frame y busca al mismo jugador en cada iteración. Solución: obténxPlayeruna vez, guárdalo en una local y reutilízalo.
Por qué los asistentes de IA se equivocan con ESX
Un asistente genérico ha visto años de tutoriales de ESX, y muchos apuntan a versiones antiguas. Suele recurrir al evento esx:getSharedObject para obtener el objeto ESX, inventa métodos que no existen en xPlayer o mete lógica exclusiva de servidor en un archivo de cliente. También mezcla vocabulario de frameworks: xPlayer en una función y Player.PlayerData en la siguiente, porque ambos aparecen en sus datos de entrenamiento.
La skill le da al asistente una referencia corta y actual. Los tutoriales antiguos usan el evento getSharedObject; ESX Legacy entrega el objeto a través del import o el export de es_extended, y el archivo de conceptos básicos de la skill apunta al asistente hacia ahí. La lista de principios (comprobar nil, esperar la carga del jugador, no confiar en el cliente, cachear objetos de jugador, preferir ox_lib para la UI) se carga cada vez que pides código ESX, así que el resultado coincide con la API que corre tu servidor.
Instala la skill de ESX en 30 segundos
- Haz clic en “Download SKILL.md” en la parte superior de esta página.
- Descomprímelo en la carpeta de skills o reglas de tu herramienta de IA. La sección de instalación de abajo muestra la ruta exacta para Claude Code, Cursor y VS Code.
- Pide al asistente algo concreto, como un evento de servidor que quite un item y sume dinero a la cuenta
bank, y comprueba que usaESX.GetPlayerFromIdcon comprobación de nil.
Cómo instalar esta skill
Descarga el zip, descomprímelo y coloca la carpeta donde tu herramienta carga skills o reglas. La ruta exacta depende de la herramienta:
Claude Code
Descomprime en .claude/skills/esx-framework/ dentro del proyecto (la carpeta debe contener SKILL.md). Para todos los proyectos, usa ~/.claude/skills/esx-framework/.
Cursor
Cursor carga las reglas del proyecto desde .cursor/rules/. Añade ahí un archivo de regla que apunte a la skill descomprimida, o pega el contenido de SKILL.md y los archivos de reglas en una regla. El formato es .mdc con frontmatter y cambia entre versiones, así que revisa la documentación de tu versión.
VS Code / Copilot
Copilot lee archivos de instrucciones desde .github/instructions/*.instructions.md. Copia SKILL.md ahí con un glob applyTo para tus archivos Lua y deja los archivos de reglas al lado.
El archivo SKILL.md
Este es el archivo que lee tu asistente de IA. Enlaza a los archivos de reglas incluidos en la descarga.
El contenido de la skill está en inglés: es documentación técnica pensada para agentes de IA.
ESX Framework
Server/client API for ESX Legacy: xPlayer, PlayerData, callbacks, events, jobs and money.
Activation Contract
Load this skill when the user creates or edits an ESX resource, touches xPlayer or ESX.PlayerData, needs jobs, money, accounts, items or weapons through ESX, or asks about ESX callbacks, events or best practices.
Hard Rules
- Get the object with
ESX = exports['es_extended']:getSharedObject(). On the client, wait forESXandESX.IsPlayerLoaded()before readingESX.PlayerData. xPlayerexists on the SERVER only (ESX.GetPlayerFromId(source)).ESX.PlayerDataexists on the CLIENT only.- Always nil-check:
if not xPlayer then return endbefore calling any method. - Money, items, weapons, jobs and metadata are mutated on the server through
xPlayer.*methods, never from the client. - Pass a
reasontoaddMoney,removeMoney,addAccountMoney,removeAccountMoney. - Client callbacks (
ESX.TriggerClientCallback,ESX.AwaitClientCallback) must never decide anything sensitive: the client can fake the answer. - Use
ESX.SecureNetEventfor client events that only the server may trigger. - Prefer ox_lib for notifications, menus, dialogs and progress bars over ESX UI.
- Cache
PlayerPedId()and update onesx:playerPedChanged; neverWait(0)loops without need.
Decision Gates
| Need | Use |
|---|---|
| Client asks server for data | ESX.RegisterServerCallback + ESX.TriggerServerCallback |
| Server pushes an event to one player | xPlayer.triggerEvent(name, ...) |
| Server-only client event | ESX.SecureNetEvent(name, cb) on the client |
| Find player by source / identifier | ESX.GetPlayerFromId / ESX.GetPlayerFromIdentifier |
| Filter players by job etc. | ESX.GetExtendedPlayers(key, value) |
| Usable item | ESX.RegisterUsableItem(item, cb) |
| Admin command with group | ESX.RegisterCommand(name, group, cb, allowConsole, suggestion) |
Execution Steps
- Confirm
es_extendedstarts before the resource; acquireESXper side. - Decide the side: mutation and validation on server, display on client.
- Fetch
xPlayer, nil-check, then validate every client-supplied argument. - Pick the call from Decision Gates; read the matching rules file for signatures.
- Return data via callbacks, not paired events.
Output Contract
Return runnable Lua with the client/server split explicit, xPlayer nil-checked, and reasons on money operations. Use ox_lib for UI unless the user asks otherwise.
References
- rules/core-concepts.md — architecture, PlayerData, xPlayer, startup flow.
- rules/client-functions.md — client-side ESX functions and player state.
- rules/server-functions.md — player retrieval, callbacks, commands, jobs, items.
- rules/xplayer-methods.md — xPlayer money, accounts, inventory, weapons, meta.
- rules/events-callbacks.md — server/client callbacks, events, SecureNetEvent.
- rules/best-practices.md — naming, caching, loops, security, Lua 5.4.
- rules/reference-links.md — official ESX documentation links.
Upstream docs: https://docs.esx-framework.org
Preguntas frecuentes
- Los dos son válidos. ESX es el framework más antiguo y sigue muy extendido, con un catálogo enorme de scripts compatibles. QBCore tiene otra API y su propio ecosistema. Elige el que conozca tu equipo y cuyos scripts vayas a usar, y no mezcles las dos APIs en un mismo recurso.
- Sí. La skill documenta la API actual de ESX Legacy: ESX.GetPlayerFromId, los métodos de xPlayer, ESX.IsPlayerLoaded, callbacks de servidor y SecureNetEvent. Los patrones de ESX 1.1 o 1.2 no son el objetivo.
- Sí. SKILL.md es markdown plano. Pégalo como instrucción personalizada o adjúntalo a un proyecto de ChatGPT. Claude Code, Cursor y VS Code lo cargan directamente desde su carpeta de skills o reglas.
¿Elijo ESX o QBCore para un servidor nuevo?
¿Esta skill cubre solo ESX Legacy?
¿Puedo usar esta skill con ChatGPT?
Guías relacionadas
Lecturas más largas del blog de FiveAI sobre el mismo tema.