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).

lua
local xPlayer = ESX.GetPlayerFromId(source)
if not xPlayer then return end -- siempre comprobar (puede no estar cargado)

Obtener el jugador

Leer y mover dinero

lua
-- 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

lua
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/3
Rellena los huecos

Obtén el jugador en el servidor a partir de su source y comprueba que existe.

1local xPlayer = ESX.(source)
2if not xPlayer then return end
Pista

El jugador puede no estar cargado todavía; por eso siempre se comprueba después.

Test

¿Cómo lees el dinero del banco de un jugador con ESX?

Corrige el error

Falta comprobar que el jugador existe antes de tocar su dinero. Añade esa comprobación.

Este código tiene un fallo:

1local xPlayer = ESX.GetPlayerFromId(source)
2xPlayer.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:

¿Qué tal esta lección?