Мод «Settings Hub» для Farming Simulator 25

Settings Hub главная картинка
SettingsHub - основа системы настроек Realistic Farming и четвёртый по порядку загрузки мод в связке. Принцип работы прост: сопутствующие моды передают ему описание своих настроек и один обратный вызов, а всё остальное берёт на себя хаб. Как и другие технические звенья сборки, для рядового игрока он остаётся за кадром, но именно благодаря ему настройки множества модов работают согласованно и без сбоев.

Без SettingsHub каждый экономический мод экосистемы решал бы вопрос настроек самостоятельно. Один рисует своё меню в одном углу экрана. Другой - в другом. Третий прячет настройки в конфигурационном файле. Четвёртый - в консольных командах. У каждого свой формат хранения, свой способ применения изменений, своя логика разграничения прав.

Данный мод заменяет весь этот хаос одной системой. Сопутствующие моды передают ему описание своих настроек и один обратный вызов. SettingsHub берёт на себя всё остальное: хранение, применение, разграничение прав, синхронизацию в мультиплеере, сохранение на диск. Собственных настроек у мода нет: его достаточно установить, оставить загруженным и позволить остальным модам им пользоваться.

Как им пользуются другие моды
Регистрация выполняется один раз при инициализации и защищена на случай отсутствия SettingsHub. Мод описывает свои параметры и задаёт обработчик изменений. Поддерживаются четыре типа настроек: логический (bool), целочисленный с минимумом и максимумом (int), дробный с шагом (float) и перечисление из списка значений (enum). Это покрывает практически любые потребности - от простого переключателя до ползунка с точным шагом.

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

Разделение прав: администратор и игрок
Ключевой момент архитектуры - разграничение настроек по области действия. Параметры с пометкой adminOnly являются общими для сервера. Когда клиент пытается изменить такую настройку, запрос уходит на сервер, тот проверяет права главного пользователя, применяет изменение, сохраняет его и рассылает всем клиентам - причём обработчик на клиенте запускает только то значение, которое одобрил сервер. Это исключает рассинхрон и самоуправство.

Настройки без этой пометки - локальные для игрока. Они применяются немедленно на конкретном клиенте и сохраняются в его собственном локальном файле. Значения при этом остаются сугубо личными: в текущей версии серверного хранилища по идентификатору игрока нет, так что каждый настраивает своё, не влияя на других.

Сохранение
Хранение данных тоже разведено логично. Административные (общие для сервера) значения сохраняются через State Ledger в рамках единого атомарного сохранения экосистемы - то есть попадают в тот же защищённый файл, что и остальной прогресс. А локальные для игрока настройки пишутся в отдельный файл в директории сохранения. Такое разделение полностью соответствует принципам всей сборки, где общие и личные данные принципиально не смешиваются.

Интеграция с FarmTablet и диагностика
SettingsHub открывает доступ к своей модели через специальный метод, а приложение системных настроек FarmTablet считывает его через собственный механизм автообнаружения. Показательно, что сам хаб не обращается к FarmTablet напрямую - связь односторонняя, что делает компоненты слабо связанными и устойчивыми. Для проверки предусмотрена консольная команда shStatus, которая выводит список зарегистрированных модулей и глубину очереди ожидающих обработчиков - удобно для контроля за тем, что всё работает штатно.


SettingsHub - это грамотно спроектированный центр управления настройками, без которого параметры множества модов Realistic Farming превратились бы в хаос. Асинхронная очередь спасает от подвисаний при тяжёлых изменениях, чёткое разделение на административные и локальные настройки обеспечивает порядок в мультиплеере, а хранение через StateLedger и отдельный локальный файл соответствует общей философии сборки. Для игрока мод незаметен и не требует настройки - ставится один раз и молча выполняет свою работу, - но именно на нём держится удобство и согласованность всех параметров экосистемы. Ещё один обязательный кирпичик в фундаменте Realistic Farming, продуманный до мелочей.