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

lua
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

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

client.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
Test

¿Cuándo necesitas un callback de QBCore en lugar de un evento normal?

Rellena los huecos

Completa el registro del callback de servidor que responde sí/no.

1QBCore.Functions.('tienda:comprar', function(source, cb, precio)
2 local Player = QBCore.Functions.GetPlayer(source)
3 if not Player then return cb(false) end
4 cb(true)
5end)
Pista

En el servidor se registra; en el cliente se dispara con TriggerCallback.

Ordena el código

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)
end
end, 1500)
else
print('No tienes suficiente dinero')
if exito then
Pista

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:

¿Qué tal esta lección?