Как добавить предметы на QBCore: items.lua, изображения, CreateUseableItem
Добавьте пользовательский предмет в QBCore: запись qb-core/shared/items.lua и её поля, изображение в qb-inventory, выдачу и сделайте его используемым с CreateUseableItem.
Вы добавили предмет на ваш QBCore сервер, и он либо не существует в игре, либо не имеет значка, либо ничего не делает при использовании. Вот полный путь: запись предмета, изображение, выдача и сделайте его используемым.
1. Запись предмета
Откройте qb-core/shared/items.lua. Предметы — это записи в таблице QBShared.Items, ключом которых является имя. Добавьте свой, с запятой после предыдущей записи:
['burger'] = {
['name'] = 'burger',
['label'] = 'Burger',
['weight'] = 220,
['type'] = 'item',
['image'] = 'burger.png',
['unique'] = false,
['useable'] = true,
['shouldClose'] = true,
['description'] = 'A warm burger.',
},Что делает каждое поле:
| Поле | Значение |
|---|---|
name |
Имя предмета; должно совпадать с ключом, нижний регистр, без пробелов |
label |
Имя, показываемое игрокам |
weight |
Вес одного предмета |
type |
item для обычных предметов, weapon для оружия |
image |
Имя файла значка, включая расширение |
unique |
true, если каждая копия имеет свой слот (может иметь данные) |
useable |
true, если игроки могут его использовать |
shouldClose |
true закрывает инвентарь при использовании |
description |
Текст под меткой |
Скопируйте соседний предмет в тот же файл, если не уверены: файл показывает ровно те поля, которые ожидает ваша версия.
Внимание: одна отсутствующая запятая или скобка в
items.luaостанавливает загрузку qb-core, и вместе с ним каждый скрипт, который на него полагается. Если все разломалось после редактирования, сначала посмотрите на вашу последнюю запись.
2. Изображение
Поместите .png с именем из поля image в папку изображений инвентаря:
qb-inventory/html/images/burger.pngПапка одинакова, независимо от того, является ли предмет едой, инструментом или документом. С другим ресурсом инвентаря используйте вместо этого его собственную папку изображений. Отсутствующий файл показывает пустой значок, и имя должно точно совпадать с полем image, включая расширение.
3. Перезагрузка и тестирование
items.lua читается qb-core при его запуске. В консоли сервера:
restart qb-coreПерезагрузка qb-core, пока игроки находятся в сети, может отключить или разбить скрипты, которые на него полагаются, поэтому на живом сервере делайте это в тихое время или перезагружайте весь сервер. Затем выдайте себе предмет с помощью команды администратора:
/giveitem <player id> burger 1Из скрипта, на стороне сервера:
local QBCore = exports['qb-core']:GetCoreObject()
local Player = QBCore.Functions.GetPlayer(source)
if Player then
Player.Functions.AddItem('burger', 1)
endЕсли QBCore равен nil здесь, прочитайте attempt to index a nil value (global 'QBCore').
4. Сделайте это используемым
Установка useable = true только позволяет использование. Вы также должны сказать, что происходит, на сервере:
local QBCore = exports['qb-core']:GetCoreObject()
QBCore.Functions.CreateUseableItem('burger', function(source, item)
local Player = QBCore.Functions.GetPlayer(source)
if not Player then return end
if Player.Functions.RemoveItem('burger', 1) then
TriggerClientEvent('QBCore:Notify', source, 'You ate the burger', 'success')
-- your effect here: heal, hunger, an animation event
end
end)Обратный вызов получает id игрока и данные предмета. Удалите предмет сами, если использование должно его потребить, как выше.
Если перезагрузка вашего скрипта делает предмет не работающим, помните, что регистрация происходит при запуске скрипта. Перезагрузите скрипт, который содержит CreateUseableItem, а не только qb-inventory.
Предметы, которые несут данные
Для предметов, которые содержат информацию, такие как записка с текстом или билет с кодом, установите unique на true. Каждая копия может затем хранить свои собственные данные в таблице info, которую вы даете при добавлении предмета:
Player.Functions.AddItem('ticket', 1, false, { code = 'A12' })Распространенные проблемы
- Несовпадение имени предмета. Ключ, поле
name, имя изображения и имя, которое вы передаетеAddItem, должны быть одним и тем же словом. - Предмет добавлен в другой файл. Некоторые скрипты просят вас добавить их предметы в копию списка внутри скрипта. Проверьте его инструкции по установке и добавляйте предметы в
qb-core/shared/items.lua, если не сказано иное. - Старый инвентарь. Более старые версии qb-inventory сохраняют отдельную копию некоторых данных предмета в своей собственной папке. Если предмет показывает неправильную метку, проверьте, что ничего больше это не определяет.
На QBox
QBox использует ox_inventory вместо qb-inventory, и его предметы находятся в ox_inventory/data/items.lua. Формат отличается, и также отличаются вызовы используемых предметов. Следуйте добавлению предметов в ox_inventory.
Добавить предметы без редактирования файлов
Изменение items.lua и перезагрузка ядра для каждого нового предмета — это медленная часть. Item Creator позволяет вам создавать предметы в игре вместо этого.
Item Creator V2Создавайте используемые предметы с анимациями, пропами, эффектами и не только — без кода.от 18,15 €Открыть скрипт →
Контрольный список
| Симптом | Исправление |
|---|---|
| Предмет не найден | Добавьте его в qb-core/shared/items.lua и restart qb-core |
| Все разломалось после редактирования | Ошибка синтаксиса в items.lua; проверьте запятые и скобки |
| Пустой значок | Добавьте burger.png в qb-inventory/html/images, совпадая с полем image |
| Предмет ничего не делает | Установите useable = true и зарегистрируйте QBCore.Functions.CreateUseableItem |
| Имя не совпадает | Используйте одно одинаковое имя в ключе, name, изображении и коде |
| QBox сервер | Используйте data/items.lua ox_inventory вместо этого |
Короткие ответы
Где определяются предметы в QBCore?
В qb-core/shared/items.lua. Каждый предмет — это таблица внутри QBShared.Items, ключом которой является его имя, и значок — это .png с тем же именем в папке изображений инвентаря.
Использует ли QBox qb-core/shared/items.lua?
Нет. QBox использует ox_inventory, где предметы находятся в ox_inventory/data/items.lua. Смотрите руководство ox_inventory, указанное в этой статье.
Почему мой предмет не используемый?
Либо useable имеет значение false в записи предмета, либо никакой код не зарегистрировал его. Установите useable = true и зарегистрируйте его с помощью QBCore.Functions.CreateUseableItem на сервере.
