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

【引擎触发】金币交易:面对面交易与交易确认的引擎实现

2026-09-23 16:56 作者:996 技术组 996引擎Lua教程传奇脚本

实战应用:用在哪里

面对面交易是传奇最传统的玩家交易:双方面对面打开交易框,放入物品与金币,双方确认后成交。与摆摊、寄售的异步交易不同,面交的同步确认机制是防欺诈设计的教学范本。

交易开启与放入

lua

function QF.TradeStart(plr, target)
    if plr:DistTo(target) > 3 then return false, "距离过远" end
    if plr.tradeLock or target.tradeLock then return false, "对方正在交易" end
    if plr:InBattle() or target:InBattle() then return false, "战斗中不可交易" end
    plr.tradeLock, target.tradeLock = true, true
    plr.tradeWith, target.tradeWith = target.id, plr.id
    QF_OpenTradeUI(plr, target)
    QF_OpenTradeUI(target, plr)
    return true
end

function QF.TradePut(plr, slot, count)
    local trade = TradeMgr.get(plr.tradeWith, plr.id)
    local item = plr.bag[slot]
    if not item or item.bind then return false, "绑定物品不可交易" end
    plr.bag[slot] = nil
    trade.put[plr.id][slot] = { item = item, n = count }
    TradeMgr.refresh(trade)
    return true
end

开启校验距离、互斥与战斗三态,交易锁防止一 accounts 多开交易框。放入物品即时从背包移入交易框,双方界面实时刷新对方的放入动作,任何一方放入或取出都会重置双方的确认状态。

确认与成交

lua

function QF.TradeConfirm(plr)
    local trade = TradeMgr.get(plr.tradeWith, plr.id)
    trade.confirmed[plr.id] = true
    if trade.confirmed[trade.a] and trade.confirmed[trade.b] then
        -- 双方确认,原子成交
        local ok = TradeMgr.atomicSettle(trade)
        if ok then
            QF_SendBoth(trade.a, trade.b, "交易成功")
            TradeLog.write("face", trade.a, trade.b, trade.itemList())
        end
        TradeMgr.close(trade)
    else
        QF_SendOther(plr, "对方已锁定交易")
    end
    return true
end

双方都点确认后原子成交:物品与金币的转移在同一个事务里完成,任何一步失败整体回滚。确认后任何一方的再放入操作都会解除双方的确认状态,锁定机制防调包:谈好的交易在确认后被换货是不可能发生的。交易金额与物品的明细写流水,面对面交易的每一笔都有据可查。

验证与监控

交易取消率的监控与交易流水的对账,成交后的物品去向追踪是盗号追赃的通道。

踩坑记录

确认状态的解除曾经漏了金币变更的场景,谈好 100 万结果对方偷偷改到 1000 万被确认成交,金额变更重置确认的规则补上。交易框的跨图失效判定缺失出现过双方走远交易继续,距离的持续校验让交易框只在 3 格内有效。

上线要点

面对面交易的确认重置机制是防调包的核心:任何一方的放入或取出都会解除双方的确认,锁定后的交易框是不可变的合同。交易的距离校验持续到成交,走远三格交易框自动关闭,空间的临近是面交的物理前提。交易流水的双向查询:交易的双方都可以在流水里检索这笔交易,面交的历史是可查证的契约。

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

作者履历与出处

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

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

最新技术文章 · 实战干货

LATEST ARTICLES

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

后端接口成就属性加成

【后端接口】成就点数兑换:全局属性加成的结算接口设计

实战应用:用在哪里 成就点数不该只是数字摆设:点数商店兑换永久属性加成,50分换百分之一攻击,上限百分之五。兑换接口管三件事…

2026-09-23 17:04 996 技术组
界面UI

【界面UI】UI 合图自动化:纹理打包流水线与命名规范

实战应用:用在哪里 UI 合图(把零散小图打包成图集)是 DrawCall 合批的前提(合批原理参考前篇)。手工打包的问题:…

2026-09-23 17:04 996 技术组
数据存储

【数据存储】SQLite WAL 模式:读写并发实测与开启方法

实战应用:用在哪里 SQLite 默认的回滚日志模式在写入时会阻塞读取(写锁独占),游戏服务端“边写日志边查配置”的场景会出…

2026-09-23 17:04 996 技术组
框架设计

【框架设计】PK 模式:攻击范围的开关与误伤保护

实战应用:用在哪里 烈火剑法甩出去的瞬间最怕砍到队友:PK 模式是攻击的准星开关——和平、组队、行会、全体四种模式决定谁的技…

2026-09-23 17:04 996 技术组
玩法策划大逃杀缩圈

【玩法策划】大逃杀缩圈:借鉴吃鸡玩法的安全区收缩设计

实战应用:用在哪里 把大逃杀的缩圈机制搬进沙巴克野区:五十人无阵营乱斗,安全区每六十秒收缩一圈,圈外持续掉血,终局幸存者独享…

2026-09-23 17:04 996 技术组
运维发布停服维护运营

【运维发布】发布窗口选择:用在线人数曲线定停服时机

停服更新最怕撞上在线高峰,踢掉几百人换来一片抱怨。选对发布窗口,同样的更新内容,玩家体验是两回事。本文讲如何用996引擎的在…

2026-09-23 17:04 996 技术组