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