[Tool] Grim Dawn Item Assistant

I can confirm this with custom games. They don’t transfer from page 4 to IA.

I forgot about it, since I have been using mods and not main campaign for a while.

I think it is because the stash for main campaign and mods are in different places… could be a cause for it.

Got a link where I can download a map/game/whatever to initiate a custom game? Not sure I had ever even noticed that option… :rolleyes:

http://www.grimdawn.com/forums/showthread.php?t=38158

First link in the first.post. named NCFF 0.01.

Brings you to a download page.

To install, create a mods folder in GD folder, unzip in that mod folder, open GD.

To run, click on main campaign on main menu, choose custom, click on mod, hit okay. Start game. Will have to be a new character.

Thanks.

I’ll see about getting support added this week.

No pressure Pete. Still loving the IA since I started using it.

Before the drama starts, some asshat got in contact with me on skype. (Stash Manager guy)

As I’ve mentioned before, IA has automatic updates and anonymous crash reports.

Boo Hoo.

It was just some random dude? Weird. It says auto updates on the first page, and you have mentioned that there is crash reports sent, when it does crash.

Is he trying to take your tool though?

I like the ‘I feel entitled to do so by ethics’ part, for one at best you should feel obligated by them, for another his ethics are clearly biased as he is breaking some actual laws or at the very least treading a very gray area in his quest for an ethic tool

Its the guy who made Stash Manager.

That sucks.

Well, hopefully this does not stop you from continuing with the tool, because I find , IMO, it easier to use than any of the other tools.

Dev Report - Grim Dawn Item Assistant

Conversation
I contacted Marius without any backthoughts regarding his tool since its always nice to have people with similiar intrest and programming knowledge in your contacts and you might even meet great people too, ofcourse i cant proof good intentions (how could i). When i contacted him i offered the website template that i created some years ago for all kinds of tools and programm i create. (Visible here : http://gdsm.420weedwizard.bplaced.net/) The template consists of free non commercial parts of html/css/js plugins and frameworks. Biggest part of it is ofcourse Bootstrap, html/css framework. I offered to send him all the original files for usage for his own distribution website of his tool (item assistant). Since he also uses the same VB2010 visual plugins as my tool GDSM i thought he might be intrested.

[Initial conversation start over skype]
Me
Hey

15:47 Marius
Hello there

Me 15:47
Hey so i got a bunch of people specially from the GD community that wanted to talk with me or that i gave my contacts to. Mind telling me who you are ;D ?

15:48 Marius
item assistant dev

Me 15:49
slipperypete then
pretty solid work you got going there
i checked your site for download and stuff for the tool
looks like you got some inspiration somewhere ;D
you want me to zip the original website for you so you can work with the same plugins and stuff ?

Marius
aaaaaaaaaaah, right… you’re the stash manager guy
hehe
nah, anything better than a blank page with a blue download link is a huge improvement for me, i tend to shy away from web stuff :wink:

I have the complete chatlog that can be publishd if necessary.
As i already stated when i contacted him i didnt have anything bad in mind or had a bad impression of his tool.
I then corresponded with a friend of mine and developer. He is known in this community aswell and can decide for himself if he wants to be a part of this.
When i realised that it might be a good idear to get these 2 people together so they are in contact too in case one of them has questions about each other projects or just in general to increase the knowledge and connectivity in the dev community of GD. He then proceeded to tell me that he, i quote : “Would rahter burn in hell than have something like his tool published on my website or even use it.”. I was surprised since i did ofcourse not read through the whole thread that has 28 pages right now. He then told me about the fact that the programm logs and sends certain computer informations to a web interface. I thought i should check that out and ensure that there is indeed nothing shady going on - more about this in the Technical aspects.

Technical - Logged Informations
(Code comments added by myself)

Error Report Functions

private static ILog logger = LogManager.GetLogger(typeof (ExceptionReporter));
private static List<long> ReportTicks = new List<long>();
private static int maxForcedReports = 2;
private const string URL_CRASHREPORT = “http://ribbs.dreamcrash.org/iagd/crashreport.php”; // Link that Crash Reports get sended to.
private const int MAX_REPORTS_PER_COOLDOWN = 3; // Maximum Crash Reports send within 60 seconds (REPORT_COOLDOWN_MS).
private const int REPORT_COOLDOWN_MS = 60000; // 60 second time window to limit the amount of crash reports.

Function used for identifing users.

public static string UUID
{
get
{
if (string.IsNullOrEmpty(ExceptionReporter._UUID))
{
try
{
ManagementScope scope = new ManagementScope(string.Format("\\{0}\root\CIMV2", (object) “localhost”), (ConnectionOptions) null);
scope.Connect();
ObjectQuery query = new ObjectQuery(“SELECT UUID FROM Win32_ComputerSystemProduct”);
foreach (ManagementBaseObject managementBaseObject in new ManagementObjectSearcher(scope, query).Get())
{
string @string = managementBaseObject[“UUID”].ToString();
if (@string.Distinct<char>().Count<char>() >= 5)
{
ExceptionReporter._UUID = ExceptionReporter.ToHash(@string);
return ExceptionReporter._UUID;
}
}
}
catch (Exception ex)
{
ExceptionReporter.logger.Debug((object) ex.Message);
ExceptionReporter.logger.Debug((object) ex.StackTrace);
}
ExceptionReporter._UUID = ExceptionReporter.ToHash(Environment.MachineName);
}
return ExceptionReporter._UUID;
}
}

The final string gets hashed and then halfed to be sended as a user id to be able to differanciate between logs recieved. The Information that gets hashed here is the UUID ( more here ) and the Machine Name.

Hash Function

private static string ToHash(string toHash)
{
byte[] buffer = new byte[toHash.Length * 2];
Buffer.BlockCopy((Array) toHash.ToCharArray(), 0, (Array) buffer, 0, buffer.Length);
string str = BitConverter.ToString(new SHA1CryptoServiceProvider().ComputeHash(buffer)).Replace("-", “”);
return str.Substring(str.Length / 2);
}

Usage Report Functions

public static void ReportUsage()
{
try
{
string s = string.Format(“version={0}&winver={1}&uuid={2}”, (object) Uri.EscapeDataString(ExceptionReporter.VersionString), (object) string.Format("{0}.{1}", (object) Environment.OSVersion.Version.Major, (object) Environment.OSVersion.Version.Minor), (object) ExceptionReporter.UUID);
HttpWebRequest httpWebRequest = (HttpWebRequest) WebRequest.Create(“http://ribbs.dreamcrash.org/iagd/stats.php”);
byte[] bytes = new ASCIIEncoding().GetBytes(s);
httpWebRequest.Method = “POST”;
httpWebRequest.ContentType = “application/x-www-form-urlencoded”;
httpWebRequest.ContentLength = (long) bytes.Length;
using (Stream requestStream = httpWebRequest.GetRequestStream())
requestStream.Write(bytes, 0, bytes.Length);
using (HttpWebResponse httpWebResponse = (HttpWebResponse) httpWebRequest.GetResponse())
{
if (httpWebResponse.StatusCode != HttpStatusCode.OK)
{
ExceptionReporter.logger.Info((object) “Failed to send anonymous usage statistics to developer.”);
}
else
{
new StreamReader(httpWebResponse.GetResponseStream()).ReadToEnd();
ExceptionReporter.logger.Info((object) “Sent anonymous usage statistics to developer.”);
ExceptionReporter.AddReportTick();
}
}
}
catch (Exception ex)
{
ExceptionReporter.logger.Fatal((object) ex.Message);
ExceptionReporter.logger.Fatal((object) ex.StackTrace);
}
}

This function sends the information gathered in a declared interval (every few minutes/seconds) to the following .php file : “http://ribbs.dreamcrash.org/iagd/stats.php” (More about the final conclusion below)

A function that allows the deactivation of sending reports.

public static bool IsDevVersion
{
get
{
return ((IEnumerable<string>) new string[3]
{
“90143FEBD82F6A9727C0”,
“20BE935C917714A35D66”,
“C753E011C0F9B98B4BCD”
}).Contains<string>(ExceptionReporter.UUID);
}
}
(Reasonable for development, no reason to not include it for everyone as a toggle feature.)
And yes those are his UUIDs.

Conclusion - Logged Informations
The following information get gathered to be concluded to a unique end user id. Computer Name + Windows UUID hashed and halfed. Operation System, Operation System Version, Tool Version Information. In addition since these informations can be logged by a .php website file : IP Adress + All Informations regarding it (Internet Provider, Country,…).All this results in a system that allows tracking of peoples habits in terms of when they use the tool and partially even how they use it (crash reports). It is arguable that these informations are not important. In my personal opinion and also from a developer view there is NO excuse to gathering these informations in the first place except anonym error reports. The programm also contains a Automatic Update part what allows the developer of this tool to publish updates to the public and all of its users. These updates are having a huge potential in terms of virus infections that get implemtented by the developer himself. To remind you : He logs every programm start and how long its running. This results in the fact that he is able to monitor the amount of users his tool has right now. Alot of programms do include a option to auto update its own, your choice if you trust someone that already saves alot of usage information without even telling you - he only admitted to saving informations upon people calling him out about it. The fact that it does contain a auto update function is a additional risk if using a programm from someone with those amounts of ambitions towards user information. The auto update function is switchable between : stable and beta versions but not able to be turned off. This means he even knows what users use what kind of version of his tool. Ofcourse his intentions are as unsure and unproofable as mine. In addition to this gathering of informations without a clear disclaimer being illegal in all states of america and also in the majority of europe including russia,germany,denmark, sweden, finland - his website is hosed in finland so i guess he is finnish.

All i request is a disclaimer above the download telling people about the information that gets gathered and maybe even a way to turn that off.
In the mean time due to his personal refuse to comply i have written this text to explain everything related.

I think this is reasonable and anyone that thinks i am wrong can happily continue to use his programm with all of its bad sides and ofcourse all good sides. Eventhough with all this spy stuff going on i cant recommend this tool at all. I would like to see changes in the future and would go as far to say if youre still using GDSM (my tool) switch to this one since this is far superior in comparision when these issues have been resolved.

I would also like to say :

Anonymity, adjective “anonymous”, is derived from the Greek word ἀνωνυμία, anonymia, meaning “without a name” or “namelessness”. In colloquial use, “anonymous” is used to describe situations where the acting person’s name is unknown. It can be said as not using your own name, simply. Some writers have argued that namelessness, though technically correct, does not capture what is more centrally at stake in contexts of anonymity. The important idea here is that a person be non-identifiable, unreachable, or untrackable.

The informations that get gathered ARE NOT ANONYM by definition. They are backtraceable with Hardware ID and IP Adress.

Want to turn his bullshit off ? Check here.

And yes those are his UUIDs.

Incorrect.

Those are specific UUIDs generated only when running in debug mode.
You don’t see it in the reversed code as it pertains to an #if-else clause.

EDIT: Seems these are in facts UUIDs used by me and a couple of testers for some unreleased functionality.

The following information get gathered to be concluded to a unique end user id. Computer Name + Windows UUID hashed and halfed. Operation System, Operation System Version, Tool Version Information.

The hashed Computer+User is a fallback only if the UUID cannot be obtained.
And lets be clear that neither the username nor the computer name are being sent, merely used to create a string of digits which cannot possible be reversed to obtain the username nor computer name.

In addition since these informations can be logged by a .php website file : IP Adress

I, as well as anyone running a website, using php or any other technology, could easily log this information if so desired.
Its quite possible this information is being logged in the web server access log, regardless of technology used.

He logs every programm start and how long its running

I log up to one usage per day, to obtain an average number of active users, and have absolutely no idea where you summarized that I know how long the program is running, for whatever reason would I care?

The auto update function is switchable between : stable and beta versions but not able to be turned off.

Sure it is, everyone who’ve actually used this tool knows they can simply reject the update.

This means he even knows what users use what kind of version of his tool.

Of course, what use are crash reports if I don’t know what version they are running?

he only admitted to saving informations upon people calling him out about it.

In EVERY SINGLE CRASH REPORT posted on this thread, there has been the line:
INFO [IAGrim.Utilities.ExceptionReporter]: Sent anonymous usage statistics to developer.
And I’ve previously posted the URL, in case anyone were curious.

I would like to see changes in the future and would go as far to say if youre still using GDSM (my tool) switch to this one since this is far superior in comparision when these issues have been resolved.

And alas, we got to the heart of the issue :wink:

How many posts do you have about people losing all of their items?

[b]
Instead of posting a 3 page wall of text, why not simply summarize with:

  • IA lets me see how many active users there are (link to the statistics website has been posted before)
  • IA lets me see which issues people have, in which version, to better resolve them.
  • IA offers to update when a new version is out.

Oh the horrors, the horrors.[/b]

You would care because that is illegal if you do not disclose the fact that anonymous usage statistics are taken and/or offer users a means to opt out of the logging if they so chose.

This is a ‘your word versus mine’ situation in which, ultimately, what you’re suggesting you do with the information has an equal likelihood of being true as it does being false. I wouldn’t ask you to disclose the inner workings of your servers (as that is its own can of worms from a security point of view) but ethically speaking you really need to provide an opt-out mechanism for users for this sort of thing.

Edit: For the record I usually opt-in for these sorts of things myself because I understand the utility they can provide for devs and cater to them as best I can. But either way, you need to give that choice to clients without forcing it upon them.

Nope.

If you do not wish to provide anonymous stats and bug reports for the betterment of IA, you can simply choose not to utilize it.

That is the meager price to pay.

Is that what you think or is that what your lawyer thinks?

Edit: This still comes down to distribution and disclaiming thereof. Imagine, for a moment, that you make all the disclaimers in the world IN THIS THREAD alone, or even on your actual website for downloading the tool. Then imagine someone hosts a mirror of the download elsewhere without providing those disclaimers. If you collect information from people in that circumstance and they were never warned about AUS, the responsibility and legality still falls upon you as the developer of the tool.

In any event, you seem really defensive about this…

My question was, why in the world would I care how long the program runs?

Think?

I am specifying the price, it is not an opinion.

That depends on how malicious you are.

Totally agreed.

From my personal point of view, if I’d use a tool that has no obvious sign or other information that informs me about any other data being raised than what the tool needs to be run in the way it is thought for and later on find out someone has taken data from me which I did not know about and neither have the possibility to disallow it without having to stop using the tool, I would feel kind of cheated and never use anything from that person again.

Also a tool will be attractive for a more wide spread amount of persons if they can choose whether they want this or not since this way one can serve both these who like to support one as developer and these who want to keep their data for themselves.

It simply brings advantages for both user and developer to include a bit more information and the simple question whether one wants to support the dev this way or not as this might get one as developer more symphaty and more persons who are willing to provide data to improve the tool, as more security for the users.

So in this sense, also I’m requesting you to simply put this little bit of information inside the first post to make it visible and include a small check whether people want to support you with data or not.

What possible malicious purpose could anyone have for knowing this?