Cliente y servidor a fondo · Lección 3/4 · 9 min

Interacción con qb-target

qb-target añade un punto de mira para interactuar con zonas, entidades o modelos. Es el estándar moderno en QBCore.

En vez de comprobar distancias a mano y pulsar E, la mayoría de servidores QBCore usan qb-target (o ox_target): apuntas con el ratón y aparece una opción interactiva. Es más limpio y rinde mejor.

Una zona interactiva (box)

lua
-- client.lua
exports['qb-target']:AddBoxZone('tienda_247', vector3(25.7, -1347.3, 29.5), 1.5, 1.5, {
  name = 'tienda_247',
  heading = 0,
  debugPoly = false,
}, {
  options = {
    {
      type = 'client',
      event = 'tienda:client:abrir',
      icon = 'fas fa-shopping-basket',
      label = 'Abrir tienda',
    },
  },
  distance = 2.0,
})

AddBoxZone

Sobre un modelo concreto (p. ej. cajeros)

lua
exports['qb-target']:AddTargetModel({ 'prop_atm_01', 'prop_atm_02', 'prop_atm_03' }, {
  options = {
    { type = 'client', event = 'banco:client:abrirCajero', icon = 'fas fa-credit-card', label = 'Usar cajero' },
  },
  distance = 1.5,
})

AddTargetModel

type = 'client' dispara un evento de cliente; existe también 'server' (dispara un evento de servidor) y 'action' (una función directa). Aun usando target, la lógica con consecuencias se valida en el SERVIDOR: el target solo es la interfaz.

Practica lo aprendido

0/3
Test

¿Qué ventaja tiene qb-target frente a comprobar distancias a mano y pulsar E en un bucle?

Rellena los huecos

Completa el export que crea una zona-caja interactiva con qb-target.

1exports['qb-target']:('tienda_247', vector3(25.7, -1347.3, 29.5), 1.5, 1.5, {
2 name = 'tienda_247', heading = 0,
3}, {
4 options = {
5 { type = 'client', event = 'tienda:client:abrir', icon = 'fas fa-shopping-basket', label = 'Abrir tienda' },
6 },
7 distance = 2.0,
8})
Pista

Es la función que añade una zona rectangular: recibe nombre, coords, ancho, largo, datos de la caja y las opciones.

Ordena el código

Ordena el export que añade una opción de qb-target sobre una entidad concreta (un NPC, vehículo, prop) ya spawneada.

Coloca las líneas en el orden correcto con las flechas.

exports['qb-target']:AddTargetEntity(entity, {
distance = 2.0,
})
{ type = 'client', event = 'mecanico:client:menu', icon = 'fas fa-hand', label = 'Abrir' },
},
options = {
Pista

Llamas a AddTargetEntity con la entidad, abres options, defines la opción (type, event, icon, label) y cierras con distance.

Reto: prográmalo tú

Crea una zona qb-target en unas coordenadas que, al interactuar, dispare un evento de cliente 'mecanico:client:menu'.

Escríbelo tú en tu editor (VS Code) y pruébalo en tu servidor. Aquí se aprende haciéndolo, no copiando.

Ver pista

AddBoxZone(name, coords, ancho, largo, {...}, { options = { { type='client', event='mecanico:client:menu', label='Abrir taller' } }, distance=2.0 }).

Escribe aquí tu solución:

¿Qué tal esta lección?