工程参考/配置文件/Public/ItemRecycle.txt
ItemRecycle.txt 是物品回收的价目表:一个物品编号对应一个元宝单价。玩家在回收界面选中背包物品时,服务端按本表取价,再乘格子数量算出本次收益。它不是商店表,不是分解配方,也不决定哪些物品能收——能不能收由物品状态(任务、绑定、加锁、交易中)决定,本表只给价。
位置与生效 · 文件格式 · 字段详解 · 校验与失败后果 · 修改实例
文件位置与生效
| 项目 | 说明 |
|---|---|
| 运行文件 | ../Public/Config/ItemRecycle.txt,相对于 Server 工作目录
|
| 读取程序 | GameServer 启动时由 TableInit::Init() 读入,交给 ItemRecycle::Config().Load()
|
| 客户端 | 不读取本表。回收界面显示的价格由服务端随报价下发,改表不需要更新客户端 |
| 生效方法 | 停服、替换实际 Public 副本、重启 Server。没有热重载入口 |
| 样本格式 | 纯 ASCII 无 BOM、CRLF,Tab 分隔
|
当前样本 214 条数据,物品编号 20109001 到 50613006,价格 2 到 25000 元宝。
文件格式
首行是类型行,两列都写 INT;第二行是列名行,程序跳过其内容;从第三行开始读取数据。各列用真实 Tab 分隔,不用空格代替。不足的尾列补空,多余列不参与读取;空值与非法整数在严格整数模式下直接解析失败。
字段详解
| 列号 | 字段与类型 | 含义与修改要点 | 缺项或特殊值 |
|---|---|---|---|
| 第 1 列 | INT:ItemID
|
物品模板编号,对应 CommonItem 的编号。必须严格大于上一行,不是背包位置,也不是实例 GUID。 | 空行跳过;小于等于上一行、重复、非正整数都让整表加载失败 |
| 第 2 列 | INT:YuanBao
|
该物品每回收一件返还的元宝数。单格收益 = 本列 × 格子数量。 | 必须 1 到 2000000000;写 0 或负数让整表加载失败 |
价格不是「一口价」:回收按格子数量乘算,10 个堆叠就是 10 份。服务端不做买卖差价、不看杀气、不看等级。
校验与失败后果
ItemRecycle::Config().Load() 会检查:
- 两张表都恰好 2 列、两列都是 INT,且物品表至少 1 条记录;
- 每条 ItemID 大于 0 且严格大于上一条;
- 每条价格在 1 到 2000000000 之间;
- 额度表恰好 1 行、第一列为 1、第二列在 1 到 2000000000 之间。
任一条件不满足,价格表被整体清空并返回失败,TableInit::Init() 随之返回 FALSE,Server.cpp 的 Assert(ret) 会让服务端起不来。改这张表前先备份,改错不是功能失效,是停服。
修改实例
追加一件可回收物品
在文件末尾追加一行。第一列必须是 CommonItem 里真实存在的物品编号,并且大于当前最后一条;第二列填价格:
50613007 500
(50613007 只是格式示例,实际必须换成 CommonItem 里存在的编号。)
重启后新物品出现在回收列表里。插到中间会破坏递增顺序,必须同时重排后面所有行的编号——但编号就是物品编号,不能随意改,所以只能追加。
改某件物品的回收价
只改第二列,例如把 30308002 的 490 改成 450:
30308002 450
改价在重启后生效。重启会中断所有会话,重启前的报价自然作废,玩家重新打开界面报价即可。