forked from metin2/server
Compare commits
64 Commits
Author | SHA1 | Date |
---|---|---|
Exynox | 170be95dc5 | |
Exynox | 6d65fae7e4 | |
Exynox | 8ed1e7879e | |
WildEgo | 65a81ec4a1 | |
WildEgo | ae708d9315 | |
Exynox | 48ee253534 | |
Exynox | 27108d629a | |
WildEgo | 21e028f186 | |
Exynox | 175816c81d | |
Tr0n | b15eb7f3fe | |
Tr0n | 3a8d9e38e8 | |
Tr0n | 4074c3b96a | |
Tr0n | 854fef68e8 | |
Tr0n | cf66bb3310 | |
Tr0n | 254f6f6664 | |
Tr0n | 0072bc5e14 | |
Tr0n | 62f3635b86 | |
Tr0n | 2c37b2009d | |
Tr0n | e0701ed5bd | |
Tr0n | 21381a4e3a | |
Tr0n | ba44269071 | |
Tr0n | f5ccb17736 | |
Tr0n | bb52a57ffc | |
Tr0n | 8360d6939f | |
Tr0n | 1e362d8507 | |
Tr0n | 0a907f41d2 | |
Tr0n | dbcabd7fa9 | |
Exynox | fcc2a9e4a0 | |
Tr0n | 12b6abf373 | |
Tr0n | e1daa48366 | |
Exynox | 83707434ee | |
Exynox | 042414a499 | |
Tr0n | 68c7c4bc4f | |
Tr0n | eafbee616f | |
Tr0n | 026cb861a8 | |
Tr0n | 1ba21fb1f9 | |
Tr0n | 8fede9a1df | |
Tr0n | dfb3d08998 | |
Tr0n | 326c134f9e | |
Tr0n | 9b7536ee9a | |
Tr0n | 9056f6c6c6 | |
Tr0n | 8685b02fdc | |
Tr0n | 341bef9aba | |
sdgmt2 | 8a1acefeeb | |
sdgmt2 | eacc808366 | |
sdgmt2 | 4a1460f36e | |
sdgmt2 | aae9b169df | |
sdgmt2 | dd74eafc24 | |
sdgmt2 | d471d99a24 | |
sdgmt2 | 350fb0d424 | |
sdgmt2 | 869720f9e6 | |
sdgmt2 | 4fc612552a | |
sdgmt2 | 248205ae01 | |
sdgmt2 | 82317e6c4d | |
Exynox | 847ab2ef89 | |
Exynox | ebc479b7df | |
Exynox | 1ee687f269 | |
Exynox | d85ef28eac | |
Exynox | 01cc27a7df | |
Exynox | 72b495c03c | |
Exynox | 0c86f802ca | |
Exynox | 05a1406c7c | |
Exynox | 00c5634c09 | |
Exynox | 42079d56b7 |
|
@ -10,9 +10,12 @@ Dockerfile
|
||||||
.gitkeep
|
.gitkeep
|
||||||
|
|
||||||
# Compiled quests
|
# Compiled quests
|
||||||
gamefiles/locale/english/quest/object/
|
gamefiles/data/quest/object/
|
||||||
gamefiles/locale/english/quest/pre_qc/
|
gamefiles/data/quest/pre_qc/
|
||||||
gamefiles/locale/english/quest/qc
|
gamefiles/data/quest/qc
|
||||||
|
|
||||||
# Test folder
|
# Test folder
|
||||||
test/
|
test/
|
||||||
|
|
||||||
|
# Built files
|
||||||
|
build/
|
|
@ -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>
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
"cmake.configureOnOpen": true
|
||||||
|
}
|
22
Dockerfile
22
Dockerfile
|
@ -1,10 +1,15 @@
|
||||||
FROM ubuntu:22.04 as build
|
FROM ubuntu:22.04 as build
|
||||||
WORKDIR /app
|
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
|
# Update the system and install various dependencies
|
||||||
RUN apt-get update && \
|
RUN apt-get update && \
|
||||||
apt-get install -y git cmake ninja-build build-essential tar curl zip unzip pkg-config autoconf python3 \
|
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
|
# Arm specific
|
||||||
ENV VCPKG_FORCE_SYSTEM_BINARIES=1
|
ENV VCPKG_FORCE_SYSTEM_BINARIES=1
|
||||||
|
@ -12,7 +17,7 @@ ENV VCPKG_FORCE_SYSTEM_BINARIES=1
|
||||||
# Install vcpkg and the required libraries
|
# Install vcpkg and the required libraries
|
||||||
RUN git clone https://github.com/Microsoft/vcpkg.git
|
RUN git clone https://github.com/Microsoft/vcpkg.git
|
||||||
RUN bash ./vcpkg/bootstrap-vcpkg.sh
|
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 . .
|
COPY . .
|
||||||
|
|
||||||
|
@ -24,7 +29,7 @@ RUN cd build && make -j $(nproc)
|
||||||
FROM ubuntu:22.04 as app
|
FROM ubuntu:22.04 as app
|
||||||
WORKDIR /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 the binaries from the build stage
|
||||||
COPY --from=build /app/build/src/db/db /bin/db
|
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 the game files
|
||||||
COPY ./gamefiles/ .
|
COPY ./gamefiles/ .
|
||||||
|
|
||||||
|
# Copy the auxiliary files
|
||||||
|
COPY ./docker/ .
|
||||||
|
|
||||||
# Compile the quests
|
# Compile the quests
|
||||||
RUN cd /app/locale/english/quest && python2 make.py
|
RUN cd /app/data/quest && python2 make.py
|
||||||
|
|
||||||
# Symlink the configuration files
|
# Symlink the configuration files
|
||||||
RUN ln -s "./conf/CMD" "CMD"
|
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/item_proto.txt item_proto.txt
|
||||||
RUN ln -s ./conf/mob_names_en.txt mob_names.txt
|
RUN ln -s ./conf/mob_names_en.txt mob_names.txt
|
||||||
RUN ln -s ./conf/mob_proto.txt mob_proto.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"]
|
||||||
|
|
|
@ -35,11 +35,11 @@ Also install DevIL (1.7.8) and the BSD compatibility library:
|
||||||
apt-get install -y libdevil-dev libbsd-dev
|
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:
|
Build and install the required libraries:
|
||||||
```shell
|
```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:
|
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)
|
- 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.
|
- Switched to the [effolkronium/random PRNG](https://github.com/effolkronium/random) instead of the standard C functions.
|
||||||
- Refactored macros to modern 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 logging to use [spdlog](https://github.com/gabime/spdlog) for more consistent function calls.
|
||||||
|
- Refactored login code to use Argon2ID.
|
||||||
|
|
||||||
## 4. Bugfixes
|
## 4. Bugfixes
|
||||||
**WARNING: This project is based on the "kraizy" leak. That was over 10 years ago.
|
**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.
|
- Fixed buffer overruns and integer overflows in SQL queries.
|
||||||
|
|
||||||
## 5. Further plans
|
## 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.
|
- Add a health check to the Docker image.
|
||||||
- Use the [fmt](https://fmt.dev/latest/index.html) library for safe and modern string formatting.
|
- 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.
|
- Handle kernel signals (SIGTERM, SIGHUP etc.) for gracefully shutting down the game server.
|
||||||
|
|
|
@ -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}
|
|
@ -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}
|
|
@ -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 "$@"
|
|
@ -41,8 +41,6 @@ tstr IMPLEMENTOR
|
||||||
tint IMPLEMENTOR
|
tint IMPLEMENTOR
|
||||||
tcon IMPLEMENTOR
|
tcon IMPLEMENTOR
|
||||||
mob_ld IMPLEMENTOR
|
mob_ld IMPLEMENTOR
|
||||||
pcbang_check IMPLEMENTOR
|
|
||||||
pcbang_update IMPLEMENTOR
|
|
||||||
setqf IMPLEMENTOR
|
setqf IMPLEMENTOR
|
||||||
delqf IMPLEMENTOR
|
delqf IMPLEMENTOR
|
||||||
effect IMPLEMENTOR
|
effect IMPLEMENTOR
|
||||||
|
|
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
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
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
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
Loading…
Reference in New Issue