This issue has been present since at least .48 when you re-did the hive, maybe even earlier but it hasn't happened before that to me. Hell, once a server dying saved my previous char when the retard decided to jump off rify.
The hive's database has extremely poor handle on it. Simply, if you connect to a server that lost the connection to the hive (ex. one that is restarting), and it subsequently regains that connection, you'll get your character wiped.
What the hive needs is a simple check:
- Is the previous character dead. If so, the new one will save regardless of anything.
- If it's the same character (issue each character a random ID number, and a time of creation), if yes, save, otherwise check 3.
- Which character is worth more. This would be a check of all items present on the character up to two levels down. Each item would have an arbitrary value attached to it depending on the rarity (ex. an AUG will me more than a Mosin, a Smersh vest will be worth way way more than a t-shirt). Considering that this is a database situation, where you already fetched the block containing the character from the hard drive, searching that block really costs nothing in terms of time O(n^2) at the worst if the character had a lot of protector cases and medkids/ammo cases.
If the previous character is dead. The new one will be saved over it regardless of anything. (Check 1)
If the first character is alive, but they're the same character, then it'll save regardless of anything. (Check 2)
If the first character is alive, and they're not the same character. Then check 3 will come into play. Since the freshspawn will be worth less than the old char 99% of the time, it won't save. However if the old char itself was worth little, and a player got freshspawned, and subsequently collected enough loot, the new one will be used to substitute for the old one because it is worth more. (Check 3)
Now, this shouldn't open duping due to the fix done in .52. Namely the fix to the:
Sit down, stand up.
Old you gets shot.
Since here, even though you disconnected the server still notifies the hive that you kicked the bucket, and it seemingly checks again when you finish loading that yeah, you died, new character for you.
Another option would be to increase timeout on all restarting servers before anyone can connect. But that's the lazy way out that doesn't guarantee any kind of consistency checking, instead you stall hoping that more time will make it less common.