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
|
||||
|
||||
# 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/
|
|
@ -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
|
||||
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 . .
|
||||
|
||||
|
@ -24,7 +29,7 @@ RUN cd build && make -j $(nproc)
|
|||
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"]
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
tcon IMPLEMENTOR
|
||||
mob_ld IMPLEMENTOR
|
||||
pcbang_check IMPLEMENTOR
|
||||
pcbang_update IMPLEMENTOR
|
||||
setqf IMPLEMENTOR
|
||||
delqf 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