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

【进阶实战】备注检索:按好友备注名查找定位封装

2026-09-24 18:19 作者:996 技术组 0 阅读 996引擎Lua教程传奇脚本进阶实战996引擎Lua备注检索好友管理

业务场景

好友 100 人,玩家给 30 个人设了备注("打宝搭档""行会主力"),但搜备注时搜不到——引擎的查找只匹配角色名,不匹配备注名。备注检索封装:遍历好友列表的备注字段做纯文本匹配,让搜"搭档"能找到所有备注含"搭档"的好友。

核心实现

备注检索:遍历好友列表,匹配备注字段,返回命中列表。示例代码如下:

lua
local function searchByRemark(actor, keyword)
    actor = getplayerbyname(actor)
    local list = getplayvar(actor, "HUMAN", "FriendList") or ""
    local hits = {}
    for entry in string.gmatch(list, "[^|]+") do
        local name, remark = string.match(entry, "([^:]+):(.*)")
        if remark and string.find(remark, keyword, 1, true) then
            hits[#hits + 1] = name
        end
    end
    if #hits == 0 then
        sendmsg(actor, 1, "没有备注含「" .. keyword .. "」的好友。")
        return hits
    end
    sendmsg(actor, 1, "找到 " .. #hits .. " 位好友:")
    for _, name in ipairs(hits) do
        sendmsg(actor, 1, "  " .. name)
    end
    return hits
end

备注设置:写入或更新好友的备注字段。示例代码如下:

lua
local function setRemark(actor, friendName, remark)
    actor = getplayerbyname(actor)
    local list = getplayvar(actor, "HUMAN", "FriendList") or ""
    local updated = {}
    local found = false
    for entry in string.gmatch(list, "[^|]+") do
        local name = string.match(entry, "([^:]+)")
        if name == friendName then
            updated[#updated + 1] = friendName .. ":" .. remark
            found = true
        else
            updated[#updated + 1] = entry
        end
    end
    if not found then
        sendmsg(actor, 1, "好友列表中无此人。")
        return
    end
    setplayvar(actor, "HUMAN", "FriendList", table.concat(updated, "|"), 1)
    sendmsg(actor, 1, "已更新 " .. friendName .. " 的备注。")
end

接口拆解

FriendList 格式为 "名字:备注|名字:备注|...",每条记录用冒号分隔名字与备注。string.match(entry, "([^:]+):(.*)") 一次拆出名字与备注两段。string.find 第四参 true 关闭模式匹配,关键词含特殊字符也不出错。getplayvar/setplayvar 第五参 1 落库——好友列表与备注是长期社交资产。

踩坑记录

备注检索踩过三个坑:一是 find 未传 true 导致纯文本关键词被当 pattern 解析,含括号或点号的关键词匹配失败;二是备注更新只写了新备注没更新时间戳,按备注排序时旧条目跑到前面;三是好友列表格式从"名字"升级为"名字:备注"后,旧数据没有备注段导致 match 返回 nil,解析时需对缺失字段做空值兜底。

作者履历与出处

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

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

最新技术文章 · 实战干货

LATEST ARTICLES

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

策划架构996引擎

【策划架构】抚恤金:阵亡抚恤的发放标准设计

设计初衷 攻城战阵亡只有损失:装备掉落、耐久磨损——牺牲没有补偿,行会的伤亡成本全由个人承担,指挥不敢打硬仗。抚恤金设计:攻…

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

【策划架构】协防系统:盟友驻防的调度与分账设计

设计初衷 攻城战一触即发,盟友帮会口头答应协防却总是人没到:跨帮支援没有调度与结算机制,人情协防全凭自觉。协防系统设计:盟约…

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

【高级技巧】享元模式:重复数据的共享封装

底层原理 一张地图上 500 棵同款树,每棵存完整的模型数据——重复数据存 500 份。享元模式把不变的部分(模型、贴图)抽…

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

【高级技巧】桥接模式:两个维度的独立扩展封装

底层原理 技能系统按"元素×形态"组合:火球冰球乘单体群攻——每加一种元素或一种形态,组合数量乘性增长(4 元素 3 形态 …

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

【策划架构】期货系统:稀缺物资的期货交易设计

设计初衷 稀缺产出(强化石、晋级材料)的供需错位:产出季价格崩盘、断供季价格飞天——剧烈波动伤害生产者与消费者两端。期货交易…

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

【进阶实战】傀儡机关:巡逻守卫的三态行为封装

业务场景 驻地巡逻 AI 只会沿固定路线走:玩家摸清路线后绕行如入无人之境。傀儡机关封装:机关傀儡按"巡逻、警戒、袭扰"三态…

2026-09-25 19:35 996 技术组 · 0 阅读