Same build? We can solve that...
The items in the shop can be used for that. Why not generate truly unique items... i.e make a few list of words, for example:
A = {Huge, Glittering, Purifying, Golden}
B = {Dagger, Mace, Sword, Spike}
...use this for the naming by choosing random words. The naming should probably be based on the stats as well, otherwise you may get a 300 damage Huge Dagger and one with 7 damage.
...and then, define minimum and maximum damage, combined with minimum and maximum stat modifiers, required str/dex. The chance of seeing a good item will then be a function of these parameters. Then randomise, something like minDamage = randomrandom1000 (this will result in a very low chance for high damage... but that's details and can be worked out.)
...same for armour.
For example, a function may generate:
Glittering Golden Spike, +4str -2dex -2int, damage: 67-111, required str=111, dex=99, chance=0.78%.
of course, seeing this kind of weapon again, will be practically zero.
This will result in different bots, a very dynamic game and a more rewarding experience in the shop.