43 Commits

Author SHA1 Message Date
e642a6db52 includes cleanup 2024-06-05 22:12:21 +02:00
04fdc78ea4 Merge branch 'nightly' into config/env 2024-06-05 21:57:17 +02:00
2b9651febc remove dependency on config file (use env as config) 2024-06-05 21:53:50 +02:00
8f9e9dc602 first proof of concept for env overrides 2024-06-04 23:19:06 +02:00
170be95dc5 Configuration files are automatically generated based on env variables in the Docker image 2024-06-02 21:45:51 +03:00
6d65fae7e4 Argon2ID improvements 2024-06-01 14:34:27 +03:00
8ed1e7879e Merge pull request 'Use Argon2ID as the password hashing algorithm' (#26) from WildEgo/server:master into nightly
Reviewed-on: metin2/server#26
2024-06-01 14:32:21 +03:00
65a81ec4a1 change: Ignore build files, replace mysql password with Argon2.
add: Missing .gitignore.
2024-05-31 10:49:21 +01:00
ae708d9315 Merge pull request 'nightly' (#2) from metin2/server:nightly into master
Reviewed-on: WildEgo/server#2
2024-05-30 22:43:22 +03:00
48ee253534 Restructured gamefiles, locale data loading refactoring, docker build fixes 2024-05-25 20:00:26 +03:00
27108d629a Merge pull request 'Merge changes from master' (#25) from master into nightly
Reviewed-on: metin2/server#25
2024-05-25 17:55:22 +03:00
6616009e92 Merge pull request 'Pin Dockerfile Ubuntu version.' (#24) from halil/server:master into master
Reviewed-on: metin2/server#24
2024-05-01 07:57:36 +03:00
1ada609020 Pin Dockerfile Ubuntu version. 2024-05-01 01:10:02 +03:00
21e028f186 Merge pull request 'nightly' (#1) from metin2/server:nightly into master
Reviewed-on: WildEgo/server#1
2024-04-23 13:17:19 +03:00
175816c81d Merge pull request 'Default all localized behavior to European logic' (#22) from Tr0n/server:localization/default-gf-eu into nightly
Reviewed-on: metin2/server#22
2024-04-09 21:47:22 +03:00
b15eb7f3fe fix: wrong delay used for item drop despawn. 2024-04-09 20:33:14 +02:00
3a8d9e38e8 remove duplicate variable definition 2024-04-09 18:13:38 +02:00
4074c3b96a fix out of order access of variables 2024-04-09 18:13:14 +02:00
854fef68e8 revert removal of locale initialization per country. default to English 2024-04-09 18:12:58 +02:00
cf66bb3310 revert name change removal 2024-04-09 17:25:39 +02:00
254f6f6664 remove division by 1 for party exp bonus 2024-04-09 17:24:09 +02:00
0072bc5e14 revert removal of spam db 2024-04-09 17:21:46 +02:00
62f3635b86 revert removed warning for disabled version checks 2024-04-09 17:10:53 +02:00
2c37b2009d revert local testing of string localization 2024-04-09 17:10:38 +02:00
e0701ed5bd restore accidentally removed login logic 2024-04-09 17:04:10 +02:00
21381a4e3a restore accidentally removed fish logic 2024-04-09 17:03:42 +02:00
ba44269071 remove redundant condition for skill book exp consumption 2024-04-09 16:58:02 +02:00
f5ccb17736 remove redundant pointer to lucky pouch loot table 2024-04-09 16:56:43 +02:00
bb52a57ffc remove unreachable branch 2024-04-09 16:53:47 +02:00
8360d6939f set damage penalty on foreign empire maps to constant 9% 2024-04-09 16:53:37 +02:00
1e362d8507 remove isLimitedItem 2024-04-09 16:51:51 +02:00
0a907f41d2 remove unnecessary leftover closures 2024-04-07 22:11:12 +02:00
dbcabd7fa9 reduce LC_InitLocalization logic, purge LC_Is* definitions 2024-04-07 18:10:16 +02:00
fcc2a9e4a0 Logout error messages are now being sent, closes #18 2024-04-07 18:36:10 +03:00
12b6abf373 remove IS_BOTARYABLE_ZONE 2024-04-07 14:19:29 +02:00
e1daa48366 remove all localization 2024-04-07 12:54:57 +02:00
83707434ee Fix small UTF-8 conversion mistakes, converted locale_strings, added KR locale_string file 2024-04-07 10:14:51 +03:00
042414a499 Merge pull request 'encoding' (#20) from Tr0n/server:encoding into nightly
Reviewed-on: metin2/server#20
2024-04-07 08:59:36 +03:00
68c7c4bc4f fix config comment 2024-04-06 18:04:29 +02:00
eafbee616f english locale as base 2024-04-06 17:58:03 +02:00
026cb861a8 fix missing quote mark 2024-04-06 17:57:30 +02:00
1ba21fb1f9 translate remaining SPDLOG calls 2024-04-06 17:57:14 +02:00
8fede9a1df manual translation of non-localized strings 2024-04-06 17:28:22 +02:00
1115 changed files with 23539 additions and 36923 deletions

View File

@ -10,9 +10,12 @@ Dockerfile
.gitkeep
# Compiled quests
gamefiles/locale/english/quest/object/
gamefiles/locale/english/quest/pre_qc/
gamefiles/locale/english/quest/qc
gamefiles/data/quest/object/
gamefiles/data/quest/pre_qc/
gamefiles/data/quest/qc
# Test folder
test/
test/
# Built files
build/

6
.idea/encodings.xml generated
View File

@ -1,6 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Encoding">
<file url="PROJECT" charset="EUC-KR" />
</component>
</project>

View File

@ -1,10 +1,15 @@
FROM ubuntu:latest as build
FROM ubuntu:22.04 as build
WORKDIR /app
# Set up the CMake repository
RUN apt-get update && apt-get install -y ca-certificates gpg wget
RUN wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc 2>/dev/null | gpg --dearmor - | tee /usr/share/keyrings/kitware-archive-keyring.gpg >/dev/null
RUN echo 'deb [signed-by=/usr/share/keyrings/kitware-archive-keyring.gpg] https://apt.kitware.com/ubuntu/ jammy main' | tee /etc/apt/sources.list.d/kitware.list >/dev/null
# Update the system and install various dependencies
RUN apt-get update && \
apt-get install -y git cmake ninja-build build-essential tar curl zip unzip pkg-config autoconf python3 \
libdevil-dev libncurses5-dev libbsd-dev
libdevil-dev libncurses5-dev libbsd-dev
# Arm specific
ENV VCPKG_FORCE_SYSTEM_BINARIES=1
@ -12,7 +17,7 @@ ENV VCPKG_FORCE_SYSTEM_BINARIES=1
# Install vcpkg and the required libraries
RUN git clone https://github.com/Microsoft/vcpkg.git
RUN bash ./vcpkg/bootstrap-vcpkg.sh
RUN ./vcpkg/vcpkg install boost-system cryptopp effolkronium-random libmysql libevent lzo fmt spdlog
RUN ./vcpkg/vcpkg install boost-system cryptopp effolkronium-random libmysql libevent lzo fmt spdlog argon2
COPY . .
@ -21,10 +26,10 @@ RUN mkdir build/
RUN cd build && cmake -DCMAKE_TOOLCHAIN_FILE=vcpkg/scripts/buildsystems/vcpkg.cmake ..
RUN cd build && make -j $(nproc)
FROM ubuntu:latest as app
FROM ubuntu:22.04 as app
WORKDIR /app
RUN apt-get update && apt-get install -y python2 libdevil-dev libbsd-dev && apt-get clean
RUN apt-get update && apt-get install -y gettext python2 libdevil-dev libbsd-dev && apt-get clean
# Copy the binaries from the build stage
COPY --from=build /app/build/src/db/db /bin/db
@ -34,8 +39,11 @@ COPY --from=build /app/build/src/quest/qc /bin/qc
# Copy the game files
COPY ./gamefiles/ .
# Copy the auxiliary files
COPY ./docker/ .
# Compile the quests
RUN cd /app/locale/english/quest && python2 make.py
RUN cd /app/data/quest && python2 make.py
# Symlink the configuration files
RUN ln -s "./conf/CMD" "CMD"
@ -43,3 +51,9 @@ RUN ln -s ./conf/item_names_en.txt item_names.txt
RUN ln -s ./conf/item_proto.txt item_proto.txt
RUN ln -s ./conf/mob_names_en.txt mob_names.txt
RUN ln -s ./conf/mob_proto.txt mob_proto.txt
# Set up default environment variables
ENV PUBLIC_BIND_IP 0.0.0.0
ENV INTERNAL_BIND_IP 0.0.0.0
ENTRYPOINT ["/usr/bin/bash", "docker-entrypoint.sh"]

View File

@ -35,11 +35,11 @@ Also install DevIL (1.7.8) and the BSD compatibility library:
apt-get install -y libdevil-dev libbsd-dev
```
Install `vcpkg` according to the [lastest instructions](https://vcpkg.io/en/getting-started.html).
Install `vcpkg` according to the [latest instructions](https://vcpkg.io/en/getting-started.html).
Build and install the required libraries:
```shell
vcpkg install boost-system cryptopp effolkronium-random libmysql libevent lzo fmt spdlog
vcpkg install boost-system cryptopp effolkronium-random libmysql libevent lzo fmt spdlog argon2
```
Then, it's time to build your binaries. Your commands should look along the lines of:
@ -79,8 +79,9 @@ goodies you wish. Also, a lot of time.
- Removed unused functionalities (time bombs, activation servers, other Korean stuff)
- Switched to the [effolkronium/random PRNG](https://github.com/effolkronium/random) instead of the standard C functions.
- Refactored macros to modern C++ functions.
- Network settings are manually configurable through the `PUBLIC_IP`, `PUBLIC_BIND_IP`, `INTERNAL_IP`, `INTERNAL_BIND_IP` settings in the `CONFIG` file. (Might need further work)
- Network settings are manually configurable through the `PUBLIC_IP`, `PUBLIC_BIND_IP`, `INTERNAL_IP`, `INTERNAL_BIND_IP` settings in the `game.conf` file. (Might need further work)
- Refactored logging to use [spdlog](https://github.com/gabime/spdlog) for more consistent function calls.
- Refactored login code to use Argon2ID.
## 4. Bugfixes
**WARNING: This project is based on the "kraizy" leak. That was over 10 years ago.
@ -101,7 +102,7 @@ This is a very serious security risk and one of the reasons this project is stil
- Fixed buffer overruns and integer overflows in SQL queries.
## 5. Further plans
- Migrate `conf.txt` and `CONFIG` to a modern dotenv-like format, which would enable pretty nice Docker images.
- Migrate `db.conf` and `game.conf` to a modern dotenv-like format, which would enable pretty nice Docker images.
- Add a health check to the Docker image.
- Use the [fmt](https://fmt.dev/latest/index.html) library for safe and modern string formatting.
- Handle kernel signals (SIGTERM, SIGHUP etc.) for gracefully shutting down the game server.

18
docker/conf/db.conf.tmpl Normal file
View File

@ -0,0 +1,18 @@
WELCOME_MSG = "DB Server has been started"
SQL_ACCOUNT = "${MYSQL_HOST} ${MYSQL_DB_ACCOUNT} ${MYSQL_USER} ${MYSQL_PASSWORD} ${MYSQL_PORT}"
SQL_COMMON = "${MYSQL_HOST} ${MYSQL_DB_COMMON} ${MYSQL_USER} ${MYSQL_PASSWORD} ${MYSQL_PORT}"
SQL_PLAYER = "${MYSQL_HOST} ${MYSQL_DB_PLAYER} ${MYSQL_USER} ${MYSQL_PASSWORD} ${MYSQL_PORT}"
TABLE_POSTFIX = ""
BIND_PORT = ${DB_PORT}
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 = ${TEST_SERVER}

View File

@ -0,0 +1,41 @@
HOSTNAME: ${GAME_HOSTNAME}
CHANNEL: ${GAME_CHANNEL}
PUBLIC_IP: ${PUBLIC_IP}
PUBLIC_BIND_IP: ${PUBLIC_BIND_IP}
INTERNAL_IP: ${INTERNAL_IP}
INTERNAL_BIND_IP: ${INTERNAL_BIND_IP}
PORT: ${GAME_PORT}
P2P_PORT: ${GAME_P2P_PORT}
DB_ADDR: ${DB_ADDR}
DB_PORT: ${DB_PORT}
COMMON_SQL: ${MYSQL_HOST} ${MYSQL_USER} ${MYSQL_PASSWORD} ${MYSQL_DB_COMMON} ${MYSQL_PORT}
LOG_SQL: ${MYSQL_HOST} ${MYSQL_USER} ${MYSQL_PASSWORD} ${MYSQL_DB_LOG} ${MYSQL_PORT}
PLAYER_SQL: ${MYSQL_HOST} ${MYSQL_USER} ${MYSQL_PASSWORD} ${MYSQL_DB_PLAYER} ${MYSQL_PORT}
TABLE_POSTFIX:
AUTH_SERVER: ${GAME_AUTH_SERVER}
MARK_SERVER: ${GAME_MARK_SERVER}
MAP_ALLOW: ${GAME_MAP_ALLOW}
MAX_LEVEL: ${GAME_MAX_LEVEL}
PK_PROTECT_LEVEL: 15
SPAM_BLOCK_MAX_LEVEL: 90
GOLD_DROP_LIMIT_TIME: 10
MALL_URL: ${GAME_MALL_URL}
CHECK_MULTIHACK: 0
SPEEDHACK_LIMIT_COUNT: 300
SPEEDHACK_LIMIT_BONUS: 80
ADMINPAGE_IP: 127.0.0.1
ADMINPAGE_PASSWORD: metin2adminpass
PASSES_PER_SEC: 25
SAVE_EVENT_SECOND_CYCLE: 180
PING_EVENT_SECOND_CYCLE: 180
VIEW_RANGE: 8000
TEST_SERVER: ${TEST_SERVER}

View File

@ -0,0 +1,9 @@
#!/bin/sh
# docker-entrypoint.sh
# Generate configuration files based on environment variables
envsubst <"/app/conf/db.conf.tmpl" >"/app/db.conf"
envsubst <"/app/conf/game.conf.tmpl" >"/app/game.conf"
# Run the standard container command.
exec "$@"

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More