wow-midnight-server

Установка сервера (RU)

Как собрать и запустить сервер TrinityCore master на ретейл-билде 12.0.7.68974 (Midnight). Нужен собственный легально приобретённый ретейл-клиент WoW.

English

1. Требования

Хост (рекомендуется Linux, напр. Debian/Ubuntu):

Современный ретейл прожорлив. Дай машине swap и OOM-guard (earlyoom) — иначе тяжёлая сборка или скачок нагрузки может подвесить VM.

2. Сборка ядра

git clone https://github.com/TrinityCore/TrinityCore.git
cd TrinityCore && mkdir build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/opt/tc -DTOOLS=1 -DWITH_WARNINGS=0
make -j$(nproc) && make install

⚠️ Не запускай тяжёлый make -j пока на той же машине работает живой worldserver — 60-секундный watchdog принудительно уронит его при нехватке CPU. Сначала сборка, потом запуск (или собирай на другой машине).

3. Извлечение игровых данных (из ТВОЕГО клиента)

Инструментами mapextractor, vmap4extractor + vmap4assembler и mmaps_generator (собраны выше) запусти извлечение внутри папки ретейл-клиента, чтобы получить dbc/, maps/, vmaps/, mmaps/, cameras/. Скопируй их в /opt/tc/data.

Для актуального ретейла извлечение идёт из хранилища CASC. Эти данные — собственность Blizzard, они остаются на твоей машине и никогда не публикуются.

4. Базы данных

Создай четыре схемы и пользователя:

CREATE DATABASE auth       DEFAULT CHARSET utf8mb4;
CREATE DATABASE characters DEFAULT CHARSET utf8mb4;
CREATE DATABASE world      DEFAULT CHARSET utf8mb4;
CREATE DATABASE hotfixes   DEFAULT CHARSET utf8mb4;
CREATE USER 'trinity'@'localhost' IDENTIFIED BY 'trinity';
GRANT ALL ON *.* TO 'trinity'@'localhost';

Импортируй базовые SQL TrinityCore для auth, characters, hotfixes и базу мира под билд 68974. База мира собирается из твоих данных — в этом репозитории её нет (см. DISCLAIMER).

5. Конфигурация

Скопируй worldserver.conf.distworldserver.conf и bnetserver.conf.distbnetserver.conf в /opt/tc/etc. Пропиши подключение к БД под пользователя trinity. Укажи DataDir = /opt/tc/data. В auth.realmlist пропиши в address IP твоего сервера.

6. Запуск

# bnetserver (авторизация battle.net) — напр. как systemd-юнит
/opt/tc/bin/bnetserver -c /opt/tc/etc/bnetserver.conf

# worldserver — первый запуск строит кэши, ~7 минут
cd /opt/tc/bin && ./worldserver -c /opt/tc/etc/worldserver.conf

Запускай worldserver в tmux/screen, чтобы сохранить консоль (нужна для reload, .account, GM-команд). Для перезагрузок рекомендуется systemd-юнит, стартующий его после MySQL.

Открытые порты: 8085 (мир), 1119 (bnet), 8081 (rest/login).

7. Применение community-фиксов

cd scripts
DB_USER=trinity DB_PASS=trinity DB_NAME=world ./apply_fixes.sh

Затем в консоли worldserver: reload quest_template (квест-фиксы применяются вживую, без рестарта). Изменения объектов / кладбищ / привязок рейдов требуют рестарта. См. FIXES.md.

8. Создание аккаунта

Retail-клиент входит через Battle.net, поэтому аккаунт обязан быть Battle.net-аккаунтом, а его имя — адресом почты. В консоли worldserver:

bnetaccount create you@example.com <пароль>
bnetaccount listgameaccounts you@example.com
account set gmlevel <id>#1 3 -1

bnetaccount create заодно создаёт привязанный игровой аккаунт с именем <id>#1; уровень GM выдаётся именно на него, а не на почту.

account create для входа не подойдёт — она делает игровой аккаунт без привязки к Battle.net. TrinityCore отказывает там любому имени с @ и отправляет к bnet-командам.

Либо запусти скрипт — он делает все три шага и показывает результат:

SOAP_USER='1#1' SOAP_PASS='...' scripts/create-account.sh -e you@example.com -p <пароль> -g 3

Он общается с работающим сервером по SOAP, поэтому в worldserver.conf нужен SOAP.Enabled = 1 (слушает на loopback — запускать на хосте сервера).

Дальше — CONNECT.md для патча и настройки клиента.