17 KiB
SylvaniaCore
C++-ядро игрового мира La Légion de Sylvania
Эмулятор сервера World of Warcraft® — Legion 7.3.5
Практическая инструкция по Docker, production-развёртыванию FelWell и синхронизации с собственным Git-сервером: README.ru.md.
📖 О проекте
SylvaniaCore — ядро франкоязычного игрового мира La Légion de Sylvania для World of Warcraft® Legion 7.3.5. Это форк DestinyCore, который, в свою очередь, происходит из семейства TrinityCore. Проект постоянно развивается и поддерживается для нужд игрового мира.
Репозиторий одновременно служит актуальной кодовой базой и резервной копией production-сервера.
Философия: «адаптивный blizzlike»
Это не fun-сервер и не сервер с rates x∞. Оригинальные значения Blizzard (урон, баланс и экономика) сохраняются. Основная работа направлена на исправление отклонений от blizzlike, а не на упрощение игры. Каждая обнаруженная ошибка исправляется в источнике — в данных или в ядре, — а не обходится командами игрового мастера.
✨ Дополнения SylvaniaCore
Помимо возможностей upstream-ядра, проект содержит собственные системы:
| Модуль | Описание |
|---|---|
| 🤖 PlayerBots | Управляемые боты-игроки (src/server/game/PlayerBot): групповые команды, роли танка и лекаря, управление экипировкой и автоматическое заполнение полей боя |
| ⚔️ Осада столиц | Ежедневные нападения отрядов ботов на столицы с назначенным командиром и PvP-флагом игроков (src/server/game/CapitalSiege) |
| 💰 Наёмники | Нанимаемые NPC-компаньоны: одиночный игрок может заключить с ними контракт за игровое золото (src/server/game/Mercenary) |
| 🇫🇷 Локализация frFR | Восстановление официальных французских текстов из клиента 7.3.5 — заданий, диалогов и broadcast-текстов — и перевод отсутствующего сценарного контента |
| 🐛 Исправления контента | Последовательное восстановление кампаний, подземелий и заданий по отдельным зонам: Мардум, Скитающийся остров, Вершина Смерча и другие |
🛠️ Требования
- CMake 3.31+
- Boost 1.84.0
- MySQL 8.0 или MariaDB 10.6+ — игровой мир использует MariaDB 11.4
- OpenSSL 3.x
- GCC / Clang / MSVC — рекомендуется Visual Studio 2022
Поддерживаемые платформы: Linux, Windows и macOS.
📦 Сборка
-
Клонируйте репозиторий:
git clone https://github.com/BlaMacfly/SylvaniaCore.git cd SylvaniaCore -
Настройте и соберите проект:
cmake -S . -B build -DTOOLS=ON cmake --build build -j$(nproc) -
Установите базы данных согласно разделу Установка базы данных.
-
Запустите серверы:
./bin/worldserver ./bin/bnetserver
ℹ️ В исходном коде намеренно сохранены внутренние имена upstream-проекта:
DestinyCore, названия целей CMake и пути конфигурации. Это обеспечивает совместимость с upstream-обновлениями и существующими сценариями развёртывания.
Docker Compose
Ядро, сервер Battle.net и MariaDB 11.4 можно собрать и запустить вместе:
cp .env.example .env
# Поместите DB_world_*.sql и DB_hotfixes_*.sql (или .sql.gz) в docker/db-dumps/
# Поместите dbc/, maps/, vmaps/, mmaps/, cameras/ и gt/ клиента 7.3.5 в data/
docker compose up --build -d
docker compose logs -f worldserver
Схемы auth, characters и shop импортируются автоматически при первом
запуске MariaDB. Полные дампы world и hotfixes также импортируются из
docker/db-dumps/. Перед публикацией сервера обязательно замените пароли в
.env. Объявляемый клиентам адрес задаётся переменной EXTERNAL_ADDRESS.
Production-развёртывание FelWell
Production-шаблон настраивает игровой мир FelWell по адресу
legion.moon-well.online:8085:
cp .env.production.example .env.production
# Обязательно замените оба пароля в .env.production
docker compose --env-file .env.production up --build -d
docker compose --env-file .env.production logs -f bnetserver worldserver
При запуске запись auth.realmlist автоматически синхронизируется с
REALM_NAME, REALM_ADDRESS и REALM_PORT. DNS-запись A/AAAA должна
указывать на VPS, а брандмауэр должен разрешать TCP-порты 1119, 8081 и
8085. MariaDB должна оставаться только во внутренней сети Docker и не должна
публиковаться в Интернет.
Volumes database-data и sylvania-logs сохраняют базу данных и журналы
соответственно. Изменения в docker/db-dumps/ не импортируются повторно, если
база уже была инициализирована.
💾 Установка базы данных
Репозиторий содержит только схемы auth, characters и shop. Базы
world и hotfixes слишком велики для хранения в Git; их необходимо загрузить
из релизов upstream-репозитория DestinyCore.
⚠️ Никогда не импортируйте файлы из
sql/base/dev/. Это пустые структуры таблиц без игровых данных, предназначенные для разработчиков upstream-проекта. После такого импортаworldserverможет запуститься, но клиент останется на экране загрузки из-за пустой базыworld.
1. Загрузка upstream-базы
Загрузите последний релиз базы на странице
slash-design/DestinyCore/releases.
На момент написания это DB735.02.rar размером около 84 МБ. Архив содержит два
дампа:
| Файл | База | Размер после распаковки |
|---|---|---|
DB_world_735.02.sql |
world |
около 375 МБ |
DB_hotfixes_735.02.sql |
hotfixes |
около 127 МБ |
Оба дампа самостоятельно выполняют CREATE DATABASE, а затем USE для баз
world и hotfixes. Если нужны другие имена баз, измените эти две строки в
начале соответствующего файла.
2. Создание и импорт баз
# Базы auth / characters / world / hotfixes
mysql -u root -p < sql/create/create_mysql.sql
# База shop не создаётся upstream-скриптом
mysql -u root -p -e "CREATE DATABASE shop DEFAULT CHARACTER SET utf8;"
# Схемы из репозитория
mysql -u trinity -p auth < sql/base/auth_database.sql
mysql -u trinity -p characters < sql/base/characters_database.sql
mysql -u trinity -p shop < sql/base/shop_database.sql
# Полные базы из upstream-релиза
mysql -u trinity -p < DB_world_735.02.sql
mysql -u trinity -p < DB_hotfixes_735.02.sql
3. Автоматическое применение обновлений ядром
Не импортируйте файлы из sql/updates/ вручную. В worldserver.conf должно
быть указано:
Updates.EnableDatabases = 31 # auth + characters + world + hotfixes + shop
Updates.AutoSetup = 1
При первом запуске worldserver самостоятельно применит около 330 файлов из
sql/updates/world, а также обновления для characters и hotfixes. Таблица
updates в upstream-дампах изначально пуста — это нормально: история
обновлений будет применена целиком. Процесс может занять несколько минут.
4. Исправления контента игрового мира (необязательно)
В sql/sylvania/ хранится версионируемая история исправлений игровых данных:
артефактов, кампаний, подземелий, модулей «Наёмники» и «Осада столиц». Они не
относятся к механизму автоматических обновлений и импортируются вручную в
хронологическом порядке после завершения предыдущих этапов. Production-база
world игрового мира не распространяется.
🩺 Клиент завис на экране загрузки?
Следующие два сообщения появляются при каждом подключении на всех серверах этого семейства и не являются ошибками:
Client tried to call not implemented method ResourceService.GetContentHandle
Received not handled opcode [CMSG_GET_ACCOUNT_CHARACTER_LIST ...]
ResourceService — незавершённая upstream-реализация сервиса Battle.net, а
CMSG_GET_ACCOUNT_CHARACTER_LIST, то есть межсерверный список персонажей,
намеренно объявлен как STATUS_UNHANDLED в
src/server/game/Server/Protocol/Opcodes.cpp. Если клиент не проходит экран
загрузки, проверьте:
- правильность импорта
worldиhotfixes, учитывая предупреждение оsql/base/dev/; - кеш клиента — очистите каталог
Cache; - извлечённые данные:
dbc/,maps/,vmaps/,mmaps/,cameras/иgt/должны происходить из клиента 7.3.5 build 26972, аDataDirдолжен указывать на содержащий их каталог; DBErrors.logи начальные строки журналаworldserver, где будет указана проблемная таблица.
🌍 Подключение к игровому миру
Игровой сервер открыт, а инструкции по подключению опубликованы на официальном сайте: legendesylvania.com.
🤝 Участие в разработке
Мы приветствуем исправления ошибок, улучшения документации и новые возможности:
- Создайте форк репозитория.
- Создайте отдельную ветку для изменения.
- Откройте pull request.
Discord открыт для разработчиков и всех желающих участвовать в развитии ядра. Там можно обсудить исправление до начала работы, задать вопросы по архитектуре или попросить проверить pull request. Это не Discord игрового мира.
🐛 Сообщение об ошибке
Создайте обращение в трекере задач. Перед этим убедитесь, что аналогичная проблема ещё не зарегистрирована.
🙏 Благодарности
SylvaniaCore не существовал бы без проектов, на основе которых он создан:
- DestinyCore — upstream-ядро, форком которого является этот репозиторий;
- TrinityCore — исходное семейство проекта;
- ArgusCore, проект FlyingPhoenix, — один из важнейших ориентиров для SylvaniaCore. В нём проделана огромная работа над движком, сетевым уровнем и механиками классов версии 7.3.5. Мы регулярно используем его как источник решений при восстановлении крупных частей ядра. Спасибо за открыто опубликованные наработки;
- mod-playerbots — источник решений для логики ботов-игроков.
Состояние CI upstream-репозитория:
📜 Лицензия
Проект распространяется по лицензии GPL v2.0. См. файл LICENSE.
World of Warcraft® и Blizzard Entertainment® являются зарегистрированными товарными знаками Blizzard Entertainment, Inc. Проект не связан с Blizzard Entertainment и не одобрен этой компанией.