Мод «State Ledger» для Farming Simulator 25

State Ledger главная картинка
Самое первое звено технического фундамента экосистемы Realistic Farming - StateLedger. Данный мод отвечает за сохранение и загрузку данных на диск, и хотя рядовой игрок никогда не увидит его в действии, именно этот мод защищает прогресс всей сборки от повреждения. Это тот случай, когда невидимая работа под капотом оказывается едва ли не важнее всего, что происходит на экране.

StateLedger является первым модом в порядке загрузки экосистемы Realistic Farming. Первый - потому что без памяти нечего синхронизировать (NetworkSync), нечего показывать (MasterHUD) и нечем тикать (Time Guard). Сначала - данные. Потом - всё остальное.

Проблема - почему каждый мод не может сохранять сам?
Может. И в большинстве модов именно так и происходит. IncomeMod пишет свой файл. TaxMod - свой. WorkerCosts - свой. ProStaffCoOp - свой. DairyCore - свой. Каждый мод, когда игра говорит «пора сохраняться», открывает свой XML, записывает данные, закрывает файл. Десять модов - десять файлов - десять операций записи.

И вот тут - ловушка. Сохранение в FS25 - не мгновенный снимок. Это окно: какое-то время, в течение которого движок последовательно вызывает хуки сохранения у всех загруженных модов. Первый мод записал - готово. Второй записал - готово. Третий... а тут сбой. Вылет игры. Завис компьютер. Отключилось электричество. Кот наступил на кнопку питания.

Что произошло? Первые два мода сохранились. Третий - нет. Четвёртый, пятый, шестой - тоже нет. При следующей загрузке первые два мода восстановят актуальное состояние. Остальные - загрузят данные из предыдущего сохранения. Налоги - за сегодня, а зарплаты - за вчера. Уровень кооператива - свежий, а молочные контракты - прошлого месяца. Экономика экосистемы разъехалась, как вагоны поезда, у которого расцепились сцепки.

В лучшем случае - несоответствие цифр, которое можно пережить. В худшем - безвозвратная потеря прогресса. Файл записался наполовину, XML повреждён, мод не может его прочитать - и начинает с нуля. Часы игры - в помойку.

StateLedger устраняет эту угрозу полностью. Его смысл в том, чтобы объединить данные сохранений всех сопутствующих модов в одну атомарную операцию записи в XML и одну такую же операцию чтения. Вместо десяти отдельных записей - одна. Атомарная. Неделимая. Либо всё записалось - либо ничего.

Как им пользуются другие моды
Механика регистрации проста и защищена на случай отсутствия StateLedger. Мод регистрируется один раз при инициализации и задаёт два обратных вызова. Функция serialize возвращает простую таблицу Lua - только строки, числа, логические значения и вложенные таблицы, без дескрипторов и замыканий; она выполняется прямо в окне сохранения, поэтому обязана работать быстро. Функция deserialize получает ту же самую таблицу при возобновлении игры или nil при совершенно новом сохранении, и должна корректно обрабатывать этот nil, подставляя значения по умолчанию.

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

Что мод сознательно не трогает
Разработчик чётко разграничивает зоны ответственности. Локальные настройки каждого игрока - положение HUD, прозрачность, размер шрифта - через StateLedger не проходят, и это правильно: иначе настройки всех игроков перезаписывались бы значениями того, кто сохранился последним. Такие параметры хранятся в собственном локальном файле каждого мода или в SettingsHub, если там реализована поддержка настроек на уровне игрока.

Файл сохранения
Все данные складываются в единый файл RealisticFarming_MasterState.xml в директории сохранения, где на каждый зарегистрированный мод приходится свой блок. Запись ведётся исключительно сервером внутри штатного хука сохранения игры. Корневой элемент содержит целочисленную версию сохранения, а версии схем отдельных модов хранятся в их собственных таблицах состояний - это заложенный на будущее задел под миграцию данных между версиями.

Диагностика
Для проверки предусмотрена консольная команда slStatus, которая выводит список зарегистрированных модулей и их состояние загрузки - удобно, чтобы убедиться, что все компоненты сборки корректно подключились к системе сохранений.

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