宠物的放生是资源的回收与取舍:格子满了、资质差了、想换新的——放生让不再需要的宠物转化为资源。放生的实现要点是双重确认、资质的折算与误放的保护,放弃的决策要有安全网。
---宠物放生:两段确认防误操作
function PetRelease.confirm1(actor, petId)
local player = class(actor)
if not player then return false end
local quality = Pet.qualityOf(actor, petId)
if quality >= 4 then
sendmsg(actor, 1, "高品质宠物需要输入放生确认码")
setplayvar(actor, "HUMAN",
"Release_" .. petId, os.time(), 0)
return false
end
PetRelease.doRelease(actor, petId)
return true
end
---二次确认后执行放生
function PetRelease.confirm2(actor, petId)
local mark = getplayvar(actor, 2,
"Release_" .. petId)
if not mark or mark == "" then
sendmsg(actor, 1, "请先点击放生按钮")
return false
end
local quality = Pet.qualityOf(actor, petId)
local refund = quality * 10
PetRelease.remove(actor, petId)
giveitem(actor, "宠物零食", refund)
setplayvar(actor, "HUMAN",
"Release_" .. petId, "", 0)
sendmsg(actor, 1, "放生完成,获得宠物零食 x" .. refund)
return true
end
放生的确认两段执行:第一段标记意图、第二段执行放生,两段之间玩家有时间反悔。高品质宠物的放生额外要求输入确认码,误触的代价用交互的摩擦力对冲。放生的资源按品质折算:品质越高的宠物返还越多,投入的尊重在放生的补偿中体现。
---误放的保护:30 分钟内的撤销窗口
setontimerex(150, 60)
function PetRelease.undoCheck()
for uid, record in pairs(PetRelease.recent) do
if os.time() - record.at > 1800 then
PetRelease.recent[uid] = nil
end
end
end
---撤销放生:30 分钟内可恢复
function PetRelease.undo(actor)
local record = PetRelease.recent[actor:GetUserId()]
if not record then
sendmsg(actor, 1, "没有可撤销的放生记录")
return false
end
PetRelease.restore(actor, record.petId)
PetRelease.recent[actor:GetUserId()] = nil
sendmsg(actor, 1, "宠物已恢复")
return true
end
误放的保护用 30 分钟的撤销窗口:放生后 30 分钟内可以一键恢复宠物,恢复后资源退回。撤销的窗口给手滑的玩家一条退路——误操作的挫败感由撤销的出口稀释。放生的流水记录宠物的基本信息与返还的资源,纠纷的追溯有据可查。放生的确认流程在高品质宠物上再加一道:全服播报级别的宠物需要输入宠物名字确认,名字的匹配是最终的身份校验。
放生的量与撤销率的统计,撤销率超 30% 提示确认流程的交互设计需要优化;资质返还的数量与宠物的品质对账,折算的公式进配表校验。
放生曾经在宠物出战时也执行,战宠凭空消失引发客诉,出战状态的放生拦截补上。撤销曾经不清返还的资源,撤销后资源与宠物双份持有,撤销时回收返还的资源。确认码的验证曾经在宠物转生后失效,转生重置了标记但确认码的键没变,确认码的键绑定宠物唯一 ID。
放生的确认级别按宠物的品质分档:低品质一键放生、高品质两段确认加确认码。放生的资源折算公式进配表,品质与返还的比例公示。误放的撤销入口在放生操作的反馈中直达,撤销的动线零层级。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
实战应用:用在哪里 悬赏捕杀把玩家之间的恩怨变成可托付的系统行为:仇家难以亲自复仇时,花费金条发布悬赏,全服玩家接单击杀目标…
实战应用:用在哪里 策划改表是日常动作,漏填字段、引用了不存在的编号、数值越界这三类问题占了配表故障的绝大多数。等玩家报错再…
实战应用:用在哪里 行会擂台给中小行会提供了固定的对抗出口:挑战方击败守擂方后接管擂台,连胜次数决定每日结算奖励档位。接口层…
实战应用:用在哪里 世界首领战里玩家最关心的是伤害前十名:榜单要求随时插入、随时能按序取出,每来一条伤害记录都重新排序一次太…
实战应用:用在哪里 百人同屏的攻城战里,把每条移动、施法消息广播给全地图是最常见的性能失误。九宫格视野的做法是把地图切成等大…
实战应用:用在哪里 留言板、行会招募语、邮件标题这类字段会被玩家自由填写,并写入角色变量或转发给持久层。拼接式的写法一旦遇到…