qb-target vs ox_target: convertir AddBoxZone y arreglar objetivos que no se muestran

Movimiento de qb-target a ox_target en FiveM: cómo convertir llamadas de AddBoxZone y AddTargetModel, lo que hace la capa de compatibilidad, y por qué los objetivos no se muestran.

Te moviste de qb-target a ox_target, o descargaste un script escrito para uno mientras ejecutas el otro, y las zonas de interacción se han ido o se duplicaron. Aquí está cómo los dos difieren, cómo convertir las llamadas, y cómo encontrar por qué un objetivo no se muestra.

La diferencia en una tabla

Ambos recursos hacen el mismo trabajo: una tecla abre un ojo de orientación y el jugador elige una opción en una entidad o en una zona. Difieren en cómo lo describes.

Idea qb-target ox_target
Zona de caja AddBoxZone(name, center, length, width, options, targetOptions) addBoxZone({ coords, size, rotation, options })
Modelo AddTargetModel(models, options) addModel(models, options)
Qué hacer type, event, action onSelect, event, serverEvent
Límite de trabajo job groups
Límite de elemento item items
Comprobación extra canInteract canInteract

ox_target toma una única tabla para zonas, y las opciones son una lista simple, sin un envoltorio que mantenga options y distance juntos.

Convertir una zona de caja

Una zona típica de qb-target:

lua
exports['qb-target']:AddBoxZone('pd_armory', vector3(452.2, -980.0, 30.7), 1.5, 1.0, {
    name = 'pd_armory',
    heading = 90.0,
    debugPoly = false,
    minZ = 29.7,
    maxZ = 31.7,
}, {
    options = {
        {
            type = 'client',
            event = 'my_script:openArmory',
            icon = 'fas fa-gun',
            label = 'Open armory',
            job = 'police',
        },
    },
    distance = 2.0,
})

La misma zona en ox_target:

lua
exports.ox_target:addBoxZone({
    coords = vec3(452.2, -980.0, 30.7),
    size = vec3(1.0, 1.5, 2.0),
    rotation = 90.0,
    debug = false,
    options = {
        {
            name = 'pd_armory',
            event = 'my_script:openArmory',
            icon = 'fa-solid fa-gun',
            label = 'Open armory',
            groups = 'police',
            distance = 2.0,
        },
    },
})

Lo que se movió:

  • center se convierte en coords, y es el centro de la caja en ambos, pero la altura ahora viene de size. qb-target usa minZ y maxZ, así que pon coords.z a mitad de camino entre ellos y usa su brecha como altura.
  • length y width se convierten en x e y de size. Si la caja termina girada de la manera incorrecta, intercámbialos o cambia rotation, y comprueba con debug = true.
  • heading se convierte en rotation.
  • job se convierte en groups, y distance se mueve en cada opción.
  • type = 'client' con event permanece como un event. Usa serverEvent para type = 'server', u onSelect con una función en lugar de un evento.

Convertir un objetivo de modelo

qb-target:

lua
exports['qb-target']:AddTargetModel({ `prop_atm_01`, `prop_atm_02` }, {
    options = {
        {
            type = 'client',
            event = 'my_script:openAtm',
            icon = 'fas fa-credit-card',
            label = 'Use ATM',
        },
    },
    distance = 1.5,
})

ox_target:

lua
exports.ox_target:addModel({ `prop_atm_01`, `prop_atm_02` }, {
    {
        name = 'my_script_atm',
        event = 'my_script:openAtm',
        icon = 'fa-solid fa-credit-card',
        label = 'Use ATM',
        distance = 1.5,
    },
})

Las opciones son ahora el segundo argumento en sí, una lista de tablas de opciones. La lista completa de exportaciones y campos está en ox_target: addBoxZone, addModel y addLocalEntity.

Mantén un script antiguo funcionando

ox_target proporciona compatibilidad para muchas exportaciones de qb-target. Un script que aún llama a exports['qb-target']:AddBoxZone(...) puede seguir funcionando cuando solo ox_target se ejecuta, siempre que use las exportaciones comunes.

No confíes en ello para todo. Las exportaciones menos comunes y los campos de opción inusuales pueden no comportarse de la misma manera. Prueba cada script, y cuando uno se comporta mal, convierte sus llamadas a las exportaciones nativas de ox_target como se muestra arriba. Las llamadas nativas también son más fáciles de leer y depurar.

Cuidado: no inicies qb-target junto a ox_target para «asegurarte». Mantén solo un recurso de orientación, y elimina el otro de server.cfg.

Por qué los objetivos no se muestran

Casi todos los casos de «mi objetivo es invisible» caen en esta lista.

Ambos recursos se están ejecutando. Dos recursos de orientación luchan por la misma tecla. Comprueba server.cfg y tu lista de recursos, y mantén solo uno:

cfg
ensure ox_lib
ensure ox_target
# ensure qb-target   <- remove or comment out

La distancia es demasiado pequeña. La opción se muestra solo dentro de su distance. Intenta distance = 3.0 mientras pruebas. Con qb-target, distance se sienta junto a options, no dentro de cada opción.

Una comprobación de trabajo falla. Una opción con job (qb-target) o groups (ox_target) está oculta para cualquiera sin ese trabajo, sin error. Prueba con el trabajo correcto, o elimina el campo por un momento. En ox_target un grado en la tabla ({ police = 2 }) significa que el jugador necesita al menos ese grado.

Un canInteract devuelve nada. Si la función tiene una ruta de código que devuelve nil, la opción está oculta. Haz que devuelva true o false en cada ruta.

La zona está en el lugar incorrecto. Activa debug = true en ox_target (o debugPoly = true en qb-target) y mira la forma. Una caja centrada en el piso está medio bajo tierra.

El script se ejecuta antes del objetivo. Inicia el recurso objetivo antes de tu script en server.cfg, y añade dependency 'ox_target' a tu manifiesto.

Lista de verificación

Síntoma Solución
Opciones duplicadas o faltantes Ejecuta solo uno de qb-target y ox_target
job ignorado después de convertir Renómbralo a groups
La zona está girada o dimensionada incorrectamente heading se convierte en rotation; comprueba size con debug = true
La opción nunca se muestra Aumenta distance, prueba el trabajo y canInteract
El script antiguo deja de funcionar Convierte sus llamadas a exportaciones nativas de ox_target
Nada se muestra en absoluto Inicia ox_target y ox_lib antes de tus scripts

Respuestas rápidas

¿Puedo ejecutar qb-target y ox_target juntos?

No. Elige uno. Ambos recursos quieren la misma tecla de orientación y el mismo trabajo, y ejecutar ambos te da opciones duplicadas o faltantes.

¿Funcionan mis viejos scripts de qb-target con ox_target?

A menudo sí. ox_target proporciona compatibilidad para muchas exportaciones de qb-target, así que los scripts que las llaman pueden seguir funcionando. Prueba cada script, y convierte los que se comportan mal a las exportaciones nativas de ox_target.

¿Qué reemplaza el campo job de qb-target?

ox_target usa groups. Establece groups = 'police', o una tabla como { police = 0 } para requerir también un grado.

Scripts que evitan este problema

Shop CreatorCrea una tienda en menos de un minuto — dueños, empleados, caja fuerte y atracos.Ver script →Quest CreatorUn editor visual de misiones y diálogos con NPC, nodo a nodo dentro del juego.Ver script →Advanced BoostingBoosting de vehículos desde una tablet: contratos de clase D a S+, crews y cola en vivo.Ver script →

Sigue leyendo