Create a new variable to players server-side and set it to 0.
Everytime a player is allowed to get a red item but he doesn’t get it, raise this variable by the chance. For example if there is 1.6% chance to get a red, and the player doesn’t get it raise the variable by 1.6.
When this variable gets higher than a limit (for example 100, 125 or 150), he should get a red item without rolling.
Anytime the player gets a red from any source, set the variable to 0.
Profit. = Reduced number of topics with angry comments about the loot system.
This system would occupy less space on the server than an array for real pseudo numbers from 1-1000 to cover decimals.
When someone always use x weapon but he gets only red z, w, and y.
When opening a chest with a chance to get reds, send the server the id of the weapons the current hero holds in both slots IF he doesn’t have at least 2 copies of reds of them in his inventory (separately). And when these are standard, non-DLC weapons.
OR use your own stats about the weapons the player uses.
When there is a chance to get red weapons, give 5% extra chance per weapon for the used ones.
This might be an extra roll before the standard system or can be incorporated to the current loot system.
It wouldn’t guarantee the chosen types but they would get some advantages.