Скачать файл
Еще моды от 苏别黎丶S
Единая диспетчеризация и оптимизация модов – ядро для оптимизации Lua-событий в Project Zomboid. Мод не добавляет предметы и игровые механики, а также не изменяет файлы других модов. Оптимизация выполняется во время работы игры.
Принцип работы
Высокочастотные события Lua, включая OnPlayerUpdate, OnTick, OnTickEvenPaused, OnZombieUpdate, OnPlayerMove, OnMouseMove, OnKeyKeepPressed и OnClimateTick, обрабатываются через единый диспетчер. При большом количестве модов их обработчики могут выполняться каждый кадр и вызывать падение частоты кадров и периодические задержки.
Архитектура
- Java-слой отвечает за распределение событий, удаление дубликатов, замер времени выполнения каждого обработчика, перераспределение нагрузки и защиту от повторных вызовов. При ошибке происходит автоматический возврат к поведению оригинальной игры.
- Lua-слой отвечает за интервалы событий, ключевые слова для исключений, автоматические режимы, переключатели и диагностические отчёты.
Возможности
- Группировка обработчиков по числу срабатываний события. По умолчанию при каждом втором срабатывании выполняется только одна группа, а нагрузка распределяется между несколькими кадрами.
- Удаление дубликатов: повторно зарегистрированный обработчик сохраняется только один раз. Это помогает избежать накопления повторных регистраций после загрузки сохранения.
- Балансировка нагрузки на основе фактического времени выполнения каждого обработчика. Более тяжёлые обработчики распределяются по группам для выравнивания нагрузки между кадрами.
- События, связанные с прицеливанием, камерой, ракурсом Viewpoint, отдачей и масштабированием, по умолчанию работают на полной частоте и автоматически распознаются по имени файла.
- Каждая внедрённая логика имеет защиту от ошибок. При сбое мод возвращается к оригинальному поведению без создания условий для повреждения сохранений.
Настройка и диагностика
Индивидуальные интервалы событий и ключевые слова для исключений настраиваются в таблице SPC.policy файла media/lua/shared/SPC_Core.lua. Значение интервала 1 отключает диспетчеризацию для соответствующего события.
Команда SPC_Report() в консоли выводит количество обработчиков событий и исходные файлы, что позволяет определить наиболее ресурсоёмкие моды.
Ограничения
Оптимизация распространяется только на диспетчеризацию событий Lua. Текстуры, рендеринг, ИИ, физика, поиск пути и операции с сохранениями не оптимизируются. Снижение частоты представляет собой распределение общей нагрузки, а не точную фиксацию частоты. В сетевой игре OnPlayerUpdate обрабатывает половину общего количества вызовов, а не выполняется с частотой 30 Гц для каждого игрока. Эффект зависит от состава сборки и заметнее при большом количестве обработчиков событий. Сборки, состоящие преимущественно из модов на текстуры или карты, получают небольшой прирост.
Для работы требуется ZombieBuddy. В сетевой игре мод устанавливается отдельно на клиент и сервер. Сетевые пакеты не передаются, рассинхронизация не возникает. Мод работает с существующими сохранениями, начинать новую игру не требуется. Поддерживаются как 3D-режим, так и оригинальный режим камеры. После удаления мода другие моды возвращаются к исходному поведению.
- Workshop ID: 3825832401
- ID мода: SuPerfCore
| Версия Project Zomboid |
|
- Комментарии