======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