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:

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

Die gleiche Zone 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,
        },
    },
})

Was sich geändert hat:

  • center wird coords, und es ist das Zentrum der Box in beiden, aber die Höhe kommt jetzt von size. qb-target verwendet minZ und maxZ, also lege coords.z auf die Mitte zwischen ihnen und verwende ihre Lücke als Höhe.
  • length und width werden das x und y von size. Wenn die Box sich am Ende falsch herum dreht, tausche sie oder ändere rotation, und überprüfe mit debug = true.
  • heading wird rotation.
  • job wird groups, und distance bewegt sich in jede Option.
  • type = 'client' mit event bleibt ein event. Verwende serverEvent für type = 'server', oder onSelect mit einer Funktion anstelle eines Events.

Konvertiere ein Modell-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,
    },
})

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:

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

Die 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 →

Weiterlesen