Магазины ox_inventory: data/shops.lua, RegisterShop и значки
Как создать магазин в ox_inventory: запись data/shops.lua, цены и валюта, местоположения и цели, магазины, ограниченные работой, RegisterShop из другого ресурса и значки.
Магазин в ox_inventory — это список элементов с ценами и одно или несколько мест, где игроки могут его открыть. Вы можете отредактировать файл или зарегистрировать магазин из собственного ресурса. Эта статья охватывает оба варианта, плюс цены, валюты, ограничения работы, ox_target и значки.
Запись магазина в data/shops.lua
Откройте ox_inventory/data/shops.lua. Каждый магазин — это таблица, обозначенная типом магазина:
return {
General = {
name = 'Shop',
inventory = {
{ name = 'burger', price = 10 },
{ name = 'water', price = 5, count = 50 },
{ name = 'lockpick', price = 150 },
},
locations = {
vec3(25.7, -1347.3, 29.5),
},
},
}Ключ (General) — это тип магазина. Поля:
| Поле | Смысл |
|---|---|
name |
Название, показываемое в верхней части магазина |
inventory |
Элементы на продажу |
locations |
Координаты, где игроки могут открыть магазин |
targets |
То же самое, но с ящиками ox_target (смотрите ниже) |
groups |
Работы, разрешённые использовать магазин |
blip |
Параметры значка карты |
Проверьте записи по умолчанию в вашей копии файла: они показывают точные поля, которые поддерживает ваша версия, и лучший способ начать — скопировать один и изменить его.
Внимание: каждое имя элемента в
inventoryдолжно существовать вdata/items.lua. Магазин, который перечисляет отсутствующий элемент, может не открыться или печатать ошибки. Смотрите добавление элементов в ox_inventory.
Элементы, цены и валюта
Каждая строка inventory — это небольшая таблица:
inventory = {
{ name = 'water', price = 5 },
{ name = 'sandwich', price = 12, count = 20 },
{ name = 'lockpick', price = 150, currency = 'black_money' },
{ name = 'WEAPON_PISTOL', price = 2500, license = 'weapon' },
},price— это цена одного устройства.count— это запас. Без неё элемент неограничен, а с ней запас уменьшается, когда игроки покупают.currency— это элемент, который платит за него. По умолчанию это деньги, иblack_money— это частая альтернатива.licenseзапрашивает элемент лицензии перед покупкой игроком.gradeограничивает один элемент минимальным рангом работы, когда магазин используетgroups.
Открытие: местоположения и цели
С locations, ox_inventory показывает взаимодействие на этих координатах. С targets, это создаёт ящики ox_target, что лучше для прилавка или окна:
targets = {
{
loc = vec3(25.7, -1347.3, 29.5),
length = 0.7,
width = 0.5,
heading = 0.0,
minZ = 29.0,
maxZ = 31.0,
distance = 1.5,
},
},ox_target должен запускаться для этого, так как магазин от него зависит. Если вы хотите только один из двух способов, удалите другую таблицу.
Магазины, ограниченные работой и значки
Ограничьте магазин работе с groups, используя имена работ и минимальные ранги:
Police = {
name = 'Police armory',
groups = { police = 0 },
inventory = {
{ name = 'WEAPON_STUNGUN', price = 0 },
{ name = 'ammo-9', price = 0, count = 200 },
},
locations = { vec3(480.2, -996.5, 30.7) },
},Для значка карты добавьте таблицу blip в магазин:
blip = { id = 59, colour = 69, scale = 0.8 },id — это номер спрайта и colour — номер цвета. Числа приходят из списков значков GTA, и то же самое объяснено в создании значков в FiveM. Перезагрузите ox_inventory, чтобы применить изменения файла.
Зарегистрируйте магазин из другого ресурса
Когда магазин создаётся вашим собственным скриптом, например ресурсом бизнеса или работы, не редактируйте data/shops.lua. Зарегистрируйте его на сервере:
-- server.lua of your resource
exports.ox_inventory:RegisterShop('Bakery', {
name = 'Bakery',
inventory = {
{ name = 'bread', price = 4 },
{ name = 'croissant', price = 6, count = 30 },
},
locations = {
vec3(-1285.7, -1127.1, 6.8),
},
})RegisterShop(type, data) принимает строку типа и ту же таблицу, что и в файле. Зарегистрируйте её при запуске ресурса. Если ox_inventory перезагружается, ваш ресурс должен зарегистрировать магазин снова, поэтому регистрируйте на onServerResourceStart и для ox_inventory тоже:
AddEventHandler('onServerResourceStart', function(resource)
if resource == 'ox_inventory' then
registerMyShops()
end
end)Откройте магазин с клиента
Если вы не хотите местоположение или цель в магазине, или хотите открыть его из собственного интерфейса, используйте экспорт клиента:
exports.ox_inventory:openInventory('shop', { type = 'General', id = 1 })type — это ключ магазина. id — это позиция местоположения в списке locations (или targets), начиная с 1. Если магазин имеет одно местоположение, используйте id = 1. Магазин без мест, зарегистрированный кодом, открывается только с его типом, поэтому протестируйте вашу версию, если id необходим.
Совет: сервер всё ещё проверяет магазин при его открытии, поэтому клиент не может купить у магазина работы, для которого у него нет работы.
Создание магазинов без редактирования кода
Если вы устанавливаете много магазинов, редактирование Lua становится повторяющимся. Shop Creator позволяет вам создавать магазины в игре.
Shop CreatorМагазин меньше чем за минуту — владельцы, сотрудники, сейфы и ограбления в комплекте.от 24,20 €Открыть скрипт →
Контрольный список
| Симптом | Решение |
|---|---|
| Магазин не появляется | Перезагрузите ox_inventory после редактирования data/shops.lua |
| Магазин открывается пусто или ошибки | Элемент в inventory отсутствует в data/items.lua |
| Не могу взаимодействовать с магазином | Проверьте locations или targets, и что ox_target запущен |
| Неправильная валюта | Установите currency на запись элемента |
| Магазин работы открыт для всех | Добавьте groups = { job = grade } |
| Зарегистрированный магазин потерян после перезагрузки | Вызовите RegisterShop снова, когда ox_inventory запускается |
Короткие ответы
Где я добавляю магазин в ox_inventory?
В ox_inventory/data/shops.lua, как новую запись с именем, списком inventory и одной или несколькими locations или targets. Перезагрузите ox_inventory после этого.
Может ли магазин брать чёрные деньги вместо наличных?
Да. Установите currency = 'black_money' на запись элемента, и магазин будет взимать этот элемент вместо денег по умолчанию.
Как создать магазин из собственного скрипта?
Вызовите exports.ox_inventory:RegisterShop(type, data) на сервере, затем откройте его с клиента с exports.ox_inventory:openInventory('shop', { type = type }).
