production setup
This commit is contained in:
+309
@@ -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
|
||||
|
||||
[](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>
|
||||
Reference in New Issue
Block a user