行会管理层每周要给成员发福利邮件,一封封发到崩溃。邮件撰写面板支持附件拖拽与群发名单:从背包把物品拖进附件栏、从行会名单勾选收件人、一键群发。前端重点在拖拽的状态管理与群发的确认流程,复杂交互必须防误操作。
背包物品按下拖动到附件栏格子落入并锁定背包原格,拖出附件栏解除锁定;每封邮件最多五个附件,单个附件上限一万金币价值。示例代码如下:
-- 邮件撰写:附件拖拽
local panel = GUI:GetParent("MainTop")
local attachSlots = {}
local function onItemDragToSlot(item, slotIdx)
if slotIdx > 5 then
SL:ShowSystemTips("附件栏最多 5 格")
return
end
if attachSlots[slotIdx] ~= nil then
SL:ShowSystemTips("该附件格已占用")
return
end
attachSlots[slotIdx] = item
item.locked = true
SL:ShowSystemTips("已添加附件:" .. item.name)
end
群发名单从行会成员列表勾选,发送前弹确认层显示收件人数与附件总价值;发送中按钮置灰防重复,回执返回成功数与失败名单,失败可一键重发。示例代码如下:
-- 群发流程:确认与回执
local player = class(actor)
local function confirmMassMail(receivers, subject, attaches)
if #receivers == 0 then
SL:ShowSystemTips("请先勾选收件人")
return
end
local totalValue = 0
for _, a in ipairs(attaches) do totalValue = totalValue + a.value end
SL:ShowSystemTips("即将发送 " .. #receivers .. " 人,附件总价值 " .. totalValue)
SL:SendNetMsg(9993, subject)
end
local function onMassAck(player2, msgId, w1, w2, w3, sMsg)
SL:ShowSystemTips("群发完成:成功 " .. w1 .. ",失败 " .. w2)
if w2 > 0 then
SL:ShowSystemTips("失败名单已复制,可一键重发")
end
end
SL:RegisterLuaNetMsg(9994, onMassAck, nil)
联调覆盖:拖拽加入与移出、附件格满拒绝、群发五十人回执准确、失败重发只发失败名单;发送中重复点击被置灰拦截。大附件邮件在弱网下发送进度可见,超时自动回滚附件到背包。上线后看群发使用率与附件错发申诉量,申诉多就把确认层从文字升级为附件图片清单,复杂确认要可视化。
拖拽曾只在松手时校验,物品拖到面板外松手直接消失,拖拽全程做落点校验,非法落点回弹原格。群发循环发送没有间隔,两百封瞬间打满发送队列被网关限流,改成每封间隔一百毫秒分批。附件锁定曾不回滚,发送失败后背包格永久锁定,玩家以为物品被盗,任何锁定都必须配套回滚路径。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
实战应用:用在哪里 蜈蚣洞深处的黑暗区域是老传奇最经典的压迫感来源:没有火把,屏幕只剩身边一圈微光,黑暗里随时窜出钳虫。视野…
实战应用:用在哪里 行会管理层每周要给成员发福利邮件,一封封发到崩溃。邮件撰写面板支持附件拖拽与群发名单:从背包把物品拖进附…
实战应用:用在哪里 顶级装备直接掉落太破坏生态,长期不掉又让人绝望。碎片兑换把屠龙这样的神器拆成六十块碎片:野外精英怪概率掉…
实战应用:用在哪里 沙巴克守城最怕城防形同虚设:城墙上没箭、城门后没药、守军没人指挥补给。军备库玩法把城防物资做成一套捐献与…
实战应用:用在哪里 金币靠打、元宝靠充,两种货币一旦混在一个变量里记账,对不上账的时候谁都说不清。货币钱包把金币、元宝、绑元…
实战应用:用在哪里 每个在线客户端都要定时发心跳保活,一万在线就是每秒上百个心跳包,其中九成来自挂机与后台窗口。心跳分级按客…