======Kịch bản trả về giá trị ngẫu nhiên theo tỉ lệ xác định======
====Chức năng====
  * Kịch bản cung cấp hàm trả về giá trị ngẫu nhiên với tỉ lệ được xác định\\
**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=_},...
} 
  * Bảng nhập tỉ lệ kèm các thông tin khác liên quan (Tỉ lệ tuỳ chỉnh không bắt buộc theo dạng có tổng là 100)
----
local sumSoFar = 0
for index,tab in ipairs(tab_note) do
    sumSoFar = sumSoFar + tab.rate
    tab_note[index].rate = sumSoFar
end
  * sumSoFar: BIến gán giá trị tổng tỉ lệ
  * Vòng lặp nhằm đặt lại giá trị tỉ lệ trong bảng đã nhập cho thuận tiện xác định giá trị trả về ngẫu nhiên với tỉ lệ được xác định
----
local rand = math.random(1,sumSoFar)
    for index,tab in ipairs(tab_note) do
        if rand <= tab.rate then
            return ...
        end
    end
  * math.random(1,sumSoFar): Giá trị rand được gán cho số từ 1 đến giá trị tổng tị lệ
  * Vòng lặp kèm điều kiện nhằm xác định thông tin cần trả về
----
====Dưới đây là bản mẫu====
  * Chức năng: Người chơi nhấp vào khối chỉ định ( ID:140 ) sẽ nhận ngẫu nhiên 6 loại vật phẩm theo số lượng và tỉ lệ xác định
{{ :script:feature:random_value_by_ratio.mp4?direct&600 | }}
----
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}
}
  * Bảng đã được thay đổi với tỉ lệ có tổng là 100
  * id: ID vật phẩm
  * count: Số lượng vật phẩm nhận được
  * rate: Tỉ lệ nhận được vật phẩm
----
return tab.id, tab.count
  * Thông tin được trả về: ID vật phẩm, Số lượng vật phẩm
----
====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:**[[https://www.facebook.com/fb.ngkhanh.mc|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\\
 **[[https://www.facebook.com/groups/miniworldvn.developer|Mini World Developer Việt Nam]]** chính thức của chúng tôi