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:
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:
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:
centerdiventacoords, ed è il centro della box in entrambi, ma l'altezza ora viene dasize. qb-target usaminZemaxZ, quindi metticoords.za metà tra loro e usa il loro divario come altezza.lengthewidthdiventano laxeydisize. Se la box finisce per essere girata nel modo sbagliato, scambiali o cambiarotation, e controlla condebug = true.headingdiventarotation.jobdiventagroups, edistancesi sposta in ogni opzione.type = 'client'coneventrimane unevent. UsaserverEventpertype = 'server', oonSelectcon una funzione invece di un evento.
Converti un model target
qb-target:
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:
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:
ensure ox_lib
ensure ox_target
# ensure qb-target <- remove or comment outLa 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 →