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)
-- 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)
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¿Qué ventaja tiene qb-target frente a comprobar distancias a mano y pulsar E en un bucle?
Completa el export que crea una zona-caja interactiva con qb-target.
exports['qb-target']:('tienda_247', vector3(25.7, -1347.3, 29.5), 1.5, 1.5, { name = 'tienda_247', heading = 0,}, { options = { { type = 'client', event = 'tienda:client:abrir', icon = 'fas fa-shopping-basket', label = 'Abrir tienda' }, }, distance = 2.0,})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 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:
