Lineage2 Interlude+ server emulator written in python3
Stage: Alpha
- Login Server
- Game Server
Feel free to join developing our server:
- If you have some suggestions - please open an Issue.
- If you want to implement some features - check Project page.
- Or join our Discord server
- Copy
.env.example
to.env
. - Set environment variables as you need in
.env
- Make sure you have
make, docker, docker-compose
installed. - Build docker images
make docker-build
- Start containers
docker-compose up -d
- Register game server in database
make compose-exec-login register_game_server <GAME_SERVER_HOST> <GAME_SERVER_PORT> <GAME_SERVER_ID>
.
NOTE: <GAME_SERVER_HOST> can't be0.0.0.0
-
Make sure you have
make, docker, docker-compose
installed. -
Install poetry using
make install
-
Run
poetry install
-
Start mongodb in container or using other methods.
-
Activate virtual environment
. .venv/bin/activate
-
Register game server in database
login/bin/register_game_server <GAME_SERVER_HOST> <GAME_SERVER_PORT> <GAME_SERVER_ID>
NOTE: <GAME_SERVER_HOST> can't be0.0.0.0
NOTE: Apply environment variables with
source .env
-
Start login server
make python -m login/login
-
Start game server
make python -m game/game
Project is split to 2 components:
Login Server
- L2 login service + basic HTTP APIGame Server
- L2 game service + basic HTTP API
All those services have own instances of common.application.Application
with specific modules (for example game server have TCPServerModule
, HTTPServerModule
, ScheduleModule
).
Each ApplicationModule
adds functionality to main application process.
All modules are running in one asyncio loop.
TCPServerModule
: L2 protocol requests handlerHTTPServerModule
: HTTP JSON requests handlerScheduleModule
: CRON tasks runner
Middlewares are used in L2 protocol handler for convenient way for not caring about all those complicated protocol specific encryption.
Most of the custom data types derive from ctypes (At least numeric ones.)