EDIT -- I finally remember my bnet account and posted on official forums myself.
Hello, I would like to present an extremely simple fix that could be added to D3 to permanently remove all possibility of duping.
I would greatly appreciate it if this information could be relayed to someone on the development team. At the very least someone could re-post it on the official forums where Bashiok lurks. All that needs to happen is for Bashiok to see it and mention it to one of the programmers.
The fix:
Each server has a unique ID, and also maintains a unique ID for every item that drops. ie, server #53 drops items that have ID's #0, #1, #2, #3, #4 ... in that order. These ID's are stored on the implementation of the item class. In order to minimize work, clashing ID's can be checked only when a player enters the game. Each game maintains a hash table for the items in possession by all players. Whenever a player joins the game, the items of that player are hashed by unique ID. If another item exists having the same unique ID, then it is a dupe, and one or both can be destroyed (depending on game policy).
Note that this has O(n) time complexity for a player having n items to join the game, which is fast and will not cause any noticeable slowdown. Also note that it is not necessary to update the hash table with every item that is picked up AFTER the player has joined the game.
Here is a pseudo-code implementation:
struct BaseD3Item {
int genServerId;
uint64_t genItemId;
};
struct ItemRecord {
int playerId;
int itemIndex;
};
struct ServerGame {
int serverId;
uint64_t itemId;
uint64_t RequestNewItemId() {
return ++itemId;
}
hash_table< pair , ItemRecord > game_items;
};
void Player:n_join_game() {
for(int i=0; i < inventory.size(); ++i)
{
i::iterator it = game_items.find(key);
if( it != game_items.end() ) {
printf("DUPE DETECTED!");
} else {
ItemRecord rec = { this.playerId, i };
game_items[ key ] = rec;
}
}
}
That's all it takes...it ends all possibility of duping based on server lag, crash, rollback, programming glitches, etc..because if a dupe ever happens, it will be eliminated when the player joins a new game.
... Fucking incredible idea man, great work.
The sheer amount of item ID's may get rather large and cumbersome though, and could result in network slowdowns.
I'd assume that they would only assing item ID's to the more powerful items then, since having them assigned to say... potions would quickly get out of hand.
Assinging them to unique items, and possibly sets and rares would work fine. Magic and Normal items would have to be ignored, since they drop very often.
Rollback Post to RevisionRollBack
Quote from "Sixen" »
"One in every 10 million people can potentially have a headache from this pill." God forbid she is the 0.000000001% of having a headache.
I certainly don't know enough about programming / game design to be overtly critical of whatever it is you're suggesting, and I don't mean to come off as just some fanboy, but I guess this is my big question:
If this was plausible / workable, what haven't Blizzard implemented it yet?
It's certainly possible they just haven't thought of whatever it is you've thought up, but, and I mean no offense -- that's not probable.
If it's as simple as I understood it is, then either has Blizzard already thought about it, or they found a problem with it that we haven't. They are Blizzard after all
... Fucking incredible idea man, great work.
The sheer amount of item ID's may get rather large and cumbersome though, and could result in network slowdowns.
No, the whole point is that this method is not cumbersome in the slightest. At the very worst it might increase the time to join a game by 0.0001 seconds...not something you'll ever be aware of.
If this was plausible / workable, what haven't Blizzard implemented it yet?
After posting on bnet forums some people responding indicating that they think this is already being put in D3.
If it's as simple as I understood it is, then either has Blizzard already thought about it, or they found a problem with it that we haven't. They are Blizzard after all
And Blizzard does have an excellent track record for releasing games that are highly susceptible to dupes and hacks...
First, Diablo isn't WoW, they don't have thousands of super powerful computer running their servers which is partly why it has monthly fees. I don't think you realize the insane amount of items ID that would be created and that their servers would need to load, keep and compare all the time.
The reasons duping were possible are flaws within the making of the game itself. Every game has its flaws of course, but Diablo 2 has flaws way beyond the standard, because quite an old game, that allows Duping, I'm guessing mainly related to how client and server information are handled, and what decides what and how.
Your system is just like a way to ignore the true problem of things like duping and create a funky solution. Can't say it wouldn't work, but its technically a very bad idea for dodging the real issue.
I am also impressed that you even possibly -think- that such an idea, or that ANY effective idea to counter duping and the like, would not be found yet by Blizzard, with so many people working on the game. Please don't waste their times with that.
First, Diablo isn't WoW, they don't have thousands of super powerful computer running their servers which is partly why it has monthly fees. I don't think you realize the insane amount of items ID that would be created and that their servers would need to load, keep and compare all the time.
The reasons duping were possible are flaws within the making of the game itself. Every game has its flaws of course, but Diablo 2 has flaws way beyond the standard, because quite an old game, that allows Duping, I'm guessing mainly related to how client and server information are handled, and what decides what and how.
Your system is just like a way to ignore the true problem of things like duping and create a funky solution. Can't say it wouldn't work, but its technically a very bad idea for dodging the real issue.
I am also impressed that you even possibly -think- that such an idea, or that ANY effective idea to counter duping and the like, would not be found yet by Blizzard, with so many people working on the game. Please don't waste their times with that.
Dude.
It's going to be just a few billion letters. Doesn't take THAT much space.
Rollback Post to RevisionRollBack
It's the decisions you make when you have no time to make them that define who you are.
The reasons duping were possible are flaws within the making of the game itself. Every game has its flaws of course, but Diablo 2 has flaws way beyond the standard, because quite an old game, that allows Duping, I'm guessing mainly related to how client and server information are handled, and what decides what and how.
The duping methods in D2 took advantage of the fact that the server cannot atomically save 2 players at the same time. After it saves 1 player, they could overload the server causing lag or crash which caused the other player to not be saved. You can never permanently fix this problem because you can't make both happen atomically...for example, extreme case, but what if a lightning strike hits a server after it saved 1 char but not the other? Then that could cause duped items.
Your system is just like a way to ignore the true problem of things like duping and create a funky solution. Can't say it wouldn't work, but its technically a very bad idea for dodging the real issue.
First, I agree that a more secure transaction system should be implemented to get at the root of the problem. But like I pointed out above, it is impossible to truly prevent the problem that way...which is why it is beneficial to have a failsafe method like this, which merely cleans up any mess that somehow managed to escape all the efforts at creating the (impossible) perfectly immune system.
I am also impressed that you even possibly -think- that such an idea, or that ANY effective idea to counter duping and the like, would not be found yet by Blizzard, with so many people working on the game. Please don't waste their times with that.
1) You buy a product from a company and it has a bug.
2) 5 years later they release a new version of the product, and it still has the bug.
3) Another 5 years later, you are not allowed to suggest a fix for the bug, because you just assume it won't be there?
That's exactly how it works. Duped items poof when the system finds out that it's a duplicate of another item, which have ID's similar to what you described. I do love your code, though. It's very efficient.
Edit- And the reason everyone perms possibly duped items before they leave a game is because Battle.net checks them going in and out.
Poofing duped items is one thing, and is also very easy to do.
On the other hand, making sure no duped items are made to begin with, is another thing and its a design thing. They said many times they coded it with duped items in mind so I would say we are safe on this.
For D3 imo they need to find better way.. try to prevent them from happening. I'm sure there is a way.. make a backup servers or something that if one crashes the other still has the valid data.
Hello, I would like to present an extremely simple fix that could be added to D3 to permanently remove all possibility of duping.
I would greatly appreciate it if this information could be relayed to someone on the development team. At the very least someone could re-post it on the official forums where Bashiok lurks. All that needs to happen is for Bashiok to see it and mention it to one of the programmers.
The fix:
Each server has a unique ID, and also maintains a unique ID for every item that drops. ie, server #53 drops items that have ID's #0, #1, #2, #3, #4 ... in that order. These ID's are stored on the implementation of the item class. In order to minimize work, clashing ID's can be checked only when a player enters the game. Each game maintains a hash table for the items in possession by all players. Whenever a player joins the game, the items of that player are hashed by unique ID. If another item exists having the same unique ID, then it is a dupe, and one or both can be destroyed (depending on game policy).
Note that this has O(n) time complexity for a player having n items to join the game, which is fast and will not cause any noticeable slowdown. Also note that it is not necessary to update the hash table with every item that is picked up AFTER the player has joined the game.
Here is a pseudo-code implementation:
That's all it takes...it ends all possibility of duping based on server lag, crash, rollback, programming glitches, etc..because if a dupe ever happens, it will be eliminated when the player joins a new game.
The sheer amount of item ID's may get rather large and cumbersome though, and could result in network slowdowns.
I'd assume that they would only assing item ID's to the more powerful items then, since having them assigned to say... potions would quickly get out of hand.
Assinging them to unique items, and possibly sets and rares would work fine. Magic and Normal items would have to be ignored, since they drop very often.
If this was plausible / workable, what haven't Blizzard implemented it yet?
It's certainly possible they just haven't thought of whatever it is you've thought up, but, and I mean no offense -- that's not probable.
No, the whole point is that this method is not cumbersome in the slightest. At the very worst it might increase the time to join a game by 0.0001 seconds...not something you'll ever be aware of.
After posting on bnet forums some people responding indicating that they think this is already being put in D3.
And Blizzard does have an excellent track record for releasing games that are highly susceptible to dupes and hacks...
First, Diablo isn't WoW, they don't have thousands of super powerful computer running their servers which is partly why it has monthly fees. I don't think you realize the insane amount of items ID that would be created and that their servers would need to load, keep and compare all the time.
The reasons duping were possible are flaws within the making of the game itself. Every game has its flaws of course, but Diablo 2 has flaws way beyond the standard, because quite an old game, that allows Duping, I'm guessing mainly related to how client and server information are handled, and what decides what and how.
Your system is just like a way to ignore the true problem of things like duping and create a funky solution. Can't say it wouldn't work, but its technically a very bad idea for dodging the real issue.
I am also impressed that you even possibly -think- that such an idea, or that ANY effective idea to counter duping and the like, would not be found yet by Blizzard, with so many people working on the game. Please don't waste their times with that.
Dude.
It's going to be just a few billion letters. Doesn't take THAT much space.
It's the decisions you make when you have no time to make them that define who you are.
The duping methods in D2 took advantage of the fact that the server cannot atomically save 2 players at the same time. After it saves 1 player, they could overload the server causing lag or crash which caused the other player to not be saved. You can never permanently fix this problem because you can't make both happen atomically...for example, extreme case, but what if a lightning strike hits a server after it saved 1 char but not the other? Then that could cause duped items.
First, I agree that a more secure transaction system should be implemented to get at the root of the problem. But like I pointed out above, it is impossible to truly prevent the problem that way...which is why it is beneficial to have a failsafe method like this, which merely cleans up any mess that somehow managed to escape all the efforts at creating the (impossible) perfectly immune system.
1) You buy a product from a company and it has a bug.
2) 5 years later they release a new version of the product, and it still has the bug.
3) Another 5 years later, you are not allowed to suggest a fix for the bug, because you just assume it won't be there?
Edit- And the reason everyone perms possibly duped items before they leave a game is because Battle.net checks them going in and out.
On the other hand, making sure no duped items are made to begin with, is another thing and its a design thing. They said many times they coded it with duped items in mind so I would say we are safe on this.
For D3 imo they need to find better way.. try to prevent them from happening. I'm sure there is a way.. make a backup servers or something that if one crashes the other still has the valid data.
RIP: Demon Hunter: lvl 50 | Barb: lvl 60 (plvl 5) | Monk: lvl12 & lvl70 (plvl 200)