qb-target vs ox_target: konwertuj AddBoxZone i napraw niewidoczne cele
Przechodzenie z qb-target do ox_target na FiveM: jak konwertować wezwania AddBoxZone i AddTargetModel, co robi warstwa kompatybilności i dlaczego cele się nie pokazują.
Przeszedłeś z qb-target do ox_target, lub pobrałeś skrypt napisany dla jednego, podczas gdy uruchamiasz drugi, i strefy interakcji znikęły lub się podwójły. Oto jak się różnią, jak konwertować wezwania i jak znaleźć dlaczego cel się nie pokazuje.
Różnica w jednej tabeli
Oba zasoby robią tę samą pracę: klawisz otwiera oko targetowania i gracz wybiera opcję na encji lub w strefie. Różnią się w sposobie, w jaki to opisujesz.
| 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) |
| Co zrobić | type, event, action |
onSelect, event, serverEvent |
| Job limit | job |
groups |
| Item limit | item |
items |
| Extra check | canInteract |
canInteract |
ox_target przyjmuje jedną tabelę dla stref, a opcje to zwykła lista, bez wrapper, który trzyma options i distance razem.
Konwertuj box zone
Typowa strefa 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,
})Ta sama strefa w 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,
},
},
})Co się zmieniło:
centerstaje sięcoords, i jest centrum pudła w obu, ale wysokość teraz pochodzi zsize. qb-target używaminZimaxZ, więc umieśćcoords.zw połowie między nimi i użyj ich przerwy jako wysokości.lengthiwidthstają sięxiyzsize. Jeśli pudło skończy się w złą stronę, zamień je lub zmieńrotationi sprawdź za pomocądebug = true.headingstaje sięrotation.jobstaje sięgroups, adistanceprzenosi się do każdej opcji.type = 'client'zeventpozostajeevent. UżyjserverEventdlatype = 'server', lubonSelectz funkcją zamiast zdarzenia.
Konwertuj cel modelu
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,
},
})Opcje są teraz samym drugim argumentem, listą tabel opcji. Pełna lista eksportów i pól znajduje się w ox_target: addBoxZone, addModel i addLocalEntity.
Utrzymuj stary skrypt pracującym
ox_target zapewnia kompatybilność dla wielu eksportów qb-target. Skrypt, który wciąż wezwie exports['qb-target']:AddBoxZone(...) może ciągle działać, gdy tylko ox_target jest uruchomiony, o ile używa wspólnych eksportów.
Nie polegaj na tym dla wszystkiego. Mniej powszechne exportsów i niezwykłe pola opcji mogą nie zachowywać się tak samo. Testuj każdy skrypt i gdy jeden źle się zachowuje, konwertuj jego wezwania do natywnych eksportów ox_target, jak pokazano powyżej. Natywne wezwania są również łatwiejsze do czytania i debugowania.
Ostrzeżenie: nie uruchamiaj qb-target obok ox_target, aby „się upewnić". Utrzymuj tylko jeden zasób targetowania i usuń drugi z
server.cfg.
Dlaczego cele się nie pokazują
Prawie każdy przypadek „mój cel jest niewidoczny" spada na tę listę.
Oba zasoby działają. Dwa zasoby targetowania walczą o ten sam klawisz. Sprawdź server.cfg i listę zasobów, i utrzymuj tylko jeden:
ensure ox_lib
ensure ox_target
# ensure qb-target <- remove or comment outOdległość jest zbyt mała. Opcja pokazuje się tylko wewnątrz jej distance. Spróbuj distance = 3.0 podczas testowania. Z qb-target, distance siedzi obok options, nie wewnątrz każdej opcji.
Sprawdzenie pracy nie powiedzie się. Opcja z job (qb-target) lub groups (ox_target) jest ukryta dla każdego bez tej pracy, bez błędu. Testuj z właściwą pracą, lub usuń pole na chwilę. Na ox_target ocena w tabeli ({ police = 2 }) oznacza, że gracz musi mieć co najmniej tę ocenę.
A canInteract zwraca nic. Jeśli funkcja ma ścieżkę kodu, która zwraca nil, opcja jest ukryta. Sprawdź, czy zwraca true lub false na każdej ścieżce.
Strefa jest w złym miejscu. Włącz debug = true na ox_target (lub debugPoly = true na qb-target) i spójrz na kształt. Pudło wyśrodkowane na podłodze jest połową podziemnie.
Skrypt działa przed celem. Uruchom zasób targetowania przed skryptem w server.cfg i dodaj dependency 'ox_target' do manifestu.
Lista kontrolna
| Symptom | Naprawa |
|---|---|
| Opcje podwójne lub brakujące | Uruchamiaj tylko jeden z qb-target i ox_target |
job ignorowany po konwersji |
Zmień nazwę na groups |
| Strefa jest obracana lub źle zmieniana | heading staje się rotation; sprawdź size za pomocą debug = true |
| Opcja nigdy się nie pokazuje | Zwiększ distance, testuj pracę i canInteract |
| Stary skrypt przestaje działać | Konwertuj jego wezwania do natywnych eksportów ox_target |
| Nic się nie pokazuje w ogóle | Uruchom ox_target i ox_lib przed twoimi skryptami |
Szybkie odpowiedzi
Czy mogę uruchamiać qb-target i ox_target razem?
Nie. Wybierz jeden. Oba zasoby chcą tego samego klawisza targetowania i tej samej pracy, a uruchomienie obu daje ci podwójne lub brakujące opcje.
Czy moje stare skrypty qb-target pracują z ox_target?
Często tak. ox_target zapewnia kompatybilność dla wielu eksportów qb-target, więc skrypty je wywołujące mogą ciągle działać. Testuj każdy skrypt i konwertuj te, które źle się zachowują, na natywne exportsów ox_target.
Co zastępuje pole job qb-target?
ox_target używa groups. Ustaw groups = 'police', lub tabelę taką jak { police = 0 } aby również wymagać oceny.
Skrypty bez tego problemu
Shop CreatorZbuduj sklep w niecałą minutę — właściciele, pracownicy, sejfy i napady w zestawie.Zobacz skrypt →
Quest CreatorWizualny edytor questów i dialogów z NPC, budowanych węzeł po węźle w grze.Zobacz skrypt →
Advanced BoostingBoosting pojazdów z tabletu: kontrakty od klasy D do S+, ekipy i kolejka na żywo.Zobacz skrypt →