I searched around a bit, but couldn't find much on the topic. I am wondering if instead of math.random(1,20) I could have two ranges like math.random([5,10], [13,20]), where x (the random number) can only be between 5 and 10 or between 13 and 20.
Any advice is appreciated.
This is probably what you want, as good as it gets as well
local RNGranges = function(...) -- {num,num},{num,num} local r = math.random(1,#({...})) return math.random(({...})[r][1],({...})[r][2]) end print(RNGranges({5,10},{15,20},{5,6},{11,12},{9990,99999}))
Puppynniko's answer will give an error anyways after constant testing.
Basically the code is saying: "Give me a bunch of tables with ranges that you want to math.random() and I will provide a random table with the rng value."
How to use? The comment I wrote states {num,num},{num,num} where in the code, the first random range is 5,10 and then the second is 15,20.
Easy to use.
The best part about this is that you can have infinite ranges, you can put stuff like:
RNGranges({5,20},{60,100},{4,6},{99492349,43293249329})
as well as simple stuff like
RNGranges({10,100})
To prove that this doesn't pick anything outside of the ranges, check this out: tester code
I looked for a while and I'm pretty sure there's no good way of doing it so this is what I came up with.
local one = math.random(5,20) if one > 10 and one < 13 then local choice = math.random(1,2) if choice == 1 then one = math.random(5,10) else one = math.random(13,20) end end
Basically it will work just fine if its in range but if its not then it will go through the number 1 or 2 and then do one of those ranges then keep that number, if you want to repeat the number multiple times then just add a while true do loop.
Found it out myself after a while;
repeat num = math.random(-30, 30) until num > 10 or num < -10 repeat num2 = math.random(-30, 30) until num2 > 10 or num2 < -10