Собственно задачка простая: имеется таблица с шансами выпадения и надо выдавать случайный результат исходя из шансов получения записей.
Алгоритм простой. Складываем все шансы и генерим случайное число в этом интервале. Далее, в том же порядке, ищем в какой интервал попало полученное значение — это и есть результат.
-- пример шансометра
local tbl = { -- таблица шансов
one = 1, -- что и с каким шансом
two = 2,
three = 7,
four = 10,
empty = 20
}
-- в сумме 40, каждый шанс - это доля от 40
-- на входе таблица с шансами,
-- на выходе выпавший результат
function Shansometr(tbl)
local total = 0
for k, v in pairs(tbl) do
total = total + v
print(k, total)
end
local rnd = math.random(1, total)
print("---------")
print(rnd)
local current = 0
for k, v in pairs(tbl) do
current = current + v
if rnd <= current then
return k
end
end
return "ОЙ" -- правильный вариант: "empty"
end
for i=1, 5 do
warn(Shansometr(tbl))
print("---------")
end
