行会仓库与沙巴克国库相关的大号一旦被盗,损失动辄上百件重装。设备锁在登录环节做二次确认:新设备登录时冻结交易并给绑定邮箱式邮件告警,老设备白名单直接放行。方案不依赖外置服务,用角色变量与系统邮件即可完成,适合快速上线。
登录触发里取设备指纹,与角色记录的信任列表比对,命中即放行;未命中则打上冻结标记,限制交易与仓库操作,并发送告警邮件。示例代码如下:
-- QF触发: login 设备指纹校验
function onLoginEx(actor, devId)
local player = class(actor)
local trusted = getplayvar(player, "HUMAN", "DevTrust")
if trusted ~= nil and string.find(trusted, devId, 1, true) then
sendmsg(player, 1, 0, "设备校验通过,祝游戏愉快。")
return
end
setplayvar(player, "HUMAN", "DevFrozen", 1, true)
sendmail("#" .. (getbaseinfo(player, 3) or ""), 7001,
"新设备登录提醒",
"账号在新设备登录,交易与仓库已冻结 2 小时。如非本人操作请立即修改密码。",
"")
sendmsg(player, 1, 0, "新设备登录:交易功能冻结 2 小时。")
end
信任设备最多保留三台,超出时挤掉最早的一台;玩家在原设备上输入道具口令完成新设备验证后解除冻结。示例代码如下:
-- 验证口令后把新设备加入信任列表
local player = class(actor)
local pass = getplayvar(player, "HUMAN", "DevPass")
if pass ~= devCode then
local fails = tonumber(getplayvar(player, "HUMAN", "DevFails") or 0) + 1
setplayvar(player, "HUMAN", "DevFails", fails, true)
if fails >= 5 then
sendmsg(player, 1, 0, "验证失败次数过多,锁定 2 小时。")
return
end
sendmsg(player, 1, 0, "口令错误,剩余尝试次数 " .. (5 - fails) .. " 次。")
return
end
local trusted = getplayvar(player, "HUMAN", "DevTrust") or ""
local list = {}
for d in string.gmatch(trusted, "[^,]+") do list[#list + 1] = d end
if #list >= 3 then table.remove(list, 1) end
list[#list + 1] = devId
setplayvar(player, "HUMAN", "DevTrust", table.concat(list, ","), true)
setplayvar(player, "HUMAN", "DevFrozen", 0, true)
sendmsg(player, 1, 0, "设备验证通过,功能已恢复。")
测试三条路径:老设备登录直接放行、新设备登录触发冻结与告警邮件、口令验证通过后恢复并写入白名单;连加四台设备确认最早的被挤出。线上监控每日新设备告警量,某账号告警后两分钟内即被验证通过属正常换机,反复告警不验证的立即人工介入,防止盗号者试出口令。
设备指纹早期取窗口尺寸加登录时间,重装客户端就变了一串新指纹,白名单形同虚设,换成引擎提供的稳定设备号后才有效。告警邮件曾不带冻结提示,玩家以为被盗急忙改密,结果是自己换手机,文案里写清冻结范围与时长后误报安抚成本下降一大半。白名单还遇到过逗号分隔被设备号里的特殊字符破坏,入库前对设备号做白名单字符过滤。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
实战应用:用在哪里 装备回收商 NPC 每天按评分收购玩家的装备,裁决之杖、骨玉权杖按攻击、持久加权打分,榜上只要前五名。数…
实战应用:用在哪里 沙巴克攻城是全服行会战的最高舞台:攻方砸开城门、抢占皇宫,守方依托城墙与复活点反打。规则设计的关键是节奏…
实战应用:用在哪里 影分身玩法给法师职业补上生存短板:危急时刻召唤四个影分身分担仇恨,敌人需要在六格范围内分辨真身,猜错就浪…
实战应用:用在哪里 组队邀请、行会宣战这类关键信令丢了没有兜底,玩家只能反复手点,高峰期体验很差。重试机制给信令加确认回执:…
实战应用:用在哪里 新资料片上线首日预约量常是日常十倍,一口气全开会让数据库与登录网关同时过载。滚动开区把开区动作排成队列:…
实战应用:用在哪里 百人同屏的沙巴克外围战场,每个玩家每秒跑动会触发数次位置更新,全部即时下发时广播量随人数平方增长,网关先…