OpenMMO交易系统详解:单一金币货币的经济设计分析
【免费下载链接】OpenMMO项目地址: https://gitcode.com/GitHub_Trending/open/OpenMMO
OpenMMO 是一款 AI 智能体与人类玩家平等共处的 3D MMORPG,其交易系统围绕"单一金币货币 + 买卖价差 + AI 商人砍价"构建了一套完整的经济设计。本文将从货币存储、商人流水、玩家互售到自动物价调控,带你完整读懂这套开放世界的经济引擎。
一、单一金币货币:为什么不用五种硬币?
很多回合制游戏采用 D&D 5e 式的多层货币(铂金/黄金/银/铜),但 OpenMMO 选择了 NetHack 与《魔兽世界》的路线:服务器端只用一个 64 位整数存"最小单位"(铜币),金/银/铜纯粹是客户端的显示格式。
1 金 (g) = 100 银 (s) = 10,000 铜 (c)- 存储层:整个游戏世界只有一个数字
gold,64 位整数避免大额交易溢出,换算、累加、持久化全部无精度损失。 - 显示层:客户端按
1g 20s 30c的样式渲染,还支持1g20s30c、2s这类自由输入格式,方便玩家快速敲入金额。 - 不做硬币物品:没有可放入背包的实体硬币,省去了兑换、重量、交易 UI 的全部复杂度。
这套设计的核心收益:服务器权威、数值绝对可信。所有价格计算(价差、砍价区间、税率)都在服务端基于这个整数完成,客户端永远只是"画出来"的那一层。
实现位于 currency.ts,设计决策记录在 ECONOMY.md。
二、买卖价差:金币的"入口"与"出口"
OpenMMO 的金币流动遵循一套清晰的"水龙头 / 下水道"模型:
| 类型 | 路径 | 说明 |
|---|---|---|
| 💧 水龙头(发行) | 向商人出售、钓鱼硬币、地牢宝箱、NPC 薪资 | 金币进入经济 |
| 🕳️ 下水道(回收) | 向商人购买、摊位销售税 5% | 金币离开经济 |
| ⚖️ 中性 | 玩家间交易、打赏帽、居民 NPC 交易 | 只是在钱包间转移 |
几个关键设计点:
- 购买按基准价,出售只回收 30%~50%。商人 Rica 的收购价是基准价的 40%——这是 D&D 与 NetHack 共用的"价差模式",彻底堵死"无限倒卖刷金币"的路径。
- 新角色从 0 金币起步。第一个铜币必须靠打怪掉落卖出来,防止"建号→转移价值→删号→重建"的刷金循环。
- 起始装备不可变现。新手剑使用专用定义
worn_iron_sword(属性与普通铁剑相同,但没有basePrice),商人会直接拒收;玩家间交易则另有untradeable标记拦截。 - 误卖保护(Buyback):卖给商人的物品,最近 10 件可以按原价买回,方便手滑救急,且往返金额中性、不影响价差平衡。
三、AI 商人会"砍价":LLM 提议,服务器执行
OpenMMO 最大的差异点:NPC 由 LLM 驱动,你可以和商人 Rica 聊天、讲故事、套近乎,换来一次性的折扣。
但防作弊的原则只有一条:假设 LLM 最终一定会被绕穿,所有防线都建在服务器。具体机制:
- 🎯价格区间:服务器按"基准价 × 价差 × 魅力修正"算出
[最低价, 最高价]区间(约正价 ±20%),LLM 只能在区间内选择折扣幅度,越界即被钳制或拒绝; - 🛡️利润不变式:即使 LLM 给出最大折扣,"折后买价 > 最高卖价"永远成立——结构上不可能刷出套利循环;
- 💰预算与冷却:玩家每日折扣额度、Rica 的"钱包"日预算、30 秒砍价冷却,兼顾防滥用与 LLM 调用成本控制;
- 📝全量日志:LLM 的每个定价决定都带理由落盘,既用于套利检测,也用于人设调优。
砍价因此变成了纯粹的社交内容:讲好故事有折扣,态度恶劣可能被加价,对称且符合人设。
四、居民 Karl 的心愿单:120% 溢价收购
除了正式商人,每个 LLM NPC 都可以交易,但供给模型完全不同:
| 商人(Rica) | 居民(Karl 等) | |
|---|---|---|
| 库存 | 无限(数据目录定义) | 只有自己的真实背包 |
| 钱包 | 实际上无限 | 有限,靠服务器定期发薪(上限 3 金) |
| 价格区间 | 窄(±20%),充当价格锚 | 宽——真正想要的东西付溢价 |
| 经济角色 | 金币回收、基准价 | 角色扮演、自然生成的跑腿任务 |
Karl 的心愿单(火把、匕首)按基准价 120% 收购——你可以"送货上门"赚差价,这本质上是不用写任务系统就能涌现的跑腿玩法。由于他的钱包被工资上限锁死,LLM 即使"被击穿",最大损失也只是它钱包里的余额。
五、玩家间交易:两步锁定 + 交易账本
玩家互售(/trade <名字>发起)是经济安全等级最高的模块,因为这里一个 bug 就是一次永久性的金币/物品增发。核心防线:
- 近程条件:交易双方必须始终保持在可交互距离内,离开即取消——把交易变成看得见的物理行为;
- 锁定 → 确认两段式:任何一方修改报价,双方确认全部重置,且确认包携带版本号(revision),杜绝"最后瞬间调包"的经典骗局;
- 强化值外露:
+7 Iron Sword直接标在物品名上——因为 +0 和 +7 外观完全相同,是零成本的欺诈通道; - 软预留:报价中的物品留在背包里,但禁止再卖出/使用/丢弃,避免"escrow 卡物品"的灾难;
- 原子提交:双方确认后任一校验失败(如超重),整笔交易回滚;提交时先落库、再广播成功;
- 交易账本:每笔成功交易在数据库留一条永久记录(双方交易前后余额 + 物品明细),既是玩家自证材料,也是反滥用检测体系;
- 起始装备不可交易(
untradeable标记),NPC 完全被排除在玩家交易之外。
六、玩家寄售摊位:5% 销售税的经济闭环
想要"摆摊赚差价"?从 Rica 处购买 2000 铜的peddler_stall,在野外展开摊位、给物品标价,路人直接买走——没有砍价环节,价格就是标价。
这个设计的妙处在于税收闭环:玩家之间互相买卖会绕过商人的金币回收通道,所以成交时向卖家征收5% 销售税,把绕过的部分重新灌回经济下水道。其他细节:摊位上限 12 格、物品软预留、主人离开 10 米自动收摊(防止"离线挂机店")。
七、物价指数:服务器自动调节的"央行"
最后一层是全局调控(详见 PRICING.md):
- 度量:服务器每小时记录快照,核心指标
M = 活跃角色人均金币(只统计 30 天内登录的角色); - 调节:每 20 个游戏日(小月亮 Serin 全暗之日)自动开会,按公式
P_new = P × (1 + k × (实际增速 − 目标增速))调整物价指数,单次会议最多 ±10%,全局范围 0.5~2.0; - 定向生效:指数只作用于商人的消费品售价(药水、食物、磨刀石),装备与居民库存不受影响,且收购价不随指数上涨——保证套利永远无利可图;
- 演出:Rica 和 Wick 会在"会议"中用各自口吻讨论物价,玩家偷听能提前获知价格走向——"现在买还是等下次暗月?"本身就是玩法。
总结
OpenMMO 的交易系统是一个教科书级的分层设计:
- 底层:单一 64 位整数货币,服务器权威,零精度问题;
- 中层:买卖价差 + 金币回收 + 玩家交易账本 + 摊位税,保证经济不膨胀、不增发;
- 顶层:AI 商人砍价、居民心愿单、自动物价会议,让经济系统本身成为可玩的内容。
想亲自体验或本地部署,可以克隆仓库后按 CONTRIBUTING.md 的说明构建:
git clone https://gitcode.com/GitHub_Trending/open/OpenMMO更多设计背景可阅读 ECONOMY.md、TRADE.md 与 PRICING.md 三份核心文档。
【免费下载链接】OpenMMO项目地址: https://gitcode.com/GitHub_Trending/open/OpenMMO
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考