Оружие и боеприпасы ox_inventory: data/weapons.lua и исчезающее оружие

Оружие исчезает после переподключения с ox_inventory? Как работает оружие как элементы: data/weapons.lua, элементы боеприпасов, износ, AddItem для WEAPON_PISTOL и крепления.

Вы даёте игроку пистолет через меню администратора или скрипт работы. Они отключаются, возвращаются и пистолета нет. С ox_inventory оружие — это не отдельная экипировка: это элементы, и всё остальное, что не является элементом, удаляется. Эта статья объясняет, как работают оружие и боеприпасы, как правильно их давать и где настроить износ и крепления.

Оружие — это элементы

В ox_inventory имя элемента оружия — это его имя хэша, например WEAPON_PISTOL. Они определены в ox_inventory/data/weapons.lua, а не в items.lua. Файл возвращает три группы:

lua
return {
    Weapons = {
        ['WEAPON_PISTOL'] = {
            label = 'Pistol',
            weight = 1130,
            durability = 0.1,
        },
        -- ...
    },
    Components = {
        -- attachments
    },
    Ammo = {
        -- ammo definitions
    },
}

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

Почему оружие исчезает при переподключении

Старые скрипты ESX и QBCore дают оружие с native, такие как GiveWeaponToPed, или с ESX's xPlayer.addWeapon. Это кладёт оружие в руки педу на эту сессию, но это не элемент и ничто его не сохраняет. ox_inventory также удаляет оружие, которое не в инвентаре, поэтому они исчезают при переподключении или даже раньше.

Решение — дать оружие как элементы с сервера:

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

Замените каждый вызов скрипта, который выдаёт оружие с native, addWeapon или Player.Functions.AddItem('weapon_pistol', ...) на вызов AddItem с именем оружия в верхнем регистре. Скрипт, который только работает через native, такой как магазин, который спавнит оружие в руку, нуждается в этом изменении перед работой на сервере, использующем ox_inventory.

Совет: названия оружия чувствительны к регистру в списках элементов, и WEAPON_PISTOL — это форма, которую использует ox_inventory. Старый скрипт, который отправляет weapon_pistol, может не работать по этой причине.

Элементы боеприпасов

Боеприпасы — это тоже элемент. Тип боеприпасов называется ammoname оружия в его записи, например ammo-9 для 9 мм:

lua
exports.ox_inventory:AddItem(source, 'ammo-9', 60)

Когда игрок использует элемент боеприпаса с экипированным оружием, которое его принимает, ox_inventory загружает его в оружие, и оружие хранит собственный счётчик боеприпасов в своих метаданных. Боеприпасы показываются как элемент в инвентаре, если они не загружены.

Проверьте имена элементов в вашей версии в data/items.lua и data/weapons.lua. Шаблон — ammo-<type>, например ammo-9, ammo-rifle, ammo-shotgun, и элемент, который не существует, не может быть добавлен.

Износ и деградация

Оружие изнашивается при срабатывании. Значение durability в записи оружия устанавливает скорость: большее число означает быструю деградацию. Оружие с нулевым износом не работает, пока его не отремонтируют.

lua
['WEAPON_PISTOL'] = {
    label = 'Pistol',
    weight = 1130,
    durability = 0.05,
},

Понизьте число, чтобы оружие прослужило дольше. Ремонт — это выбор геймплея: многие серверы используют элемент ремонта, рецепт крафта или механика, и вы можете установить износ обратно с помощью SetMetadata (смотрите метаданные элементов в ox_inventory).

Крепления (компоненты)

Крепления, такие как фонарик, глушитель или магазин, — это элементы, перечисленные в группе Components, и они имеют собственные записи в items.lua. Игрок надевает один, используя его, пока оружие экипировано. Компонент хранится на элементе оружия, поэтому он выживает при переподключении.

Если крепление ничего не делает, проверьте эти три вещи:

  • элемент компонента существует в data/items.lua
  • он указан для этого оружия в data/weapons.lua
  • оружие экипировано при использовании компонента

Вы также можете добавить компонент с сервера через метаданные оружия, например когда вы продаёте предварительно собранное оружие, но сначала протестируйте его с обычным пистолетом, так как формат метаданных зависит от вашей версии.

Продажа оружия в магазинах

Оружие появляется в магазине, как любой элемент, с тем же именем:

lua
{ name = 'WEAPON_PISTOL', price = 2500, license = 'weapon' },

Смотрите магазины ox_inventory для остальной части формата магазина. Если скрипт магазина всё ещё дает оружие native, ему нужно изменение, показанное выше.

Другие скрипты, которые трогают оружие

Меню администратора, скрипты полиции, скрипты экипировки и системы банд часто используют native. Поищите в ваших ресурсах эти вызовы и замените их:

lua
GiveWeaponToPed(...)
GiveDelayedWeaponToPed(...)
xPlayer.addWeapon(...)

Поищите в папке ресурсов addWeapon и GiveWeaponToPed, затем переключите каждый результат на exports.ox_inventory:AddItem. Если вы сделаете это для всех них один раз, оружие перестанет исчезать.

Контрольный список

Симптом Решение
Оружие исчезает при переподключении Оно не было элементом; дайте его с exports.ox_inventory:AddItem
AddItem возвращает false Неизвестное имя, инвентарь полон или слишком тяжело
Оружие не работает Имя должно быть в верхнем регистре, например WEAPON_PISTOL, и существовать в data/weapons.lua
Нет боеприпасов после использования Проверьте ammoname оружия и имя элемента боеприпасов
Оружие ломается слишком быстро Понизьте durability в data/weapons.lua
Крепление ничего не делает Элемент компонента и запись оружия должны совпадать, оружие экипировано

Короткие ответы

Почему моё оружие исчезает при переподключении с ox_inventory?

Оружие было дано педу с native, а не как элемент. ox_inventory только хранит оружие, которое являются элементами в вашем инвентаре, поэтому всё остальное теряется.

Как дать оружие игроку с ox_inventory?

Используйте exports.ox_inventory:AddItem(source, 'WEAPON_PISTOL', 1) на сервере. Имя оружия — это имя элемента заглавными буквами.

Где я изменяю вес оружия или его износ?

В ox_inventory/data/weapons.lua. Каждое оружие имеет запись с его меткой, весом и износом, и боеприпасы и компоненты определены в том же файле.

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

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

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

ox_libESXQBoxКак добавлять элементы в ox_inventory: items.lua, изображения и используемые элементыДобавьте пользовательский элемент в ox_inventory: запись data/items.lua, изображение в web/images, предоставление его с AddItem и делание его используемым с экспортом клиента.1 октября 2026 г. · 3 мин чтенияЧитать →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 мин чтенияЧитать →