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

【进阶实战】浏览历史:寄售行浏览记录的留存与清理封装

2026-09-24 11:46 作者:996 技术组 996引擎Lua教程传奇脚本进阶实战996引擎Lua浏览历史寄售行

业务场景

玩家在寄售行翻到了心仪的裁决之杖却没下手,回头再找要翻几十页。浏览历史:最近浏览的 20 件商品自动记录(再浏览同一件置顶而非重复插入)、留 3 天过期、一键回到"看过的那把杖"。历史的价值在"短、准、新":条目少、去重、有时效。

核心实现

浏览登记:去重置顶、容量淘汰、时间戳更新。示例代码如下:

lua
local function recordView(actor, goodsId)
    actor = getplayerbyname(actor)
    local list = getplayvar(actor, "HUMAN", "ViewHis") or ""
    local entries, found = {}, false
    for e in string.gmatch(list, "[^|]+") do
        local gid = string.match(e, "([^:]+):")
        if gid == goodsId then
            found = true
        else
            entries[#entries + 1] = e
        end
    end
    if not found and #entries >= 20 then
        table.remove(entries, 1)
    end
    entries[#entries + 1] = goodsId .. ":" .. os.time()
    setplayvar(actor, "HUMAN", "ViewHis", table.concat(entries, "|"), 1)
end

历史查询:跳过过期条目,展示剩余有效浏览。示例代码如下:

lua
local function showHistory(actor)
    actor = getplayerbyname(actor)
    local list = getplayvar(actor, "HUMAN", "ViewHis") or ""
    local shown = 0
    for e in string.gmatch(list, "[^|]+") do
        local gid, at = string.match(e, "([^:]+):(%d+)")
        if os.time() - tonumber(at) <= 3 * 86400 then
            shown = shown + 1
            sendmsg(actor, 1, shown .. ". 商品 " .. gid)
        end
    end
    if shown == 0 then
        sendmsg(actor, 1, "近 3 天没有浏览记录。")
    end
end

接口拆解

string.gmatch 加 [^|]+ 拆历史条目,string.match 解析"商品ID:浏览时刻"两段。再浏览置顶的实现:先把同名旧条目整体剔除,再把新时间戳条目追加到尾部(尾部即最新)。table.remove(entries, 1) 淘汰头部最旧,容量 20 封顶。setplayvar 第五参 1 落库,浏览历史跨重启连续。3 天时效在查询侧过滤,过期条目不展示也不必立即物理删除。

踩坑记录

浏览历史踩过三个坑:一是去重逻辑只加不删,同一商品反复浏览产生几十条重复,置顶与去重必须一次遍历完成;二是容量淘汰顺序写在去重之后,先超限再置顶的顺序让最新记录反被挤掉,正确顺序是先剔旧同名、再判断容量、末尾追加新条目;三是过期过滤只在查询侧做,物理条目越攒越多,查询时顺带把过期条目从持久变量里摘除,读时清理一条龙。

作者履历与出处

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

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

最新技术文章 · 实战干货

LATEST ARTICLES

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

策划架构996引擎

【策划架构】沙城驻军:占领方的防务与轮值设计

设计初衷 攻城战结束后占领方只带走税收:胜利的行会拿城就走,沙巴克城内防务空虚——落败方三天后卷土重来,攻防变成无休止的拉锯…

2026-09-25 14:46 996 技术组
高级技巧996引擎

【高级技巧】洪水填充:连通区域的标记算法

底层原理 地图编辑器点一下刷掉相邻同色区域、扫雷点开一片空地——背后都是洪水填充:从起点出发,把所有满足条件且连通的位置逐个…

2026-09-25 14:46 996 技术组
策划架构996引擎

【策划架构】转会制度:玩家换帮的冷却与资产设计

设计初衷 玩家想换帮会被三重锁困住:帮贡清零、职位归零、人情作废——转会成本高到宁可忍受,涣散的帮会靠沉没成本锁人,兴旺的帮…

2026-09-25 14:46 996 技术组
策划架构996引擎

【策划架构】退役仪式:老玩家的告别与传承设计

设计初衷 老玩家退游总是静悄悄:某一天不再上线,好友几个月后才发现——十年的江湖没有告别,装备与荣誉随账号一起沉睡。退役仪式…

2026-09-25 14:46 996 技术组
高级技巧996引擎

【高级技巧】树形结构:parentId扁平表转树的封装

底层原理 行会职位、技能树、分类目录在存储层都是扁平表:每行带 id 与 parentId,运行时却需要树形递归展示。扁平转…

2026-09-25 14:46 996 技术组
高级技巧996引擎

【高级技巧】快速幂:指数运算的对数加速

底层原理 求 b 的 n 次方,逐个连乘是 O(n);快速幂把指数按二进制拆解——n 的每一个二进制位对应一次底数平方,位为…

2026-09-25 14:46 996 技术组