Files
2026-08-31 21:32:14 +04:00

310 lines
17 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<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>