跳到主要内容

商城链路与「交易类型」配置全解(新手策划入门)

面向新策划的一站式指南:一个物品要能在哪个商城卖、扣玩家哪种货币, 全部由 ObjectBase 表里的一列数字「交易类型」决定。 本文讲清这个数字怎么算、填错会出现什么现象、以及新版商城上架的完整流程。

适用对象:商城/商店策划、数值策划、新手策划 关联文件:tbl/ObjectBase.xmlConfig/Mall.xmlConfig/npctrade.xml


一、先搞懂:游戏里有几种货币、几种商店

玩家购买物品时,花钱的「货币种类」有 5 种,每种对应一个商店:

货币商店
银子普通 NPC 商店 / 随身商店
金子普通 NPC 商店 / 随身商店
礼券(积分)积分 / 礼券商店
工资工资商店
充值点充值点商店 + 新版商城

记住一句话:银子和金子共用同一个商店(普通 NPC 商店), 能不能用金子买,取决于交易类型里有没有「金子」这一位。


二、「交易类型」是什么:一个按位打包的开关

2.1 它存在哪里

ObjectBase.xml(物品基础表)中的每个物品都有一列 交易类型,取值就是一个 0~31 的整数

2.2 位值定义(必须背下来)

把每个货币想成一个独立的开关(位),填的数值就是所有打开开关的数值之和

位(bit)数值程序常量含义打开后可在哪买
bit01eBuySilver银子购买普通 NPC 商店(扣银子)
bit12eBuyGold金子购买普通 NPC 商店(扣金子)
bit24eBuyTicket礼券购买积分 / 礼券商店
bit38eBuySalary工资购买工资商店
bit416eBuyChongzhi充值点购买充值点商店 / 新版商城
程序 / 前端参考:枚举定义

服务端 base/Command.h(第 9296 行)中的定义:

enum enumBuyType
{
eBuySilver = 1 << 0, // = 1 银子
eBuyGold = 1 << 1, // = 2 金子
eBuyTicket = 1 << 2, // = 4 礼券/积分
eBuySalary = 1 << 3, // = 8 工资
eBuyChongzhi = 1 << 4, // = 16 充值点
};

该值在程序中的字段名:zObjectB.cointype(对应 base/zDatabase.hdwField39)。

2.3 怎么算:把要开的位加起来

规则:需要哪几种货币能买,就把对应数值相加,填入交易类型。

例:想让物品「金子 + 礼券 + 工资」都能买 → 2 + 4 + 8 = 14,填 14

程序会用「交易类型」逐位比对,某一位为 0 就表示「这一位没开,不允许买」:

交易类型 = 14
14 含 2 → 金子可买 ✅
14 含 4 → 礼券可买 ✅
14 含 8 → 工资可买 ✅
14 不含 16 → 充值点不可买 ❌

三、完整购买链路:从点击「购买」到扣钱

玩家点击购买


服务端先查该物品的交易类型是否包含「这个商店对应的位」

├─ 不包含 → 直接拦截,购买失败(连扣钱流程都进不去)

└─ 包含 → 进入对应商店的扣费流程
├─ 普通 NPC 商店:含金子位(2) 扣金子,否则扣银子
├─ 工资商店:扣工资
├─ 积分/礼券商店:扣礼券
├─ 充值点商店:扣充值点
└─ 新版商城:扣充值点 + 额外校验(见 3.2)

3.1 各商店的检查条件与扣费对照表

商店检查条件(交易类型需含的位)实际扣费
普通 NPC 商店 / 随身商店含金子位(2 eBuyGold) 走金子,否则走银子金子 或 银子
工资商店工资位(8 eBuySalary)工资
积分 / 礼券商店礼券位(4 eBuyTicket)礼券 / 积分
充值点商店充值点位(16 eBuyChongzhi)充值点
新版商城充值点位(16 eBuyChongzhi)充值点

3.2 新版商城的额外门槛

新版商城比普通商店多几层校验,必须全部满足才能买到:

  1. 入口门槛:交易类型必须含充值点位(16)
  2. 已上架:物品 ID 必须已在 Config/Mall.xml 中配置
  3. 背包有空间
  4. 未超限:未超过每日限购 / 限时出售限制
  5. 扣费:扣的是角色充值点,不是金子/银子

第 1 条是硬门槛:交易类型不含 16 的物品,无论 Mall.xml 配得多好, 都会在购买入口被拦下,商城购买流程根本不会执行。


四、现有数据体检(配置前必看)

对当前 ObjectBase.xml 全部 5163 条物品统计:

交易类型值物品数量实际含义(按当前位值解释)典型物品
0445无购买类型,商店不可售秘籍、技能书等
12274银子(1)棉线、铁矿、玉石等基础材料
680金子(2) + 礼券(4)坐骑图鉴、时装魔盒
142364金子(2) + 礼券(4) + 工资(8)丝线、棉布等加工材料,以及 50319~50343 商城礼包

⚠️ 当前没有任何物品包含充值点位(16), 意味着所有物品都无法用充值点购买, 新版商城目前一个东西都买不了。详见第五章。


五、⚠️ 最大的坑:位值修正过,但表数据没跟着改

5.1 历史沿革

早先的位值是定义错的

币种(程序常量)旧数值(错误,已废弃)当前数值(正确)
银子 eBuySilver11
金子 eBuyGold22
礼券 eBuyTicket44
工资 eBuySalary6 ❌ 与「金子 2 + 礼券 4」完全重叠8
充值点 eBuyChongzhi816

因为「工资 = 6」和「金子+礼券 = 2+4 = 6」撞车, 导致「金子+礼券能买」的物品自动变成「工资也能买」的漏洞, 已修正为上表右侧的独立位值。

5.2 修正带来的数据语义偏移(重点)

规则改了,但表里那个数字没变,于是同一个数字的含义变了:

场景交易类型 = 14
修正前(旧位值)✅ 工资可买;✅ 充值点可买
修正后(新位值)✅ 工资可买;❌ 充值点不可买

直接后果:

Config/Mall.xml 中上架的 25 个商城物品交易类型全都是 14, 在新版商城入口被拦截(不含 16)→ 商城购买流程永不执行 → 新版商城完全无法购买

5.3 结论

修正程序里的位值定义,只是让程序「不容易算错」, 不会自动修正表里已有的数值。 表中的「交易类型」必须由策划同步迁移,否则旧数据语义全部偏移。


六、新版商城 Config/Mall.xml 上架明细

Mall.xml 当前配置 25 个物品(50319 ~ 50343),分 10 个专区, 交易类型全部为 14(即当前全部买不了,需要按第八章修正)。

区域区域 ID物品(括号内为充值点价格)
商品限购区050319 战力提升礼包(4888)、50320 15星礼包(5998)、50321 轰天碎片礼包(500)、50322 VIP专属礼包(3800)、50323 护身符礼包(498)
热卖商品区150324 头衔令礼包(500)、50325 小人礼包(9998)、50326 国王令礼包(98)
便利道具区250327 怪物图鉴礼包(8888)、50328 元神礼包(2498)、50329 私人别墅礼包(9998)
坐骑系列区350330 万能图鉴卡礼包【大】(648)、50331 鬼谷子礼包(100)
精品材料区450332 龙星材料礼包【小】(20)、50333 龙星材料礼包【中】(48)
其他商品区550334 龙星材料礼包【大】(100)、50335 龙星升级宝石【小】(128)
VIP 专区650336 龙星升级宝石【中】(328)、50337 龙星升级宝石【大】(648)
时装专区750338 龙凤石礼包【小】(128)、50339 龙凤石礼包【中】(328)
武器专区850340 龙凤石礼包【大】(648)、50341 图谱碎片礼包(9998)
宠物专区950342 马装礼包(8888)、50343 金山礼包(9998)

要点:

  • 这 25 个物品没有出现在 npctrade.xml 的任何 NPC 商店里,只由新版商城出售。
  • Mall.xmlprice 列就是充值点价格,不是银子/金子价格。
  • 上架 = 改 Mall.xml;能否买 = 看 ObjectBase 的交易类型。两处都要配

七、交易类型怎么填:速查表

7.1 只在单一商城出售

想在哪卖交易类型填计算
仅 NPC 商店(银子)11
仅 NPC 商店(金子)22
仅积分 / 礼券商店44
仅工资商店88
仅充值点商店 / 新版商城1616

7.2 多个商城同时出售(数值相加即可)

想在哪卖交易类型填计算
新版商城 + 工资2416 + 8
新版商城 + 积分2016 + 4
新版商城 + 工资 + 积分2816 + 8 + 4
新版商城 + 工资 + 积分 + 金子3016 + 8 + 4 + 2
工资 + 积分 + 金子(现网 14 的含义)148 + 4 + 2
工资 + 积分128 + 4
工资 + 金子108 + 2
银子 + 工资91 + 8

7.3 ⚠️ 银子与金子的特殊关系(最容易踩)

普通 NPC 商店的处理逻辑是:

含金子位(2) → 扣金子
不含金子位(2) → 扣银子

所以:

需求交易类型结果
NPC 商店用银子1(或 0),不要含 2扣银子
NPC 商店用金子必须含 2扣金子
NPC 银子买 + 工资商城买1 + 8 = 9NPC 扣银子,工资商店扣工资
NPC 金子买 + 工资商城买2 + 8 = 10NPC 扣金子,工资商店扣工资

一个物品不可能同时「在 NPC 用银子买」和「在 NPC 用金子买」—— 只能二选一,由是否含金子位(2) 决定。


八、标准配置流程(SOP)

8.1 上架一个新版商城物品

  1. 定货币:确认用充值点卖 → 交易类型必须含 16
  2. ObjectBase.xml:把该物品的「交易类型」改成目标值(仅商城卖就填 16
  3. Config/Mall.xml
    • 填物品 ID
    • price充值点价格
    • 填区域 ID(0~9,决定陈列在哪个专区)
    • 如需限购,配每日限购 / 限时字段
  4. 确认不冲突:若只想商城独家卖,不要把它写进 npctrade.xml
  5. 重新打包:生成 ObjectBase.tbl2Mall.xml 随配置热更/重启生效
  6. 自测:进游戏用充值点购买,确认扣除充值点且能进包

8.2 上架一个 NPC 商店物品

  1. 定货币:银子填 1,金子填 2(需要多渠道就相加)
  2. ObjectBase.xml 的「交易类型」
  3. Config/npctrade.xml 中把物品挂到对应 NPC 的商店列表,并填售价
  4. 重新打包并自测(注意观察扣的是银子还是金子)

8.3 存量数据迁移(当前必做)

现状问题建议修正
Mall.xml 的 25 个物品(50319~50343),交易类型 = 14不含 16,新版商城买不了仅商城卖 → 改 16;还要保留金/券/工资 → 改 30
交易类型 = 6 的 80 条物品(坐骑图鉴、时装魔盒)旧规则下曾用于工资商店,修正后只剩「金子+礼券」,丢了工资需保留工资购买 → 改 6 + 8 = 14
交易类型 = 14 的 2364 条非商城物品修正后含义为「金子+礼券+工资」,不再含充值点无需充值点购买的保持不变;若部分高端装备/特殊材料要进新版商城 → 再叠加 16 变成 30

九、常见问题排查

现象原因处理
新版商城点购买没反应 / 购买失败物品交易类型不含 16(如仍是 14),购买入口被拦截交易类型改为 16 或含 16 的值
商城能看到物品,但提示不可购买Mall.xml 未上架检查 Mall.xml 中物品 ID
商城买东西扣的钱不对商城固定扣充值点;若扣的是金/银子,说明该物品还挂在 NPC 商店检查交易类型与商店配置
提示已达购买上限触发每日限购 / 限时限制检查 Mall.xml 限购配置
NPC 商店买东西扣的是金子,想扣银子交易类型含金子位(2)去掉 2,改填 1
工资商店买不了交易类型不含 8加 8
旧物品以前能工资买,现在不能了位值修正导致语义偏移(旧 6 曾代表工资)按 8.3 迁移为 14
算不出该填几把要开的位数值相加:银1 / 金2 / 券4 / 工资8 / 充值点16对照第七章速查表

十、一句话总结

交易类型 = 各货币位值之和(银1、金2、券4、工资8、充值点16)。 想让物品在哪个商城能买,就把对应位打开; 新版商城额外要求「已上架 Mall.xml + 含 16 位 + 未超限购」。 当前表里没有任何物品开了 16 位,所以新版商城必须先做数据迁移才能用。