How to setup the correct logic for picking a random item from a list based on item's rarity i.e “rare” “normal”

Hello,

    In my game I have different items. I have a function like chooseRandomItem() . I want some items to have 1/1000 chance of being chosen (a unique item), I want some to have 1/10, some 2/10 etc.

    I was thinking of populating a table and picking a random item. For example I’d add 100 of “X” item to the table and than 1 “Y” item. So by choosing randomly from [0,101] I kind of achieve what I want but I was wondering if there were any other ways of doing it. Any help is appreciated, thanks in advance.

try this
http://snippets.luacode.org/snippets/Weighted_random_choice_104

Thanks that is what I wanted. I also got this answer in another board;

items = { &nbsp;&nbsp;&nbsp; Cat&nbsp;&nbsp;&nbsp;&nbsp; = { probability = 100/1000 }, -- i.e. 1/10 &nbsp;&nbsp;&nbsp; Dog&nbsp;&nbsp;&nbsp;&nbsp; = { probability = 200/1000 }, -- i.e. 2/10 &nbsp;&nbsp;&nbsp; Ant&nbsp;&nbsp;&nbsp;&nbsp; = { probability = 699/1000 }, &nbsp;&nbsp;&nbsp; Unicorn = { probability =&nbsp;&nbsp; 1/1000 }, } function getRandomItem() &nbsp;&nbsp;&nbsp; local p = math.random() &nbsp;&nbsp;&nbsp; local cumulativeProbability = 0 &nbsp;&nbsp;&nbsp; for name, item in pairs(items) do &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cumulativeProbability = cumulativeProbability + item.probability &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if p \<= cumulativeProbability then &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return name, item &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end &nbsp;&nbsp;&nbsp; end end

try this
http://snippets.luacode.org/snippets/Weighted_random_choice_104

Thanks that is what I wanted. I also got this answer in another board;

items = { &nbsp;&nbsp;&nbsp; Cat&nbsp;&nbsp;&nbsp;&nbsp; = { probability = 100/1000 }, -- i.e. 1/10 &nbsp;&nbsp;&nbsp; Dog&nbsp;&nbsp;&nbsp;&nbsp; = { probability = 200/1000 }, -- i.e. 2/10 &nbsp;&nbsp;&nbsp; Ant&nbsp;&nbsp;&nbsp;&nbsp; = { probability = 699/1000 }, &nbsp;&nbsp;&nbsp; Unicorn = { probability =&nbsp;&nbsp; 1/1000 }, } function getRandomItem() &nbsp;&nbsp;&nbsp; local p = math.random() &nbsp;&nbsp;&nbsp; local cumulativeProbability = 0 &nbsp;&nbsp;&nbsp; for name, item in pairs(items) do &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cumulativeProbability = cumulativeProbability + item.probability &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if p \<= cumulativeProbability then &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return name, item &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end &nbsp;&nbsp;&nbsp; end end