qb-target vs ox_target: конвертируйте AddBoxZone и исправьте не показываемые targets
Переход с qb-target на ox_target на FiveM: как конвертировать вызовы AddBoxZone и AddTargetModel, что делает слой совместимости и почему targets не показываются.
Вы перешли с qb-target на ox_target или загрузили скрипт, написанный для одного, а работающий на другом, и зоны взаимодействия исчезли или удвоились. Вот как два отличаются, как конвертировать вызовы и как узнать, почему target не показывается.
Разница в одной таблице
Оба ресурса делают одно и то же: клавиша открывает targeting eye и игрок выбирает опцию на сущности или в зоне. Они отличаются тем, как вы это описываете.
| Идея | 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) |
| Что делать | type, event, action |
onSelect, event, serverEvent |
| Ограничение работы | job |
groups |
| Ограничение предмета | item |
items |
| Дополнительная проверка | canInteract |
canInteract |
ox_target принимает одну таблицу для зон, и опции — это простой список, без обертки, которая держит options и distance вместе.
Конвертируйте box zone
Типичная зона 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,
})Та же зона в 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,
},
},
})Что переместилось:
centerстановитсяcoords, и это центр коробки в обоих, но высота теперь исходит изsize. qb-target используетminZиmaxZ, поэтому поместитеcoords.zна полпути между ними и используйте их зазор как высоту.lengthиwidthстановятсяxиysize. Если коробка оканчивается неправильно, поменяйте их местами или изменитеrotation, и проверьте сdebug = true.headingстановитсяrotation.jobстановитсяgroups, иdistanceперемещается в каждую опцию.type = 'client'сeventостаетсяevent. ИспользуйтеserverEventдляtype = 'server'илиonSelectс функцией вместо события.
Конвертируйте 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,
},
})Опции теперь сам второй аргумент, список таблиц опций. Полный список экспортов и полей находится в ox_target: addBoxZone, addModel и addLocalEntity.
Сохраняйте старый скрипт рабочим
ox_target обеспечивает совместимость для многих экспортов qb-target. Скрипт, который все еще вызывает exports['qb-target']:AddBoxZone(...), может продолжать работать, когда работает только ox_target, пока используются общие экспорты.
Не полагайтесь на это для всего. Менее распространенные экспорты и необычные поля опций могут вести себя не одинаково. Тестируйте каждый скрипт, и когда один неправильно себя ведет, конвертируйте его вызовы в встроенные экспорты ox_target, как показано выше. Встроенные вызовы также легче читать и отлаживать.
Внимание: не запускайте qb-target рядом с ox_target, чтобы «убедиться». Держите только один targeting ресурс и удалите другой из
server.cfg.
Почему targets не показываются
Почти каждый случай «мой target невидим» подпадает в этот список.
Оба ресурса запущены. Два targeting ресурса борются за один и тот же ключ. Проверьте server.cfg и список ресурсов и держите только один:
ensure ox_lib
ensure ox_target
# ensure qb-target <- remove or comment outРасстояние слишком мало. Опция показывается только внутри ее distance. Попробуйте distance = 3.0 во время тестирования. С qb-target distance находится рядом с options, а не внутри каждой опции.
Проверка работы не удается. Опция с job (qb-target) или groups (ox_target) скрыта для всех без этой работы, без ошибки. Тестируйте с правильной работой или удалите поле на момент. На ox_target степень в таблице ({ police = 2 }) означает, что игроку требуется как минимум эта степень.
canInteract возвращает ничего. Если функция имеет путь кода, который возвращает nil, опция скрыта. Сделайте так, чтобы она возвращала true или false на каждом пути.
Зона в неправильном месте. Включите debug = true на ox_target (или debugPoly = true на qb-target) и посмотрите на форму. Коробка, центрированная на полу, наполовину под землей.
Скрипт запускается перед target. Запустите ресурс target перед вашим скриптом в server.cfg и добавьте dependency 'ox_target' в ваш манифест.
Контрольный список
| Симптом | Исправление |
|---|---|
| Опции удвоены или отсутствуют | Запустите только один из qb-target и ox_target |
job игнорируется после конвертирования |
Переименуйте его в groups |
| Зона повернута или неправильно размерена | heading становится rotation; проверьте size с debug = true |
| Опция никогда не показывается | Увеличьте distance, протестируйте работу и canInteract |
| Старый скрипт перестает работать | Конвертируйте его вызовы в встроенные экспорты ox_target |
| Ничего вообще не показывается | Запустите ox_target и ox_lib перед своими скриптами |
Короткие ответы
Могу ли я запускать qb-target и ox_target вместе?
Нет. Выберите один. Оба ресурса хотят один и тот же targeting ключ и одну и ту же работу, и запуск обоих дает вам удвоенные или отсутствующие опции.
Работают ли мои старые скрипты qb-target с ox_target?
Часто да. ox_target обеспечивает совместимость для многих экспортов qb-target, поэтому скрипты, которые их вызывают, могут продолжать работать. Тестируйте каждый скрипт и конвертируйте те, которые неправильно себя ведут, в встроенные экспорты ox_target.
Что заменяет поле job qb-target?
ox_target использует groups. Установите groups = 'police' или таблицу, такую как { police = 0 }, чтобы также требовать степень.
Скрипты без этой проблемы
Shop CreatorМагазин меньше чем за минуту — владельцы, сотрудники, сейфы и ограбления в комплекте.Смотреть скрипт →
Quest CreatorВизуальный редактор квестов и диалогов с NPC — узел за узлом прямо в игре.Смотреть скрипт →
Advanced BoostingУгон машин на заказ через планшет: контракты от класса D до S+, команды и живая очередь.Смотреть скрипт →