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

Настройка

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


ФайлЗа что отвечаетОткрыт?
config.luaФреймворк, язык, способ общения игроков с NPC, цвет диалога, /cancelquest, скриншотыДа
bridge/bridge_server.luaДеньги, предметы, данные игрока, колбэки и проверка разрешенияДа
bridge/bridge_client.luaУведомления, подсказки, данные игрока и способ воскрешения игрокаДа
locales/*.luaВесь текст: редактор, окно диалога, уведомления, логи webhookДа
install.sqlВосемь таблиц, импортируются один разДа
web/Редактор, окно диалога, мини-игра и индикатор выполнения (HTML, CSS, JS)Читаемый
client/, server/Движок квестовEscrow
client/game_data/*.luaСписки для выбора в редакторе: педы, машины, кости, анимации, частицы, звуки, экранные эффектыEscrow

ПараметрЧто делаетПо умолчанию
Config.FrameworkС каким фреймворком работать: 'esx' или 'qbcore'. Автоматически не определяется. На QBox используйте 'qbcore' — QBox запускает ресурсы QBCore через слой совместимости'esx'
Config.LocaleЯзык редактора, окна диалога и уведомлений. См. Языки'en'
Config.DebugЕсть в файле; в этой версии никакого дополнительного вывода не даётtrue
ПараметрЧто делаетПо умолчанию
Config.InteractionType'ox_target', 'qb-target' или 'drawtext' (3D-текст и клавиша)'ox_target'
Config.InteractionDistanceНа каком расстоянии (в метрах) игрок должен находиться, чтобы поговорить с NPC2.5
Config.InteractionKeyКлавиша для 'drawtext' и для узла Interact in Area. 38 — это E38
Config.ThemeColorАкцентный цвет окна диалога: blue, pink, yellow, red, green, purple, orange, cyan, white или black"purple"
ПараметрЧто делаетПо умолчанию
Config.EnableCancelQuestРегистрирует команду, позволяющую игроку отказаться от активного квестаtrue
Config.CancelQuestCommandНазвание команды без слэша"cancelquest"

Отмена сбрасывает сохранённый прогресс игрока по этому квесту и удаляет всё, что тот создал.

ПараметрЧто делаетПо умолчанию
Config.ScreenshotBasicПозволяет узлу Send Webhook прикреплять скриншот, если отмечена соответствующая галочка. Требует запущенного screenshot-basictrue

КомандаКто может использоватьЧто делает
/questcreatorЛюбой, у кого есть ACE mic_questcreator.openОткрывает Quest & Event Creator
/cancelquestВсе игроки, пока включён Config.EnableCancelQuestОтменяет активный квест. Переименовывается через Config.CancelQuestCommand

Это же разрешение защищает всё, что редактор сохраняет, удаляет, импортирует и экспортирует: проверка выполняется на сервере, а не только при открытии меню. Выдайте его строкой add_ace для идентификатора или группы; сама проверка находится в Bridge.Server.IsPlayerAllowed в bridge/bridge_server.lua, если вы хотите привязать её к собственной админ-системе.


В locales/ лежат тринадцать файлов: en, es, fr, de, it, pt, ru, ja, ko, zh-CN, ar, nl и cs. Укажите в Config.Locale имя файла без .lua.

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

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

Если в вашем файле не хватает какого-либо ключа, в игре появится Translation [xx][key] does not exist — по этому сообщению сразу видно, какую строку нужно добавить.

Реплики NPC, названия квестов и тексты уведомлений в файлах локализации не хранятся — вы вводите их в редакторе на любом языке.


Между движком квестов и остальным сервером находятся два открытых файла.

bridge/bridge_server.lua

ФункцияДля чего нужна
Bridge.Server.InitializeПолучает fmLib и объект ESX или QBCore при запуске ресурса
Bridge.Server.RegisterServerCallbackРегистрирует колбэки через ESX или QBCore
Bridge.Server.GetPlayer, GetPlayerParamsИгрок через fmLib, а также его идентификатор, имя и работа
Bridge.Server.GetMoney, AddMoney, RemoveMoneyДеньги через fmLib
Bridge.Server.GetItem, AddItem, RemoveItemПредметы через fmLib — с любым инвентарём, с которым работает fmLib
Bridge.Server.IsPlayerAllowedКто может открывать редактор и пользоваться им. Проверяет ACE mic_questcreator.open

bridge/bridge_client.lua

ФункцияДля чего нужна
Bridge.Client.ShowNotificationВсе уведомления. Замените тело функции, чтобы использовать собственный ресурс уведомлений
Bridge.Client.ShowHelpNotificationПодсказка в левом верхнем углу
Bridge.Client.GetPlayerData, IsPlayerLoadedДанные игрока, используются в проверках Has Job и Is Night/Day
Bridge.Client.TriggerServerCallbackКолбэки через ESX или QBCore
Bridge.Client.RevivePlayerИспользуется обработчиком смерти. Вызывает esx_ambulancejob:revive на ESX или hospital:client:Revive на QBCore, а затем воскрешает средствами игры, если игрок всё ещё мёртв

Используете другой скрипт скорой помощи? Замените событие в Bridge.Client.RevivePlayer на то, которое слушает ваш скрипт. Другой ресурс уведомлений? Измените Bridge.Client.ShowNotification. Названия функций оставьте как есть — движок вызывает их по имени.


Два клиентских экспорта позволяют другому ресурсу использовать мини-игру и индикатор выполнения из Quest Creator.

ЭкспортАргументыЧто делает
StartMinigameсложность (1–5), скорость (1–5), раунды, колбэкОткрывает мини-игру в стиле взлома отмычкой. Колбэк получает true или false
StartProgressBarдлительность в миллисекундах, надписьПоказывает встроенный индикатор выполнения

Вызывайте их у mic_questcreator из клиентского скрипта.


Community Events в редакторе показывает список событий, которыми поделились другие серверы; импортируйте любое — и оно добавится к вашим событиям как обычное. Список скачивается с GitHub, поэтому для его загрузки серверу нужен выход в интернет.

Export Event запрашивает название, описание и автора, а затем записывает событие в JSON-файл внутри папки ресурса, в exports/. Эта папка в ресурсе не поставляется — сначала создайте пустую папку exports в mic_questcreator, иначе файл попадёт в корень ресурса как export_<name>.json.