Compare commits
5 Commits
e2c561d89a
...
79a4c46145
Author | SHA1 | Date |
---|---|---|
Exynox | 79a4c46145 | |
Exynox | aa4795768f | |
Exynox | 8f48a6f442 | |
Exynox | 77b616f2dd | |
Exynox | 4df43fe375 |
|
@ -0,0 +1,23 @@
|
||||||
|
# MySQL settings
|
||||||
|
MYSQL_HOST=mysql
|
||||||
|
MYSQL_USER=root
|
||||||
|
MYSQL_PASSWORD=metin2
|
||||||
|
MYSQL_PORT=3306
|
||||||
|
MYSQL_EXTERNAL_PORT=3306
|
||||||
|
MYSQL_DB_ACCOUNT=account
|
||||||
|
MYSQL_DB_PLAYER=player
|
||||||
|
MYSQL_DB_COMMON=common
|
||||||
|
MYSQL_DB_LOG=log
|
||||||
|
|
||||||
|
# Global settings
|
||||||
|
TEST_SERVER=0
|
||||||
|
|
||||||
|
# DBCache settings
|
||||||
|
DB_ADDR=db
|
||||||
|
DB_PORT=15000
|
||||||
|
|
||||||
|
# Game settings
|
||||||
|
PUBLIC_IP=127.0.0.1
|
||||||
|
GAME_IMAGE=git.old-metin2.com/metin2/server:nightly
|
||||||
|
GAME_MAX_LEVEL=105
|
||||||
|
GAME_MALL_URL=metin2.test/mall
|
|
@ -1,2 +1,5 @@
|
||||||
|
# Working copy of .env file
|
||||||
|
.env
|
||||||
|
|
||||||
# Storage directory
|
# Storage directory
|
||||||
storage/
|
storage/
|
||||||
|
|
|
@ -0,0 +1,29 @@
|
||||||
|
# The Metin2 Deployment Files
|
||||||
|
The Old Metin2 Project aims at improving and maintaining the 2014 Metin2 game files up to modern standards. The goal is to archive the game as it was in order to preserve it for the future and enable nostalgic players to have a good time.
|
||||||
|
|
||||||
|
For-profit usage of this material is certainly illegal without the proper licensing agreements and is hereby discouraged (not legal advice). Even so, the nature of this project is HIGHLY EXPERIMENTAL - bugs are to be expected for now.
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
The deployment strategy for this project is based around Docker Compose. For now, no images are published, so building your own server image is required. Also, for now, you need to provide your own database schema.
|
||||||
|
|
||||||
|
### Building the server image
|
||||||
|
This process requires that you do the following steps on a Linux environment with Docker installed and running.
|
||||||
|
|
||||||
|
Clone the Server project repository:
|
||||||
|
```shell
|
||||||
|
git clone https://git.old-metin2.com/metin2/server.git
|
||||||
|
```
|
||||||
|
|
||||||
|
Build the image:
|
||||||
|
```shell
|
||||||
|
cd server
|
||||||
|
docker build -t metin2/server:test .
|
||||||
|
```
|
||||||
|
|
||||||
|
### Starting the server
|
||||||
|
Clone this repository and open a terminal window in its root directory. Then, simply bring up the Compose project:
|
||||||
|
```shell
|
||||||
|
docker compose up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
On the first run, you might need to connect to port 3306 with your favourite MySQL client (Navicat, DBeaver, phpMyAdmin etc.) and install a Metin2 database schema.
|
|
@ -1,18 +0,0 @@
|
||||||
CHANNEL: 1
|
|
||||||
HOSTNAME: auth
|
|
||||||
PUBLIC_IP: 127.0.0.1
|
|
||||||
PORT: 11000
|
|
||||||
P2P_PORT: 12000
|
|
||||||
DB_ADDR: db
|
|
||||||
DB_PORT: 15000
|
|
||||||
PLAYER_SQL: mysql root metin2 account
|
|
||||||
COMMON_SQL: mysql root metin2 common
|
|
||||||
LOG_SQL: mysql root metin2 log
|
|
||||||
TABLE_POSTFIX:
|
|
||||||
PASSES_PER_SEC: 25
|
|
||||||
PING_EVENT_SECOND_CYCLE: 180
|
|
||||||
ADMINPAGE_PASSWORD: metin2adminpass
|
|
||||||
ADMINPAGE_IP: 127.0.0.1
|
|
||||||
AUTH_SERVER: master
|
|
||||||
TRAFFIC_PROFILE:
|
|
||||||
TEST_SERVER: 0
|
|
|
@ -1,27 +0,0 @@
|
||||||
CHANNEL: 1
|
|
||||||
HOSTNAME: ch1_first
|
|
||||||
PUBLIC_IP: 127.0.0.1
|
|
||||||
PORT: 13000
|
|
||||||
P2P_PORT: 14000
|
|
||||||
DB_ADDR: db
|
|
||||||
DB_PORT: 15000
|
|
||||||
MAP_ALLOW: 1 4 5 6 3 23 43 112 107 67 68 72 208 302 304
|
|
||||||
PLAYER_SQL: mysql root metin2 player
|
|
||||||
COMMON_SQL: mysql root metin2 common
|
|
||||||
LOG_SQL: mysql root metin2 log
|
|
||||||
TABLE_POSTFIX:
|
|
||||||
PASSES_PER_SEC: 25
|
|
||||||
SAVE_EVENT_SECOND_CYCLE: 180
|
|
||||||
PING_EVENT_SECOND_CYCLE: 180
|
|
||||||
VIEW_RANGE: 8000
|
|
||||||
CHECK_MULTIHACK: 0
|
|
||||||
ADMINPAGE_PASSWORD: metin2adminpass
|
|
||||||
ADMINPAGE_IP: 127.0.0.1
|
|
||||||
SPEEDHACK_LIMIT_COUNT: 300
|
|
||||||
SPEEDHACK_LIMIT_BONUS: 80
|
|
||||||
PK_PROTECT_LEVEL: 15
|
|
||||||
MALL_URL: google.com
|
|
||||||
TRAFFIC_PROFILE:
|
|
||||||
TEST_SERVER: 0
|
|
||||||
MAX_LEVEL: 105
|
|
||||||
MARK_SERVER: 1
|
|
|
@ -1,26 +0,0 @@
|
||||||
CHANNEL: 1
|
|
||||||
HOSTNAME: ch1_game1
|
|
||||||
PUBLIC_IP: 127.0.0.1
|
|
||||||
PORT: 13001
|
|
||||||
P2P_PORT: 14001
|
|
||||||
DB_ADDR: db
|
|
||||||
DB_PORT: 15000
|
|
||||||
MAP_ALLOW: 21 24 25 26 108 61 63 69 70 73 216 217 303
|
|
||||||
PLAYER_SQL: mysql root metin2 player
|
|
||||||
COMMON_SQL: mysql root metin2 common
|
|
||||||
LOG_SQL: mysql root metin2 log
|
|
||||||
TABLE_POSTFIX:
|
|
||||||
PASSES_PER_SEC: 25
|
|
||||||
SAVE_EVENT_SECOND_CYCLE: 180
|
|
||||||
PING_EVENT_SECOND_CYCLE: 180
|
|
||||||
VIEW_RANGE: 8000
|
|
||||||
CHECK_MULTIHACK: 0
|
|
||||||
ADMINPAGE_PASSWORD: metin2adminpass
|
|
||||||
ADMINPAGE_IP: 127.0.0.1
|
|
||||||
SPEEDHACK_LIMIT_COUNT: 300
|
|
||||||
SPEEDHACK_LIMIT_BONUS: 80
|
|
||||||
PK_PROTECT_LEVEL: 15
|
|
||||||
MALL_URL: google.com
|
|
||||||
TRAFFIC_PROFILE:
|
|
||||||
TEST_SERVER: 0
|
|
||||||
MAX_LEVEL: 105
|
|
|
@ -1,26 +0,0 @@
|
||||||
CHANNEL: 1
|
|
||||||
HOSTNAME: ch1_game2
|
|
||||||
PUBLIC_IP: 127.0.0.1
|
|
||||||
PORT: 13002
|
|
||||||
P2P_PORT: 14002
|
|
||||||
DB_ADDR: db
|
|
||||||
DB_PORT: 15000
|
|
||||||
MAP_ALLOW: 41 44 45 46 109 62 64 65 66 71 104 301 351
|
|
||||||
PLAYER_SQL: mysql root metin2 player
|
|
||||||
COMMON_SQL: mysql root metin2 common
|
|
||||||
LOG_SQL: mysql root metin2 log
|
|
||||||
TABLE_POSTFIX:
|
|
||||||
PASSES_PER_SEC: 25
|
|
||||||
SAVE_EVENT_SECOND_CYCLE: 180
|
|
||||||
PING_EVENT_SECOND_CYCLE: 180
|
|
||||||
VIEW_RANGE: 8000
|
|
||||||
CHECK_MULTIHACK: 0
|
|
||||||
ADMINPAGE_PASSWORD: metin2adminpass
|
|
||||||
ADMINPAGE_IP: 127.0.0.1
|
|
||||||
SPEEDHACK_LIMIT_COUNT: 300
|
|
||||||
SPEEDHACK_LIMIT_BONUS: 80
|
|
||||||
PK_PROTECT_LEVEL: 15
|
|
||||||
MALL_URL: google.com
|
|
||||||
TRAFFIC_PROFILE:
|
|
||||||
TEST_SERVER: 0
|
|
||||||
MAX_LEVEL: 105
|
|
|
@ -1,19 +0,0 @@
|
||||||
WELCOME_MSG = "DB Server has been started"
|
|
||||||
|
|
||||||
SQL_ACCOUNT = "mysql account root metin2 0"
|
|
||||||
SQL_PLAYER = "mysql player root metin2 0"
|
|
||||||
SQL_COMMON = "mysql common root metin2 0"
|
|
||||||
SQL_HOTBACKUP = "mysql hotbackup root metin2 0"
|
|
||||||
|
|
||||||
TABLE_POSTFIX = ""
|
|
||||||
|
|
||||||
BIND_PORT = 15000
|
|
||||||
DB_SLEEP_MSEC = 10
|
|
||||||
CLIENT_HEART_FPS = 10
|
|
||||||
HASH_PLAYER_LIFE_SEC = 600
|
|
||||||
BACKUP_LIMIT_SEC = 3600
|
|
||||||
PLAYER_ID_START = 100
|
|
||||||
PLAYER_DELETE_LEVEL_LIMIT = 70
|
|
||||||
|
|
||||||
ITEM_ID_RANGE = 10000001 20000000
|
|
||||||
TEST_SERVER = 0
|
|
|
@ -1,26 +0,0 @@
|
||||||
CHANNEL: 99
|
|
||||||
HOSTNAME: game99
|
|
||||||
PUBLIC_IP: 127.0.0.1
|
|
||||||
PORT: 13099
|
|
||||||
P2P_PORT: 14099
|
|
||||||
DB_ADDR: db
|
|
||||||
DB_PORT: 15000
|
|
||||||
MAP_ALLOW: 113 81 100 101 103 105 110 111 114 118 119 120 121 122 123 124 125 126 127 128 181 182 183 200
|
|
||||||
PLAYER_SQL: mysql root metin2 player
|
|
||||||
COMMON_SQL: mysql root metin2 common
|
|
||||||
LOG_SQL: mysql root metin2 log
|
|
||||||
TABLE_POSTFIX:
|
|
||||||
PASSES_PER_SEC: 25
|
|
||||||
SAVE_EVENT_SECOND_CYCLE: 180
|
|
||||||
PING_EVENT_SECOND_CYCLE: 180
|
|
||||||
VIEW_RANGE: 8000
|
|
||||||
CHECK_MULTIHACK: 0
|
|
||||||
ADMINPAGE_PASSWORD: metin2adminpass
|
|
||||||
ADMINPAGE_IP: 127.0.0.1
|
|
||||||
SPEEDHACK_LIMIT_COUNT: 300
|
|
||||||
SPEEDHACK_LIMIT_BONUS: 80
|
|
||||||
PK_PROTECT_LEVEL: 15
|
|
||||||
MALL_URL: google.com
|
|
||||||
TRAFFIC_PROFILE:
|
|
||||||
TEST_SERVER: 0
|
|
||||||
MAX_LEVEL: 105
|
|
|
@ -1,34 +1,69 @@
|
||||||
version: '3.3'
|
x-environment:
|
||||||
|
&common-environment
|
||||||
|
MYSQL_HOST: ${MYSQL_HOST}
|
||||||
|
MYSQL_USER: ${MYSQL_USER}
|
||||||
|
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
|
||||||
|
MYSQL_PORT: ${MYSQL_PORT}
|
||||||
|
MYSQL_DB_ACCOUNT: ${MYSQL_DB_ACCOUNT}
|
||||||
|
MYSQL_DB_PLAYER: ${MYSQL_DB_PLAYER}
|
||||||
|
MYSQL_DB_COMMON: ${MYSQL_DB_COMMON}
|
||||||
|
MYSQL_DB_LOG: ${MYSQL_DB_LOG}
|
||||||
|
|
||||||
|
TEST_SERVER: ${TEST_SERVER}
|
||||||
|
|
||||||
|
DB_ADDR: ${DB_ADDR}
|
||||||
|
DB_PORT: ${DB_PORT}
|
||||||
|
|
||||||
|
PUBLIC_IP: ${PUBLIC_IP}
|
||||||
|
GAME_MAX_LEVEL: ${GAME_MAX_LEVEL}
|
||||||
|
GAME_MALL_URL: ${GAME_MALL_URL}
|
||||||
|
|
||||||
services:
|
services:
|
||||||
# MySQL Database
|
# MySQL Database
|
||||||
mysql:
|
mysql:
|
||||||
image: mysql:5.5
|
image: mysql:5.5
|
||||||
restart: always
|
restart: on-failure
|
||||||
environment:
|
environment:
|
||||||
# Password for root access
|
# Password for root access
|
||||||
MYSQL_ROOT_PASSWORD: 'metin2'
|
MYSQL_ROOT_PASSWORD: 'metin2'
|
||||||
ports:
|
ports:
|
||||||
- '3306:3306'
|
- '${MYSQL_EXTERNAL_PORT}:${MYSQL_PORT}'
|
||||||
expose:
|
expose:
|
||||||
- 3306
|
- ${MYSQL_PORT}
|
||||||
volumes:
|
volumes:
|
||||||
- ./storage/database/:/var/lib/mysql/
|
- ./storage/database/:/var/lib/mysql/
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD", 'mysqladmin', 'ping', '-h', 'localhost', '-u', 'root', '-p$$MYSQL_ROOT_PASSWORD' ]
|
||||||
|
interval: 10s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 5
|
||||||
|
|
||||||
# DBCache Server
|
# DBCache Server
|
||||||
db:
|
db:
|
||||||
image: metin2/server:test
|
image: ${GAME_IMAGE}
|
||||||
restart: always
|
restart: on-failure
|
||||||
|
environment: *common-environment
|
||||||
expose:
|
expose:
|
||||||
- 15000
|
- ${DB_PORT}
|
||||||
command: db
|
command: db
|
||||||
volumes:
|
volumes:
|
||||||
- ./config/db.txt:/app/conf.txt
|
|
||||||
- ./storage/log/db/:/app/log/
|
- ./storage/log/db/:/app/log/
|
||||||
|
depends_on:
|
||||||
|
mysql:
|
||||||
|
condition: service_healthy
|
||||||
|
|
||||||
# Auth server
|
# Auth server
|
||||||
auth:
|
auth:
|
||||||
image: metin2/server:test
|
image: ${GAME_IMAGE}
|
||||||
restart: always
|
restart: on-failure
|
||||||
|
environment:
|
||||||
|
<<: *common-environment
|
||||||
|
MYSQL_DB_PLAYER: ${MYSQL_DB_ACCOUNT}
|
||||||
|
GAME_HOSTNAME: auth
|
||||||
|
GAME_CHANNEL: 1
|
||||||
|
GAME_AUTH_SERVER: master
|
||||||
|
GAME_PORT: 11000
|
||||||
|
GAME_P2P_PORT: 12000
|
||||||
expose:
|
expose:
|
||||||
- 11000
|
- 11000
|
||||||
- 12000
|
- 12000
|
||||||
|
@ -36,13 +71,23 @@ services:
|
||||||
- '11000:11000'
|
- '11000:11000'
|
||||||
command: game
|
command: game
|
||||||
volumes:
|
volumes:
|
||||||
- ./config/auth.txt:/app/CONFIG
|
|
||||||
- ./storage/log/auth/:/app/log/
|
- ./storage/log/auth/:/app/log/
|
||||||
|
depends_on:
|
||||||
|
mysql:
|
||||||
|
condition: service_healthy
|
||||||
|
|
||||||
# Game server (CH1)
|
# Game server (CH1)
|
||||||
ch1_first:
|
ch1_first:
|
||||||
image: metin2/server:test
|
image: ${GAME_IMAGE}
|
||||||
restart: always
|
restart: on-failure
|
||||||
|
environment:
|
||||||
|
<<: *common-environment
|
||||||
|
GAME_HOSTNAME: ch1_first
|
||||||
|
GAME_CHANNEL: 1
|
||||||
|
GAME_MARK_SERVER: 1
|
||||||
|
GAME_PORT: 13000
|
||||||
|
GAME_P2P_PORT: 14000
|
||||||
|
GAME_MAP_ALLOW: 1 4 5 6 3 23 43 112 107 67 68 72 208 302 304
|
||||||
expose:
|
expose:
|
||||||
- 13000
|
- 13000
|
||||||
- 14000
|
- 14000
|
||||||
|
@ -50,13 +95,23 @@ services:
|
||||||
- '13000:13000'
|
- '13000:13000'
|
||||||
command: game
|
command: game
|
||||||
volumes:
|
volumes:
|
||||||
- ./config/ch1/first.txt:/app/CONFIG
|
|
||||||
- ./storage/log/ch1/first/:/app/log/
|
- ./storage/log/ch1/first/:/app/log/
|
||||||
- ./storage/mark/:/app/mark/
|
- ./storage/mark/:/app/mark/
|
||||||
|
depends_on:
|
||||||
|
mysql:
|
||||||
|
condition: service_healthy
|
||||||
|
|
||||||
ch1_game1:
|
ch1_game1:
|
||||||
image: metin2/server:test
|
image: ${GAME_IMAGE}
|
||||||
restart: always
|
restart: on-failure
|
||||||
|
environment:
|
||||||
|
<<: *common-environment
|
||||||
|
GAME_HOSTNAME: ch1_game1
|
||||||
|
GAME_CHANNEL: 1
|
||||||
|
GAME_MARK_SERVER: 0
|
||||||
|
GAME_PORT: 13001
|
||||||
|
GAME_P2P_PORT: 14001
|
||||||
|
GAME_MAP_ALLOW: 21 24 25 26 108 61 63 69 70 73 216 217 303
|
||||||
expose:
|
expose:
|
||||||
- 13001
|
- 13001
|
||||||
- 14001
|
- 14001
|
||||||
|
@ -64,12 +119,22 @@ services:
|
||||||
- '13001:13001'
|
- '13001:13001'
|
||||||
command: game
|
command: game
|
||||||
volumes:
|
volumes:
|
||||||
- ./config/ch1/game1.txt:/app/CONFIG
|
|
||||||
- ./storage/log/ch1/game1/:/app/log/
|
- ./storage/log/ch1/game1/:/app/log/
|
||||||
|
depends_on:
|
||||||
|
mysql:
|
||||||
|
condition: service_healthy
|
||||||
|
|
||||||
ch1_game2:
|
ch1_game2:
|
||||||
image: metin2/server:test
|
image: ${GAME_IMAGE}
|
||||||
restart: always
|
restart: on-failure
|
||||||
|
environment:
|
||||||
|
<<: *common-environment
|
||||||
|
GAME_HOSTNAME: ch1_game2
|
||||||
|
GAME_CHANNEL: 1
|
||||||
|
GAME_MARK_SERVER: 0
|
||||||
|
GAME_PORT: 13002
|
||||||
|
GAME_P2P_PORT: 14002
|
||||||
|
GAME_MAP_ALLOW: 41 44 45 46 109 62 64 65 66 71 104 301 351
|
||||||
expose:
|
expose:
|
||||||
- 13002
|
- 13002
|
||||||
- 14002
|
- 14002
|
||||||
|
@ -77,13 +142,23 @@ services:
|
||||||
- '13002:13002'
|
- '13002:13002'
|
||||||
command: game
|
command: game
|
||||||
volumes:
|
volumes:
|
||||||
- ./config/ch1/game2.txt:/app/CONFIG
|
|
||||||
- ./storage/log/ch1/game2/:/app/log/
|
- ./storage/log/ch1/game2/:/app/log/
|
||||||
|
depends_on:
|
||||||
|
mysql:
|
||||||
|
condition: service_healthy
|
||||||
|
|
||||||
# Game server (game99)
|
# Game server (game99)
|
||||||
game99:
|
game99:
|
||||||
image: metin2/server:test
|
image: ${GAME_IMAGE}
|
||||||
restart: always
|
restart: on-failure
|
||||||
|
environment:
|
||||||
|
<<: *common-environment
|
||||||
|
GAME_HOSTNAME: game99
|
||||||
|
GAME_CHANNEL: 99
|
||||||
|
GAME_MARK_SERVER: 0
|
||||||
|
GAME_PORT: 13099
|
||||||
|
GAME_P2P_PORT: 14099
|
||||||
|
GAME_MAP_ALLOW: 113 81 100 101 103 105 110 111 114 118 119 120 121 122 123 124 125 126 127 128 181 182 183 200
|
||||||
expose:
|
expose:
|
||||||
- 13099
|
- 13099
|
||||||
- 14099
|
- 14099
|
||||||
|
@ -91,5 +166,7 @@ services:
|
||||||
- '13099:13099'
|
- '13099:13099'
|
||||||
command: game
|
command: game
|
||||||
volumes:
|
volumes:
|
||||||
- ./config/game99.txt:/app/CONFIG
|
|
||||||
- ./storage/log/game99/:/app/log/
|
- ./storage/log/game99/:/app/log/
|
||||||
|
depends_on:
|
||||||
|
mysql:
|
||||||
|
condition: service_healthy
|
||||||
|
|
Loading…
Reference in New Issue