QBCore a fondo: el jugador y su dinero · Lección 3/4 · 9 min
Callbacks de QBCore: pedir datos al servidor
Cuando el cliente necesita una respuesta del servidor (¿tengo saldo? ¿qué items tengo?), usas un callback.
Un evento normal es de ida (cliente avisa al servidor). Pero a veces el cliente necesita una RESPUESTA: «¿tengo bastante dinero para esto?». Para eso están los callbacks de QBCore.
En el servidor: registrar el callback
QBCore.Functions.CreateCallback('tienda:comprar', function(source, cb, precio)
local Player = QBCore.Functions.GetPlayer(source)
if not Player then return cb(false) end
if Player.Functions.RemoveMoney('cash', precio, 'compra') then
cb(true) -- responde al cliente: compra OK
else
cb(false) -- sin dinero
end
end)server.lua
En el cliente: llamarlo y esperar la respuesta
QBCore.Functions.TriggerCallback('tienda:comprar', function(exito)
if exito then
print('Compra realizada')
else
print('No tienes suficiente dinero')
end
end, 1500) -- 1500 = precio que se pasa al servidorclient.lua
La decisión (¿tiene dinero?) y el cobro ocurren en el SERVIDOR. El cliente solo recibe sí/no. Así no se puede hacer trampa. Y como en ESX: llama a cb() en TODOS los caminos, o el cliente se queda colgado.
Practica lo aprendido
0/3¿Cuándo necesitas un callback de QBCore en lugar de un evento normal?
Completa el registro del callback de servidor que responde sí/no.
QBCore.Functions.('tienda:comprar', function(source, cb, precio) local Player = QBCore.Functions.GetPlayer(source) if not Player then return cb(false) end cb(true)end)Pista
En el servidor se registra; en el cliente se dispara con TriggerCallback.
Ordena la llamada del cliente que pide la compra al servidor y reacciona a la respuesta.
Coloca las líneas en el orden correcto con las flechas.
print('Compra realizada')QBCore.Functions.TriggerCallback('tienda:comprar', function(exito) endend, 1500) else print('No tienes suficiente dinero') if exito thenPista
TriggerCallback recibe el nombre, la función que maneja la respuesta y, al final, los argumentos (el precio 1500).
Reto: prográmalo tú
Crea un callback que devuelva true solo si el jugador tiene el trabajo de 'police'.
Escríbelo tú en tu editor (VS Code) y pruébalo en tu servidor. Aquí se aprende haciéndolo, no copiando.
Ver pista
Compara Player.PlayerData.job.name == 'police' y responde con cb(true/false).
Escribe aquí tu solución:
