Настройка
Настройки находятся в config.lua. Файлы, которые взаимодействуют с вашим фреймворком, инвентарём и ресурсом таргета, оставлены открытыми, поэтому сервер, работающий иначе, может адаптировать их, не трогая зашифрованное ядро.
Какой файл за что отвечает
Заголовок раздела «Какой файл за что отвечает»| Файл или папка | За что отвечает | Открыт? |
|---|---|---|
config.lua | Все настройки на этой странице, функция уведомлений, предметы и ароматы | Открыт |
locales/*.lua | Все тексты: меню, подписи таргета, сообщения. Один файл на язык | Открыт |
server_functions.lua | Получение игрока, добавление, удаление и проверка предметов, регистрация используемых предметов, колбэк списка ароматов и ReduceStress | Открыт |
client/client_functions.lua | Чтение данных игрока и проверка работы для меню настройки | Открыт |
target/target.lua | Все опции таргета на кальянах и мебели для ox_target и qb-target | Открыт |
client/client.lua, server/server.lua, locale.lua | Размещение, шланг, дым, владение и запасы | Зашифрованы |
html/ | Меню настройки: index.html, style.css, script.js | Обычные файлы |
inventory_items/ | Готовые определения предметов для ESX, ox_inventory и QBCore | Справочные |
inventory_images/ | Одна иконка на каждый предмет | Ассеты |
mic_hookah_prop/stream/ | Десять моделей кальянов | Ассеты, отдельный ресурс |
Фреймворк, таргет и картинки
Заголовок раздела «Фреймворк, таргет и картинки»| Параметр | Что делает | По умолчанию |
|---|---|---|
Config.Locale | Язык | en |
Config.Framework | esx, qbcore или qbox | esx |
Config.ESXResourceName | Название папки ESX | es_extended |
Config.QBResourceName | Название папки QBCore | qb-core |
Config.QBoxResourceName | Название папки QBox | qbx_core |
Config.Target | ox_target или qb-target | ox_target |
Config.QBTargetResourceName | Название папки qb-target | qb-target |
Config.InventoryImagePath | Откуда меню настройки загружает иконки ароматов | nui://ox_inventory/web/images/ |
| Параметр | Что делает | По умолчанию |
|---|---|---|
Config.AdminGroups | Группы, которые могут открыть меню любого кальяна или мебели и забрать их. false означает, что админом считается каждый | false |
Config.AllowedJobs | Работы, которым разрешено открывать меню настройки. false означает любую работу | false |
Из коробки любой может управлять чужим кальяном. Чтобы каждый кальян принадлежал игроку, который его поставил, перечислите группы вашего персонала в Config.AdminGroups — например, admin и superadmin. На ESX список сопоставляется с группой игрока; на QBCore и QBox — с полем permission игрока.
Когда список задан:
| Кто | Open Setup Menu | Забрать | Grab Hose |
|---|---|---|---|
| Игрок, поставивший кальян | да (если его работа разрешена) | да | да |
| Админская группа | да (если его работа разрешена) | да | да |
| Все остальные | нет | нет | да |
Config.AllowedJobs защищает только меню настройки. Любой может взять шланг и курить зажжённый кальян.
Курение и запасы
Заголовок раздела «Курение и запасы»| Параметр | Что делает | По умолчанию |
|---|---|---|
Config.MaxActiveTime | Что означает «полный» для угля и воды. Один hookah_coal или hookah_water заполняет до этого значения | 1800 |
Config.ConsumptionPerPuff | Сколько каждая затяжка снимает с charcoal и water | 10 и 10 |
Config.MaxPuffsPerSession | Вычисляется из двух значений выше (1800 ÷ 10 = 180). Для справки; скрипт его не читает | 180 |
Config.MaxHoseDistance | Метры, на которые растягивается шланг до разрыва | 3.5 |
Config.MaxSimultaneousUsers | Предполагаемое ограничение на число людей, курящих один кальян | 4 |
Config.Stress | Вызывает ReduceStress при каждой затяжке | true |
Кальян не прогорает по таймеру: уголь и вода уменьшаются только тогда, когда кто-то делает затяжку. Когда что-то одно доходит до нуля, кальян гаснет и его нужно пополнить.
ReduceStress в server_functions.lua получает серверный ID игрока при каждой затяжке, если включён Config.Stress. Функция поставляется пустой, с закомментированными примерами: клиентское событие, экспорт или серверное событие из вашего ресурса стресса или HUD. Поместите туда свой вызов.
| Параметр | Что делает | По умолчанию |
|---|---|---|
Config.Particle | Какая частица используется: dict и name | scr_recartheft / scr_wheel_burnout |
Config.VapeExhale | Размер дыма | 0.5 |
В конфиге эти два параметра помечены как «не менять, если вы не знаете, что делаете». Каждое облако держится три секунды и показывается игрокам в радиусе 150 метров.
Кальяны, мебель и ароматы
Заголовок раздела «Кальяны, мебель и ароматы»Полные списки находятся на странице 🎒 Предметы.
Config.HookahItems — название предмета → модель. Чтобы добавить кальян, модель должна стримиться (например, в mic_hookah_prop/stream/ с записью в его .ytyp), затем добавьте строку сюда и предмет в ваш инвентарь.
Config.PlaceableProps — название предмета → propModel, type (furniture) и isChair. Подойдёт любой проп из базовой игры. Укажите isChair = true для всего, что должно предлагать Sit Down.
Config.Flavors — название предмета → настройки:
| Поле | Что делает |
|---|---|
Label | Название, показываемое в меню настройки |
SmokeColor | Цвет дыма R, G, B |
ScreenEffect | Название экранного эффекта GTA, проигрываемого курильщику, или false, если эффекта нет |
EffectDuration | Сколько секунд длится экранный эффект |
Рядом с Config.Flavors в конфиге есть ссылка на список названий экранных эффектов. Чтобы добавить аромат, скопируйте запись, задайте ей новое название предмета и добавьте предмет и его иконку в ваш инвентарь.
Уведомления
Заголовок раздела «Уведомления»Config.Notify в config.lua отправляет все сообщения: ShowNotification на ESX, Functions.Notify на QBCore и QBox, иначе — консоль. Замените его тело, чтобы использовать свой ресурс уведомлений.
В locales/ поставляются одиннадцать файлов: en, es, fr, de, it, pt, ru, cn, nl, pl, tr. Выберите нужный в Config.Locale.
В комментарии над Config.Locale упоминается и jp, но японского файла в комплекте нет; при его установке появится «Locale [jp] does not exist».
Каждый файл охватывает меню настройки, подписи таргета и сообщения. Несколько слов прописаны прямо в Lua, а не в файлах локалей: подсказки размещения (Rotate Right, Rotate Left, Height Up, Height Down, Place Prop, Cancel), «You are already placing an object» и «None» для пустого аромата.
Чтобы добавить язык: скопируйте locales/en.lua, замените ключ в начале на ваш код и переведите. Манифест подгружает всё из locales/ сам, так что регистрировать больше ничего не нужно. Укажите Config.Locale, выполните refresh и перезапустите ресурс.
Адаптация под ваш сервер
Заголовок раздела «Адаптация под ваш сервер»| Что изменить | Что править |
|---|---|
| Собственный фреймворк | Объект фреймворка внизу config.lua и функции в server_functions.lua и client/client_functions.lua |
| Другой инвентарь | AddItem, RemoveItem и HasItem в server_functions.lua, а также регистрацию используемых предметов ниже них |
| Другой таргет | target/target.lua — списки опций общие, отличаются только два вызова addModel / AddTargetModel |
| Подписи, иконки или дистанция таргета | target/target.lua для иконок и дистанции, locales/ для подписей |
| Правила по работам | CheckJobAccess в client/client_functions.lua |
На QBCore и QBox при запущенном ox_inventory server_functions.lua также регистрирует каждый кальян и предмет мебели через собственный хук использования ox_inventory — как запасной вариант для конфигураций, где мост предметов QBCore не передаёт использование дальше.
Клавиши и команды
Заголовок раздела «Клавиши и команды»| Клавиша или команда | Когда | Что делает |
|---|---|---|
| E | С кальяном в руках | Начинает размещение |
| X | С кальяном в руках | Убирает кальян, не размещая |
| Колёсико мыши | Размещение | Поворачивает превью |
| Стрелка вверх / вниз | Размещение | Поднимает или опускает превью |
| E | Размещение | Ставит кальян |
| X | Размещение | Отменяет |
| E | Со шлангом зажжённого кальяна | Делает затяжку |
| X («Hookah - Stand Up X») | Сидя | Встаёт. Можно переназначить в настройках клавиш FiveM каждого игрока |
/hookah:chair:stand_up | Сидя | То же самое, командой |