Files
sindoring 25ad97555f MoonWell: voice chat tickets and the state feed for the voice relay
Voice goes through a separate relay (moonwell-voice-relay, from the
MoonWell client repo), never the world socket. mangosd only vouches:
`.mwvoice` answers the player with an HMAC-signed ticket and the relay
address as an addon line (prefix MWV), and every 250 ms the world thread
sends the relay each character in the world: faction, map, instance,
position, group and guild, so no client can claim a place, group or
guild of its own. The feed is read after the map update, under the
lock that keeps async packets out. Sends are counted and logged every
30 s.

MoonWell.Voice.* in mangosd.conf (off by default); the production
compose adds the voice-relay container (UDP 3725) and the voice_secret
secret, deploy/local enables voice against a relay on the Windows host.

Checked: the changed units build in vmangos-buildenv; a ticket and a
feed datagram made by this code verify in the relay tests.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 17:26:16 +04:00
..

Локальное тестирование Vanilla 1.12.1

Используется сборка ядра и импорт русской базы из продакшен-конфигурации. Compose project vmangos-local создаёт отдельную БД, сеть и volumes логов. Пароли и клиентские данные находятся в deploy/local/. Порты доступны только на этой машине: 3724 и 8085, БД — 13306. Warden отключён для Windows и macOS. Консоль мира включена. Нужен Docker Compose 2.24.4+ (поддержка !override).

Из корня репозитория:

cd deploy/local
./prepare.sh
# Извлечение данных из установленного Windows-клиента (в терминале WSL):
./extract-data.sh "/mnt/c/Games/Stonetavern-Classic-1.12.1-v1.8"
./compose.sh build
./compose.sh up -d db
./compose.sh run --rm realm-config
./compose.sh up -d realmd mangosd
./compose.sh ps
./compose.sh logs --tail=100 realmd mangosd

prepare.sh создаёт локальные пароли и проверяет/скачивает штатный world dump. Повторный запуск сохраняет пароли. Параметры лимита игроков, патча и сборки можно изменить, скопировав .env.example в .env. Клиентские данные должны читаться UID 10001; используйте извлекатели этого ядра. Порядок импорта базы и сведения о русских переводах описаны в продакшен-инструкции.

В realmlist.wtf клиента:

set realmlist 127.0.0.1

Нужен клиент 1.12.1 build 5875, отправляющий ruRU для русских текстов. Локальная сборка принимает обычные логин и пароль аккаунта без лаунчера: override собирает отдельный образ vmangos-local:dev с REQUIRE_LAUNCHER_TICKETS=OFF. По умолчанию эта опция включена; продакшен продолжает требовать тикеты лаунчера. После изменения режима нужна пересборка ./compose.sh build и пересоздание контейнеров ./compose.sh up -d realmd mangosd. При Docker/WSL запускайте клиент на том же компьютере, где опубликованы локальные порты. Этот вариант не предназначен для подключения из LAN.

Чтобы создать тестовый аккаунт, подключитесь к консоли:

./compose.sh attach --sig-proxy=false mangosd

После загрузки мира введите команды (замените логин/пароль):

account create TESTUSER YOUR_PASSWORD
account set gmlevel TESTUSER 3

Вторая команда нужна только для тестового GM. Отсоединение без остановки контейнера: Ctrl+P, затем Ctrl+Q. Для обычной остановки:

./compose.sh stop

БД сохраняется между запусками. Для полного удаления локального мира, аккаунтов, персонажей и логов:

./compose.sh down -v

Локальный и продакшен-варианты используют порты 3724/8085, поэтому на одной машине запускайте их по очереди. Всегда используйте ./compose.sh для локального варианта: он задаёт отдельный project и объединяет конфигурации. Не запускайте этот override как самостоятельный Compose-файл.

После запуска проверить вход без лаунчера можно командой python3 test-auth.py. Она создаёт временный аккаунт, проверяет отказ при неверном пароле и полный SRP-вход с получением списка реалмов, затем удаляет временный аккаунт.

Извлечение данных клиента

extract-data.sh собирает извлекатели из текущего ядра в Docker и создаёт data/dbc, data/maps, data/vmaps, data/mmaps (а также вспомогательные Buildings и Cameras). Папка игры подключена только для чтения. Для ядра также создаётся ссылка data/5875/dbc на data/dbc. Запускайте скрипт в WSL/bash; путь Windows C:\Games\... соответствует /mnt/c/Games/.... Весь клиент в data/ копировать не нужно.

Генерация mmaps может занять несколько часов. По умолчанию используются два параллельных процесса; изменить их количество можно через EXTRACT_THREADS=4 ./extract-data.sh "/mnt/c/Games/...". Не запускайте мир до окончания извлечения. Повторное извлечение требует свежего каталога вывода: скрипт отказывается использовать существующий data/Buildings, сохраняя результаты предыдущего запуска.