Git Product home page Git Product logo

arrowgene.dragonsdogmaonline's Introduction

Dragons Dogma Online - Server

badge

Server Emulator for the Game Dragons Dogma Online.



Disclaimer

The project is intended for educational purpose only.

Developer Setup

  1. Clone the repository

  2. Install .NET 6.0 SDK or later https://dotnet.microsoft.com/download

  3. Use your IDE of choice

    1. Visual Studio

      1. Open the DragonsDogmaOnline.sln-file

      2. Note: Minimum version of "Visual Studio 2022" or later.

    2. VS Code

      1. Download IDE: https://code.visualstudio.com/download

      2. C# Plugin: https://marketplace.visualstudio.com/items?itemName=ms-vscode.csharp

      3. Open the Project Folder: \Arrowgene.DragonsDogmaOnline

    3. IntelliJ Rider

      1. https://www.jetbrains.com/rider/

      2. Note: Minimum version of "IntelliJ Rider 2021.3" or later.

      3. Open the DragonsDogmaOnline.sln-file

  4. Debug the Project

    1. Run the Ddon.Cli-Project with arguments server start

Deployment

The application (server) requires the (ASP).NET runtime 6 to function. Alternatively the SDK also works and is required when building from source.

On a high level, a total of four components are required to successfully connect a client:

  1. Web server

  2. Login server

  3. Game server

  4. Database

All of these components are provided & automatically started up in the default developer setup outlined above.

As the developer setup relies on an embedded SQLite database, this might not suite all production needs (e.g. the embedded SQLite setup currently lacks ARM binaries). Thus, two more relational databases are supported:

Container setup

It is also possible to run a containerized setup. A Dockerfile is provided which encapsulates everything required to build & publish the server from source. Three separate docker-compose files are provided depending on the desired database. None of these actually reference any image and instead rely on ad-hoc source code builds as the image is currently not publicly available.

  1. SQLite-enabled docker-compose

    1. docker-compose up

  2. MariaDB-enabled docker-compose

    1. docker-compose -f docker-compose.mariadb.yml up

  3. PostgreSQL-enabled docker-compose

    1. docker-compose -f docker-compose.psql.yml up

Useful run commands

  • Force rebuild docker-compose up --build

  • Clean up & delete persistent volumes (data) as well docker-compose down -v

  • Only build the image docker-compose build

  • Build for other runtimes, e.g. arm64 RUNTIME=linux-arm64 docker-compose build

  • All-in-one clean & rebuild docker-compose down -v && docker-compose up --build

  • All-in-one clean & rebuild & arm64 RUNTIME=linux-arm64 docker-compose down -v && docker-compose up --build

Server

With default configuration the server will listen on following ports:

52099 - http/download
52000 - tcp/gameserver
52100 - tcp/loginserver

ensure that no other local services listen on these ports.

Client

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"

Progress

Login Server

  • ✓ Account

  • ✓ Character Creation

Game Server

Party Management (Party List)

  • ❏ Party Members

    • ✓ View Arisen Profile

    • ❏ Send Tell

    • ❏ Send Friend Request

    • ❏ View Status and Equipment

    • ✓ Promote to Party Leader

    • ✓ Kick from Party

    • ❏ Invite to Group Chat

    • ✓ Disband Party

    • ❏ Invite to Entryboard

    • ❏ Follow with Autorun

    • ❏ Cancel Party Invite

    • ❏ Decline Party Invite

    • ❏ View Party List

    • ✓ Leave

    • ❏ Invite Directly to Clan

  • ❏ Main Pawns

    • ❏ View Pawn Profile

    • ✓ Invite to Party

    • ✓ Kick from Party

    • ❏ View Status and Equipment

  • ❏ Support Pawns

  • ❏ Party Search

    • ❏ Search

    • ❏ Simple Request

  • ❏ Player Search

    • ❏ View Arisen Profile

    • ✓ Invite to Party

    • ❏ Send Tell

    • ❏ Send Friend Request

    • ❏ Invite to Group Chat

    • ❏ Invite to Entryboard

    • ✓ Search

Guidelines

Git

Workflow

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).

  1. Create a new feature/feature-name or fix/bug-fix-name branch from master

  2. Push all your changes to that branch

  3. Create a Pull Request to merge that branch into master

Best Practise

C# Coding Standards and Naming Conventions

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

Attribution

Contributors / Making It Happening

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](https://github.com/sebastian-heinz) - Reverse Engineering & Server Code

(if you have been forgotten please reach out)

3rd Parties and Libraries

arrowgene.dragonsdogmaonline's People

Contributors

aakeyxbm avatar abiel-machioni avatar alborrajo avatar alvaronovaes-br avatar andoryuuta avatar astral3 avatar conner-schaffer avatar malckyor avatar mjsalerno avatar mlgxsunbro avatar pacampbell avatar sacredwhitearrow avatar sapphiratelaemara avatar sebastian-heinz avatar sehkah avatar vecchioserpente avatar zappieroth avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

arrowgene.dragonsdogmaonline's Issues

Item duplication through dragging

Describe the bug
Item A replaces item B and inherits the stack number. Duplicating item A.

To Reproduce
Steps to reproduce the behavior:
Take item A (quantity 10), drag it over item B (quantity 7), place it, item B is now gone, you now have two stacks of item A (10 and 7). Item A replaces item B and inherits the stack number.

Screenshots
image

I would like to attach a crest to a weapon in the craft room. If it's difficult, could you please give me an attribute crest (such as ice freezing)? Freeze quickly with Ice Freezing Crest X4 60. Similarly, Golden Crest x4 and Petrification Crest x4 are also interesting. If the weak point attributes match, the damage will also increase, so please do so. After that, it would be even better if the bracelet of fast running is reflected.

Please describe the idea.
A clear and concise description of the features functionality is. Ex. I'd like to have a command that [...]

Describe the solution you'd like
A clear and concise description of what you want to happen.

Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.

Additional context
Add any other context or screenshots about the feature request here.

Using pawn interface while they are summoned always results in a DC

Describe the bug
Attempting to view a pawn's profile after summoning a pawn disconnects the client

To Reproduce
Steps to reproduce the behavior:

  1. Summon a pawn
  2. Attempt to view its profile

Expected behavior
The pawn profile should show up the same as if the pawn wasn't summoned

Equipping an item while the equipment item bag is full disconnects you

Describe the bug
Equipping an item while the equipment item bag is full disconnects you

To Reproduce
Steps to reproduce the behavior:

  1. Make sure the equipment item bag is full
  2. Equip an item on a slot that already has an item
  3. An exception will occur and you'll be disconnected from the game

Expected behavior
The items should swap positions, the equipped item would return to the item bag and the item being equipped would end up in the item slot.

You can't equip the same skill in both main palette and sub palette

Describe the bug
What the title says

To Reproduce
Steps to reproduce the behavior:

  1. Equip skill on one palette
  2. Equip the same skill on the other palette
  3. See how the slot where you equipped the skill in the first palette is now empty

Expected behavior
You should be allowed to have the same skill in both palettes

Additional context
When equipping an skill, it's searched in the equipped skills and removed from any slot it's found. This search should be restricted to the current palette to fix this issue.

consistent ServerId

  • ServerId is currently defined in Arrowgene.Ddon.config.json and GameServerList.csv
  • Have consistent system to retrieve ServerId for structures / packets, to manage multiple server IP entries
  • some packet structures have hardcoded serverId, ensure that all packets are set to correct serverId

Crafting Bug (discount not working)

Describe the bug
Discounts not applying and resulting in negative gold counts.

To Reproduce
Steps to reproduce the behavior:

  1. Check for an item Slightly above current gold count so you cant craft it with a single pawn
  2. Select 2 pawns to get the discounted price
  3. When crafting it substracts the full price without discount and puts you into negative Gold

Expected behavior
Application of the discount so you don't get into the negatives.

Screenshots
image
image

Additional context
Video for visuals just in case: https://youtu.be/BBBbiEuTdxQ

Login after tutorial fails

To Reproduce
after making a new character, you get sent to the tutorial
then you exit back to main menu (not char select, straight up main menu), try to log back in to the character select screen, and then you get a error

Not all cutscenes are viawable when they where in previous build.

Describe the bug
They where viewable in previous versions, No doubt a side effect of the latest changes in the server code.

To Reproduce
Steps to reproduce the behavior:

  1. Go to 'Cutscene Globe thingy'
  2. Click on 'Latest accesible cutscene log'
  3. It will tell you 'You cannot view this yet' (Cus you haven't completed the quest yet.)
  4. Sad noices for being unable to view the final few cutscenes.

Expected behavior
As per previous builds you should be able to view all cutscenes.


It is not a bug persee but figured I would report it nonetheless.

Crash when moving to Arisen Room

Describe the bug
Since the patch that allows to level up Pawns the game will crash with no error straight to desktop.
(The same way the game crashes when trying to move to Bitterblack Cove)

To Reproduce
Steps to reproduce the behavior:

  1. Go to 'Arisen Room'
  2. Crash
  3. Profit???

Expected behavior
Not crashing and taking a nice cozy bath and looking at Mokog and Mikasa Plushy.

Some dungeons innacesible since PR #237

Describe the bug
Some dungeons now show "Locked by area master" where they didn't before

To Reproduce
Steps to reproduce the behavior:

  1. Go to Forsaken Well
  2. Try to enter
  3. Se "Locked by area master" message

Expected behavior
The area should be accessible.

Have database versioning

Have the database file or database to contain a version
For the first implementation, only delete the database if the version does not match

Grabbing a barrel disconnects other party members

To Reproduce
Steps to reproduce the behavior:

  1. Join a party with other players
  2. Grab a barrel
  3. Wait
  4. See other players time out from the server

Expected behavior
Not disconnect other party members

Additional context
It's an unhandled packet

Opening another player's Arisen Profile can crash the game

To Reproduce
Steps to reproduce the behavior:

  1. Approach a player
  2. Interact with them and open their Arisen Profile
  3. If it doesn't crash, close it, and try again
  4. The game will crash sooner or later

Expected behavior
The Arisen Profile window opens with correct player data

Additional context
When the window opens and it doesn't crash, it shows garbage data, this behaviour likely implies that the game is accessing unallocated data.

logger config should be separated from login/gamserver

Describe the bug
Right now only the first configuration for logging (ex Log Packet Payload) is applied, this is always LoginServers config.
The reason for this is that a config is tied to a type, and once the ServerLogger type hase been tied to login server config, it will not be updated.

Alterantive is to have GameServerLogger and LoginServerLogger to have separate configs.

Gender locked equipment stays equipped after reincarnation

Describe the bug
After changing a character or pawns gender in the beauty salon, the gender-specific equipment stays on.

To Reproduce
Steps to reproduce the behavior:

  1. Go to Beauty Salon
  2. Select Reincarnation for either a character or a pawn
  3. Change gender
  4. See how the gender locked equipment is still equipped even though the character should no longer be able to wear it (not like I agree with this decision, I think he looks fabulous)

Expected behavior
The gender locked equipment should be unequipped after reincarnation

Screenshots
imagen

Gathered Materials end up in the Consumables tab

Describe the bug
Rather than going into the Materials tab as they should

To Reproduce
Steps to reproduce the behavior:

  1. Go to any Gathering Spot with materials
  2. Gather materials
  3. Open Item Bag
  4. See the materials in the Consumables tab

Expected behavior
The materials should end up in the Materials tab

Additional context
Most likely we're going to have to add a list of consumables or materials and decide which StorageType to send the items to when gathered based on its item id

Dress Equipment (transmog/fashion) is no longer available since PR #237

Describe the bug
Since PR #237 the option is not available

To Reproduce
Steps to reproduce the behavior:

  1. Go to the equipment window
  2. The Dress Equipment option is no longer there

Expected behavior
There should be the Dress Equipment option

Additional context
The current quest state is from before the quest that unlocked that feature.

Reset revival power recharge time at 12:00AM JST

Please describe the idea.
To make it more accurate to the original server, the revival power reset time should be 12:00AM JST, rather than 24 hours since the last recharge as it is right now.

It's possible to make an account and use it with the user and password fields empty

Describe the bug
Empty strings are valid usernames/passwords when they shouldn't be.

To Reproduce
Steps to reproduce the behavior:

  1. Send a request where the username and/or password fields are empty strings
  2. Send a login request with empty strings as username and password
  3. The server will happily comply

Expected behavior
Empty strings should be rejected both on registering and of course also on login

Item Duping due to crafting.

Describe the bug
Crafting can cause duping stacks of 65k when done "wrong"

To Reproduce
Steps to reproduce the behavior:

  1. Take any item you wanna craft.
  2. Buy the materials for it (TO THE STORAGE BOX)
  3. Crafting using them will say "checking storage"
  4. After crafting you have a 99 stack (65k) in ur bag you cant discard
    Expected behavior
    Stuff being properly taken from the storage, no pulling to inventory of duped stacks.

Screenshots
Easier to have as video, but also clear to understand without it.
https://youtu.be/s0Bsbr9fj_8

Drops/Gathering nodes sometimes grant exceptionally high quantites.

Describe the bug
When picking up a drop or gathering from a node, very rarely it will glitch and give you a ridiculously high quantity

To Reproduce
Unfortunately, after a couple of hours of trying to make it happen deliberately, it seems very unpredictable.

Expected behavior
When collecting the items they should be what they are defined as by the tools, (in this case, usually 1-3ish on average), never the 10s of thousands.

Screenshots
image

image

Additional context
Unreliable, making debugging exceptionally tedious.

Players invited to a party receive experience before accepting the invite

Describe the bug
A player can receive experience before accepting the party invite.

To Reproduce
Steps to reproduce the behavior:

  1. Player 1 invites Player 2
  2. Player 1 kills an enemy
  3. Player 2 receives exp, even if they're not in the party

Expected behavior
Player 2 shouldn't receive experience from enemies killed by other party members until the invite is accepted.
Similarly, Player 1's party members shouldn't receive experience from enemies killed by Player 2 until Player 2 accepts the invite.

Revival power state isn't updated for other players

Describe the bug
The amount of revival powers doesn't get updated for other players

To Reproduce
Steps to reproduce the behavior:

  1. Join a party
  2. Wait for the other player to recharge revival points/spend a revival point
  3. Look at the amount of revival points the other player has. It will be the same as before

Expected behavior
The amount of revival points should be in sync

Additional context
There's a packet ID in the PS4 build, S2C_UPDATE_REVIVE_POINT_NOTICE, that probably has an equivalent in the PC build, but is yet to be identified. It'll most likely have to be sent to the party members (or maybe all players in the server?) after spending/recharging revival power.

Discarding multiple items gets the UI window stuck

To Reproduce
Steps to reproduce the behavior:

  1. Open the item bag
  2. Select an item
  3. Discard
  4. Discard more than one item
  5. The window will not close, the items wont be discarded, and the client won't let you do anything until you force close it.

Expected behavior
A clear and concise description of what you expected to happen.

Additional context
Probably related to the update NTC update type field?

Non host party members can't use the lantern

While playing in a party, the host is able to use the lantern normally, but the other players aren't able to. The chat logs 'x28 used' when using a Lantern Kindling but the lantern doesn't turn on.

In the ItemUseBagItemHandler, an NTC (possibly S2C_START_LANTERN_NOTICE) is sent back to the requesting player, but not to the other players. It may be possible that either that, or S2C_START_LANTERN_OTHER_NOTICE, has to be sent to the host or to all party members for it to work.

Party ID pool runs out of IDs over time

Describe the bug
There may be some unhandled case in which a party disbands without the server knowing. The ID pool runs out and no more players can join the game anymore.

To Reproduce
Run the server and have players join and leave over time. It took about 3 months for this issue to happen.

Expected behavior
IDs should return to the pool in all cases the party no longer exists.

revisit what a pawn is made of

Please describe the idea.
Currently we use the Character class to provide look and other shared data for the pawn.
This might not be optimal since it also includes attributes that a pawn does not need.
It is also a bit confusing as pawns do not have characterIds and might be wrongly used in the context for sending pawn packets where it asks for characterId

Describe the solution you'd like

  • remove character from pawn
  • add what makes a pawn directly to the Pawn class
  • create separate database tables to serialize/deserialize a pawn from db

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.