qb-target vs ox_target: Konvertiere AddBoxZone und behebe fehlende Targets
Umzug von qb-target zu ox_target in FiveM: wie du AddBoxZone und AddTargetModel Aufrufe konvertierst, was die Kompatibilitätsebene macht, und warum Targets nicht angezeigt werden.
Du hast von qb-target zu ox_target gewechselt, oder du hast ein Script heruntergeladen, das für einen geschrieben wurde, während du den anderen ausführst, und die Interaktionszonen sind weg oder verdoppelt. Hier ist, wie sich die beiden unterscheiden, wie du die Aufrufe konvertierst, und wie du findest, warum ein Target nicht angezeigt wird.
Der Unterschied in einer Tabelle
Beide Ressourcen machen die gleiche Arbeit: Ein Schlüssel öffnet ein Targeting-Auge und der Spieler wählt eine Option auf einer Entity oder in einer Zone. Sie unterscheiden sich darin, wie du es beschreibst.
| Idee | qb-target | ox_target |
|---|---|---|
| Box Zone | AddBoxZone(name, center, length, width, options, targetOptions) |
addBoxZone({ coords, size, rotation, options }) |
| Modell | AddTargetModel(models, options) |
addModel(models, options) |
| Was zu tun ist | type, event, action |
onSelect, event, serverEvent |
| Job-Limit | job |
groups |
| Item-Limit | item |
items |
| Extra-Überprüfung | canInteract |
canInteract |
ox_target nimmt eine einzelne Tabelle für Zonen, und die Optionen sind eine einfache Liste, ohne einen Wrapper, der options und distance zusammenhält.
Konvertiere eine Box-Zone
Eine typische qb-target Zone:
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,
})Die gleiche Zone 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,
},
},
})Was sich geändert hat:
centerwirdcoords, und es ist das Zentrum der Box in beiden, aber die Höhe kommt jetzt vonsize. qb-target verwendetminZundmaxZ, also legecoords.zauf die Mitte zwischen ihnen und verwende ihre Lücke als Höhe.lengthundwidthwerden dasxundyvonsize. Wenn die Box sich am Ende falsch herum dreht, tausche sie oder ändererotation, und überprüfe mitdebug = true.headingwirdrotation.jobwirdgroups, unddistancebewegt sich in jede Option.type = 'client'miteventbleibt einevent. VerwendeserverEventfürtype = 'server', oderonSelectmit einer Funktion anstelle eines Events.
Konvertiere ein Modell-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,
},
})Die Optionen sind jetzt das zweite Argument selbst, eine Liste von Option-Tabellen. Die vollständige Liste von Exports und Feldern ist in ox_target: addBoxZone, addModel and addLocalEntity.
Halte ein altes Script laufen
ox_target bietet Kompatibilität für viele qb-target Exports. Ein Script, das immer noch exports['qb-target']:AddBoxZone(...) aufruft, kann weiterhin funktionieren, wenn nur ox_target läuft, solange es die gemeinsamen Exports verwendet.
Verlasse dich nicht darauf für alles. Weniger häufig verwendete Exports und ungewöhnliche Option-Felder verhalten sich möglicherweise nicht gleich. Teste jedes Script, und wenn eines sich falsch verhält, konvertiere seine Aufrufe auf die nativen ox_target Exports wie oben gezeigt. Systemeigene Aufrufe sind auch leichter zu lesen und zu debuggen.
Achtung: starte nicht qb-target neben ox_target, um „sicherzugehen". Behalte nur eine Targeting-Ressource, und entferne die andere aus
server.cfg.
Warum Targets nicht angezeigt werden
Fast jeden „mein Target ist unsichtbar" Fall fällt in diese Liste.
Beide Ressourcen laufen. Zwei Targeting-Ressourcen kämpfen um die gleiche Taste. Überprüfe server.cfg und deine Ressourcenliste, und behalte nur eine:
ensure ox_lib
ensure ox_target
# ensure qb-target <- remove or comment outDie Entfernung ist zu klein. Die Option zeigt sich nur in ihrer distance. Versuche distance = 3.0 während du testest. Mit qb-target sitzt distance neben options, nicht in jeder Option.
Ein Job-Check schlägt fehl. Eine Option mit job (qb-target) oder groups (ox_target) ist für jeden ohne diesen Job verborgen, ohne Fehler. Teste mit dem richtigen Job, oder entferne das Feld für einen Moment. Auf ox_target bedeutet eine Stufe in der Tabelle ({ police = 2 }), dass der Spieler mindestens diese Stufe braucht.
Ein canInteract gibt nichts zurück. Wenn die Funktion einen Code-Pfad hat, der nil zurückgibt, ist die Option verborgen. Lass es true oder false auf jedem Pfad zurückgeben.
Die Zone ist am falschen Ort. Schalte debug = true auf ox_target ein (oder debugPoly = true auf qb-target) und schaue dir die Form an. Eine Box auf dem Boden zentriert ist zur Hälfte unter der Erde.
Das Script läuft vor dem Target. Starte die Target-Ressource vor deinem Script in server.cfg, und füge dependency 'ox_target' zu deinem Manifest hinzu.
Checkliste
| Symptom | Behebung |
|---|---|
| Optionen verdoppelt oder fehlend | Führe nur einen von qb-target und ox_target aus |
job wird ignoriert nach der Konvertierung |
Benenne es in groups um |
| Zone ist gedreht oder falsch dimensioniert | heading wird rotation; überprüfe size mit debug = true |
| Option zeigt sich nie | Erhöhe distance, teste den Job und canInteract |
| Altes Script stellt zu arbeiten ein | Konvertiere seine Aufrufe auf native ox_target Exports |
| Nichts zeigt sich überhaupt | Starte ox_target und ox_lib vor deinen Scripts |
Kurze Antworten
Kann ich qb-target und ox_target zusammen ausführen?
Nein. Wähle einen aus. Beide Ressourcen wollen die gleiche Targeting-Taste und die gleiche Job, und beide auszuführen gibt dir doppelte oder fehlende Optionen.
Funktionieren meine alten qb-target Scripts mit ox_target?
Oft ja. ox_target bietet Kompatibilität für viele qb-target Exports, daher können Scripts, die diese aufrufen, weiterhin funktionieren. Teste jedes Script, und konvertiere diejenigen, die sich falsch verhalten, auf die nativen ox_target Exports.
Was ersetzt das job Feld von qb-target?
ox_target verwendet groups. Setze groups = 'police', oder eine Tabelle wie { police = 0 } um auch eine Stufe zu verlangen.
Scripts ohne dieses Problem
Shop CreatorBau einen Shop in unter einer Minute — Besitzer, Angestellte, Tresore und Überfälle inklusive.Script ansehen →
Quest CreatorEin visueller Editor für Quests und NPC-Dialoge, Node für Node im Spiel gebaut.Script ansehen →
Advanced BoostingFahrzeug-Boosting per Tablet: Aufträge von Klasse D bis S+, Crews und eine Live-Warteschlange.Script ansehen →