# How do i make something randomly happens with a percent rate?

Im new to script and i want to learn, im not asking a full script. Any suggestions will help me alot thanks

1 Like

I know you didn’t ask for a full script but I don’t know how to explain it without one

``````local percentage = 75
if math.random(100) < percentage then -- ~75% chance of random number being lower than 75
-- make something happen here
end
``````
2 Likes

Math.random isn’t reliable for percentages, since it’s random; Not mathematically calculated. If you had a 10% chance at a legendary and 90% chance at a common, you could end up getting all legendaries and no commons, because it’s randomized.

As for @MessJessGaming, refer to this post: Pick random item based on percentages - #3 by goldenstein64

3 Likes

Yeah if there is a 10% of getting legendaries that means that there is a small chance to get all legendaries.

Also the reference you posted uses `Random.new()`, which uses the same algorithm as `math.random()`

4 Likes

I do get that, but it doesn’t just rely on that.

Also, randomizing something doesn’t decrease the chance of getting a number. It’s the same chance to get any number, but it randomizes that number. Using a mathematical equation to determine rarities is way more reliable.

3 Likes

Your reference does the same thing, just for multiple outcomes

``````-- creates a random number generator, (math.random already has one created)
local R = Random.new()

-- in `math.random(100)` this is used
local MAX_RANGE = 100
-- min is omitted because in `math.random` 0 is the default min
local MIN_RANGE = 0

local percentages = { -- list of random things that can happen
-- when you want something to happen or not you can just use a single percentage
-- (`local percentage` is that single percentage)
Common = {50, 100},
Uncommon = {25, 50},
Rare = {10, 25},
Epic = {0, 10}
}

-- identical to `math.random(MIN_RANGE, MAX_RANGE)`
-- or in our specific case `math.random(100)`
local getRandomItem = R:NextNumber(MIN_RANGE, MAX_RANGE)

local found
-- loop because there are multiple percentages
for item, bounds in pairs(percentages) do

-- `getRandomItem < bounds` is the same as `math.random(100) < percentage`
-- `getRandomItem >= bounds` is omitted because we already know that the random number is above 0
if getRandomItem >= bounds and getRandomItem < bounds then

-- make something happen here

found = item
break
end
end
``````
1 Like