CHUAN2 DEV ENGINE
996 正版授权研发中心 · 360 授权合作教学中心 · 抖音传奇直播合作授权 · 快手推广运营商授权
OFFICIAL LICENSED ACADEMY 查验官方授权证书 →
// 威海旷世互娱教学基地 · 技术文章
进阶实战996引擎离线托管挂机

【进阶实战】离线托管:挂机点数的自动消耗封装

2026-09-24 10:43 作者:996 技术组 0 阅读 996引擎Lua教程传奇脚本进阶实战996引擎Lua离线托管挂机

业务场景

离线托管让玩家下线后角色继续在沃玛大殿挂机:每日登录赠送 240 点托管点数,每小时托管消耗 10 点(一天 24 小时刚好 240 点),点数耗尽自动停止托管。托管状态与点数消耗要断线重连后依然准确——时间差折算是唯一可靠的记账方式。

核心实现

托管开关与点数折算:开启记时刻,点数按离线时长一次性折扣。示例代码如下:

lua
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 点。示例代码如下:

lua
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 技术组基于 996 引擎官方知识库与浮生梦老师课程体系整理。团队长期从事传奇类引擎 Lua 后端逻辑、客户端界面与商业版本交付,内容以官方知识库与真实项目为出处,按版本持续修订。

← 返回文章地图返回研学路径

最新技术文章 · 实战干货

LATEST ARTICLES

全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →

策划架构996引擎

【策划架构】玩法日历:活动排期的疲劳度预算设计

设计初衷 活动排期凭感觉:周末连开三个重头活动,玩家疲于奔命参与率反跌;工作日大空窗,在线曲线断崖。玩法日历设计:以周为单位…

2026-09-25 11:34 996 技术组 · 0 阅读
策划架构996引擎

【策划架构】掉线补偿:分级处置与申诉留痕设计

设计初衷 网络波动掉线让玩家损失战斗进度:世界BOSS打到一半掉线,回来残局已清;副本中掉线,门票作废。掉线补偿设计把掉线当…

2026-09-25 11:34 996 技术组 · 0 阅读
高级技巧996引擎

【高级技巧】圆周等距布点:环绕阵列的坐标生成封装

底层原理 祭坛围一圈火把、世界BOSS周身一圈水晶,这类环绕阵列需要等角度分布坐标:圆心 (cx, cy)、半径 r、数量 …

2026-09-25 11:34 996 技术组 · 0 阅读
策划架构996引擎

【策划架构】影子榜:追赶目标的邻座排名设计

设计初衷 排行榜只有顶端可见:进不了前一百的玩家在榜上查无此人,名次没有参照,追赶没有对象。影子榜设计:为每名玩家生成以自己…

2026-09-25 11:34 996 技术组 · 0 阅读
进阶实战996引擎

【进阶实战】副本重置投票:队伍表决的过半重置封装

业务场景 打错路线或主力减员后想重来,队长单方面重置常引发队内矛盾,误触重置的投诉也不少。投票重置封装:重置需全队表决、同意…

2026-09-25 11:34 996 技术组 · 0 阅读
高级技巧996引擎

【高级技巧】校验和:存档完整性的算术校验封装

底层原理 存档在写入与传输中可能因意外损坏,读档前需要一道完整性判定。校验和的思路:把数据逐字节累加压缩成一个整数指纹,读档…

2026-09-25 11:34 996 技术组 · 0 阅读