Как добавлять элементы в ox_inventory: items.lua, изображения и используемые элементы

Добавьте пользовательский элемент в ox_inventory: запись data/items.lua, изображение в web/images, предоставление его с AddItem и делание его используемым с экспортом клиента.

Вы хотите новый элемент на вашем сервере: бургер, отмычку, батарею телефона. С ox_inventory, которую используют серверы ESX и QBox, элемент — это одна таблица Lua в одном файле. Эта статья охватывает запись, изображение, предоставление элемента игроку и его использование.

1. Запись элемента

Откройте ox_inventory/data/items.lua. Внутри возвращаемой таблицы добавьте запись. Ключ — это имя элемента: нижний регистр, без пробелов.

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, названный по элементу:

text
ox_inventory/web/images/burger.png

Имя должно точно совпадать с именем элемента, и отсутствующее изображение показывает только пустой значок. Квадратное изображение около 100 на 100 пикселей или больше, с прозрачным фоном, выглядит лучше всего.

3. Перезагрузьте и предоставьте себе это

Перезагрузите инвентарь, чтобы он прочитал файл:

text
restart ox_inventory

Затем предоставьте себе элемент. Администраторы с необходимым разрешением могут использовать команду /additem из игры или консоли:

text
additem <player id> burger 1

Если команда отклоняется, вам не хватает прав администратора, смотрите ACE permissions for admins.

4. Предоставьте элемент из скрипта

На серверной стороне используйте экспорт:

lua
local success = exports.ox_inventory:AddItem(source, 'burger', 1)
if not success then
    print('Could not add the item: inventory full or unknown item')
end

AddItem принимает идентификатор игрока, имя элемента, количество и опциональные метаданные. Удаление и проверка работают так же:

lua
exports.ox_inventory:RemoveItem(source, 'burger', 1)

local count = exports.ox_inventory:Search(source, 'count', 'burger')

Если игрок не может нести элемент из-за веса или слотов, AddItem возвращает false. Вы можете проверить сначала:

lua
if exports.ox_inventory:CanCarryItem(source, 'burger', 1) then
    exports.ox_inventory:AddItem(source, 'burger', 1)
end

5. Сделайте элемент используемым

Элемент может запустить код при его использовании игроком. ox_inventory поддерживает это в определении элемента, с блоком client, который указывает на экспорт одного из ваших ресурсов:

lua
['burger'] = {
    label = 'Burger',
    weight = 220,
    stack = true,
    close = true,
    description = 'A warm burger.',
    client = {
        export = 'my_script.burger',
    },
},

Значение — это resourceName.exportName. В my_script зарегистрируйте экспорт на клиенте:

lua
-- 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 и новый элемент загружен. Если скрипту он нужен, перезагрузите и этот скрипт.

Скрипты без этой проблемы

Item Creator V2Создавайте используемые предметы с анимациями, пропами, эффектами и не только — без кода.Смотреть скрипт →Shop CreatorМагазин меньше чем за минуту — владельцы, сотрудники, сейфы и ограбления в комплекте.Смотреть скрипт →

Читайте также

ox_libESXQBoxМетаданные элементов ox_inventory: AddItem, Search, SetMetadata и уникальные элементыИспользуйте метаданные в ox_inventory: добавляйте элементы с данными, ищите и читайте слоты, обновляйте с помощью SetMetadata, показывайте пользовательскую метку и описание, и создавайте уникальные элементы, такие как ID и ключи.1 октября 2026 г. · 3 мин чтенияЧитать →ox_libESXQBoxМагазины ox_inventory: data/shops.lua, RegisterShop и значкиКак создать магазин в ox_inventory: запись data/shops.lua, цены и валюта, местоположения и цели, магазины, ограниченные работой, RegisterShop из другого ресурса и значки.1 октября 2026 г. · 3 мин чтенияЧитать →ox_libESXQBoxХранилища ox_inventory: RegisterStash, openInventory и хранилища работыКак создавать хранилища в ox_inventory: зарегистрировать один на сервере, открыть его с клиента или ox_target, сделать его личным для каждого игрока или заблокировать работой.1 октября 2026 г. · 3 мин чтенияЧитать →