Add a project launcher, per-user settings and Play state, explicit env import, pinned Git engine dependencies and a Windows distribution script. Validated on Windows x64: formatting, workspace Clippy, 41 tests, local realm security test and release launches outside the repository with profile preservation. Co-Authored-By: Codex <noreply@openai.com>
9.5 KiB
Проверка в игре
Кнопка Play открывает отдельное окно Benilla / MoonWell на локальном vMaNGOS. Редактор остаётся открытым. Стоп завершает только запущенный им клиент; обычное закрытие клиента также освобождает сессию. Закрытие редактора завершает принадлежащий ему клиент.
Первая настройка
-
Зарезервировать отдельный локальный аккаунт, например
EDITORPLAY. Не использовать его для обычной игры. В консоли локального vMaNGOS создать аккаунт и выдать уровень GM 3:account create EDITORPLAY <свой-пароль> account set gmlevel EDITORPLAY 3Игровой уровень берётся из
realmd.account_accessдля выбранного Realm ID (либо общей записи -1). Полеaccount.gmlevelне задаёт права игровой сессии в этом ядре. Проверка Play использует тот же приоритет, чтоWorldSocket::HandleAuthSession: запись конкретного реалма важнее общей.Консоль: в WSL из
<папка-ядра>/deploy/localвыполнить./compose.sh attach --sig-proxy=false mangosd. Выход без остановки сервера — Ctrl+P, Ctrl+Q. -
Один раз войти этим аккаунтом в клиент и создать персонажа, например
Playtester. Затем выйти из аккаунта. -
Заполнить «Настройки Play»: путь к клиенту, Realm ID, аккаунт, пароль и имя персонажа. Нажать «Сохранить настройки Play». Старый
.envимпортируется явно; см. установку. -
Убедиться, что локальная БД запущена и
EDITOR_WORLD_DBуказывает на неё. У пользователя БД нужны права чтенияmangos,realmd.account,characters.characters. -
Для автоматического применения изменений указать
EDITOR_PLAY_PREPAREнаscripts/prepare-play.ps1, задать фактическую папку ядра в WSL и порт мира. Скрипт работает с локальным Compose projectvmangos-localчерезdeploy/local/compose.sh, применяет миграции и перезапускаетmangosd. Он не собирает образы: локальный сервер должен быть подготовлен заранее.
Поддерживаются клиенты Benilla / MoonWell с автологином через WOW_USER, WOW_PASS,
WOW_CHAR и загрузкой пользовательских аддонов из BENILLA_HOME/AddOns. Оригинальный
WoW.exe этим способом не запускается. Dev-сборка клиента с .probe-identity разрешает
только объявленный там аккаунт: использовать выделенный аккаунт этой сборки либо player-сборку.
Редактор не отключает эту защиту и не меняет чужой .probe-identity.
Рабочий цикл
- Расставить NPC.
- Нажать «Поставить точку Play» и щёлкнуть по загруженной поверхности мира. Зелёное кольцо обозначает ноги персонажа, стрелка — направление камеры при выборе. Esc отменяет выбор.
- При необходимости поправить карту, координаты и направление в «Настройках Play». Точка сохраняется в проекте, но не создаёт SQL-изменений. «Сбросить точку» оставляет персонажа на его последнем серверном месте.
- Нажать Play. Проект сохраняется, аккаунт проверяется на занятость и права, а данные проекта сверяются с БД.
- Если настроен скрипт подготовки, новые изменения экспортируются обычным механизмом миграций, проект сохраняется с новой baseline, скрипт применяет контент и перезапускает сервер. Интерфейс не блокируется; редактирование на время подготовки отключено.
- После повторной проверки применённых миграций открывается клиент с автологином.
Локальный аддон один раз после входа отключает GM-режим (
.gm off, права остаются) и переносит нужного персонажа командой.go xyzo x y z orientation map. - Проверить контент вручную. Закрыть клиент или нажать «Стоп», затем продолжить редактирование.
Без скрипта подготовки нужно заранее экспортировать и применить миграции, перезапустить
mangosd. При незавершённом экспорте или неприменённых миграциях Play откажет в запуске.
Редактор читает серверные данные, но не может проверить содержимое уже загруженных grid
сервера по SQL: перезапуск при ручной подготовке обязателен.
Состояние и ошибки
- Play разрешён только для локального адреса сервера и локальной БД.
- Аккаунт должен быть офлайн; персонаж должен принадлежать ему. Чужая активная сессия не вытесняется намеренно. Локальная файловая блокировка запрещает два одновременных Play из одного профиля пользователя и освобождается ОС при завершении процесса.
- Клиентское состояние и сгенерированный аддон находятся в
state/play/профиля данных, отдельно от обычных настроек игрока. В установку WoW ничего не записывается. - Пароль передаётся дочернему клиенту в окружении. Он не входит в проект, аддон, аргументы
командной строки или сообщения редактора. Постоянные настройки — в личном
settings.json. client.logиprepare.logнаходятся вstate/play/профиля данных пользователя.- Сбой подготовки оставляет уже экспортированную миграцию и baseline в проекте. Повторный Play применяет её повторно через штатный мигратор; новую копию миграции не создаёт.
- Смерть NPC и таймеры возрождения сохраняются сервером между запусками Play. «Сохранить» и перезапуск мира не воскрешают уже погибшего NPC: нужно дождаться его возрождения. Новые размещения получают новый guid даже после удаления всех старых спавнов и экспорта, чтобы не наследовать таймер умершего существа. Старый проект без истории выделения не позволяет восстановить guid удалённых ранее NPC; новый счётчик работает с этого сохранения.
- Ожидание порта мира в стандартном скрипте ограничено 120 секундами; запуск скрипта редактором ограничен 180 секундами.
- Эта версия проверяет серверный контент R1. Сборка и подключение ещё не реализованных клиентских MPQ/DBC не добавляются автоматически.
Приёмка
Поставить тестового NPC на земле и на этаже WMO, выбрать старт рядом, нажать Play и сравнить
положение и направление с редактором. В игре проверить .gps. Повторить после перемещения
NPC. Проверить отказ при занятом аккаунте, неверном персонаже и ошибке подготовки. Боевые
проверки выполняются человеком.