# 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 — собственность правообладателей. Репозиторий содержит только инфраструктуру развёртывания; используйте в соответствии с законодательством и лицензиями вашей сборки.