Перейти к содержимому

Настройка

Каждый магазин настраивается в панели и хранится в вашей базе данных — см. 🏪 Создание магазина. Файлы нужны для того, что общее для всех магазинов.


ФайлЗа что отвечаетОткрыт?
config.luaФреймворк, язык, взаимодействие, пед по умолчанию, команда, картинки, категории, правила ограбления, идентификаторыДа
bridge/server.luaДеньги, счета, предметы, инвентарь, работы, уведомления, колбэки и собственное оповещение полицииДа
bridge/client.luaУведомления, подсказки, данные игрока и колбэки на клиентеДа
bridge/target.luaКак продавцы и точки магазинов добавляются в ox_target или qb-targetДа
bridge/utils.luaСчитывает идентификаторы игрока (Steam, license, Discord, FiveM, Xbox)Да
locales/*.luaТексты в игре: уведомления, подсказки, сообщения об ограбленииДа
html/locales.jsТексты внутри панелей и окна магазина на всех двенадцати языкахЧитаемый
html/index.html, style.css, script.jsПанели и окно магазинаЧитаемый
list/peds.luaМодели педов, доступные в панелиEscrow
mic_shopcreator.sqlДевять таблиц, импортируются один разДа
client.lua, server.luaЛогика магазиновEscrow

ПараметрЧто делаетПо умолчанию
Config.LocaleЯзык в игре и в панелях. См. Языки'en'
Config.Framework'esx' или 'qbcore'. Автоматически не определяется. На QBox используйте 'qbcore' — QBox запускает ресурсы QBCore через слой совместимости'esx'
Config.CommandКоманда, открывающая панель Shop Creator'shopcreator'
Config.IdentifierTypeКак распознаются владельцы и сотрудники: 'discord', 'license', 'esx' или 'citizenid'. См. Установка'discord'
ПараметрЧто делаетПо умолчанию
Config.Interaction'ox_target', 'qb-target' или 'default' (подсказка и E)'ox_target'
Config.RadiusInteractПри 'default' — на каком расстоянии в метрах должен находиться игрок2.0
Config.SpawnNPCfalse — продавцы не создаются: место отмечается маркером (при 'default') или сферой target. Нет продавца — некого и грабитьtrue
Config.DefaultPedМодель, которая используется, если у локации её нет или она недействительна'a_f_m_bevhills_01'
Config.PedSpawnDistanceПродавцы существуют, только пока игрок находится в пределах этого количества метров20.0
ПараметрЧто делаетПо умолчанию
Config.CategoriesКатегории, предлагаемые при добавлении товара; окно магазина группирует товары по нимitems, weapons, misc
Config.InventoryImagePathСписок папок с картинками. Для каждого товара окно по очереди пробует <item name>.png в каждой папке и берёт первую, которая загрузиласьnui://ox_inventory/web/images/
Config.AllowEmployeesAddProductsВ магазинах игроков — могут ли сотрудники добавлять новые товары. Владельцы могут всегда; управлять существующими сотрудники могут всегдаfalse

Не используете ox_inventory? Укажите в Config.InventoryImagePath папку с картинками вашего инвентаря, например nui://qb-inventory/html/images/. Добавьте вторую запись, если ваши картинки разложены по нескольким папкам.

ПараметрЧто делаетПо умолчанию
Config.BlacklistWeaponsПредполагается как список оружия, с которым нельзя начать ограбление. Эта версия его не читает: ограбление начинается с любым оружием, и только голыми руками — никогдаweapon_unarmed, weapon_nightstick, weapon_stungun
Config.RobberyNotifyJobsРаботы, которые оповещаются о начале ограбленияpolice
Config.PoliceAlert"default" оповещает перечисленные выше работы уведомлением и блипом на минуту. "custom" вместо этого вызывает TriggerPoliceAlert в bridge/server.lua"default"
Config.RobberyCooldownЗапасной кулдаун для магазина, у которого сохранённого нет. Код считает его в минутах, как и поле для конкретного магазина (комментарий в config.lua говорит о секундах)300
Config.TakeRobberyMoneyFromVaultВ магазинах игроков денежные награды берутся из сейфа магазина — и прекращаются, когда он пустtrue
ПараметрЧто делаетПо умолчанию
Config.ScreenshotПрикреплять к логам Discord скриншот экрана игрока. Требует запущенного screenshot-basictrue

Сама ссылка на webhook задаётся для каждого магазина в панели, а не здесь.


КомандаКто может использоватьЧто делает
/shopcreatorACE mic_shop.openОткрывает панель Shop Creator. Переименовывается через Config.Command и, как любая команда, может быть назначена на клавишу в настройках FiveM

Владельцам и сотрудникам магазинов разрешения не нужны: окно магазина показывает им кнопку-шестерёнку Shop Settings, когда они открывают магазин, которым владеют или в котором работают.


Поставляются двенадцать языков: en, es, fr, de, it, pt, ru, ja, ko, zh-CN, ar и nl. Текст хранится в двух местах, и оба следуют за Config.Locale:

  • locales/<code>.lua — то, что показывает игра: уведомления, подсказки, сообщения об ограблении.
  • html/locales.js — то, что показывают панели и окно магазина, по одному блоку на язык.

Как добавить язык:

  1. Скопируйте locales/en.lua в locales/<code>.lua и переведите текст справа в каждой строке. Ключи и любые %s оставьте.
  2. Добавьте locales/<code>.lua в shared_scripts в fxmanifest.lua рядом с остальными, чтобы игроки его скачивали.
  3. В html/locales.js скопируйте блок 'en', переименуйте его в ваш код и переведите.
  4. Укажите свой код в Config.Locale, выполните refresh и перезапустите ресурс.

Ключ, которого не хватает в вашем Lua-файле, отображается в игре как Translation not found: <key>.


Четыре открытых файла в bridge/. Названия функций оставляйте как есть — код магазинов вызывает их по имени.

bridge/server.lua — один блок для ESX, один для QBCore, выбирается через Config.Framework.

ФункцияДля чего нужна
GetPlayer, GetPlayerJobОбъект игрока и его работа
GetMoney, AddMoney, RemoveMoneyНаличные
GetAccount, AddAccountMoney, RemoveAccountMoneyИменованные счета: bank, black_money
GetInventoryItem, AddInventoryItem, RemoveInventoryItemПредметы. Если запущен ox_inventory, читает через него
GetPlayerInventoryИнвентарь владельца, который показывается, когда он закупает товар для магазина
ShowNotificationСерверные уведомления
RegisterServerCallbackКолбэки через ESX или QBCore
TriggerPoliceAlert(x, y, z, shopLabel)Вызывается при каждом ограблении, если Config.PoliceAlert = "custom". По умолчанию пуста — вставьте сюда вызов вашего диспетчерского скрипта

bridge/client.lua — ShowNotification, ShowHelpNotification, GetPlayerData и TriggerServerCallback. На QBCore ShowHelpNotification пуста; заполните её собственным вызовом подсказки или draw-text, если вы используете Config.Interaction = 'default' или хотите видеть приглашение для сотрудника.

bridge/target.lua — добавляет пункт «открыть магазин» каждому продавцу (или небольшой сфере, если Config.SpawnNPC выключен) для ox_target или qb-target и снова убирает их при изменении магазинов.

Собственный диспетчерский скрипт полиции: задайте Config.PoliceAlert = "custom" и впишите вызов оповещения вашего диспетчерского ресурса в TriggerPoliceAlert в bridge/server.lua. Функция получает координаты продавца и название магазина.


Клиентские экспорты для открытия магазинов из другого ресурса:

ЭкспортАргументыЧто делает
OpenShopID магазина, ID локацииОткрывает окно этого магазина с учётом его кулдауна и ограничения по работе
OpenShopAsEmployeeID магазина, ID локацииТо же, что OpenShop; шестерёнка Shop Settings появляется, если игрок владеет магазином или работает в нём
OpenShopAsOwner—Открывает панель Shop Creator, если у игрока есть mic_shop.open

Ресурсы target также могут вызывать клиентское событие mic_shopcreator:client:openShop, передав в данных shopId и locationId, — именно так работают встроенные опции target. ID магазинов и локаций — те, что показаны в панели.