310 lines
17 KiB
Markdown
310 lines
17 KiB
Markdown
<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
|
||
|
||
[](https://discord.gg/qmQBXbuXkx)
|
||
[](./LICENSE)
|
||
[](https://github.com/BlaMacfly/SylvaniaCore/stargazers)
|
||
[](https://github.com/BlaMacfly/SylvaniaCore/network/members)
|
||
[](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-репозитория:
|
||
[](https://github.com/slash-design/DestinyCore/actions/workflows/win-x64-build.yml)
|
||
[](https://github.com/slash-design/DestinyCore/actions/workflows/gcc-build.yml)
|
||
[](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>
|