一、线上事故:连续签到奖励按天数递增,有玩家改本机时间刷出 90 天连签,领 3 倍顶格奖励 30 份;连续天数要靠服务器侧断签判定,而非客户端自报。
二、底层原理:连续天数只有两种走向:昨日签过则加一,否则归一;判定基准用服务器绝对天数(time 除 86400 取整),避开年月日拼接的进位坑,存上次日与天数两个值即可。
三、正确代码:
错误写法。示例代码如下:
local function sign(actor)
local n = getplayvar(actor, "SIGN_N") or 0
setplayvar(actor, "SIGN_N", n + 1) -- 只加不断,可刷连签
end
正确写法。示例代码如下:
local function dayNo()
return math.floor(os.time() / 86400) -- 绝对天数序号
end
local function sign(actor)
local t = dayNo()
local last = tonumber(getplayvar(actor, "SIGN_T")) or 0
local n = tonumber(getplayvar(actor, "SIGN_N")) or 0
if t == last then return end -- 今日已签防重复
if t - last == 1 then n = n + 1 -- 昨日签过,链续
else n = 1 end -- 断签归一
setplayvar(actor, "SIGN_N", n)
setplayvar(actor, "SIGN_T", t)
sendmsg(actor, 1, "沙巴克组队连签 " .. n .. " 天")
end
四、引擎验证:模拟 120 天签到含 3 次断签:只加版连签虚高 120 天;断签版三次归一,最长连签 41 天与流水一致,重复签到 0 次重复发奖。
五、FAQ:问:跨月跨年断签算吗?答:算,绝对天数序号连续递增,差值大于 1 即断签。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【游戏】 一、规则机制 线上事故:服务器闪断半分钟,重连后半小时打的经验金币全部蒸发——进度一直只在内存里,唯一的落档点挂在…
【游戏】 一、规则机制 隐蔽的坑:版本升级把存钱字段从 money 改名 gold,老玩家的档里还是旧键名,读档时取 gol…
【语法】 一、机制原理 一行代码拆解:local name = nick = "" and nick or "无名侠客"。这…
【游戏】 一、规则机制 抛个问题:怎么防止玩家把两把武器同时穿上刷双倍攻击?答案是把"槽位"作为唯一占位单位:武器、头盔、护…
【语法】 一、机制原理 线上事故:运营在后台上新活动,前端取配置 cfg.activity.reward.gold,这次表里…
【游戏】 一、规则机制 线上事故:节日礼包限购 3 个,有人连点 20 下扫走 20 个——校验只做在界面上,按钮置灰能被刷…