离线托管让玩家下线后角色继续在沃玛大殿挂机:每日登录赠送 240 点托管点数,每小时托管消耗 10 点(一天 24 小时刚好 240 点),点数耗尽自动停止托管。托管状态与点数消耗要断线重连后依然准确——时间差折算是唯一可靠的记账方式。
托管开关与点数折算:开启记时刻,点数按离线时长一次性折扣。示例代码如下:
local function toggleTrustee(actor)
actor = getplayerbyname(actor)
local on = getplayvar(actor, "HUMAN", "TrusteeOn")
if on == 1 then
settleTrustee(actor)
setplayvar(actor, "HUMAN", "TrusteeOn", 0, 1)
sendmsg(actor, 1, "离线托管已关闭。")
return
end
setplayvar(actor, "HUMAN", "TrusteeOn", 1, 1)
setplayvar(actor, "HUMAN", "TrusteeAt", os.time(), 1)
sendmsg(actor, 1, "离线托管已开启,每小时消耗 10 点。")
end
local function settleTrustee(actor)
actor = getplayerbyname(actor)
local startAt = tonumber(getplayvar(actor, "HUMAN", "TrusteeAt")) or 0
if startAt == 0 then
return
end
local hours = math.min(24, math.floor((os.time() - startAt) / 3600))
local pts = tonumber(getplayvar(actor, "HUMAN", "TrusteePts")) or 0
local cost = hours * 10
if pts < cost then
cost = math.floor(pts / 10) * 10
end
setplayvar(actor, "HUMAN", "TrusteePts", pts - cost, 1)
setplayvar(actor, "HUMAN", "TrusteeAt", os.time(), 1)
sendmsg(actor, 1, "托管结算:消耗 " .. cost .. " 点,剩余 " .. (pts - cost) .. " 点。")
end
点数发放与余额查询:登录触发发放当日 240 点。示例代码如下:
local function grantDailyPts(actor)
actor = getplayerbyname(actor)
local today = os.date("%Y%m%d")
if getplayvar(actor, "HUMAN", "TrusteeGrant") == today then
return
end
setplayvar(actor, "HUMAN", "TrusteeGrant", today, 1)
setplayvar(actor, "HUMAN", "TrusteePts",
(tonumber(getplayvar(actor, "HUMAN", "TrusteePts")) or 0) + 240, 1)
end
getplayvar/setplayvar 第五参 1 落库:托管开关、开始时刻、点数三项全部持久化,断线重连账目不断。os.time 差值除 3600 折算托管小时,math.min(24, ...) 封顶单次结算上限。TrusteeGrant 日期键防重复发放,当日只发一次。toggleTrustee 的开与关共用一个入口,状态自反。
离线托管踩过三个坑:一是点数消耗靠每小时的定时器硬跑,离线玩家没有定时器在跑,挂了 8 小时只扣了上线后那一小时,改时间差折算后离线账目才对齐;二是单次结算无上限,玩家忘记关托管一个月后回来,240 点不够扣直接扣成负数,单次结算封顶 24 小时并按持有点数截断;三是托管点数发放没有防重,重连一次发一次,日期键一天一次是所有每日发放的通用闸门。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
设计初衷 活动排期凭感觉:周末连开三个重头活动,玩家疲于奔命参与率反跌;工作日大空窗,在线曲线断崖。玩法日历设计:以周为单位…
设计初衷 网络波动掉线让玩家损失战斗进度:世界BOSS打到一半掉线,回来残局已清;副本中掉线,门票作废。掉线补偿设计把掉线当…
底层原理 祭坛围一圈火把、世界BOSS周身一圈水晶,这类环绕阵列需要等角度分布坐标:圆心 (cx, cy)、半径 r、数量 …
设计初衷 排行榜只有顶端可见:进不了前一百的玩家在榜上查无此人,名次没有参照,追赶没有对象。影子榜设计:为每名玩家生成以自己…
业务场景 打错路线或主力减员后想重来,队长单方面重置常引发队内矛盾,误触重置的投诉也不少。投票重置封装:重置需全队表决、同意…
底层原理 存档在写入与传输中可能因意外损坏,读档前需要一道完整性判定。校验和的思路:把数据逐字节累加压缩成一个整数指纹,读档…