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

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

2026-09-21 04:52 作者:996 技术组 0 阅读 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 后端逻辑、客户端界面与商业版本交付,内容以官方知识库与真实项目为出处,按版本持续修订。

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

最新技术文章 · 实战干货

LATEST ARTICLES

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

前端接口综合案例

【前端接口】综合案例:BOSS 血条窗口的前后端全链路实现

实战应用:用在哪里 把接口串成功能:一个 BOSS 血条窗口覆盖前端的大半接口面——窗口的打开、控件的创建、网络消息的接收、…

2026-09-21 05:41 996 技术组 · 0 阅读
前端接口表现系统

【前端接口】GUI:ActionMoveTo 与 runAction:控件动画的动作系统

实战应用:用在哪里 控件会动才有生命: GUI:ActionMoveTo 、 ActionFadeIn 、 ActionSc…

2026-09-21 05:41 996 技术组 · 0 阅读
前端接口界面架构

【前端接口】GUI:Attach_MainTop:主界面挂载与常驻控件的定位体系

实战应用:用在哪里 活动图标、在线奖励按钮、红点提示这些常驻元素要钉在主界面的固定区域: GUI:Attach_MainTo…

2026-09-21 05:41 996 技术组 · 0 阅读
前端接口交互反馈

【前端接口】SL:ShowSystemTips 与 SHOW_DESCTIP:提示的双层体系

实战应用:用在哪里 玩家的每个操作都要有回声: SL:ShowSystemTips 是屏幕中央的系统提示(操作失败、领取成功…

2026-09-21 05:41 996 技术组 · 0 阅读
前端接口工具函数

【前端接口】SL:Split 与 JsonDecode:前端数据处理的工具函数对

实战应用:用在哪里 前端拿到的大量数据是"字符串形态"的:服务端 sendluamsg 的字符串参数、配置表的行文本、本地缓…

2026-09-21 05:41 996 技术组 · 0 阅读
前端接口表现系统

【前端接口】GUI:Effect_Create:特效控件与技能表现的前端挂载

实战应用:用在哪里 界面的炫彩体验有一半来自特效: GUI:Effect_Create 把引擎特效挂到界面控件上,按钮的流光…

2026-09-21 05:41 996 技术组 · 0 阅读