production setup

This commit is contained in:
2026-08-31 21:32:14 +04:00
parent e1ccf30afc
commit d7701b5b98
18 changed files with 38663 additions and 0 deletions
+309
View File
@@ -0,0 +1,309 @@
<div align="center">
<img src=".github/assets/sylvaniacore-logo.png" alt="SylvaniaCore" width="360">
# SylvaniaCore
**C++-ядро игрового мира [La Légion de Sylvania](https://legendesylvania.com)**<br>
Эмулятор сервера *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)
</div>
> Практическая инструкция по 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 игрового мира.
<a href="https://discord.gg/qmQBXbuXkx"><img src="https://img.shields.io/badge/Discord-Для%20разработчиков-5865F2?style=for-the-badge&logo=discord&logoColor=white" alt="Присоединиться к Discord разработчиков"></a>
---
## 🐛 Сообщение об ошибке
Создайте обращение в [трекере задач](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 и не одобрен этой компанией.*
---
<div align="center">
<img src=".github/assets/sylvaniacore-logo.png" alt="SylvaniaCore" width="90">
⭐ Если вам нравится SylvaniaCore, поставьте проекту звезду!
</div>