Arakne / Araknemu

Simple Dofus server in Java
GNU Lesser General Public License v3.0
105 stars 28 forks source link
dofus dofus-retro server

Araknemu Java CI Scrutinizer Code Quality codecov

A simple and modular open source Dofus 1.29 server emulator, implementing only base features.

Getting started

These instructions will get you a copy of the project up and running on your local machine for development and testing purposes.

First, you need to get the code from the repository.

Docker

You can use the provided Dockerfile to build and run the server in a container. This image is a multi-stage build, with the first stage building the server, and the second stage running it.

Build the image:

docker build --target production -t araknemu .

Then you should create your database. The database structure can be created using:

mysql -u <user> -p <database_name> < resources/db/000-init_mysql.sql

Now you can run the server (environment variables are listed below):

docker run -p 5555:5555 -p 4444:4444 -e GAME_HOST=172.17.0.1 -e DB_HOST=172.17.0.1 -e DB_PASSWORD=araknemu -v './logs:/srv/logs' araknemu

Environment variables:

Variable Description Default value
AUTH_PORT The port used by the login server. This port should be exposed using -p option. 4444
CLIENT_VERSION The required client version. 1.29.1
PASSWORD_HASH List of available password hash algorithms, separated by a coma. The first of the list will be used for re-hash the password, so make sure to define the best algorithm at first position. Available values : argon2, plain. argon2, plain
DB_TYPE Database driver to use. Available types : mysql, sqlite. mysql
DB_HOST Database host name (only mysql). You can set a custom port by suffixing it by :[port]. If you want to use your locale database, you can set it to 172.17.0.1. 127.0.0.1
DB_USER Database username (only mysql). araknemu
DB_PASSWORD Database password (only mysql). empty
DB_NAME Database name in case of mysql, of the file path in case of sqlite. Don't forget to declare a volume if you use sqlite driver (e.g. -v araknemu.db:/srv/araknemu.db). mysql: araknemu sqlite: araknemu.db
DB_POOL_SIZE Number of opened connections. Increase this value if the message "Pool is empty" occurs too often on logs. 8
GAME_PORT The port used by the game server. This port should be exposed using -p option. 5555
GAME_HOST The public host name of the game server. This host must be accessible from internet if you want to open your server to users. 127.0.0.1
TIMEZONE Timezone used for in game clock and database times. See: https://docs.oracle.com/middleware/12211/wcs/tag-ref/MISC/TimeZones.html Europe/Paris
GAME_SERVER_ID The server id to launch. The server must be present in langs, and should be available for the target community. Data are not shared between 2 servers, so if you change the server ID, data will not be present. 1 (Jiva)
ACTIVITY_THREADS Number of threads to launch for run "activities" (e.g. moving monsters, respawn...). Increase this value only if the respawn is to slow. 1
RESPAWN_SPEED_FACTOR Divide the respawn time of monster groups defined in database. For example, if the monster group is defined to respawn after 1 minute, with a factor of 2, it will respawn after 30 seconds. 1
FIGHT_THREADS Number of threads used to execute fight actions and AI. The minimal value should be 2. A good value may be around 1 thread per 100 active fights. 4
RATE_XP The experience gain multiplier. The value should be a positive decimal number. 1.0
RATE_DROP The object drop multiplier. The value should be a positive decimal number. This value will modify the object drop chance, but not the maximum dropped items per monster nor minimal discernment requirement. 1.0
AI_SCRIPT_PATH The path where AI scripts are stored. This path must be relative to the docker image. If you want to define custom scripts, don't forget to declare a volume (e.g. -v ./scripts:/srv/scripts). If the path doesn't exists yet, it will be ignored. scripts/ai
PRELOAD Enable data preloading or not. Values 1, true, yes, on will enable preloading. Any other values will disable it. Disable preloading allows faster startup, and lower memory usage, but adds some performance penalty. It's advisable to enable it on production with long uptime, and disable it if the server is restarted regularly. true
ADMIN_COMMAND_SCRIPT_PATH Base path for admin command scripts. The following sub-directories should be used to declare commands on the respective scope : account, player, debug, server. Don't forget to declare a volume (e.g. -v ./scripts:/srv/scripts). If the path doesn't exists yet, it will be ignored. scripts/commands
JAVA_MEMORY Define the heap memory used by java (same amount is used for start and max memory). If you set to empty value, the memory will be allocated dynamically. This value is a number followed by a letter to define the unit (i.e. M for megabyte, G for gigabyte). High value will reduce the GC usage and improve performance, but GC pause time can be higher. Note: this is the heap size, not the actual allocated memory by java. The actual memory will be around 1.5 to 2 times the value of the heap size (for example, 512m will takes around 800 MB of memory). 512m
JAVA_GC Use a custom garbage collector algorithm. Available values (not exhaustive) G1GC, ZGC. G1GC seems to works well, even with low heap size (most of the pause time is less than 10ms), but non-predictable pause time may cause random lags. ZGC will minimize pause time (most are less than 1ms), but use more memory, and quickly trigger out of memory with low heap size. G1GC
JAVA_GC_LOG If set to 1, will enable GC logs into /srv/logs/gc-*.log. Don't forget to declare a volume on logs (e.g. -v ./logs:/srv/logs). none (disabled)
JAVA_OPTS Custom java options. none

Advanced configuration:

If provided environment variables are not enough, you can create a custom config.ini file, and mount it into the container. The file should be placed in the /srv/config.ini path.

Docker-compose

You can use the provided docker-compose.yml file to run the server in a container.

Local

Prerequisites

Installing

Note: Those instruction enable the setup of a development environment, not a production one

Running

Run Mysql server. Launch the built jar. To run the server, your working directory should contain the config.ini file.

java -jar target/araknemu-0.12-alpha-jar-with-dependencies.jar

About the project

Project state

The project is in pre-alpha development state, and thus, the architecture is not stable, and will change until v1.0 is released. It can only be used for testing or development purposes.

Features

To see all currently implemented features you can go to closed feature issues.

Questions & answers

Where is the database ?

This project only provides the server source code. You should create your own database in order to launch the server. You can find the database structure in the file resources/db/000-init_mysql.sql.

To create your own database, you must either convert an existing database, or extract data from dofus lang files and maps.

[!NOTE] In the future, a command may be created to partially generate the database.

Why this project ? There is a lot of other dofus emulators...

Most other servers are designed to be feature-rich, and provide an opinionated version of the Dofus experience. Instead of that, this project is designed to be modular, and provide a reliable base for developers to build their own experience.

The reliability of the server is based on automated tests (CI), continuous stability tests, and mostly following semantic versioning.

The key goals of this project are (at least):

Contributing

Please read CONTRIBUTING.md for details on our code of conduct, and the process for submitting pull requests to us.

Licence

This project is licensed under the LGPLv3 licence. See COPYING and COPYING.LESSER files for details.