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

Что входит в проект

Компонент Описание
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

Быстрый старт

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. Клонирование и права

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. Установка через мастер

./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.jarlibs/) в server/login/.
  2. Скопируйте GameServer.jarlibs/, datapack) в server/game/.
  3. В libs/ обоих серверов должен быть драйвер PostgreSQL: postgresql-42.x.jar.
  4. Убедитесь, что в сборке в конфиге указан protocol 520 (см. config/game/Server.propertiesAllowedProtocolRevisions = 520).

Синхронизация пароля БД в конфигах:

./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:

docker compose --profile l2 restart login game

5. Запуск Login и Game

docker compose --profile l2 up -d login game
docker compose --profile l2 ps
docker compose logs -f login
docker compose logs -f game

Только БД:

docker compose up -d postgres

6. Управление сервером

./manage.sh

Интерактивно: статус, остановка, запуск, перезапуск PostgreSQL / login / game, полный down.

Полезные команды:

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-скрипты не повторяются. Примените схему вручную:

./scripts/apply-essence-schema.sh

Или пересоздайте том (удалит все данные):

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

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

S
Description
No description provided
Readme 58 KiB
Languages
Shell 100%