Server Emulator for the Game Dragons Dogma Online.
The project is intended for educational purpose only.
git clone https://github.com/sebastian-heinz/ddo-server.git
https://dotnet.microsoft.com/download
Minimum version of "Visual Studio 2022" or later.
Open the DragonsDogmaOnline.sln
-file
Download IDE: https://code.visualstudio.com/download
C# Plugin: https://marketplace.visualstudio.com/items?itemName=ms-vscode.csharp
Open the Project Folder:
\Arrowgene.DragonsDogmaOnline
https://www.jetbrains.com/rider/
Minimum version of "IntelliJ Rider 2021.3" or later.
Open the DragonsDogmaOnline.sln
-file
Run the Ddon.Cli
-Project
With default configuration the server will listen on following ports:
80 - http/download
52100 - tcp/server
ensure that no other local services listen on these ports.
Launch the client with the following args:
"DDO.exe" "addr=localhost port=52100 token=00000000000000000000 DL=http://127.0.0.1:52099/win/ LVer=03.04.003.20181115.0 RVer=3040008"
Entrypoint to the application, allows to start different components via parameters
- Read / Write network packages
- Manage Connections
- Static Assets that can be loaded on startup
- Handling of Login related packets
- Handling of Game related packets
- Handling http/https requests.
- Client version request
- Account creation API
- Login / Token retrieval API
- Persistent storage
- Supports different implementations via IDatabase interface
- SQLite concrete implementation
Extension.cs -> Useful C# extension methods Util.cs -> Static Utility functions
Components related to cryptography, for network protocol, token generation or random oracle.
Reading and parsing of CSV files
Representing the packet structure of the network protocol, including serialization adn deserialization.
Classes that can be used by multiple components, usually just to hold data in a structured way
- Read pcap files (experimental)
- Read (custom) json format of packet data
- Format and annotate packets with internal packet names
- Unit test to lock in functionality
The work on this project should happen via feature-branches
Feature branches (or sometimes called topic branches) are used to develop new features for the upcoming or a distant future release. When starting development of a feature, the target release in which this feature will be incorporated may well be unknown at that point. The essence of a feature branch is that it exists as long as the feature is in development, but will eventually be merged back into develop (to definitely add the new feature to the upcoming release) or discarded (in case of a disappointing experiment).
- Create a new
feature/feature-name
orfix/bug-fix-name
branch from master - Push all your changes to that branch
- Create a Pull Request to merge that branch into
master
- Do not use Console.WriteLine etc, use the specially designed logger.
- Own the Code: extract solutions, discard libraries.
- Annotate functions with documentation comments (https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/language-specification/documentation-comments).
Object Name | Notation | Char Mask | Underscores |
---|---|---|---|
Class name | PascalCase | [A-z][0-9] | No |
Constructor name | PascalCase | [A-z][0-9] | No |
Method name | PascalCase | [A-z][0-9] | No |
Method arguments | camelCase | [A-z][0-9] | No |
Local variables | camelCase | [A-z][0-9] | No |
Constants name | PascalCase | [A-z][0-9] | No |
Field name | _camelCase | [A-z][0-9] | Yes |
Properties name | PascalCase | [A-z][0-9] | No |
Delegate name | PascalCase | [A-z] | No |
Enum type name | PascalCase | [A-z] | No |
Let me preface with that this work could not exist without the excellent work of various individuals
- 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
- Nothilvien @sebastian-heinz - Reverse Engineering & Server Code
(if you have been forgotten please reach out)
- System.Data.SQLite (https://system.data.sqlite.org/)
- KaitaiStruct.Runtime.Csharp (https://kaitai.io/)
- Arrowgene.Networking (https://github.com/sebastian-heinz/Arrowgene.Networking)
- .NET Standard (https://github.com/dotnet/standard)