Mục lục

Kịch bản trả về giá trị ngẫu nhiên theo tỉ lệ xác định

Chức năng

Chú ý:
- Kịch bản là một hàm chức năng có thể vận dụng cho nhiều trường hợp liên quan. Ví dụ mở rương thưởng, khối may mắn…
- Hàm chỉ áp dụng được khi đã nhập các giá trị cần thiết vào bảng và có hàm khác kích hoạt

Giải thích các dòng lệnh

local tab_note = {
    {rate=_},{rate=_},...
} 

local sumSoFar = 0
for index,tab in ipairs(tab_note) do
    sumSoFar = sumSoFar + tab.rate
    tab_note[index].rate = sumSoFar
end

local rand = math.random(1,sumSoFar)
    for index,tab in ipairs(tab_note) do
        if rand <= tab.rate then
            return ...
        end
    end

Dưới đây là bản mẫu


local tab_note = {
    {id=11570,count=10,rate=30},{id=11571,count=4,rate=25},{id=11575,count=2,rate=20},
    {id=11576,count=1,rate=15},{id=11597,count=1,rate=5},{id=11594,count=1,rate=5}
}
local sumSoFar = 0
for index,tab in ipairs(tab_note) do
    sumSoFar = sumSoFar + tab.rate
    tab_note[index].rate = sumSoFar
end
function getRandomId()
    local rand = math.random(1,sumSoFar)
    for index,tab in ipairs(tab_note) do
        if rand <= tab.rate then
            return tab.id, tab.count
        end
    end
end
--[[Hàm sự kiện]]--
local function lucky_block(event)
    if event.blockid == 140 then
        local id, count = getRandomId()
        Player:gainItems(event.eventobjid, id, count, 1)
    end
end
ScriptSupportEvent:registerEvent('Player.ClickBlock',lucky_block)

local tab_note = {
    {id=11570,count=10,rate=30},{id=11571,count=4,rate=25},{id=11575,count=2,rate=20},
    {id=11576,count=1,rate=15},{id=11597,count=1,rate=5},{id=11594,count=1,rate=5}
}

return tab.id, tab.count

Kịch bản tham khảo

local tab_note = {
    {rate=_},{rate=_},...
} – Bảng nhập tỉ lệ kèm các giá trị liên quan
local sumSoFar = 0 – Biến tổng
for index,tab in ipairs(tab_note) do – Thay đổi lại bảng cho phù hợp
    sumSoFar = sumSoFar + tab.rate
    tab_note[index].rate = sumSoFar
end
function getRandomId() – Hàm trả về kết quả theo tỉ lệ đã nhập
    local rand = math.random(1,sumSoFar)
    for index,tab in ipairs(tab_note) do
        if rand <= tab.rate then
            return ...
        end
    end
end

Cre:Nguyễn Khánh 2024/10/17 05:18


Nếu bạn có bất kỳ câu hỏi nào về Chế Độ DEV Nâng Cao, vui lòng tham gia
Mini World Developer Việt Nam chính thức của chúng tôi