Files
Lineage-2/README.md
T

239 lines
9.6 KiB
Markdown
Raw 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.
# Lineage 2 Essence — развёртывание сервера (Docker)
Окружение для **Lineage 2 Essence** с клиентом **protocol 520**, **PostgreSQL 17** и интерактивными скриптами установки/управления. Подходит как база под сборки в духе **L2J Mobius / Samurai Crow** (JAR login + game подключаете сами).
Репозиторий: [https://git.evilfox.cc/test/Lineage-2](https://git.evilfox.cc/test/Lineage-2)
## Что входит в проект
| Компонент | Описание |
|-----------|----------|
| **PostgreSQL 17** | Одна БД `l2essence`: login + game + справочники классов |
| **install.sh** | Пошаговая установка (Docker, `.env`, БД, опционально login/game) |
| **manage.sh** | Остановка, запуск, перезапуск сервисов |
| **config/** | Шаблоны `LoginServer.properties`, `Server.properties`, `ipconfig.xml`, hexid |
| **docker/initdb/** | SQL-схема и тестовые данные при первом создании тома |
| **server/login**, **server/game** | Сюда кладутся `LoginServer.jar` и `GameServer.jar` |
## Требования
- **Ubuntu** 22.04 / 24.04 (рекомендуется) или другой Linux с Docker
- **Docker Engine** + плагин **Compose v2**
- **2+ GB RAM**, свободные порты: `5432`, `2106`, `9014`, `7777`
- Сборка сервера (login + game + datapack) с поддержкой **PostgreSQL** и протокола **520**
- Клиент Lineage 2 Essence с **protocol revision 520**
## Быстрый старт
```bash
git clone https://git.evilfox.cc/test/Lineage-2.git
cd Lineage-2
chmod +x install.sh manage.sh scripts/*.sh docker/initdb/*.sh
./install.sh
```
На каждом шаге `install.sh` спрашивает **y/n**. По умолчанию поднимается только **PostgreSQL**; login/game — по желанию (шаг 7), если JAR уже лежат в `server/`.
## Подробное развёртывание
### 1. Клонирование и права
```bash
git clone https://git.evilfox.cc/test/Lineage-2.git
cd Lineage-2
chmod +x install.sh manage.sh scripts/*.sh docker/initdb/*.sh
```
### 2. Установка через мастер
```bash
./install.sh
```
| Шаг | Действие |
|-----|----------|
| 0 | Подтверждение начала |
| 1 | Проверка Ubuntu |
| 2 | Установка Docker (если нет) |
| 3 | Создание `.env` (логин/пароль БД, имя БД, порт) |
| 4 | `docker compose pull` |
| 5 | Запуск **PostgreSQL** и ожидание готовности |
| 6 | Подстановка пароля БД в `config/login` и `config/game` |
| 7 | Запуск **login** + **game** (`--profile l2`), если есть JAR |
Файл `.env` создаётся из `.env.example` и **не коммитится** в Git.
### 3. Серверные JAR и datapack
1. Скопируйте **LoginServer.jar**`libs/`) в `server/login/`.
2. Скопируйте **GameServer.jar**`libs/`, datapack) в `server/game/`.
3. В `libs/` обоих серверов должен быть драйвер **PostgreSQL**: `postgresql-42.x.jar`.
4. Убедитесь, что в сборке в конфиге указан **protocol 520** (см. `config/game/Server.properties``AllowedProtocolRevisions = 520`).
Синхронизация пароля БД в конфигах:
```bash
./scripts/sync-config-password.sh
```
### 4. HexID (связь Login ↔ Game)
Значение **hexid** должно совпадать в трёх местах:
- `server/hexid/default.txt`
- `config/game/hexid.txt`
- таблица `gameservers` в БД (сид в `docker/initdb/03_seed_essence520.sql`)
По умолчанию: `a1b2c3d4e5f6789012345678901234ef`, **RequestServerID = 1**.
После смены hex перезапустите login и game:
```bash
docker compose --profile l2 restart login game
```
### 5. Запуск Login и Game
```bash
docker compose --profile l2 up -d login game
docker compose --profile l2 ps
docker compose logs -f login
docker compose logs -f game
```
Только БД:
```bash
docker compose up -d postgres
```
### 6. Управление сервером
```bash
./manage.sh
```
Интерактивно: статус, остановка, запуск, перезапуск PostgreSQL / login / game, полный down.
Полезные команды:
```bash
docker compose logs -f postgres
docker compose --profile l2 down
docker compose down -v # удалить том БД (все данные!)
```
## Подключение клиента
| Параметр | Значение |
|----------|----------|
| Протокол | **520** |
| Login | IP сервера, порт **2106** |
| Game | IP сервера, порт **7777** |
На VPS в `config/login/ipconfig.xml` и `config/game/ipconfig.xml` замените `127.0.0.1` на **внешний IP** сервера.
В `l2.ini` / системном файле клиента укажите тот же IP и порты.
## Тестовые аккаунты
| Логин | Пароль | Примечание |
|-------|--------|------------|
| `admin` | `admin` | accessLevel 100 |
| `test` | `test` | обычный аккаунт |
Хеш пароля: **Base64(SHA1(UTF-8 пароль))** (как в L2J Mobius).
## База данных
### Автоинициализация (новый том)
При **первом** `docker compose up` postgres выполняет скрипты из `docker/initdb/`:
- `01_login_essence520.sql` — accounts, gameservers, …
- `02_game_essence520_minimal.sql` — characters, items, …
- `02b_game_classes_ref.sql` — расы, классы, стартовая экипировка
- `03_seed_essence520.sql` — аккаунты, gameserver
- `04_seed_classes_essence520.sql` — классы и стартовые скиллы
- `99_grant_app_user.sh` — права пользователю БД из `.env`
### Уже существующая БД
Если том создавался раньше, init-скрипты **не повторяются**. Примените схему вручную:
```bash
./scripts/apply-essence-schema.sh
```
Или пересоздайте том (удалит все данные):
```bash
docker compose down -v
./install.sh
```
### Создаваемые классы (protocol 520)
Базовые classId на экране создания персонажа:
`0, 10, 18, 25, 31, 38, 44, 49, 53, 123, 124, 182, 183`
(см. таблицы `ref_classes`, `ref_races`, `class_list`).
Полные шаблоны персонажей и предметы обычно берутся из **datapack (XML)** вашей сборки; SQL в репозитории — минимальный каркас.
## Структура каталогов
```
Lineage-2/
├── install.sh # Установка
├── manage.sh # Управление
├── docker-compose.yml
├── .env.example
├── config/
│ ├── login/ # LoginServer.properties, servername.xml, ipconfig.xml
│ └── game/ # Server.properties, hexid.txt, ipconfig.xml
├── server/
│ ├── login/ # LoginServer.jar
│ ├── game/ # GameServer.jar + datapack
│ └── hexid/default.txt
├── docker/initdb/ # SQL при первом старте БД
└── scripts/
├── apply-essence-schema.sh
└── sync-config-password.sh
```
## Частые проблемы
**Docker: permission denied**
Добавьте пользователя в группу `docker`, перелогиньтесь:
`sudo usermod -aG docker $USER`
**Login не пускает / неверный пароль**
Проверьте формат хеша в `accounts.password` и алгоритм в вашей сборке. При необходимости пересоздайте аккаунт через SQL или `AutoCreateAccounts = True` в login config.
**Клиент «Protocol mismatch»**
В `Server.properties` должно быть `AllowedProtocolRevisions = 520` и клиент с тем же протоколом.
**GameServer не регистрируется на Login**
Сверьте hexid, `RequestServerID`, порты 9014, что login запущен раньше game.
**Ошибки SQL с `IF(...)` в login**
Стандартный L2J MySQL-запрос; нужна **PostgreSQL-адаптированная** сборка или полный SQL из вашего дистрибутива.
**Нет LoginServer.jar / GameServer.jar в контейнере**
Контейнеры ждут JAR в `server/login` и `server/game`; без них в логе будет сообщение и `sleep infinity`.
## Обновление с Git
```bash
cd Lineage-2
git pull
./scripts/apply-essence-schema.sh # при новых SQL, если том БД старый
./scripts/sync-config-password.sh # при смене .env
docker compose --profile l2 up -d
```
## Лицензия и ответственность
Серверные JAR и клиент Lineage 2 — собственность правообладателей. Репозиторий содержит только инфраструктуру развёртывания; используйте в соответствии с законодательством и лицензиями вашей сборки.