How would I make a random room picker, that also has different rarities?
Every room has a Rarity IntValue
I already tried doing this from this post:
local chance = math.random(1,totalWeight)
local counter = 0
local randomRoom
for _,room in pairs(rooms:GetChildren()) do
counter = counter + room.Rarity.Value
if chance <= counter then
randomRoom = room:Clone()
end
end
The totalWeight from 10 different rooms is 77
This does not seem to work, as it only selects the room with Rarity 1 every time
How could I fix this?
1 Like
You’re system is a bit odd in that it pre-defines the totalWeight instead of doing that in the function. You’re also trying to use chance <= counter
to find whether or not to choose the room, and that isn’t totally random. I’ve set up one that defines the totalWeight in the loop itself, perhaps it could help you a bit?
local pool = {}
for _,room in pairs(rooms:GetChildren()) do
for i = 1,room.Rarity.Value do
table.insert(pool,room) -- Define weights
end
end
if #pool > 0 then
local id = math.random(#pool) -- Get a random value
local randomRoom = pool[id]:Clone() -- Assign value to table
end
pool = {} -- Clear the table
3 Likes
Wouldnt that just pick a random room instead of a weighted random room?
EDIT: Nevermind, I see now
Thanks! I didnt think about adding the same room to the table multiple times for a bigger chance of appearing, but it totally makes sense!