JSFiddle - React, Tailwind, and code Playground
by XarX
HTML
<pre id=painted></pre>
JavaScript
var _painted = 0, $painted = document.getElementById('painted');
var rarity = [1,10,100,1000,10000],
lootings = 333330,
itemCount = 0,
min = 999999999,
max = 0,
treasureItems = 5;
var loot = [
["Common Item 001",rarity[4],0],
["Common Item 002",rarity[4],0],
["Common Item 003",rarity[4],0],
["Rare Item 001",rarity[3],0],
["Rare Item 002",rarity[3],0],
["Rare Item 003",rarity[3],0],
["Epic Item 001",rarity[2],0],
["Epic Item 002",rarity[2],0],
["Epic Item 003",rarity[2],0],
["Legendary Item 001",rarity[1],0],
["Legendary Item 002",rarity[1],0],
["Legendary Item 003",rarity[1],0],
["Artifact Item 001",rarity[0],0],
["Artifact Item 002",rarity[0],0],
["Artifact Item 003",rarity[0],0]];
for (i=0;i<loot.length;i++) itemCount+= loot[i][1];
for (a=0;a<lootings;a++) {
var safety = true,
safetyCount = 0,
chosenItem = "None",
itemNr = Math.floor(Math.random()*itemCount+1),
item = itemNr;
//$painted.textContent+= "Rolled: " + itemNr + "\n";
if (itemNr < min) min = itemNr;
else if (itemNr > max) max = itemNr;
while (item != 0 && safety) {
item-=loot[safetyCount][1];
if (item<=0) {
chosenItem = loot[safetyCount][0];
safety = false;
loot[safetyCount][2]++;
}
//$painted.textContent+= item + "\n";
if (safetyCount > 100) safety = false;
else safetyCount++;
}
if (treasureItems > 0) {
$painted.textContent+= chosenItem + "\n";
treasureItems--;
}
}
$painted.textContent+= "\n\n";
for (i=0;i<loot.length;i++) $painted.textContent+= loot[i][0] + " : " + loot[i][2] + "\n";
$painted.textContent+= "\nMin: " + min + "\nMax: " + max + "\nItemCount: " + itemCount;