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;