qb-target vs ox_target : convertir AddBoxZone et corriger les cibles qui ne s'affichent pas

Passer de qb-target à ox_target sur FiveM : comment convertir les appels AddBoxZone et AddTargetModel, ce que fait la couche de compatibilité, et pourquoi les cibles ne s'affichent pas.

Vous êtes passé de qb-target à ox_target, ou vous avez téléchargé un script écrit pour l'un en exécutant l'autre, et les zones d'interaction ont disparu ou sont doublées. Voici comment les deux diffèrent, comment convertir les appels, et comment trouver pourquoi une cible n'apparaît pas.

La différence en un tableau

Les deux ressources font le même travail : une clé ouvre un œil de ciblage et le joueur choisit une option sur une entité ou dans une zone. Ils diffèrent dans la façon dont vous la décrivez.

Idée qb-target ox_target
Zone de boîte AddBoxZone(name, center, length, width, options, targetOptions) addBoxZone({ coords, size, rotation, options })
Modèle AddTargetModel(models, options) addModel(models, options)
Ce qu'il faut faire type, event, action onSelect, event, serverEvent
Limite d'emploi job groups
Limite d'article item items
Vérification supplémentaire canInteract canInteract

ox_target prend un seul tableau pour les zones, et les options sont une liste simple, sans wrapper qui tient ensemble options et distance.

Convertir une zone de boîte

Une zone qb-target typique :

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 même zone dans 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,
        },
    },
})

Ce qui a changé :

  • center devient coords, et c'est le centre de la boîte dans les deux, mais la hauteur vient maintenant de size. qb-target utilise minZ et maxZ, donc mettez coords.z à mi-chemin entre eux et utilisez leur écart comme hauteur.
  • length et width deviennent les x et y de size. Si la boîte finit par être tournée dans le mauvais sens, échangez-les ou modifiez rotation, et vérifiez avec debug = true.
  • heading devient rotation.
  • job devient groups, et distance se déplace dans chaque option.
  • type = 'client' avec event reste un event. Utilisez serverEvent pour type = 'server', ou onSelect avec une fonction au lieu d'un événement.

Convertir une cible de modèle

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,
    },
})

Les options sont maintenant le deuxième argument lui-même, une liste de tableaux d'options. La liste complète des exports et des champs se trouve dans ox_target : addBoxZone, addModel et addLocalEntity.

Garder un ancien script fonctionnement

ox_target fournit une compatibilité pour de nombreux exports qb-target. Un script qui appelle toujours exports['qb-target']:AddBoxZone(...) peut continuer à fonctionner quand seul ox_target s'exécute, tant qu'il utilise les exports courants.

Ne vous fiez pas à cela pour tout. Les exports moins courants et les champs d'options inhabituels peuvent ne pas se comporter de la même façon. Testez chaque script, et quand l'un se comporte mal, convertissez ses appels aux exports ox_target natifs comme montré ci-dessus. Les appels natifs sont aussi plus faciles à lire et déboguer.

Attention : ne démarrez pas qb-target à côté de ox_target pour « être sûr ». Gardez une seule ressource de ciblage, et supprimez l'autre de server.cfg.

Pourquoi les cibles ne s'affichent pas

Presque tous les cas « ma cible est invisible » tombent dans cette liste.

Les deux ressources s'exécutent. Deux ressources de ciblage se battent pour la même clé. Vérifiez server.cfg et votre liste de ressources, et gardez une seule :

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

La distance est trop petite. L'option s'affiche uniquement à l'intérieur de sa distance. Essayez distance = 3.0 pendant que vous testez. Avec qb-target, le distance est assis à côté de options, pas à l'intérieur de chaque option.

Une vérification de travail échoue. Une option avec job (qb-target) ou groups (ox_target) est masquée pour quiconque sans ce travail, sans erreur. Testez avec le bon travail, ou supprimez le champ pour un moment. Sur ox_target, un grade dans la table ({ police = 2 }) signifie que le joueur a besoin d'au moins ce grade.

Un canInteract ne retourne rien. Si la fonction a un chemin de code qui retourne nil, l'option est masquée. Faites-la retourner true ou false sur chaque chemin.

La zone est au mauvais endroit. Activez debug = true sur ox_target (ou debugPoly = true sur qb-target) et regardez la forme. Une boîte centrée sur le sol est à moitié souterraine.

Le script s'exécute avant la cible. Démarrez la ressource cible avant votre script dans server.cfg, et ajoutez dependency 'ox_target' à votre manifeste.

Liste de contrôle

Symptôme Correction
Options doublées ou manquantes Exécutez un seul de qb-target et ox_target
job ignoré après conversion Renommez-le en groups
La zone est tournée ou dimensionnée incorrectement heading devient rotation ; vérifiez size avec debug = true
L'option ne s'affiche jamais Augmentez la distance, testez le travail et canInteract
L'ancien script arrête de fonctionner Convertissez ses appels aux exports ox_target natifs
Rien ne s'affiche du tout Démarrez ox_target et ox_lib avant vos scripts

Réponses rapides

Puis-je exécuter qb-target et ox_target ensemble ?

Non. Choisissez-en un. Les deux ressources veulent la même clé de ciblage et le même travail, et exécuter les deux vous donne des options doublées ou manquantes.

Mes anciens scripts qb-target fonctionnent-ils avec ox_target ?

Souvent oui. ox_target fournit une compatibilité pour de nombreux exports qb-target, de sorte que les scripts qui les appellent peuvent continuer à fonctionner. Testez chaque script, et convertissez ceux qui se comportent mal aux exports natifs ox_target.

Qu'est-ce qui remplace le champ job de qb-target ?

ox_target utilise groups. Définissez groups = 'police', ou un tableau comme { police = 0 } pour exiger aussi un grade.

Des scripts sans ce problème

Shop CreatorCréez un magasin en moins d’une minute — propriétaires, employés, coffres et braquages inclus.Voir le script →Quest CreatorUn éditeur visuel de quêtes et de dialogues PNJ, construit nœud par nœud en jeu.Voir le script →Advanced BoostingDu boosting de véhicules piloté par tablette : contrats de classe D à S+, crews et file d’attente en direct.Voir le script →

À lire aussi