An open source implementation of the dark souls 3 game server.

Related tags

Game ds3os
Overview

Dark Souls 3 - Open Server

What is this project?

An open source implementation of the dark souls 3 game server.

Idealistically made for the purpose of allow better alternatives to playing mods than getting your account banned and using the retail ban server. As well as opening up opportunities to improve player safety and choice, by allowing them to segregate themselves off from the pool of cheaters on retail, without loosing network functionality.

‼️ This project is still a work in progress, no guarantees are given over its stability (that said it works quite well now!).

Build Status

Can I use it with a pirated game?

No, the server authenticates steam tickets. Please do not ask about piracy, steam emulators or the like, we have no interest in supporting them.

FROM SOFTWARE deserves your support too for the excellent work they do, please buy their games if you can.

Where can I download it?

Downloads are available on the github releases page - https://github.com/TLeonardUK/ds3os/releases

How do I use it?

Once built you should have a folder called Bin, there are 2 subfolders of relevance. Loader and Server.

First run the Server.exe in Server, this will start the actual custom server running on your computer.

The first time the server runs it will emit the file Saved\config.json which contains various matchmaking parameters that you can adjust (and apply by restarting the server) to customise the server.

User can join the server by opening the Loader.exe program in the Laoder folder and finding the correct server in the list and clicking the launch button. If the server has been configured to not advertise on the master server (or if running on a LAN without an internet connection), then the server operator can distribute the Saved\server.ds3osconfig file that the server emits, which can be imported into the loader and used to directly connect to the server.

Servers can also be password protected if required by setting as password in Saved\config.json, a password will need to be entered when attempting to launch the game with a protected server.

What currently works?

Most of the games core functionality works now, with some degree of variance to the retail game. We're currently looking to closer match retail server behaviour and make some general improvements to the running of unoffical servers.

  • Login, key exchange and network transport
  • Announcement messages
  • Profile management
  • Blood messages
  • Bloodstains
  • Ghosts
  • Summoning
  • Invasions
  • Visitors (Auto-Summoning via covenant)
  • Matchmaking (eg. Correctly matching summoning/invasions/visits with player level)
  • Roster of knights
  • Archdragon peak bell ringing
  • Undead match
  • Telemetry and misc server calls (the few that are of use to us)
  • Steam ticket authentication.
  • Master server support for loader (show available servers).

Future roadmap:

  • Regulation file distribution.
  • Anticheat (potentially we could do some more harsh checks than FROM does).
  • WebUI for server showing gameplay statistics / allowing admin control.

Will this ban my account on the retail server?

So far we've had several accounts using unoffical servers, for quite a while, and have not had any account penalized on the retail server.

So it seems safe enough. The only way you are going to get banned is if you do things that would normally get you banned then go back to the retail server - cheating and the like.

How do I build it?

Currently the project uses visual studio 2019 and C++17 for compilation, and as such is currently limited to windows. At some point in future the codebase will likely be moved over to something platform agnostic like cmake.

Ensure that you have vcpkg (https://vcpkg.io) installed and integrated into visual studio as well, as it is used for managing a few of the dependencies, by doing the following:

  1. Clone the vcpkg repo: git clone https://github.com/Microsoft/vcpkg.git or download the repository as .zip file
  2. Run Windows PowerShell as Administrator and cd into the directory, example: cd C:\dev\vcpkg
  3. Enter command: .\bootstrap-vcpkg.bat and wait for it to process
  4. Enter command: .\vcpkg integrate install and wait for it to process

Building the project should now require opening the Source/DS3OpenServer.sln and building it. To uninstall vcpkg use the .\vcpkg integrate remove command.

Whats in the repository?

/
├── Config/               Contains any useful configuration material, server config files and alike.
├── Protobuf/             Contains the protobuf definitions used by the server's network traffic. Compiling them is done via the bat file in Tools/
├── Resources/            General resources used for building and packaging - icons/readmes/etc.
├── Source/               All source code for the project.
│   ├── Loader/           Simple winforms app that loads DS3 such that it will connect to a custom server.
│   ├── Server/           Source code for the main server.
│   └── ThirdParty/       Source code for any third-party libraries used. Preference is storing source here over using vcpkg modules where practical.
├── Tools/                Various cheat engine tables, bat files and alike used for analysis.

How can I help?

Check our the issues page, or send me a message for suggestions on what can be done.

Right now there are a few server calls we either have stubbed out or returning dummy information, implementing them properly, or finding out the format of the data they need to return would be worth while.

There are also a lot of protobuf fields that are still unknown and use constant values when sent from the server, determining what they represent would be a good improvement.

Credit

A lot of the information needed to produce this implementation has been figured out by the community. Especially the members of the ?ServerName? souls modding discord.

The following 3 repositories have provided a lot of information used in this implementation:

https://github.com/garyttierney/ds3-open-re

https://github.com/Jellybaby34/DkS3-Server-Emulator-Rust-Edition

https://github.com/AmirBohd/ModEngine2

Graphics and icons provided by:

Campfire icon made by ultimatearm from www.flaticon.com

Various UI icons made by Mark James from http://www.famfamfam.com/lab/icons/silk/

Comments
  • Support building under Unix with CMake

    Support building under Unix with CMake

    Still WIP. Things that need done:

    • [ ] The Visual Studio build is currently broken
      • [ ] Generated sources are no longer checked in, VS will need to generate them as part of the build process
      • [ ] Dependencies are coming from vcpkg, and differ from those that have been checked into the repo
    • [ ] There's a bunch of duplicate code around hostname resolution, that should be moved into Platform.
    • [ ] Inclusion of platform specific headers is overzealous in some places.
    • [ ] Use CPack to generate ready to go tarballs
    • [ ] Support linking against system libraries, instead of relying on vcpkg
    • [ ] Some cruft from cmake-converter is still hanging around

    Where we're at right now:

    • [x] Server runs on Linux, accepts connections
    • [ ] (Untested) Server handles game traffic correctly
    opened by garyttierney 28
  • Able to join server but unable to join session

    Able to join server but unable to join session

    So we did port forwarding for my own server and both me and my friend were able to connect to the server and join the game however when we put down the White Sign soapstone it wont appear. However we discovered that if the one of us puts down our White Sign soapstone in the exact spot that the other put their stone down and then get rid of it the others stone will finally appear but when we try to summon each other it will pretend its joining session, itll say being summoned or something like that but 5 seconds later it says unable to join session i cant tell whats causing this. We put passwords, we both used embers at the same time it doesn't seem to be an issue in game as we our also doing it in an area where there is still the main alive. The weird thing is is that summoning each other worked for a at first and for a good while, we were able to summon each other for the first 2 or 3 areas at first but when we reached the crucifix woods we were no longer able to summon each other. Do you know what is going on.

    opened by Obama1234567 10
  • Support for DSR

    Support for DSR

    Hello,

    I like the idea of creating an alternative server during official server taking down period! Just wondering if the network setting for DS3 and DSR are similar enough and would DSR get this support in future? Appreciate you work!

    enhancement 
    opened by TarnishedKuma 9
  • about private server

    about private server

    Hello, author, I am very excited to see your project, my friends and I want to play Dark Souls through private server, and we have an idle server,maybe not big, but enough for 2-3 person you know. I would like to ask what we need to change in the project if we want to use our own server, hope to get your reply.

    opened by jonysky 9
  • People outside my network can't connect to my server

    People outside my network can't connect to my server

    OS: Windows 10 (21H2 19044.1415) Game Version: Steam (1.15.0.0) Mods: None Ports forwarded: I opened all ports from 50000 - 50050 with UDP and TCP Config file: config.zip (don't worry I removed any public IP's and stuff)

    So basically I'm running into this issue where I can connect to my game server just fine by using a local IP, but as soon as I go past my router and my friend (who is outside my network) tries to connect it just dies and doesn't even ping the server once.

    I also tried multiple different solutions from inserting my local IP to using my public one to even using Hamachi and using their IP address but to no avail. I've taken extra care to make sure that I'm port forwarding this to the correct IP address and that I'm using the correct ports but nothing. Only when using Hamachi I got my friends client to connect once but it just quickly connected to my client and then disconnected (or at least according to the console)

    I got kinda confused by the JSON file and how I had to actually configure it because there's barely any documentation on what all the values do / how they could affect the game.

    I've also read thru the issues to see if they could fix my answer but none actually fixed the issue, I've tried multiple but to no avail

    opened by hax4dazy 9
  • Trying to launch via Proton, can't figure out how to launch game

    Trying to launch via Proton, can't figure out how to launch game

    I'm attempting to run this via Proton, so I can spin up a private coop server for my son and I. The server starts, though it complains that it's not getting valid json back from the master server. I assume it's working at least locally.

    The loader comes up, and I imported the config from the server. I set the path to the Dark souls 3 exe, it says it's valid and detected Steam version. I can't figure out what to do next though? I am guessing the button on the bottom right is supposed to un-grey and let me launch the game using that?

    Is there something I'm missing? I did install the prereq VSC++ runtime into this container as instructed.

    I realize what I'm attempting here is completely unsupported, I'm just hoping that maybe there's some way to make this work via Proton. I'd like to play Cinders mod co-op with my son and not get him banned.

    opened by cbacott 9
  • Master Server Down

    Master Server Down

    It's been two weeks or so. When I try to host my CMD prompt is filled with: "CurrentDateAndTime │ Warning │ │ Recieved error when trying to advertise server on master server. Response was not valid json."

    When I open the Loader I can't see any server up.

    It's happening with me and a couple of friends, we were able to use the program before.

    opened by andrinoc1 9
  • Doesn't connect to friend's hosted server

    Doesn't connect to friend's hosted server

    Trying to join a private session always returns "Failed to log in to the DARK SOULS III game server."

    • Tried hosting on both ends, the host can join it's own server, the client cannot and doesn't even log an connection attempt
    • Double checked public and private IPs
    • Double checked port forwading settings for both
    • Shared the "server.ds3osconfig" file
    • Put Loader and Server in firewall exceptions
    • Ran in admin mode
    • Ran without AV software
    • Ran with Cloudflare Warp
    • Repaired the VC Redist prerequisite

    None of these had any noticeable effect.

    opened by Raxyz0 7
  • Cannot see summon signs as the host of private server

    Cannot see summon signs as the host of private server

    Hi, I'm hosting a private server to continue my co-op playthrough with friends while the official servers are down. They can see my summon sign without issue, but I can't see theirs. Did I do something wrong? I can see my friend's ghosts running around at the bonfire, and they can summon me without issues.

    opened by Beveragio 7
  • [BUG] DS3 Convergence crash on start

    [BUG] DS3 Convergence crash on start

    I'm trying to log into a friend's server with the Convergence mod active. DS3 will start with a white screen for 3 seconds, turn black for 2 seconds, then crash. During this time the DS3 cursor is displayed Its not happening on the vanilla copy. The confusing thing is, that several other friends are able to connect with Convergence just fine. DS3 starts just fine when launched normally.

    Which log files should I send?

    Any help in this matter will be greatly appreciated especially since the fromsoft servers are down.

    bug 
    opened by NaliAroni 7
  • Question on the MatchMaking System

    Question on the MatchMaking System

    In the game there is a restriction on the orders of weapons and a level, is it possible to configure the server config to disable these restrictions that, for example, 200 LVL could be renewed to 1. I know that with the help of a red chalk and password, this restrictions can be bypassed, but it is interesting to me exactly the invasion of Random players with a red eye. I noticed that in the config there are lines responsible for the balance and conducted monipulations with them, but the results did not give it, so I ask to help explain about the omniscient)

    opened by saswas228 7
  • unable to launch Game in Loader.

    unable to launch Game in Loader. "Executable not a recognised version"

    screenshot

    As you can see in my attachment screenshot, the exe location seems not to work. Also, the "Launch game" button is greyed out. Does it have something to do with my PC and game being Japanese? I live in Japan.

    opened by ShoshoHrubblefongers 1
  • [BUG] Misjudgement in IsPrivateNetwork() causes trouble using reverse proxies

    [BUG] Misjudgement in IsPrivateNetwork() causes trouble using reverse proxies

    summary

    • call to bool NetIPAddress::IsPrivateNetwork() from a NetIPAddress whose address is 127.0.0.1 should get false instead of true

    details

    I have a server at home which has no public IP and a VPS(both running Ubuntu). A reverse proxy(from fatedier/frp) is set up for port forwarding(TCP 50050, TCP 50000, UDP 50010 will work) so that server can be accessed globally. However, IP addresses of connections through the reverse proxy are always 127.0.0.1, which are classified as "appears to be on private subnet" by function bool NetIPAddress::IsPrivateNetwork() and the connections are redirected to the private IP of the server, which is inaccessible from other subnets. Thus, connections between the game client from other subnets and the server cannot be established.

    fix

    • Simply make 127.0.0.1 an exception in IsPrivateNetwork() to prevent redirections, as the function is only called to judge whether redirections should take place.

    • modification

    https://github.com/TLeonardUK/ds3os/blob/4f3c12e7dc21faebcaaebe680b3b48b2247943ea/Source/Server/Core/Network/NetIPAddress.h#L36

    bool IsPrivateNetwork()
    {
        if (Bytes[0] == 127 && Bytes[1] == 0 && Bytes[2] == 0 && Bytes[3] == 1)     // ! 127.0.0.1
            return false;
        return
            Bytes[0] == 127 ||                                                      // 127.*.*.*
            Bytes[0] == 10 ||                                                       // 10.*.*.*
            (Bytes[0] == 172 && Bytes[1] >= 16 && Bytes[1] <= 31) ||                // 172.16.*.* -> 172.31.*.*
            (Bytes[0] == 192 && Bytes[1] == 168);                                   // 192.168.*.*
    }
    
    opened by KeithCoreDumped 3
  • Blank Warning Message

    Blank Warning Message

    Below is my anti-cheat config:

    "AntiCheatApplyPenalties": true, "AntiCheatBanMessage": "反外挂自动Ban了.", "AntiCheatBanThreshold": 100.0, "AntiCheatDisconnectMessage": "档有问题,踢了.", "AntiCheatDisconnectThreshold": 25.0, "AntiCheatEnabled": true, "AntiCheatScore_ClientFlagged": 0.0, "AntiCheatScore_Exploit": 0.0, "AntiCheatScore_ImpossibleGetItemQuantity": 0.0, "AntiCheatScore_ImpossibleLocation": 0.0, "AntiCheatScore_ImpossibleName": 0.0, "AntiCheatScore_ImpossiblePlayTime": 0.0, "AntiCheatScore_ImpossibleStatDelta": 0.0, "AntiCheatScore_ImpossibleStats": 26.0, "AntiCheatScore_UnfairDisconnect": 0.0, "AntiCheatSendWarningMessageInGame": true, "AntiCheatSendWarningMessageInGameInterval": 999999.0, "AntiCheatWarningMessage": "警告,警告.", "AntiCheatWarningThreshold": 10.0,

    With this config i only want to kick out players with impossible stat and ban them if they keep logging in with that character. But i found that when my character name is Chinese, server sends blank warning message in game. I read the code and found out when AntiCheatScore_ImpossibleName is 0.0 the ShouldApplyPenalty of AntiCheatState is true, thus server sends blank warning message(WarningMessage is initialized to "") in game. This is annoying for players.

    Maybe we should not let ShouldApplyPenalty be true when corrsponding anti-cheat score is 0.0 or check WarningMessage before sending to make sure we do not send blank warning message?

    opened by mengwei1 3
  • subtle bug in class NetIPAddress

    subtle bug in class NetIPAddress

    in https://github.com/TLeonardUK/ds3os/blob/4f3c12e7dc21faebcaaebe680b3b48b2247943ea/Source/Server/Core/Network/NetIPAddress.h#L22 there are some typos in subscripts:

    Bytes[0] = 127;
    Bytes[0] = 0;
    Bytes[0] = 0;
    Bytes[0] = 1;
    

    should be:

    Bytes[0] = 127;
    Bytes[1] = 0;
    Bytes[2] = 0;
    Bytes[3] = 1;
    

    Though it may not cause problems, for now, it might bring about some difficulty in debugging someday if the default constructor is invoked. Thanks for your awesome work by the way.

    opened by KeithCoreDumped 1
  • [Feature]Ban offline player in Webui

    [Feature]Ban offline player in Webui

    I am a server host, when player from my server reports cheaters to me i cant always respond immediately. Once the cheaters go offline, it is quite difficult to ban them. I will be very grateful to see that host can ban offline cheater by inputing their steam magic number in the web ui

    opened by mengwei1 1
Releases(v0.24.0.0-main)
Owner
Tim Leonard
Professional game developer by day, random nonsense coder by night.
Tim Leonard
Full source code for WarriOrb, a Dark-Souls like action platformer - using Unreal Engine 4

WarriOrb source code WarriOrb is a hardcore action platformer where you play as a demon who is trapped in an unlikely body. The game mixes the difficu

Not Yet 243 Nov 25, 2022
Free in the Dark, a Alone in the Dark engine reimplementation.

FITD Free in the Dark, a Alone in the Dark engine reimplementation. Long overdue source code update from the version that was released on source forge

null 43 Nov 20, 2022
Dark Sky DOS Game (curses port)

Dark Sky This is a port of the original Dark Sky by Ben "Bent"

Jamie 2 Apr 6, 2022
the long dark mod

tld the long dark mod 安装说明 下载Tld Mod ,主要代码已经开源,请加群后在群文件中下载使用。请根据自己的游戏平台选择对应的版本。(下载路径为群文件TLDMOD文件夹) 注:不同平台之间游戏存在细微

Chase 4 Oct 28, 2021
OpenMW is an open-source open-world RPG game engine that supports playing Morrowind.

OpenMW is an open-source open-world RPG game engine that supports playing Morrowind.

null 4.5k Nov 30, 2022
This is a list of different open-source video games and commercial video games open-source remakes.

This is a list of different open-source video games and commercial video games open-source remakes.

Ivan Bobev 152 Nov 28, 2022
Minetest is an open source voxel game engine with easy modding and game creation

Minetest is an open source voxel game engine with easy modding and game creation

Minetest 8.2k Nov 28, 2022
An open source re-implementation of RollerCoaster Tycoon 2 🎢

An open source re-implementation of RollerCoaster Tycoon 2 ??

OpenRCT2 11.2k Dec 1, 2022
Open-source, cross-platform, C++ game engine for creating 2D/3D games.

GamePlay v3.0.0 GamePlay is an open-source, cross-platform, C++ game framework/engine for creating 2D/3D mobile and desktop games. Website Wiki API De

gameplay3d 3.9k Nov 24, 2022
KlayGE is a cross-platform open source game engine with plugin-based architecture.

KlayGE KlayGE is a cross-platform open source game engine with plugin-based architecture. It's started since 2003. The explicit goal of KlayGE is: to

Minmin Gong 1.8k Nov 24, 2022
Powerful, mature open-source cross-platform game engine for Python and C++, developed by Disney and CMU

Panda3D Panda3D is a game engine, a framework for 3D rendering and game development for Python and C++ programs. Panda3D is open-source and free for a

Panda3D 3.6k Nov 28, 2022
MIT Licensed Open Source version of Torque 2D game engine from GarageGames

We've moved! All torque engines have moved to a new organization, Torque Game Engines. Torque2D can be found at https://github.com/TorqueGameEngines/T

GarageGames 1.7k Nov 23, 2022
Free, open-source, game engine and a 3D sandbox.

Work-in-Progress The official "early alpha" release should be available around April 2021 SGEEngine SGEEngine is an open source (MIT License), C++ cen

ongamex 73 Nov 3, 2022
MAZE (My AmaZing Engine) - 🎮 Personal open-source cross-platform game engine

MAZE (My AmaZing Engine) is the self-written open-source cross-platform game engine in the active development stage. At the moment it is my main pet project, developed for the purpose of learning and preserving different game dev technologies.

Dmitriy Nosov 14 Nov 30, 2022
an open source NES platformer game

Nova the Squirrel is an NES game that stars Nova Storm, a green squirrel, who winds up in a new and unfamiliar world with strange new abilities, and she must use her new abilities to save the world.

null 168 Nov 10, 2022
Ducktape is an Open source Light weight 2d Game Engine that gives utmost priority to user convenience.

Ducktape is an Open source Light weight 2d Game Engine that gives utmost priority to user convenience. It is written in c++ and uses SFML and Box2d for graphics and physics respectively.

Ducktape 98 Nov 17, 2022
An open-source puzzle game

These are series of enigmas games. Enjoy thinking about puzzles. This 1.4 version contains : - Eulerian Graphs series (with time challenge) ...but m

null 6 May 29, 2022
Cytopia is a free, open source retro pixel-art city building game with a big focus on mods.

Cytopia is a free, open source retro pixel-art city building game with a big focus on mods. It utilizes a custom isometric rendering engine based on SDL2.

CytopiaTeam 1.6k Nov 27, 2022
SnaX Game Engine - Open Source

SnaX Game Engine License SnaX Game Engine - https://github.com/snaxgameengine/snax Licensed under the MIT License http://opensource.org/licenses/MIT.

SnaX Game Engine 13 Nov 15, 2022