宠物的放生是资源的回收与取舍:格子满了、资质差了、想换新的——放生让不再需要的宠物转化为资源。放生的实现要点是双重确认、资质的折算与误放的保护,放弃的决策要有安全网。
---宠物放生:两段确认防误操作
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 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
实战应用:用在哪里 猪洞七层的白野猪是中级玩家的过渡首领,巡回触发让它在三层地图间按路线巡逻,而非固定在一个点位被反复蹲守。…
实战应用:用在哪里 行会活动零散且缺乏组织性,成员不知道这周行会要做什么。行会目标系统让帮主每周设定行会集体目标(击杀指定首…
实战应用:用在哪里 GM 操作的审计曾散落在各系统日志里,追查一次误操作需要跨三个日志文件。GM 审计台将所有 GM 操作集…
实战应用:用在哪里 背包一百格塞满后找一件药要翻三页。背包筛选器在背包面板顶部加一排筛选标签:按品质(白绿紫橙)与类型(药品…
实战应用:用在哪里 行会广播、地图公告、活动提醒需要发给特定地图的所有玩家,逐个发送时包量随人数线性增长。区域组播按地图分组…
实战应用:用在哪里 凌晨三点的数据库主从延迟和下午三点的聊天频道延迟,影响的范围和紧急度截然不同,但响应流程曾一模一样。故障…