SylvaniaCore # SylvaniaCore **C++-ядро игрового мира [La Légion de Sylvania](https://legendesylvania.com)**
Эмулятор сервера *World of Warcraft®* — Legion 7.3.5 [![Discord для разработчиков](https://img.shields.io/badge/Discord-Для%20разработчиков-5865F2?style=flat&logo=discord&logoColor=white)](https://discord.gg/qmQBXbuXkx) [![Лицензия: GPL v2](https://img.shields.io/badge/Лицензия-GPLv2-blue.svg)](./LICENSE) [![Звёзды](https://img.shields.io/github/stars/BlaMacfly/SylvaniaCore.svg?style=flat&logo=github)](https://github.com/BlaMacfly/SylvaniaCore/stargazers) [![Форки](https://img.shields.io/github/forks/BlaMacfly/SylvaniaCore.svg?style=flat&logo=github)](https://github.com/BlaMacfly/SylvaniaCore/network/members) [![Форк DestinyCore](https://img.shields.io/badge/форк-DestinyCore-2ea44f?logo=github)](https://github.com/slash-design/DestinyCore)
> Практическая инструкция по Docker, production-развёртыванию FelWell и > синхронизации с собственным Git-сервером: [README.ru.md](./README.ru.md). --- ## 📖 О проекте **SylvaniaCore** — ядро франкоязычного игрового мира **La Légion de Sylvania** для *World of Warcraft® Legion 7.3.5*. Это форк [DestinyCore](https://github.com/slash-design/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**. --- ## 📦 Сборка 1. Клонируйте репозиторий: ```bash git clone https://github.com/BlaMacfly/SylvaniaCore.git cd SylvaniaCore ``` 2. Настройте и соберите проект: ```bash cmake -S . -B build -DTOOLS=ON cmake --build build -j$(nproc) ``` 3. Установите базы данных согласно разделу [Установка базы данных](#-установка-базы-данных). 4. Запустите серверы: ```bash ./bin/worldserver ./bin/bnetserver ``` > ℹ️ В исходном коде намеренно сохранены внутренние имена upstream-проекта: > `DestinyCore`, названия целей CMake и пути конфигурации. Это обеспечивает > совместимость с upstream-обновлениями и существующими сценариями > развёртывания. ### Docker Compose Ядро, сервер Battle.net и MariaDB 11.4 можно собрать и запустить вместе: ```bash 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`: ```bash 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](https://github.com/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. Создание и импорт баз ```bash # Базы 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` должно быть указано: ```ini 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` игрового мира не распространяется. ### 🩺 Клиент завис на экране загрузки? Следующие два сообщения появляются при каждом подключении на **всех** серверах этого семейства и **не являются ошибками**: ```text 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](https://legendesylvania.com)**. --- ## 🤝 Участие в разработке Мы приветствуем исправления ошибок, улучшения документации и новые возможности: 1. Создайте форк репозитория. 2. Создайте отдельную ветку для изменения. 3. Откройте pull request. Discord открыт **для разработчиков и всех желающих участвовать в развитии ядра**. Там можно обсудить исправление до начала работы, задать вопросы по архитектуре или попросить проверить pull request. Это не Discord игрового мира. Присоединиться к Discord разработчиков --- ## 🐛 Сообщение об ошибке Создайте обращение в [трекере задач](https://github.com/BlaMacfly/SylvaniaCore/issues). Перед этим убедитесь, что аналогичная проблема ещё не зарегистрирована. --- ## 🙏 Благодарности SylvaniaCore не существовал бы без проектов, на основе которых он создан: - [DestinyCore](https://github.com/slash-design/DestinyCore) — upstream-ядро, форком которого является этот репозиторий; - [TrinityCore](https://github.com/TrinityCore/TrinityCore) — исходное семейство проекта; - [**ArgusCore**](https://github.com/Trion-Control-Panel/ArgusCore), проект [FlyingPhoenix](https://github.com/fIyingPhoenix), — один из важнейших ориентиров для SylvaniaCore. В нём проделана огромная работа над движком, сетевым уровнем и механиками классов версии 7.3.5. Мы регулярно используем его как источник решений при восстановлении крупных частей ядра. Спасибо за открыто опубликованные наработки; - [mod-playerbots](https://github.com/liyunfan1223/mod-playerbots) — источник решений для логики ботов-игроков. Состояние CI upstream-репозитория: [![Windows x64](https://github.com/slash-design/DestinyCore/actions/workflows/win-x64-build.yml/badge.svg)](https://github.com/slash-design/DestinyCore/actions/workflows/win-x64-build.yml) [![GCC](https://github.com/slash-design/DestinyCore/actions/workflows/gcc-build.yml/badge.svg)](https://github.com/slash-design/DestinyCore/actions/workflows/gcc-build.yml) [![Clang](https://github.com/slash-design/DestinyCore/actions/workflows/clang-build.yml/badge.svg)](https://github.com/slash-design/DestinyCore/actions/workflows/clang-build.yml) --- ## 📜 Лицензия Проект распространяется по лицензии **GPL v2.0**. См. файл [LICENSE](./LICENSE). *World of Warcraft® и Blizzard Entertainment® являются зарегистрированными товарными знаками Blizzard Entertainment, Inc. Проект не связан с Blizzard Entertainment и не одобрен этой компанией.* ---
SylvaniaCore ⭐ Если вам нравится SylvaniaCore, поставьте проекту звезду!