Frameworks: ESX y QBCore · Lección 2/5 · 10 min
ESX en el servidor: el jugador y su dinero
xPlayer es el objeto del jugador en el servidor. Con él lees y mueves su dinero de forma segura.
En el servidor, todo gira en torno a xPlayer: el objeto que representa a un jugador conectado. Lo obtienes a partir del source (su ID de servidor).
local xPlayer = ESX.GetPlayerFromId(source)
if not xPlayer then return end -- siempre comprobar (puede no estar cargado)Obtener el jugador
Leer y mover dinero
-- Efectivo
local cash = xPlayer.getMoney()
xPlayer.addMoney(500) -- dar 500€ en efectivo
xPlayer.removeMoney(200) -- quitar 200€
-- Cuentas (bank, black_money…)
local bank = xPlayer.getAccount('bank').money
xPlayer.addAccountMoney('bank', 1000)
xPlayer.removeAccountMoney('bank', 1000)Dinero con ESX
TODO esto va en el SERVIDOR. Recuerda la lección de cliente vs servidor: el dinero se mueve donde está la autoridad. Nunca des dinero desde el cliente.
Ejemplo: pagar por una acción validada
RegisterNetEvent('pesca:server:vender')
AddEventHandler('pesca:server:vender', function(cantidad)
local src = source
local xPlayer = ESX.GetPlayerFromId(src)
if not xPlayer then return end
-- valida la cantidad en el servidor, no te fíes del cliente
cantidad = math.min(tonumber(cantidad) or 0, 100)
if cantidad <= 0 then return end
xPlayer.addMoney(cantidad * 15) -- 15€ por pez
end)Pago validado en el servidor
Practica lo aprendido
0/3Obtén el jugador en el servidor a partir de su source y comprueba que existe.
local xPlayer = ESX.(source)if not xPlayer then return endPista
El jugador puede no estar cargado todavía; por eso siempre se comprueba después.
¿Cómo lees el dinero del banco de un jugador con ESX?
Falta comprobar que el jugador existe antes de tocar su dinero. Añade esa comprobación.
Este código tiene un fallo:
local xPlayer = ESX.GetPlayerFromId(source)xPlayer.addMoney(500)Reescríbelo corregido:
Pista
Si xPlayer es nil, xPlayer.addMoney peta el script. Añade el guard justo después de obtenerlo.
Reto: prográmalo tú
Haz un evento de servidor que cobre 250€ del banco del jugador y solo continúe si tiene saldo suficiente.
Escríbelo tú en tu editor (VS Code) y pruébalo en tu servidor. Aquí se aprende haciéndolo, no copiando.
Ver pista
Lee xPlayer.getAccount('bank').money y compara antes de removeAccountMoney.
Escribe aquí tu solución:
