Giter Club home page Giter Club logo

das-pc-mpchan's Introduction

Instructions

  1. Start DSCM
  2. Start Dark Souls
  3. Enjoy Dark Souls Multiplayer :)

Automatic node finding

While DSCM-Net is active, it will automatically connect to players in the same area and in coop level range. Just have it running and enjoy working Dark Souls multiplayer.

Manual Connecting

You can also manually connect to a specific player like this:

  1. Make sure you are connected to less than 20 nodes. You might want to disable DCSM-Net, so you get less nodes.
  2. Copy the other player's steam profile URL or SteamID64 into the Target field.
  3. Click Attempt Connection
  4. After a few seconds, they should appear in the Active tab.
  5. You might want to add the player to your favorites by selecting them in the Active list and clicking Add Favorite
  6. Next time you can connect to the other player by double-clicking the favorites entry.

Troubleshooting

  • This program does not work with the beta version of Dark Souls. Opt out of the beta in steam settings:

    1. Right click on Dark Souls in your game library in steam
    2. Go to properties and locate the "betas" tab
    3. Select an option that says "none - opt out of all betas"
  • Make sure normal in-game variables for multiplayer activity are accounted for. Players commonly forget that:

    • The water must be drained in New Londo Ruins before the host can have any phantoms enter their world
    • Areas that still have yellow fog gates (the ones that get cleared after placing the Lord Vessel) don't allow multiplayer activity
  • Is your game crashing when getting invaded or trying to use someone's summon sign?

    • This is the namecrash bug, which is unrelated to this mod.
    • Run PvP Watchdog, because it fixes this problem (read Named Nodes section below).

Features

Hotkeys:
Ctrl + 1 = Toggle Node Drawing

Node Drawing

Enabling this shows a visualization of currently active connections.

  • You are represented with the large circle in the middle.
  • Other players are smaller circles that are connected to you with a line.
  • In-game proximity is represented here. If a player is near you in-game, like you're standing in the same spot in a level, your circles will be close to each other.
  • The fact that the player names are not drawn near the nodes they belong to is a known issue.

DSCM-Net

Due to constant problems with the default Steam matchmaking, DCSM contains its own matchmaking. All DSCM-Net clients report player info to a central location. You can have a look at this information in the DSCM-Net tab.

DSCM uses this information to automatically connect you to appropriate players. Note that your covenant (and whether you are wearing its ring) will be taken into account in this process.

Active Nodes Tab

This displays a detailed list of the players you're connected to. It also shows their location in-game, and if they're human, hollow, or a phantom of some kind.

This vastly helps with informing you if you have potential viable connections or not. Bear in mind it is not possible to know whether or not someone has their boss alive, so that aspect is still a guess from your end.

Row colors

The color of the row marks the usefulness that DSCM thinks that node has for you. That is based on Location, Soul Level, your Covenant and if you have your covenant ring equipped.

Nodes that you added manually are highlighted in bold.

MP Area column

This column shows the invasion zone the player is in. The wiki has further details.

Favorites and Recent Tabs

The recent tab will fill up with your 70 most recent connections. Favorites can be added from either your active node tab or recent tab. When starting DSCM and every 10 minutes after, DSCM will interact with a script created and hosted by Chronial that checks the online status of your Recent and favorite nodes (max 100 combined). Steam privacy settings can make a node appear offline when they are not.

Disable FPS Disconnects

DSCM now disables Dark Souls' check that will kick you offline when your FPS dips low.

Covenants

DSCM adapts its connection behaviour to your covenant.

  • The following covenants are considered coop covenants: Princess's Guard, Warrior of Sunlight, Way of White, no covenant
  • The following covenants are considered PvP covenants: Blade of the Darkmoon, Chaos Servant, Darkwraith, Forest Hunter, Gravelord Servant, Path of the Dragon

If you are in a coop covenant, DSCM will preferably connect you to people that are in the same area and within coop level of you. For PvP covenants, DSCM will also consider players that you can invade and that can invade you. Also:

  • If you are a Forest Hunter and have the Cat Covenant Ring equipped, you will be connected to people that are in Darkroot Garden and fulfill the level requirements for you invading them. This is indepedent of your own location.
  • If you are a Blade of the Darkmoon and have the Darkmoon Blade Covenant Ring equipped, you will be connected to people that are in Anor Londo and fulfill the level requirements for you invading them, in the hopes that their Anor Londo is dark and you can punish them for your sins. This is independent of your own location. If you don't have the ring equipped, then you are preferably connected to players that are in the same are as you and have Indictments.

Contact/ Bug Reports:

This program was created by Wulf, who can be found on reddit as /u/Wulf2k. As a backup you can try contacting /u/illusorywall or @illusorywall, but I can't help as much with the technical stuff.

Source code is available at: https://github.com/Wulf2k/DaS-PC-MPChan
Source code for the DSCM-Net server: https://github.com/Chronial/dscm-server


Brought to you by Lane Hatland ([email protected]).
With thanks to Illusorywall, Jellybaby44, Chronial, and many others.

das-pc-mpchan's People

Contributors

catboyprincess avatar chronial avatar jasonritchie avatar wulf2k 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

Watchers

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

das-pc-mpchan's Issues

Autostart Dark Souls

Should we add a flag to autostart Dark Souls with DSCM? That would probably make life easier for most users.

[Question] Patch steam

I'm asking myself if it is DSCM's role to also patch the old DarkSouls steam bugs.... For instance, when you are loading the game, you'll get the setup thing which will try to install GFWL for a sec. That can be removed by launching something like this as administrator:

Private Sub patchSteam()
        Try
            If Environment.Is64BitOperatingSystem Then
                My.Computer.Registry.LocalMachine.OpenSubKey("Software\Wow6432Node\Valve\Steam\Apps\211420").SetValue("gfwlivesetup", 1)
            Else
                My.Computer.Registry.LocalMachine.OpenSubKey("Software\Valve\Steam\Apps\211420").SetValue("gfwlivesetup", 1)
            End If
        Catch ex As UnauthorizedAccessException
        End Try
    End Sub

Which make steam feels like it's already installed...

But should DSCM do that ?

Unable to play behind NAT

First, thank you for this mod. Without it, multiplayer was plainly not working for us.

Now our problem:

Able to connect to DSCM, seeing a ton of nodes. See messages all over the world. Cannot connect to another player who is behind the same NAT as I am. We have been playing together this way for a month using your mod without issue, but it stopped working yesterday. We've tried using the stable version and the testing version but no luck. We are level 75 and 81, one of us has cleared New Londo Ruins, the other has not. Player who has no completed is human looking for the other players' sign. DCSM say's we're connected, but no sign.

Not sure what's up :(

Read book of the guilty

The book of the guilty suggests, that there is some p2p sharing of sin information. If we could read that data, we could massively expand the list of possible targets for darkmoon followers.

Maybe looking for the names listed in the book in memory would be a starting point?

Eventual crash

DustyBoxCube from Reddit:

I get the below exception that causes a crash everytime I run DSCM. It happens after a while of it running in the background (seems pretty random, but usually takes about 20min atleast). Thanks for this awesome tool! I hope the below information helps track down the cause!

See the end of this message for details on invoking just-in-time (JIT) debugging instead of this dialog box.

************** Exception Text ************** System.ArgumentOutOfRangeException: Value of '-1' is not valid for 'Value'. 'Value' should be between 'Minimum' and 'Maximum'. Parameter name: Value at System.Windows.Forms.NumericUpDown.setValue(Decimal value) at DSCM.DSCM.refTimer_Tick() at DSCM.DSCM._Lambda$_R7-3(Object a0, EventArgs a1) at System.Windows.Forms.Timer.OnTick(EventArgs e) at System.Windows.Forms.Timer.TimerNativeWindow.WndProc(Message& m) at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

Remove steamIds and manual connect from DSCM-Net

I think we should remove the manual connect functionality from DSCM-Net. Maybe also the steamIds, so you can't just type them in.

IMHO this feature clearly goes against the spirit of Dark Souls and also makes undesirable behavior easier. And I can't see any good use for it anyways.

Maybe not yet, but once we feel the irc autoconnect is good and stable.

Detected as virus

Can we do something about this getting detected as a virus?
You should probably upload the file to virus total before you do a release Here is the report for the last testing release:
https://virustotal.com/en/file/3fb9a3a068b2e91d5f9a23e67438fb6e0f107d6430cb94c63fb57c6612bf1e49/analysis/1462881420/

I think that's actually alright. But people on the reddit have reported more positives, so I'm not sure.

Maybe the AV tools detecting based on heuristic and sending the file to a server for closer inspection, where it is cleared?

Argument out of range

from -Kallor- via /r/darksouls sent 9 hours ago

Sometimes i have this error

System.ArgumentOutOfRangeException: '-1'is not a valid value for 'Value'. 'Value' should be between 'Minimum' e 'Maximum'. Parameter name: Value in System.Windows.Forms.NumericUpDown.setValue(Decimal value) in DSCM.DSCM.refTimer_Tick() in DSCM.DSCM._Lambda$_R7-3(Object a0, EventArgs a1) in System.Windows.Forms.Timer.OnTick(EventArgs e) in System.Windows.Forms.Timer.TimerNativeWindow.WndProc(Message& m)
in System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

Enable DSCM-Net on startup?

Is there a specific reason why you set the dcsm-net to disabled by default? As we want the maximum possible amount of data, I would say it makes more sense to enable it by default?

MaxNodes reading is broken

I don't thin the MaxNodes reading code is correct. It frequently returns 0 or arbitrarily large numbers (1297035621) for me. This is ignored by the frontend and thus hidden from the user. But DSCM-Net uses this as a basis for connect decisions, so that is a serious problem.

403 forbidden

from cheezbuggah sent 1 day ago

Hello! First off, thank you for taking the time to develop dscm. Unfortunately, I've encountered a bug that, after two days of searching, I can't seem to find a solution to.

Specifically, when I launch the dscm (both the test verson and the normal version), I get the following error: "The remote server returned an error: (403) forbidden". My first hunch was an outdated version of .NET framework, yet I've downloaded all 4.5 updates + the 4.6 update, and each time I attempted an installation it told me my a more recent version of .NET is already installed on this machine. I have also added an exception in my antivirus program, yet the error still persists.

I hope I'm not troubling you too much with this.

Latest Testing, "An item with the same key has already been added"

Reported by atwon23 on Reddit:

This will pop up every 2 to 5 seconds as the dscm-net pool continues to grow. The pool reaches upwards of 800 to 900 players and then error tends to slow down as the pools growth slows.

See the end of this message for details on invoking just-in-time (JIT) debugging instead of this dialog box.

************** Exception Text ************** System.ArgumentException: An item with the same key has already been added. at System.ThrowHelper.ThrowArgumentException(ExceptionResource resource) at System.Collections.Generic.Dictionary2.Insert(TKey key, TValue value, Boolean add) at System.Collections.Generic.Dictionary2.Add(TKey key, TValue value) at DSCM.DSCM.refMpDataTick() at DSCM.DSCM._Lambda$_2(Object a0, EventArgs a1) at System.Windows.Forms.Timer.OnTick(EventArgs e) at System.Windows.Forms.Timer.TimerNativeWindow.WndProc(Message& m) at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

************** Loaded Assemblies ************** mscorlib Assembly Version: 4.0.0.0 Win32 Version: 4.6.1078.0 built by: NETFXREL3STAGE
CodeBase: file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll

DSCM Assembly Version: 1.0.5973.26548 Win32 Version: 1.0.5973.26548
CodeBase: file:///C:/Users/Toenado/Desktop/ds1%20connect%20tool/testbuild/DSCM-2016-05-09-15.exe

Microsoft.VisualBasic Assembly Version: 10.0.0.0 Win32 Version: 14.6.1038.0 built by: NETFXREL2
CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GACMSIL/Microsoft.VisualBasic/v4.0_10.0.0.0_b03f5f7f11d50a3a/Microsoft.VisualBasic.dll

System.Windows.Forms Assembly Version: 4.0.0.0 Win32 Version: 4.6.1038.0 built by: NETFXREL2
CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GACMSIL/System.Windows.Forms/v4.0_4.0.0.0_b77a5c561934e089/System.Windows.Forms.dll

System Assembly Version: 4.0.0.0 Win32 Version: 4.6.1075.0 built by: NETFXREL3STAGE
CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GACMSIL/System/v4.0_4.0.0.0_b77a5c561934e089/System.dll

System.Drawing Assembly Version: 4.0.0.0 Win32 Version: 4.6.1078.0 built by: NETFXREL3STAGE
CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GACMSIL/System.Drawing/v4.0_4.0.0.0_b03f5f7f11d50a3a/System.Drawing.dll

Accessibility Assembly Version: 4.0.0.0 Win32 Version: 4.6.1038.0 built by: NETFXREL2
CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GACMSIL/Accessibility/v4.0_4.0.0.0_b03f5f7f11d50a3a/Accessibility.dll

System.Runtime.Remoting Assembly Version: 4.0.0.0 Win32 Version: 4.6.1038.0 built by: NETFXREL2
CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GACMSIL/System.Runtime.Remoting/v4.0_4.0.0.0_b77a5c561934e089/System.Runtime.Remoting.dll

System.Core Assembly Version: 4.0.0.0 Win32 Version: 4.6.1038.0 built by: NETFXREL2
CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GACMSIL/System.Core/v4.0_4.0.0.0_b77a5c561934e089/System.Core.dll

System.Configuration Assembly Version: 4.0.0.0 Win32 Version: 4.6.1038.0 built by: NETFXREL2
CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GACMSIL/System.Configuration/v4.0_4.0.0.0_b03f5f7f11d50a3a/System.Configuration.dll

System.Xml Assembly Version: 4.0.0.0 Win32 Version: 4.6.1064.2 built by: NETFXREL3STAGE
CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GACMSIL/System.Xml/v4.0_4.0.0.0_b77a5c561934e089/System.Xml.dll

************** JIT Debugging ************** To enable just-in-time (JIT) debugging, the .config file for this application or computer (machine.config) must have the jitDebugging value set in the system.windows.forms section. The application must also be compiled with debugging enabled.

For example:

<system.windows.forms jitDebugging="true" />

When JIT debugging is enabled, any unhandled exception will be sent to the JIT debugger registered on the computer rather than be handled by this dialog box.

remote name could not be resolved crash after long runtime

Leaving DSCM running for extended periods of time (~12 hours), leads to the follow exception

System.Net.WebException: The remote name could not be resolved: 'chronial.de'
   at System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
   at System.Net.WebClient.GetWebResponse(WebRequest request, IAsyncResult result)
   at System.Net.WebClient.DownloadBitsResponseCallback(IAsyncResult result)
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at DSCM.MainWindow.VB$StateMachine_43_updateOnlineState.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.AsyncMethodBuilderCore.<>c.<ThrowAsync>b__6_0(Object state)

Minor bug for most people, but annoying for Dark-Souls-PvP-AI.

Weird IRC Server behaviour

Might there be something wrong with the IRC Server, or is that intended behavior:

I logged in with my IRC client to have a look and noticed, that I receive updates quite irregularly, and in massive blocks. The intervals between the updates range from 10 seconds to over a minute.

Measure bandwidth consumed

I've seen a comment or two about DSCM overloading people's networks.

I don't think it's a serious problem but we should probably measure it some time to see how much does get used. If necessary we can implement some minor forms of compression on the data with minimal hassle.

Sorting in DSCM-Net

The sorting in DSCM-Net is suboptimal:

  • The sin column sorts lexicographically instead of by integer value
  • New nodes should automatically be sorted.

[Suggestion] Report non-dscm nodes to irc

The client could report all nodes it knows about to IRC, which should massively increase the number of nodes available in IRC. I think it's safe to assume that it will always be only a small fraction of the Dark Souls playerbase that runs DSCM.

Advantages:

  • Bigger player pool will allow DSCM to choose "better" nodes (same world + coop range)

Disadvantages:

  • We can only report data that we get from steam for these nodes, maybe limiting interesting matchmaking ideas.

The disadvantage is not too extreme though, as we can still report more data for "ourselves". Then we have just some nodes with more, some nodes with less data.

Increase size of known DS network

At the moment we know about 1700 of the 4000 nodes online. This could be better. I had this idea on how we can improve that number:

  • Remember the steamid of all non-dscm nodes for a month
  • Every 10 minutes, ask steam who of these nodes (minus the ones we see in DSCM-Net) is currently playing dark souls.
  • Add these nodes to a WANT list.
  • Reserve one slot on every client for "network-size-increase", hand out the nodes on the WANT list to DSCM clients.
  • Once we have details on a node, other DSCMs should connect to it because it's a useful node to them, thus freeing up the WANT slot for more discovery.

Maybe we should also make DSCM more reluctant to disconnect from non-dscm nodes that only we are connected to.

UI cleanup

As discussed in #84:

  • Remove Expand DSCM
  • Remember window size between restarts
  • Add a Settings tab as the first tab, but keep the Active tab selected on startup.
    • Remember all settings between restarts
    • Add explanatory text to all settings
    • Move maximum node count to settings and default that to 30
    • Move Join DSCM-Net to settings
    • Move Node Drawing to settings (add note about hotkey)
    • Add Option to autostart Dark Souls on DSCM launch
  • Move number of active nodes display to Active tab, like for dscm-net
  • Create a Manual tab that replaces Favorites and Recent
    • Move target input and connect button to manual tab
    • Remove recent nodes list
    • Move favorites to manual tab
      • If available, decorate favorites with data from DSCM-Net and connected nodes
      • Highlight favorites that we are currently connected to

Maybe add a welcome message that explains DSCM works without any configuration.

Now that we want to remember more settings, we should maybe do that the dotnet way?

Prevent DSCM-Users from crashing others

There are two ways to do this:

  1. Change the name in memory
  2. When we detect an invalid name, close DSCM and display a popup that explains the situation and how to fix it.

We should implement (2) soon and change over to (1) if somebody has time and energy.

Nodes getting stuck

If you select the max nodes (32), then the button is disabled. But you can't lower it after that.... So you're stuck on 32.

Update info not visible by default

I sneakily changed the default state of dscm to expanded in #21. I would argue that that makes a lot more sense. Maybe it would even be a good idea to remove the non-expanded state – or what exactly is the usecase for that?

A side effect of that is that the update info is not visible anymore when you open the program, which is obviously not good :).

[Suggestion] Smarter irc connection logic

I think the IRC system would probably benefit from a smarter connection logic:

  • It should prioritize players, instead of picking one at random
  • It should take the nodecount of the target player into account (prioritize low nodecount) (shared via irc)
  • It should make connections to "bad" (different SL / other Location) players if the nodecount is low. Bad is better than nothing.

I would propose this algorithm:
Sort all known nodes like this:

  • First all players in the same region AND in SL coop range, sorted by nodecount
  • Then all players in the same region OR in SL coop range, sorted by nodecount
  • Then the rest, sorted by nodecount

Then try to connect to the first x in the list.

Remarks:

  • This system can obviously be easily "cheated" by using a modified client that always reports a low nodecount. I don't think that is a real threat.
  • It might be a good idea to "punish" nodes with 0 other nodes, as that might indicate connection problems? E.g. Of the x nodes, only y are allowed to have 0 nodes. But I would wait to see if that is actually a problem.
  • I wouldn't just do this for low nodecounts, but also once every 5 minutes, assuming our nodecount is below 20. Maybe on those runs only take "perfect" (same region + coop range) nodes?

[Nexus] DSCM Update

Greetings,

As far you defined a new stable version with the <2016-05-24-20>,
Please consider updating your page on NexusMod,
It remains a great vector to spread mod/tool. :)

@Wulf2k & @Chronial,
Thank you for yours spare times spent on this project.

Kind Regards.

Error processing player report

There is "Error processing player report - Индекс находился вне границ массива." message on the bottom of DSCM-Net list, which I believe translates into "array out of bounds".
Overall software seems to be working fine. I'm using 2016.05.06.01 version.

System.ArgumentOutOfRangeException

I'm getting this error message on testing.

Подробная информация об использовании оперативной 
(JIT) отладки вместо данного диалогового 
окна содержится в конце этого сообщения.

************** Текст исключения **************
System.ArgumentOutOfRangeException: Значение '-1' недопустимо для 'Value'. 'Value' должно лежать в диапазоне от 'Minimum' до 'Maximum'.
Имя параметра: Value
   в System.Windows.Forms.NumericUpDown.set_Value(Decimal value)
   в DSCM.DSCM.refTimer_Tick()
   в DSCM.DSCM._Lambda$__R7-3(Object a0, EventArgs a1)
   в System.Windows.Forms.Timer.OnTick(EventArgs e)
   в System.Windows.Forms.Timer.TimerNativeWindow.WndProc(Message& m)
   в System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)


************** Загруженные сборки **************
mscorlib
    Версия сборки: 4.0.0.0
    Версия Win32: 4.0.30319.17929 built by: FX45RTMREL
    CodeBase: file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll
----------------------------------------
DSCM
    Версия сборки: 1.0.5976.40573
    Версия Win32: 1.0.5976.40573
    CodeBase: file:///C:/Users/kusayu/Desktop/DSCM-2016-05-12-22.exe
----------------------------------------
Microsoft.VisualBasic
    Версия сборки: 10.0.0.0
    Версия Win32: 11.0.50709.17929 built by: FX45RTMREL
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/Microsoft.VisualBasic/v4.0_10.0.0.0__b03f5f7f11d50a3a/Microsoft.VisualBasic.dll
----------------------------------------
System
    Версия сборки: 4.0.0.0
    Версия Win32: 4.0.30319.17929 built by: FX45RTMREL
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
System.Core
    Версия сборки: 4.0.0.0
    Версия Win32: 4.0.30319.17929 built by: FX45RTMREL
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll
----------------------------------------
System.Windows.Forms
    Версия сборки: 4.0.0.0
    Версия Win32: 4.0.30319.17929 built by: FX45RTMREL
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
----------------------------------------
System.Drawing
    Версия сборки: 4.0.0.0
    Версия Win32: 4.0.30319.17929 built by: FX45RTMREL
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
----------------------------------------
System.Runtime.Remoting
    Версия сборки: 4.0.0.0
    Версия Win32: 4.0.30319.17929 built by: FX45RTMREL
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Runtime.Remoting/v4.0_4.0.0.0__b77a5c561934e089/System.Runtime.Remoting.dll
----------------------------------------
System.Windows.Forms.resources
    Версия сборки: 4.0.0.0
    Версия Win32: 4.0.30319.17929 built by: FX45RTMREL
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms.resources/v4.0_4.0.0.0_ru_b77a5c561934e089/System.Windows.Forms.resources.dll
----------------------------------------
mscorlib.resources
    Версия сборки: 4.0.0.0
    Версия Win32: 4.0.30319.17929 built by: FX45RTMREL
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/mscorlib.resources/v4.0_4.0.0.0_ru_b77a5c561934e089/mscorlib.resources.dll
----------------------------------------
System.Configuration
    Версия сборки: 4.0.0.0
    Версия Win32: 4.0.30319.17929 built by: FX45RTMREL
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll
----------------------------------------
System.Xml
    Версия сборки: 4.0.0.0
    Версия Win32: 4.0.30319.17929 built by: FX45RTMREL
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll
----------------------------------------
Accessibility
    Версия сборки: 4.0.0.0
    Версия Win32: 4.0.30319.17929 built by: FX45RTMREL
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/Accessibility/v4.0_4.0.0.0__b03f5f7f11d50a3a/Accessibility.dll
----------------------------------------
System.Xml.Linq
    Версия сборки: 4.0.0.0
    Версия Win32: 4.0.30319.17929 built by: FX45RTMREL
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Xml.Linq/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.Linq.dll
----------------------------------------

************** Оперативная отладка (JIT) **************
Для подключения оперативной (JIT) отладки файл .config данного
приложения или компьютера (machine.config) должен иметь
значение jitDebugging, установленное в секции system.windows.forms.
Приложение также должно быть скомпилировано с включенной
отладкой.

Например:

<configuration>
    <system.windows.forms jitDebugging="true" />
</configuration>

При включенной отладке JIT любое необрабатываемое исключение
пересылается отладчику JIT, зарегистрированному на данном компьютере,
вместо того чтобы обрабатываться данным диалоговым окном.


Consider an auto-update method.

Not sure of the best way to implement it, but there should probably be a button to just download the latest DSCM from within DSCM.

IRC connection logic is broken

This code does not what it should:

If Val(txtCurrNodes.Text) < 4 Then

'Autoconnect to any nodes when Currnodes are under 4
If Val(txtCurrNodes.Text) < 4 Then
     attemptConnSteamID(tmpSteamID)

The problem is that connecting to nodes takes some time, so txtCurrNodes is actually a number from the past. The result is that for a few seconds, a new connection is initiated every 200 ms (refTimer interval). In my test, dscm initiated 40 connections after I activated dscm-net.

Node drawing

For some reason, this fiture looks awful on my computer. Have no idea, why is that and what information i should provide to you.
This is how it looks to me.
images akamai steamusercontent com
Also, if you will look into this part of code, could you please add player SL to his name in the node drawing overlay? Atm there is no fast way to know what SL of your enemy when you do/get invasions.

[Speculation] Node Request Time Outs

Wulf2k, one of your posts made me think of something. https://www.reddit.com/r/darksouls/comments/4invy1/darkmoon_edition_dscm_dark_souls_connectivity_mod/d3050wy

Text: Wulf2k: "I feel the "intention" of the mp, was for everybody to be connected to everybody. If a darkmoon tries to invade and there's a single player online with sin, they should eventually connect.

Matching based on player preference is just a step towards pretending that it works as it should. Keep in mind, all mp requests are sent to your nodes,and then your nodes pass along your request to their nodes.

This is just such a shitty system hat by the time somebody answers, the request has timed out."

So... I'm sure you've already thought about this. "by the time somebody answers, the request has timed out." That is, a request that runs along the collective graph times out too often for the system to work well.

I think DSCM may have the opportunity to patch the request passing routines. Maybe we could find out how the requests measure their own lifetime and patch that in some way, so that they live long enough to traverse a whole bunch of nodes and try to get a positive response.

Speculatively, if the request was seconds based, we could lengthen the lifetime every time the request hit a new node. Or, if it was nodes hit, we could artificially increase it by how many other nodes connected to the current node that the request is on.

Then, the objective of the system would shift toward "Get those responses out and make sure they try hard to come back positive." Then, the client has to deal with the incoming requests, but in return for increasing the graph space traversed...

Well, this is all speculation anyway. I'm not sure where else to put it or how to flag it as low-priority.

Report timing and bandwidth discussion

I don't have near enough time as I'd like these days to actually play Dark Souls so I figured I'd ask here.

Would increasing the time between reports cause any/much reduction in the quality of DSCM?

The individual bandwidth requirements of DSCM are pretty low but it's noticeable on my server already. It's not exactly overloaded, but when I remote in I can feel it being a bit sluggish. Running a constant ping to my server from outside has anywhere from 80-300 ms ping with occasional packet loss.

If we assume that usage will increase when I mark this version as stable then I could see things starting to degrade a bit.

Would doubling the reporting time be an issue in your opinion?

Report more info to DSCM-Net

Report more info about ourselves, so the connection decisions can be made smarter.

  • Is Anor Londo dark?
  • Aliveness of area bosses

Add version indicator to IRC Messages

We should probably add a version number to all irc messages sent. This will give us a better understanding of version distribution out there and also allow us to make the client ignore buggy versions if one every makes into the wild.

Error on launch

Current master can't seem to find the readme on launch if it's an EXE outside of the build folder.

Display warning if watchdog is missing

My understanding is that due to namecrash nobody should run DS without PVP watchdog, right?

We detect whether watchdog is installed – should we display a warning message if it's missing?

[Suggestion] Client Can Disconnect Specific Node

Presently, DSCM allows the user to double-left-click a player in the Favourites or Recent (or DSCMNet as well? haven't tried or verified) to quickly attempt a connection and it works.

Now, I suggest that there be some other similar mouse-input (e.g. right-cilck for context menu that contains "Disconnect From This Node") whose function is to disconnect the DkS client from a specific node.

Having done a rough search of the source for the token "disconnect," I don't see anything like a function prototype or anything.

This feature/function prototype would be useful for:

  • disconnecting from hackers or griefers (spawn camps)
  • providing the foundational core to build a client-side banlist
  • allowing single-player or sparse runs, especially if implemented alongside a maximum node field with a lower bound of 0 (although I faintly recall a bit that could be flipped to the same effect noted in the ASM notes)
  • allow random-acts-of-PvP or jolly co-operation to be even more random. I know I personally am bored after killing or dying to the same player in PvP over and over again because that player is the only person who seems to fit invasion criteria. Also, I know that as an infrequent warrior of the Sun, I would LOVE to be able to help a player, then cycle their node slot so I can quickly get on to the next jolly co-op crusade, especially if I'm grinding Medals at a specific boss or level.
  • foundational code to lay down some really serious heavy great matchmaking. Sinners, covenants, Gravelords, LATENCY, community events...

Notes:

  • Banlist ideas ought for now be client-side to prevent potential abuse of banning many others unfairly and distributing the biased banlist
  • Potential for abuse on the disconnect function exists, such as constantly avoiding "unfair" PvP SLs (while sticking with "fair" PvP SLs)

EDIT:

BTW I'm VERY excited about my first Github pull request. I really hope for the best and that my offering is somehow, in some form, accepted and merged with the master.

Praise the (Dark) Sun

[Compile] Could not find *.pcx file

I noticed in the last commit that we should notify @Wulf2k of any issues. Here is one I guess.

1>------ Build started: Project: DSCM, Configuration: Debug Any CPU ------
1>          1 file(s) copied.
1>C:\Program Files (x86)\MSBuild\14.0\bin\Microsoft.Common.CurrentVersion.targets(2883,5): error MSB3322: Unable to get MD5 checksum for the key file "Wulf2k-DSCM.pfx". Could not find file 'F:\GitHub\DaS-PC-MPChan\DaS-PC-MPChan\Wulf2k-DSCM.pfx'.
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

If I disable signing, it seems to compile fine. However, I don't know if there might be any potential consequences of not signing, so I'll leave this here.

Additionally, if I were to release more Darkmoon Edition updates, should I sign it (probably with a separate key I would imagine)? Actually, I've never dealt with signing before, so this is all new to me.

Crash in attach [2016-05-19-21]

Reported by DevLink on Reddit:

************** Ausnahmetext **************
System.NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
bei DSCM.DarkSoulsProcess.findDllAddresses()
bei DSCM.DarkSoulsProcess..ctor()
bei DSCM.MainWindow.attachDSProcess()
bei DSCM.MainWindow.Lambda$_R19-5(Object a0, EventArgs a1)
bei System.Windows.Forms.Timer.OnTick(EventArgs e)
bei System.Windows.Forms.Timer.TimerNativeWindow.WndProc(Message& m)
bei System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

************** Geladene Assemblys **************
mscorlib Assembly-Version: 4.0.0.0. Win32-Version: 4.6.1080.0 built by: NETFXREL3STAGE.
CodeBase: file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll.

DSCM Assembly-Version: 1.0.5983.37891. Win32-Version: 1.0.5983.37891.
CodeBase: file:///D:/Eigene%20Dateien/Desktop/DSCM.exe.

Crashes with 04-30-07

Activating DSCM-Net causes my dark souls to crash in irregular intervals. Here's a dump from one of these crashes. DARKSOULS-mini.zip

I assume that it's just the normal dscm connection attempt that causes the crash, since the irc feature causes that code to be called a lot more.

[Test version] Doesn't launch under wine

Error message when trying to launch with .NET 4.5:

Unhandled Exception: System.InvalidOperationException: An error occurred creating the form. See Exception.InnerException for details.  The error is: Exception has been thrown by the target of an invocation. ---> System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.ComponentModel.Win32Exception: Invalid window handle
   at System.Drawing.Icon.Initialize(Int32 width, Int32 height)
   at System.Drawing.Icon..ctor(SerializationInfo info, StreamingContext context)
   --- End of inner exception stack trace ---
   at System.RuntimeMethodHandle.SerializationInvoke(IRuntimeMethodInfo method, Object target, SerializationInfo info, StreamingContext& context)
   at System.Runtime.Serialization.ObjectManager.CompleteISerializableObject(Object obj, SerializationInfo info, StreamingContext context)
   at System.Runtime.Serialization.ObjectManager.FixupSpecialObject(ObjectHolder holder)
   at System.Runtime.Serialization.ObjectManager.DoFixups()
   at System.Runtime.Serialization.Formatters.Binary.ObjectReader.Deserialize(HeaderHandler handler, __BinaryParser serParser, Boolean fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage)
   at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize(Stream serializationStream, HeaderHandler handler, Boolean fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage)
   at System.Resources.ResourceReader.DeserializeObject(Int32 typeIndex)
   at System.Resources.ResourceReader._LoadObjectV2(Int32 pos, ResourceTypeCode& typeCode)
   at System.Resources.ResourceReader.LoadObjectV2(Int32 pos, ResourceTypeCode& typeCode)
   at System.Resources.ResourceReader.LoadObject(Int32 pos, ResourceTypeCode& typeCode)
   at System.Resources.RuntimeResourceSet.GetObject(String key, Boolean ignoreCase, Boolean isString)
   at System.Resources.RuntimeResourceSet.GetObject(String key, Boolean ignoreCase)
   at System.Resources.ResourceManager.GetObject(String name, CultureInfo culture, Boolean wrapUnmanagedMemStream)
   at System.Resources.ResourceManager.GetObject(String name)
   at DSCM.DSCM.InitializeComponent()
   at DSCM.DSCM..ctor()
   --- End of inner exception stack trace ---
   at DSCM.My.MyProject.MyForms.Create__Instance__[T](T Instance)
   at DSCM.My.MyProject.MyForms.get_DSCM()
   at DSCM.My.MyApplication.OnCreateMainForm()
   at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun()
   at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel()
   at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine)
   at DSCM.My.MyApplication.Main(String[] Args)

Error message when trying to launch with Wine-Mono:

Unhandled Exception:
System.InvalidOperationException: WinForms_SeeInnerException ---> System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.ComponentModel.Win32Exception: No valid icon entry were found.
  at System.Drawing.Icon.InitFromStreamWithSize (System.IO.Stream stream, Int32 width, Int32 height) <0x1d0c8b0 + 0x00d27> in <filename unknown>:0 
  at System.Drawing.Icon..ctor (System.Runtime.Serialization.SerializationInfo info, StreamingContext context) <0x1d9a048 + 0x001bf> in <filename unknown>:0 
  at (wrapper managed-to-native) System.Reflection.MonoCMethod:InternalInvoke (System.Reflection.MonoCMethod,object,object[],System.Exception&)
  at System.Reflection.MonoCMethod.InternalInvoke (System.Object obj, System.Object[] parameters) <0x1d08ec8 + 0x00033> in <filename unknown>:0 
  --- End of inner exception stack trace ---
  at System.Reflection.MonoCMethod.InternalInvoke (System.Object obj, System.Object[] parameters) <0x1d08ec8 + ')

DSCM adding self as node?

from Skraelos sent 5 days ago

Hey there!

DSCM Steam64: 01100001025bd3cc

My profile: http://steamcommunity.com/id/skraelos

Hope that helps. It's also worth noting that this situation doesn't always happen; but I do encounter it every, like, 4-5th time I relaunch the game and DSCM.

[–]to Skraelos sent 3 days ago

Whenever it happens again next, look in the Active Nodes list.

Does it show you in there twice?

If so, does it somehow list you with two different Steam IDs?

[–]from Skraelos sent 2 days ago

It happened just now. I was gravelording in Burg and Parish on ng+, it was fine; just came to darkroot, relaunched the game to get back to 0 nodes and populate myself with darkroot nodes a bit faster (I always do that when I come to new zones, the node replacement auto-system doesn't really make haste to remove the nodes from previous zones...), waited for ~18 nodes and used the death eye. Right at that moment the gravelord sign appeared beneath my feet and now moves together with me.

And no, I only see one instance of myself in active nodes, and steam id seems to be correct. Weird stuff...

[Suggestion] Prompt text to player

Is it possible to prompt the error messages or anything that may occure (sudden disconnect from DS-Net for instance) directly into the darksouls msgboxes ?
It's also more easy for the user than alt+tabing (which crash so much) out to see what happend (if one day anything happens...) and I guess that would be fancy...

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.