Server Emulator for the Game Dragons Dogma Online.
-
Clone:
git clone https://github.com/sebastian-heinz/Arrowgene.DragonsDogmaOnline.git -
Install .NET 10.0 SDK or later
-
Open the project in your IDE of choice:
-
Visual Studio — Open
DragonsDogmaOnline.sln(minimum Visual Studio 2022) -
VS Code — Install the C# plugin, then open the project folder
-
IntelliJ Rider — Open
DragonsDogmaOnline.sln(minimum Rider 2021.3)
-
-
Run the
Ddon.Cliproject with argumentsserver start
-
Clone:
git clone https://github.com/sebastian-heinz/Arrowgene.DragonsDogmaOnline.git -
Install .NET 10.0 SDK or later
-
Run
publish.cmd(Windows) orpublish.sh(Linux/macOS) to build -
Launch with
StartServer.cmdfrom the publish output directory -
See the FAQ for common questions
|
Note
|
When updating from a previous build, ensure db.sqlite is in publish/win-x64-#.#.#.#/Server/Files/Database and run MigrateDatabase.cmd if needed.
|
The server consists of four components, all started automatically with the default configuration:
Web Server |
HTTP/download on port |
Login Server |
TCP on port |
Game Server |
TCP on port |
Database |
SQLite (file or in-memory) or PostgreSQL |
-
SQLite via System.Data.SQLite — file-based or in-memory with auto-backup on start/close. Best for development.
-
PostgreSQL via Npgsql — recommended for production and parallel write operations.
Sample configurations, schemas, and containerization setups are provided for both.
A Dockerfile builds & publishes the server from source. Docker Compose files:
docker-compose up --build # force rebuild
docker-compose down -v # clean up with volumes
RUNTIME=linux-arm64 docker-compose build # build for arm64Launch the client with:
"DDO.exe" "addr=localhost port=52100 token=00000000000000000000 DL=http://127.0.0.1:52099/win/ LVer=03.04.003.20181115.0 RVer=3040008"Configuration properties defined in ServerSetting.cs. These control server identity, networking, and diagnostic logging.
| Purpose | Description | Use Case / Example |
|---|---|---|
|
Unique server identifier (int) |
Distinguishes server instances. Defaults to |
|
Human-readable server name |
Displayed in server lists or logs. For example |
|
IP address the server binds to |
Defaults to |
|
TCP port the server listens on |
Defaults to |
|
Verbosity of log output (int) |
|
|
Log packets with no registered handler |
Defaults to |
|
Log headers of sent packets |
Defaults to |
|
Log full payload of sent packets |
Defaults to |
|
Log structured breakdown of sent packets |
Defaults to |
|
Log headers of received packets |
Defaults to |
|
Log full payload of received packets |
Defaults to |
|
Log structured breakdown of received packets |
Defaults to |
|
Max queued items per consumer lane |
Defaults to |
|
Low-level TCP socket configuration (Link to Configuration) |
Wraps |
| Setting | Value | Note |
|---|---|---|
|
|
Must remain at 1 as the DDON server is single-threaded and not threadsafe |
|
|
Maximum bytes (~8 MB) that can be buffered for sending before back-pressure is applied |
|
|
Maximum number of events that can be queued per lane before networking stalls |
See the wiki.
Work via feature branches:
-
Create
feature/feature-nameorfix/bug-fix-namefrom master -
Push changes to that branch
-
Create a Pull Request into
master
-
Use the project logger — not
Console.WriteLine -
Own the code: extract solutions, discard libraries
-
Annotate with documentation comments
| Object | Notation | Char Mask | Underscores |
|---|---|---|---|
Class |
PascalCase |
[A-z][0-9] |
No |
Constructor |
PascalCase |
[A-z][0-9] |
No |
Method |
PascalCase |
[A-z][0-9] |
No |
Method arguments |
camelCase |
[A-z][0-9] |
No |
Local variables |
camelCase |
[A-z][0-9] |
No |
Constants |
PascalCase |
[A-z][0-9] |
No |
Fields |
_camelCase |
[A-z][0-9] |
Yes |
Properties |
PascalCase |
[A-z][0-9] |
No |
Delegates |
PascalCase |
[A-z] |
No |
Enum types |
PascalCase |
[A-z] |
No |
-
Nothilvien @sebastian-heinz — Reverse Engineering & Server Code
-
Ando — Reverse Engineering & Tooling (Session Splitter, Camellia Key Cracker)
-
David — Reverse Engineering (unpacking PC Executable, defeating Anti Debug and CRC checks)
-
The White Dragon Temple
-
Arrowgene.Networking — TCP networking
-
Arrowgene.Buffers — Binary buffer handling
-
Arrowgene.Logging — Logging framework
-
Arrowgene.WebServer — Embedded web server
-
System.Data.SQLite — SQLite database provider
-
Microsoft.Data.Sqlite — SQLite (Microsoft)
-
Npgsql — PostgreSQL database provider
-
MySqlConnector — MySQL database provider
-
Microsoft.CodeAnalysis.CSharp.Scripting — C# scripting support
-
SharpZipLib — Compression library
-
YamlDotNet — YAML parsing