QBCore a fondo: el jugador y su dinero · Lección 2/4 · 10 min
El objeto Player y su dinero
En el servidor, Player representa al jugador. Con él lees y mueves su dinero de forma segura.
En el servidor todo gira en torno al objeto Player: lo obtienes a partir del source (su ID de servidor). Dentro está PlayerData (datos) y Functions (acciones).
local QBCore = exports['qb-core']:GetCoreObject()
local Player = QBCore.Functions.GetPlayer(source)
if not Player then return end -- siempre comprobar (puede no estar cargado)Obtener el jugador
Leer y mover dinero
-- QBCore tiene tres tipos de dinero por defecto: 'cash', 'bank' y 'crypto'
local cash = Player.PlayerData.money['cash']
local bank = Player.PlayerData.money['bank']
-- También con la función (más seguro):
local efectivo = Player.Functions.GetMoney('cash')
-- Mover dinero (el 3er argumento es el motivo, para los logs)
Player.Functions.AddMoney('cash', 500, 'venta-pescado')
Player.Functions.RemoveMoney('bank', 200, 'compra-tienda')Dinero con QBCore
TODO esto va en el SERVIDOR. El dinero se mueve donde está la autoridad. Nunca des dinero desde el cliente. RemoveMoney devuelve true/false según si el jugador tenía suficiente: úsalo para validar.
Ejemplo: cobrar validando que tiene saldo
RegisterNetEvent('tienda:server:comprar', function()
local src = source
local Player = QBCore.Functions.GetPlayer(src)
if not Player then return end
local precio = 1500
if Player.Functions.RemoveMoney('bank', precio, 'compra-tienda') then
-- RemoveMoney devolvió true: tenía saldo y se le ha cobrado
QBCore.Functions.Notify(src, 'Compra realizada', 'success')
else
QBCore.Functions.Notify(src, 'No tienes suficiente dinero', 'error')
end
end)Cobro validado
Practica lo aprendido
0/3Obtén el jugador en el servidor a partir de su source y comprueba que existe.
local Player = QBCore.Functions.(source)if not Player then endPista
El jugador puede no estar cargado todavía; por eso siempre el guard justo después.
¿Cómo lees el efectivo ('cash') de un jugador desde su PlayerData?
Este cobro no valida si el jugador tiene saldo. Usa el valor que devuelve RemoveMoney para decidir.
Este código tiene un fallo:
local Player = QBCore.Functions.GetPlayer(source)if not Player then return endPlayer.Functions.RemoveMoney('bank', 1500, 'compra')QBCore.Functions.Notify(source, 'Compra realizada', 'success')Reescríbelo corregido:
Pista
RemoveMoney devuelve true/false según el saldo. Envuelve el cobro en un if y notifica el error si devuelve false.
Reto: prográmalo tú
Haz un evento de servidor que cobre 250 del banco del jugador y solo dé un mensaje de éxito si RemoveMoney devolvió true.
Escríbelo tú en tu editor (VS Code) y pruébalo en tu servidor. Aquí se aprende haciéndolo, no copiando.
Ver pista
Usa if Player.Functions.RemoveMoney('bank', 250, 'motivo') then ... else ... end.
Escribe aquí tu solución:
