自己改一下ui的元件id。
-- 奖品池(概率要保证总和为1)
local awards = {
{uiid="7545420593511473091-24919_47", awardid=4167, awardnum=1, Probability=0.15},
{uiid="7545420593511473091-24919_49", awardid=4103, awardnum=1, Probability=0.20},
{uiid="7545420593511473091-24919_57", awardid=4153, awardnum=1, Probability=0.10},
{uiid="7545420593511473091-24919_59", awardid=4169, awardnum=2, Probability=0.10},
{uiid="7545420593511473091-24919_62", awardid=4168, awardnum=1, Probability=0.12},
{uiid="7545420593511473091-24919_67", awardid=4169, awardnum=1, Probability=0.20},
{uiid="7545420593511473091-24919_70", awardid=4132, awardnum=1, Probability=0.03},
{uiid="7545420593511473091-24919_72", awardid=4166, awardnum=1, Probability=0.10},
}
-- 从奖品池中随机抽取一个
local function random_award()
local r = math.random()
local sum = 0
for _, v in ipairs(awards) do
sum = sum + v.Probability
if r <= sum then
return v
end
end
return awards[#awards] -- 兜底,避免浮点误差
end
-- 发放奖励
local function Get_rewards(event, award)
local result, name = Item:getItemName(award.awardid)
Player:gainItems(event.eventobjid, award.awardid, award.awardnum, 1) -- 1代表快捷栏
Player:notifyGameInfo2Self(event.eventobjid, "#G你抽到了 " .. (name or "未知物品"))
end
-- 扣除抽奖券(优先扣快捷栏,再扣背包)
local function remove_ticket(objid, num)
num = num or 1
local _, num1, _ = Backpack:getItemNumByBackpackBar(objid, 1, 4166) -- 快捷栏
local _, num2, _ = Backpack:getItemNumByBackpackBar(objid, 2, 4166) -- 背包栏
if num1 + num2 < num then
return false
end
-- 循环扣除 num 张券
local left = num
if num1 > 0 then
local take = math.min(num1, left)
Backpack:removeGridItemByItemID(objid,4166, take)
left = left - take
end
if left > 0 then
Backpack:removeGridItemByItemID(objid,4166, left)
end
return true
end
-- 单抽动画并发奖
local function single_draw(e)
local award = random_award()
Buff:addBuff(e.eventobjid, 50000002,1, 10)
-- 动画效果(逐个闪烁)
for loop = 1, 5 do
for i = 1, #awards do
local ui = awards[i].uiid
Customui:setAlpha(e.eventobjid, "7545420593511473091-24919", ui, 50)
threadpool:wait(0.1)
Customui:setAlpha(e.eventobjid, "7545420593511473091-24919", ui, 100)
end
end
-- 最终高亮中奖格子
Customui:setAlpha(e.eventobjid, "7545420593511473091-24919", award.uiid, 50)
-- 发放奖励
Get_rewards(e, award)
threadpool:wait(0.5)
Customui:showElement(e.eventobjid, "7545420593511473091-24919", "7545420593511473091-24919_43")
end
-- 十连抽逻辑
local function ten_draw(e)
Buff:addBuff(e.eventobjid, 50000002,1, 10)
-- 随机抽10个奖励
local results = {}
for i = 1, 10 do
local award = random_award()
table.insert(results, award)
Player:gainItems(e.eventobjid, award.awardid, award.awardnum, 1)
end
-- 汇总提示
local msg = "#G十连抽结果:"
for _, v in ipairs(results) do
local _, name = Item:getItemName(v.awardid)
msg = msg .. (name or "未知物品") .. "x" .. v.awardnum .. " "
end
Player:notifyGameInfo2Self(e.eventobjid, msg)
end
-- 点击按钮开始抽奖
local function start(e)
Player:playMusic(e.eventobjid,10946,100,1,false)
if e.uielement == "7545420593511473091-24919_43" then -- 单抽按钮
local _, num1, _ = Backpack:getItemNumByBackpackBar(e.eventobjid, 1, 4166)
local _, num2, _ = Backpack:getItemNumByBackpackBar(e.eventobjid, 2, 4166)
if num1 + num2 >= 1 then
if remove_ticket(e.eventobjid, 1) then
Customui:hideElement(e.eventobjid, "7545420593511473091-24919", "7545420593511473091-24919_43")
single_draw(e)
else
Player:notifyGameInfo2Self(e.eventobjid, "#R扣除抽奖券失败")
end
else
Player:notifyGameInfo2Self(e.eventobjid, "#R您的抽奖券不足")
end
elseif e.uielement == "7545420593511473091-24919_39" then -- 十连抽按钮
local _, num1, _ = Backpack:getItemNumByBackpackBar(e.eventobjid, 1, 4166)
local _, num2, _ = Backpack:getItemNumByBackpackBar(e.eventobjid, 2, 4166)
if num1 + num2 >= 10 then
if remove_ticket(e.eventobjid, 10) then
ten_draw(e)
else
Player:notifyGameInfo2Self(e.eventobjid, "#R扣除抽奖券失败")
end
else
Player:notifyGameInfo2Self(e.eventobjid, "#R您的抽奖券不足,至少需要10张")
end
end
end
-- 注册事件
ScriptSupportEvent:registerEvent([=[UI.Button.Click]=], start)懒得放演示图了,有bug评论区留言!🤓👇