qb-target vs ox_target: converti AddBoxZone e correggi i target che non appaiono

Passare da qb-target a ox_target su FiveM: come convertire le chiamate AddBoxZone e AddTargetModel, cosa fa il livello di compatibilità, e perché i target non appaiono.

Sei passato da qb-target a ox_target, o hai scaricato uno script scritto per uno mentre esegui l'altro, e le zone di interazione sono scomparse o duplicate. Ecco come i due differiscono, come convertire le chiamate, e come trovare perché un target non mostra.

La differenza in una tabella

Entrambe le risorse fanno lo stesso lavoro: una chiave apre un occhio di targeting e il giocatore sceglie un'opzione su un'entità o in una zona. Differiscono in come la descrivi.

Idea qb-target ox_target
Box zone AddBoxZone(name, center, length, width, options, targetOptions) addBoxZone({ coords, size, rotation, options })
Model AddTargetModel(models, options) addModel(models, options)
Cosa fare type, event, action onSelect, event, serverEvent
Job limit job groups
Item limit item items
Check extra canInteract canInteract

ox_target prende una singola tabella per le zone, e le opzioni sono una lista semplice, senza un wrapper che tiene insieme options e distance.

Converti una box zone

Una tipica zona 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 stessa zona in 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,
        },
    },
})

Cosa si è spostato:

  • center diventa coords, ed è il centro della box in entrambi, ma l'altezza ora viene da size. qb-target usa minZ e maxZ, quindi metti coords.z a metà tra loro e usa il loro divario come altezza.
  • length e width diventano la x e y di size. Se la box finisce per essere girata nel modo sbagliato, scambiali o cambia rotation, e controlla con debug = true.
  • heading diventa rotation.
  • job diventa groups, e distance si sposta in ogni opzione.
  • type = 'client' con event rimane un event. Usa serverEvent per type = 'server', o onSelect con una funzione invece di un evento.

Converti un model target

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

Le opzioni sono ora il secondo argomento stesso, una lista di tabelle di opzioni. L'elenco completo degli export e dei campi è in ox_target: addBoxZone, addModel e addLocalEntity.

Mantieni vecchio script funzionante

ox_target fornisce compatibilità per molti export qb-target. Uno script che ancora chiama exports['qb-target']:AddBoxZone(...) può continuare a funzionare quando solo ox_target è in esecuzione, finché usa gli export comuni.

Non fare affidamento per tutto. Gli export meno comuni e i campi di opzione insoliti potrebbero non comportarsi allo stesso modo. Testa ogni script, e quando uno si comporta male, converti le sue chiamate agli export nativi ox_target come mostrato sopra. Le chiamate native sono anche più facili da leggere e debuggare.

Attenzione: non avviare qb-target accanto a ox_target per « assicurarsi ». Mantenere una sola risorsa di targeting, e rimuovere l'altra da server.cfg.

Perché i target non appaiono

Quasi tutti i casi « il mio target è invisibile » rientrano in questo elenco.

Entrambe le risorse sono in esecuzione. Due risorse di targeting combattono sulla stessa chiave. Controlla server.cfg e l'elenco delle tue risorse, e mantieni solo una:

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

La distanza è troppo piccola. L'opzione mostra solo dentro la sua distance. Prova distance = 3.0 mentre testi. Con qb-target, il distance siede accanto a options, non dentro ogni opzione.

Un controllo di job fallisce. Un'opzione con job (qb-target) o groups (ox_target) è nascosta per chiunque non abbia quel job, senza errore. Testa con il job giusto, o rimuovi il campo per un momento. Su ox_target un grado nella tabella ({ police = 2 }) significa che il giocatore ha bisogno di almeno quel grado.

Un canInteract ritorna nulla. Se la funzione ha un percorso di codice che ritorna nil, l'opzione è nascosta. Fai ritornare true o false su ogni percorso.

La zona è nel posto sbagliato. Attiva debug = true su ox_target (o debugPoly = true su qb-target) e guarda la forma. Una box centrata sul pavimento è mezza sottoterra.

Lo script gira prima del target. Avvia la risorsa target prima del tuo script in server.cfg, e aggiungi dependency 'ox_target' al tuo manifest.

Checklist

Sintomo Soluzione
Opzioni duplicate o mancanti Esegui solo uno di qb-target e ox_target
job ignorato dopo la conversione Rinominalo in groups
La zona è ruotata o dimensionata male heading diventa rotation; controlla size con debug = true
L'opzione non appare mai Aumenta distance, testa il job e canInteract
Il vecchio script smette di funzionare Converti le sue chiamate agli export nativi ox_target
Niente appare affatto Avvia ox_target e ox_lib prima dei tuoi script

Risposte rapide

Posso eseguire qb-target e ox_target insieme?

No. Scegliere uno. Entrambe le risorse vogliono la stessa chiave di targeting e lo stesso job, e eseguire entrambi dà opzioni duplicate o mancanti.

I miei vecchi script qb-target funzionano con ox_target?

Spesso sì. ox_target fornisce compatibilità per molti export qb-target, quindi gli script che li chiamano possono continuare a funzionare. Testa ogni script, e converti quelli che si comportano male agli export nativi ox_target.

Cosa sostituisce il campo job di qb-target?

ox_target usa groups. Imposta groups = 'police', o una tabella come { police = 0 } per richiedere anche un grado.

Script senza questo problema

Shop CreatorCrea un negozio in meno di un minuto — proprietari, dipendenti, casseforti e rapine inclusi.Vedi script →Quest CreatorUn editor visuale di missioni e dialoghi con gli NPC, costruito nodo per nodo in gioco.Vedi script →Advanced BoostingBoosting di veicoli dal tablet: contratti dalla classe D alla S+, crew e coda in tempo reale.Vedi script →

Continua a leggere