好友申请藏在好友面板的角标里,玩家半天不看一眼,申请积压让社交转化掉了一半。好友申请浮窗把新申请推到屏幕角落:显示申请人与等级,附同意与拒绝按钮,多条申请排队依次展示,战斗中自动隐藏不打扰。
浮窗由申请人文本加两个按钮组成,申请先入队列再逐条展示,队列上限 20 条,超出丢弃最旧的申请。
local queue, showing = {}, false
local reqName = GUI:Text_Create(panel, "ReqName", 12, 10, 13, "#FFFFFF", "")
local function nextRequest()
if showing or #queue == 0 then return end
local req = table.remove(queue, 1)
showing = true
GUI:Win_Open("ui/friend_req")
GUI:setText(reqName, req.name .. " Lv." .. req.lv .. " 请求加好友")
end
同意与拒绝按钮各自上行处理结果并推进队列,两条申请之间强制 200 毫秒间隔,防止误触连点把整队全拒。
local okBtn = GUI:Button_Create(panel, "OkBtn", 12, 40, "ui/btn_ok")
local noBtn = GUI:Button_Create(panel, "NoBtn", 100, 40, "ui/btn_no")
local lastOp = 0
local function respond(result)
local now = os.clock()
if now - lastOp < 0.2 then return end
lastOp = now
SL:SendNetMsg(7351, result, 0)
showing = false
nextRequest()
end
GUI:addOnClickEvent(okBtn, function() respond(1) end)
GUI:addOnClickEvent(noBtn, function() respond(2) end)
十条申请排队逐条展示,同意与拒绝的上行结果与服务端好友列表一致;战斗中浮窗自动隐藏、脱战恢复;同一申请人重复申请只展示一次。浮窗展示期间主界面操作不受影响,浮窗不抢键盘焦点,按钮位置固定避免误触队伍技能。队列丢弃最旧申请时同步给服务端发拒绝回执,被丢弃的申请人不再无限等待。浮窗的展示时长上限 15 秒,超时未处理自动折叠,红点计数继续累加不丢失。监控浮窗展示到操作的转化时长,超过 30 秒未处理的申请自动折叠进好友面板红点。
浮窗在战斗中弹出遮挡了技能栏,团战关键时刻被好友申请打断,战斗状态检测加入后浮窗延后到脱战展示。同意按钮的上行消息没带申请编号,两条申请先后到达时同意了后一条、服务端通过的是前一条,消息必须携带申请唯一号。队列丢弃最旧申请没有提示,被丢弃的申请人长时间无响应,丢弃时同步给服务端发拒绝回执让对方知情。申请人改名后浮窗显示旧名字,展示以服务端下发时的最新名字为准。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
实战应用:用在哪里 白天在线高峰多数人忙着下副本,夜间在线长尾需要一个轻社交场景。夜市集市每晚 20 点到 23 点在比奇中…
实战应用:用在哪里 好友系统的互动停留在点赞送花,缺一个紧密绑定的玩法。灵魂契约让两位玩家缔结契约:同图作战时共享契约等级带…
实战应用:用在哪里 新手礼包一元宝一件每人限购一次,定价本意是福利,结果被脚本注册的两千个小号搬空四千万金币等值的物资。限购…
实战应用:用在哪里 新值班凌晨三点遇到登录白屏,翻文档翻了小半个钟头才找到处置步骤。值班手册把常见故障的处置步骤结构化:每条…
实战应用:用在哪里 中文字库包含三万多个字符,完整字体包 30MB,低端机加载慢还吃内存。字体渲染方案把字库分成两档:常用 …
实战应用:用在哪里 经验副本每天限进五次,玩家老问“我还能进几次”。副本入口面板把次数余量与重置倒计时直接挂在入口按钮旁:余…