Как добавлять элементы в ox_inventory: items.lua, изображения и используемые элементы
Добавьте пользовательский элемент в ox_inventory: запись data/items.lua, изображение в web/images, предоставление его с AddItem и делание его используемым с экспортом клиента.
Вы хотите новый элемент на вашем сервере: бургер, отмычку, батарею телефона. С ox_inventory, которую используют серверы ESX и QBox, элемент — это одна таблица Lua в одном файле. Эта статья охватывает запись, изображение, предоставление элемента игроку и его использование.
1. Запись элемента
Откройте ox_inventory/data/items.lua. Внутри возвращаемой таблицы добавьте запись. Ключ — это имя элемента: нижний регистр, без пробелов.
['burger'] = {
label = 'Burger',
weight = 220,
stack = true,
close = true,
description = 'A warm burger.',
},Что делают поля:
| Поле | Смысл |
|---|---|
label |
Имя, показываемое игрокам |
weight |
Вес одного элемента в граммах |
stack |
true, если несколько могут поделить слот, false, если каждый занимает свой |
close |
true закрывает инвентарь при использовании элемента |
description |
Текст под меткой |
Проверьте другие элементы в одном файле для точных полей, которые поддерживает ваша версия ox_inventory, и скопируйте их стиль. Файл — это лучший справочник для вашей установки.
Внимание: ошибка синтаксиса Lua в
items.luaпрепятствует запуску ox_inventory. Проверьте отсутствие запятой между записями и отсутствующую закрывающую скобку.
2. Изображение
ox_inventory ищет .png, названный по элементу:
ox_inventory/web/images/burger.pngИмя должно точно совпадать с именем элемента, и отсутствующее изображение показывает только пустой значок. Квадратное изображение около 100 на 100 пикселей или больше, с прозрачным фоном, выглядит лучше всего.
3. Перезагрузьте и предоставьте себе это
Перезагрузите инвентарь, чтобы он прочитал файл:
restart ox_inventoryЗатем предоставьте себе элемент. Администраторы с необходимым разрешением могут использовать команду /additem из игры или консоли:
additem <player id> burger 1Если команда отклоняется, вам не хватает прав администратора, смотрите ACE permissions for admins.
4. Предоставьте элемент из скрипта
На серверной стороне используйте экспорт:
local success = exports.ox_inventory:AddItem(source, 'burger', 1)
if not success then
print('Could not add the item: inventory full or unknown item')
endAddItem принимает идентификатор игрока, имя элемента, количество и опциональные метаданные. Удаление и проверка работают так же:
exports.ox_inventory:RemoveItem(source, 'burger', 1)
local count = exports.ox_inventory:Search(source, 'count', 'burger')Если игрок не может нести элемент из-за веса или слотов, AddItem возвращает false. Вы можете проверить сначала:
if exports.ox_inventory:CanCarryItem(source, 'burger', 1) then
exports.ox_inventory:AddItem(source, 'burger', 1)
end5. Сделайте элемент используемым
Элемент может запустить код при его использовании игроком. ox_inventory поддерживает это в определении элемента, с блоком client, который указывает на экспорт одного из ваших ресурсов:
['burger'] = {
label = 'Burger',
weight = 220,
stack = true,
close = true,
description = 'A warm burger.',
client = {
export = 'my_script.burger',
},
},Значение — это resourceName.exportName. В my_script зарегистрируйте экспорт на клиенте:
-- my_script/client.lua
exports('burger', function(data, slot)
exports.ox_inventory:useItem(data, function(used)
if used then
print('Burger eaten')
end
end)
end)useItem удаляет один элемент и запускает вашу функцию только если использование сработало. Это стандартный способ позволить ox_inventory обрабатывать анимацию, время прогресса и потребление, когда элемент их имеет.
Один блок может нести встроенные эффекты вместо экспорта. Посмотрите на продукты питания и напитки в items.lua для доступных опций, например status, anim и prop, и переиспользуйте эту форму для вашего собственного продукта питания.
ESX и QBCore стиль используемых элементов
Скрипты, написанные для фреймворка, регистрируют используемые элементы с ESX.RegisterUsableItem('burger', ...) или QBCore.Functions.CreateUseableItem('burger', ...). ox_inventory работает с этими вызовами при работе с фреймворком, поэтому эти скрипты не нуждаются в изменении, пока элемент существует в items.lua.
Создание элементов без редактирования файлов
Если вы создаёте элементы часто, редактирование файлов и перезагрузка становятся медленными. Item Creator позволяет вам создавать элементы в игре, поэтому вы не трогаете items.lua для каждого.
Item Creator V2Создавайте используемые предметы с анимациями, пропами, эффектами и не только — без кода.от 18,15 €Открыть скрипт →
На QBCore и QBox
ox_inventory — это инвентарь QBox, поэтому всё вышеперечисленное применяется, как и есть. На QBCore, инвентарь по умолчанию — это qb-inventory вместо этого, с элементами в qb-core/shared/items.lua, рассмотрено в добавление элементов на QBCore.
Контрольный список
| Симптом | Решение |
|---|---|
| Элемент не существует | Добавьте его в data/items.lua, затем restart ox_inventory |
| ox_inventory не запустится | Ошибка синтаксиса в items.lua; проверьте запятые и скобки |
| Пустой значок | Поместите <item name>.png в web/images |
AddItem возвращает false |
Неизвестное имя элемента, инвентарь полон или слишком тяжёло |
| Элемент ничего не делает при использовании | Добавьте блок client с export и зарегистрируйте этот экспорт |
| Скрипт используемого элемента игнорируется | Имя элемента в скрипте должно совпадать с ключом в items.lua |
Короткие ответы
Где я добавляю элементы в ox_inventory?
В ox_inventory/data/items.lua. Каждый элемент — это таблица, обозначенная его именем, и то же имя — это файл изображения в web/images.
Почему мой новый элемент не показывает значок?
Изображение отсутствует или названо по-другому. Поместите <item name>.png в ox_inventory/web/images с точным именем элемента и строчным расширением.
Нужно ли мне перезагружать сервер после добавления элемента?
Нет. Перезагрузите ox_inventory и новый элемент загружен. Если скрипту он нужен, перезагрузите и этот скрипт.
