Язык выбирается в шапке панели, а до первого выбора берётся из настроек
браузера. Переведены интерфейс, подписи и описания всех параметров конфигов,
ошибки API и служебные сообщения менеджера в консоли.
Подписи параметров вынесены из app.js в hints-<язык>.json: их больше четырёхсот
на язык, и грузить чужой язык незачем. Сообщения менеджера переводятся на
выходе из API по словарю, где ключом служит русская фраза из кода, — вывод
самого игрового сервера через него проходит без изменений.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Полторы сотни параметров сплошным списком читать невозможно. Теперь они
разбиты на разделы — «Основное», «PVP и урон», «Убежища», «Античит» и так
далее, — свёрнутые по умолчанию, кроме первого. Поиск раскрывает разделы с
совпадениями и прячет остальные, а раскрытые разделы не схлопываются при
возврате на вкладку.
Категории составлены по настоящим конфигам Build 41 и 42: все 144 ключа
.ini и 270 параметров песочницы раскладываются без остатка. Нумерованные
и однотипные ключи (AntiCheatProtectionType1..24, *Loot, Animal*, Firearm*)
подхватываются по префиксу, а незнакомые попадают в «Прочее» — в новых
версиях игры ключи добавляют, и терять их со страницы нельзя.
Описания параметров панель больше не выдумывает, а берёт из самого
конфига: игра пишет их комментариями на языке сервера. Полный текст — во
всплывающей подсказке, начало — под полем; поиск ищет и по описанию, так
что параметр можно найти по-русски.
Заодно исправлено сохранение файлов с виндовыми переводами строк: панель
переписывала их в LF, и правка одного параметра меняла каждую строку
файла. Проверено на реальном SandboxVars.lua: правка одного значения
меняет ровно одну строку, размер файла не меняется.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Workflow CI гоняет gofmt, vet, тесты и сборку на каждый push в main;
workflow Release по тегу v* собирает бинарники под linux/amd64 и arm64,
считает контрольные суммы и публикует релиз через API Gitea.
Оба workflow забирают код через git, а не actions/checkout: это
JS-действие, которому нужен Node внутри контейнера, а в образе golang его
нет. Заодно сборка перестала зависеть от доступности github.com, что для
self-hosted инстанса существенно.
Скрипт deploy/get.sh ставит последний релиз одной командой: определяет
архитектуру, забирает файлы релиза, сверяет sha256 (бинарник ставится с
правами root) и передаёт управление install.sh. Обновление — та же
команда.
Версия сборки попадает в бинарник через ldflags, доступна как
`pzmanager version` и видна в панели на вкладке «Настройки»: без неё
нельзя понять, какой релиз стоит на сервере.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Профиль — это отдельный сервер: свой мир, .ini, песочница, набор модов и
лимит памяти JVM. Project Zomboid различает их по -servername, поэтому
файлы профилей не пересекаются. Работает всегда один профиль: серверные
файлы, игровые порты и файл запуска JVM общие, так что переключение
разрешено только на остановленном сервере.
- config: список профилей вместо одиночных server_name/admin_password/
java_memory; старые поля переносятся в первый профиль при загрузке;
- supervisor: запускает активный профиль и выставляет его -Xmx на каждом
старте, потому что файл запуска общий;
- бэкапы: архив снимается с одного профиля (мир + его конфиги), имя
профиля попадает в имя файла, ротация считается по профилям;
- API профилей: список, создание с копированием настроек из другого
профиля, правка, удаление и переключение активного;
- панель: селектор профиля в шапке и вкладка со списком профилей.
Удаление профиля убирает его только из панели: мир и конфиги остаются на
диске, чтобы случайное нажатие не стоило сохранений.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Менеджер запускает сервер PZ как дочерний процесс и держит его stdin/stdout:
отсюда живая консоль без RCON, стриминг логов через SSE и корректная
остановка по цепочке quit -> SIGTERM -> SIGKILL для всей группы процессов.
Сам менеджер работает под systemd.
Что входит:
- управление жизненным циклом сервера, автозапуск и автоподъём после падения;
- метрики процесса из /proc и состояние хоста, список игроков онлайн;
- редакторы servertest.ini и SandboxVars.lua, сохраняющие исходное
форматирование файлов;
- моды: списки Workshop ID и Mod ID с порядком загрузки, названия из Steam;
- бэкапы мира по расписанию и вручную, с ротацией и восстановлением;
- установка и обновление сервера через SteamCMD;
- вход по логину и паролю, первичная настройка по одноразовому коду.
Веб-интерфейс без сборщика, вшит в бинарник через embed.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>