我是lua后端老师!
小仙,你这个问题很常见,想优化回收提示的体验,让界面更清爽。我们来分析一下你的代码,然后给出修改方案。
你的 `huishou_queren` 函数里,每次回收一个物品都会执行一次 `sendmsg`,所以会刷屏。我们需要把获得物品的信息先累积起来,最后统一发送。
修改思路如下:
1. 在循环开始前,创建一个表(比如 `reward_summary`)来记录每种物品的总数量。
2. 在循环内,不再直接发送提示,而是将获得的物品名称和数量累加到 `reward_summary` 表中。
3. 循环结束后,检查是否有回收(`biaoji` 为 `true`),如果有,就遍历 `reward_summary` 表,生成一条合并的提示信息并发送。
以下是修改后的 `huishou_queren` 函数代码:
```lua
-- 回收脚本
function huishou_queren(actor,p1,p2,p3,p4)
-- 任务6 完成
local task_id = getplaydef(actor,"U40")
if task_id == 6 and getplaydef(actor,"U41") == 3 then
setint(actor,"自动回收",1)
newcompletetask(actor,task_id)
setplaydef(actor,"U42",1)
end
-- 无可回收提示
local biaoji = false
-- 畅玩特权 绑定金币改成金币
local bind = false
if checktitle(actor,"畅玩特权") then
bind = true
end
-- 回收金币倍率(204号属性)
local beilv = 1 + getbaseinfo(actor,51,204) / 10000
-- 创建一个表来汇总本次回收获得的所有物品 -- 注解:用于合并提示信息
local reward_summary = {}
for k, v in ipairs(t) do
for kk, vv in ipairs(v.info) do
if getint(actor,"回收系列"..vv.name) == 1 then
for kkk, vvv in ipairs(vv.equip) do
if getint(actor,"回收装备"..vvv) == 0 then
local equip_num = getbagitemcount(actor,vvv) -- 物品数量
if equip_num >= 1 then
local item_num = vv.give[kkk][2] * equip_num
local item_name = vv.give[kkk][1]
-- 回收金币添加倍率
if vv.give[kkk][1] == "金币" then
item_num = vv.give[kkk][2] * equip_num * beilv
if not bind then
item_name = "绑定金币"
end
end
biaoji = true
takeitem(actor,vvv,equip_num,0,"回收",true) -- 扣除物品
gives(actor, item_name .."#".. item_num ,"回收")
-- 将获得的物品信息累加到汇总表中,而不是直接发送消息 -- 注解:合并提示信息
if reward_summary[item_name] then
reward_summary[item_name] = reward_summary[item_name] + item_num
else
reward_summary[item_name] = item_num
end
end
end
end
end
end
end
if biaoji then
refreshbag(actor)
-- 构建合并后的提示信息 -- 注解:生成最终提示
local msg_parts = {}
for item_name, total_num in pairs(reward_summary) do
table.insert(msg_parts, item_name .. "*" .. total_num)
end
local final_msg = table.concat(msg_parts, " ")
sendmsg(actor, 1, '{"Msg":"[回收完成] 获得: ' .. final_msg .. '","FColor":255,"BColor":219,"Type":1}')
else
sendmsg(actor, 1, '{"Msg":"<font color=\'#ff0000\'>无可回收物品!!</font>","Type":9}')
end
end
```
**修改说明:**
1. 新增了 `local reward_summary = {}` 用于存储物品名和对应的总数量。
2. 在成功回收物品的代码块内,删除了原来的 `sendmsg`,改为向 `reward_summary` 表累加数量。
3. 在循环结束后,如果 `biaoji` 为 `true`,则遍历 `reward_summary` 表,将物品信息拼接成字符串 `final_msg`,然后通过一次 `sendmsg` 发送出去。
这样修改后,无论回收多少件物品,玩家都只会收到一条清晰的总获得提示,不会刷屏了。如果还有其他不明白的地方,随时可以问我,或者请教浮生梦尊师哦!