工程参考/配置文件/Public/ItemRule.txt

来自天龙知识库
跳到导航跳到搜索


首页 · 配置文件索引 · 修改约定

ItemRule.txt 定义物品共同引用的规则组。物品表的“适应规则”或规则编号引用这里的第一列;改一个规则组,会影响全部引用它的物品。它不是一行对应一件物品,0/1 标志也不等于所有业务入口都统一检查该标志。

位置与生效 · 文件格式 · 字段详解 · 修改实例

文件位置与生效

项目 说明
运行文件 ../Public/Config/ItemRule.txt,相对于 Server 工作目录;resources/Public/Config 是源码样本。客户端还须同步它实际加载的同名表。
读取程序 Server 游戏进程;客户端自身同名资源表
生效方法 正常停服后重启 Server,并同步客户端资源后重启 Game.exe。当前检索未发现单独重载本表的可用入口。改规则值不会自动解绑已经绑定的物品,也不会从银行移走已有物品。不要用恢复旧角色数据来恢复一项规则。
样本格式 GB18030-compatibleCRLF。保留原编码;源码读取器不会自动把中文转为 UTF-8。

保留样本的十四列,全为 INT。当前服务端读取前十三列,客户端结构也使用前十三列;第十四列保留项单独说明。当前样本有 37 行,规则编号从 1 到 37 连续递增,这是样本情况,不是程序自动补齐的默认表。

客户端同步

在实际 Client/Bin/FairyResources.cfg 的 [General] 检查映射:FileSystem=*../Data/Config 时同步 Client/Data/Config/ItemRule.txt;AxpFileSystem=../Data/Config.axp 时更新包内 ItemRule.txt。星号表示递归。按客户端已有资源更新方式替换实际成员,退出并重启 Game.exe;仅修改服务端 Public 不会更新玩家界面。客户端从物品模板的规则号复制规则,在界面点击、快捷栏和提示中使用。

文件格式

首行是类型行:INT INT INT INT INT INT INT INT INT INT INT INT INT INT;第二行是列名行,程序跳过其内容;从第三行开始读取数据。各列用真实 Tab 分隔,保留首列、空列及行尾,不用空格代替。数据行行首 # 表示注释,分号不是此表的注释规则。首列为空的行被跳过;不足的尾列补为空值,多余列不参与本页字段读取。空整数和非数字经 atoi 可能成为 0,空字符串仍为空,不把解析成功当作业务合法。第一列须唯一,重复会触发读取器错误。

字段详解

列号从 1 开始,源码列下标从 0 开始。

字段与类型 含义与修改要点 缺项或特殊值
第 1 列
INT:index,规则组编号
由 CommonItem、GemInfo、各装备表等物品模板的规则字段引用。服务端不是按第一列搜索,而是按规则号减偏移取得数组行,因此全部启用 ID 必须连续、有序、唯一;不能删中间行留下空号。客户端按 ID 查表,两端规则号应一致。 缺首列会使行跳过。程序的连续性断言没有可靠验证作用,不能以启动不报错判断编号正确。规则号最终存入 CHAR,保留当前已有编号;新编号须核对字符符号与存储范围,不能随意填大数或物品模板 ID。
第 2 列
INT:丢弃
1 允许通过检查该标志的丢弃流程,0 拒绝。服务端的背包物品和装备丢弃处理读取此项;锁定、场景状态等还可能阻止操作。不是怪物掉率或掉落保护。 使用 0 或 1。服务端仅把整数 1 视为开启,2、-1、空值等不会当作开启;客户端直接保存整数字段,非 0 值可能与服务端理解不同,因此不要用其他数字。
第 3 列
INT:重叠
控制能否按规则进行堆叠。堆叠上限仍来自物品表的数量字段,0/1 不是最大堆叠数;不能只打开本项就把装备等非堆叠类型变成可无限叠放。 使用 0 或 1。服务端仅把整数 1 视为开启,2、-1、空值等不会当作开启;客户端直接保存整数字段,非 0 值可能与服务端理解不同,因此不要用其他数字。
第 4 列
INT:快捷
客户端允许物品进入快捷栏时检查此项。它不会创建快捷键、自动使用物品,也不等于脚本快捷调用。服务端读取并保存,但当前检索未发现实际消费该服务端标志的入口。 使用 0 或 1。服务端仅把整数 1 视为开启,2、-1、空值等不会当作开启;客户端直接保存整数字段,非 0 值可能与服务端理解不同,因此不要用其他数字。
第 5 列
INT:出售
客户端的 RULE_SALE 和部分服务端出售处理使用的标志。0 可阻止对应检查路径,1 仍受商店类型、货币、价格等条件限制。普通 CGShopSellHandler 当前未直接检查此规则,不能把本列当成所有服务端出售行为的统一禁止开关。 使用 0 或 1。服务端仅把整数 1 视为开启,2、-1、空值等不会当作开启;客户端直接保存整数字段,非 0 值可能与服务端理解不同,因此不要用其他数字。
第 6 列
INT:交易
允许检查此标志的交易/摆摊路径;服务端摆摊等入口还会检查绑定、锁定和业务条件。1 不会自动解绑,也不代表各种邮件、寄售、脚本转移都获准。 使用 0 或 1。服务端仅把整数 1 视为开启,2、-1、空值等不会当作开启;客户端直接保存整数字段,非 0 值可能与服务端理解不同,因此不要用其他数字。
第 7 列
INT:使用
服务端常规物品使用入口检查此标志。允许使用还要求物品存在、状态合法,以及关联技能或脚本可用。1 不会为没有脚本的物品添加功能;0 也不等于禁止脚本直接删除或发放该物品。 使用 0 或 1。服务端仅把整数 1 视为开启,2、-1、空值等不会当作开启;客户端直接保存整数字段,非 0 值可能与服务端理解不同,因此不要用其他数字。
第 8 列
INT:拾取绑定
若获取/移动流程检查该规则,1 会使得到的物品绑定,例如物品盒拾取和部分物品移入逻辑。它描述规则,不是物品已经绑定的持久状态。客户端也用它显示绑定提示。 使用 0 或 1。服务端仅把整数 1 视为开启,2、-1、空值等不会当作开启;客户端直接保存整数字段,非 0 值可能与服务端理解不同,因此不要用其他数字。 改为 0 不会解绑以前已绑定的物品。
第 9 列
INT:装备绑定
装备成功的服务端处理根据此规则设置绑定,客户端显示装备绑定类型。不是“只有穿在身上时绑定、脱下即解绑”。 使用 0 或 1。服务端仅把整数 1 视为开启,2、-1、空值等不会当作开启;客户端直接保存整数字段,非 0 值可能与服务端理解不同,因此不要用其他数字。 改为 0 不会自动取消已经形成的绑定状态。
第 10 列
INT:是否唯一
两端读取唯一标志,当前客户端装备提示会显示对应“唯一”文案。当前检索范围未发现服务端利用此标志执行通用的最多持有一件检查;物品最大持有数量属于另外的模板字段。 保留合法 0/1。不能凭此项承诺只允许全服一件或每个角色一件;具体业务限制需要实测及对应入口依据。
第 11 列
INT:是否需要鉴定
配合装备的鉴定状态和实际属性数量使用。服务端计算部分装备属性时会跳过需要鉴定但未鉴定的装备,客户端提示也按此规则隐藏未鉴定属性;部分装备位置存在例外。 使用 0/1。本列不是“已鉴定”状态;改为 0 不会给物品生成鉴定属性。效果同时取决于装备属性和鉴定标志,需用测试装备核对。
第 12 列
INT:是否虚拟道具
对应 IsYuanBao 规则,参与禁止拆分、部分自动堆叠和商店卖出分支。它是历史业务标志,不直接设置元宝价格或把金币转成元宝。 使用 0/1。不要因为物品来自元宝商店就批量置 1;需按当前物品原规则与业务核对。
第 13 列
INT:是否可以存入银行
服务端向银行存入,以及若干银行交换操作检查此项;客户端也保存对应标志。0 拒绝这些检查路径,1 仍受背包位置、银行容量、密码锁等限制。 使用 0/1。不会自动清出银行中已有物品;禁止存入与是否能正常取出要分别实测,勿在玩家银行中已有大量目标物品时直接试改。
第 14 列
INT:快捷栏是否叠加显示
样本保留字段。当前已核对的 Server 加载器、客户端 _DBC_ITEM_RULE 结构及规则复制/查询代码没有读取这一列的业务值。不要把它当作第 3 列堆叠上限或必定生效的显示开关。 保留样本原值和列位置。当前检索范围未发现本字段直接消费依据,显示效果需要实测;不删除此列来缩短表格。

常用修改实例

示例为局部教学片段,先备份原运行文件,再修改对应行并保留其余配置。教学值不是程序默认值。 以下代码块保留真实 Tab;本地示例文件为 ASCII/CRLF,列名用英文便于核对分隔符。

在隔离测试环境禁止规则 5 的物品存入银行

修改前:

INT	INT	INT	INT	INT	INT	INT	INT	INT	INT	INT	INT	INT	INT
Index	Drop	Stack	Quick	Sell	Trade	Use	PickBind	EquipBind	Unique	Identify	Virtual	Bank	QuickStack
5	1	1	1	1	1	1	0	0	0	0	0	1	0

修改后:

INT	INT	INT	INT	INT	INT	INT	INT	INT	INT	INT	INT	INT	INT
Index	Drop	Stack	Quick	Sell	Trade	Use	PickBind	EquipBind	Unique	Identify	Virtual	Bank	QuickStack
5	1	1	1	1	1	1	0	0	0	0	0	0	0

核对原表第一列为 5 的那一行,只把第 13 列由 1 改为 0,其他十三列和所有其他行保持原样。此例是局部片段,不能覆盖整表,否则会丢失其余规则。CommonItem.txt 中 30001001 行血散等多种物品引用规则 5;它们都会受到影响,不只这一个物品。先在没有相关银行存货的隔离环境,以有效未锁定测试物品核对存入被拒绝。同步客户端同一行;想只改一个物品时应另行规划独立规则与模板引用,不能直接改公用规则组。

验证与排查

重启后检查 InitItemRulerTable() Ok!,并用文件本身核对 ID 连续性,不能依赖该日志。核对目标物品模板的规则字段确实等于 5,再通过正常银行界面测试第 13 列的拒绝结果;同时核对不属于规则 5 的物品仍可存入。失败时正常停服并恢复表格两端版本,重新登录验证;规则值恢复不会自动更改已经保存的绑定、鉴定或库存数据。

编号不能随意删改

服务端 GetRuleValueByID 根据偏移定位数组,没有再比较目标行 ID。当前初始化中的 bInit 没有被置为 TRUE,偏移会在每行重算,所谓连续性检查不能可靠拦截缺号或乱序。原始函数隔离测试覆盖这一行为。应保留完整连续编号,不用 # 注释中间一行或删除它来禁用某个规则;禁用某项操作应改已核对的 0/1 标志。

规则、绑定、锁定各自是什么

本表是模板规则;物品是否已绑定、已鉴定保存在物品状态中;交易锁、密码锁属于另外的运行检查。改表不自动清除这些状态。函数或脚本也可能直接操作物品,不能据某一列为 0 承诺所有入口都不能改动。示例已限制为核对到读取第 13 列的银行存入入口,其余玩法修改应按字段的实际调用范围验证。

关联与依据

Public/SlotCost.txt · Public/GemCarve.txt

其他配置及整理状态 · 服务端外网设置 · Lua 接口索引

  • Common/DataBase/TLBB_DBC.cpp:实际加载、解析、字段使用或示例关联依据
  • Common/DataBase/TLBB_DBC.h:实际加载、解析、字段使用或示例关联依据
  • Common/ServerBase/FileDef.h:实际加载、解析、字段使用或示例关联依据
  • Common/GameStruct_Item.h:实际加载、解析、字段使用或示例关联依据
  • Server/Server/GameServer/Server/Item/ItemTable.cpp:实际加载、解析、字段使用或示例关联依据
  • Server/Server/GameServer/Server/Item/ItemTable.h:实际加载、解析、字段使用或示例关联依据
  • Server/Server/GameServer/Server/Item/Item.cpp:实际加载、解析、字段使用或示例关联依据
  • Server/Server/GameServer/Server/Item/ItemRuler.h:实际加载、解析、字段使用或示例关联依据
  • Server/Server/GameServer/Server/Item/ItemRuler.cpp:实际加载、解析、字段使用或示例关联依据
  • Server/Server/GameServer/Server/Item/HumanItemLogic.cpp:实际加载、解析、字段使用或示例关联依据
  • Server/Server/GameServer/Server/Item/ItemOperator.cpp:实际加载、解析、字段使用或示例关联依据
  • Server/Server/GameServer/Server/Packets/CGBankAddItemHandler.cpp:实际加载、解析、字段使用或示例关联依据
  • Server/Server/GameServer/Server/Packets/CGBankRemoveItemHandler.cpp:实际加载、解析、字段使用或示例关联依据
  • Server/Server/GameServer/Server/Packets/CGBankSwapItemHandler.cpp:实际加载、解析、字段使用或示例关联依据
  • Server/Server/GameServer/Server/Packets/CGUseItemHandler.cpp:实际加载、解析、字段使用或示例关联依据
  • Server/Server/GameServer/Server/Packets/CGUseEquipHandler.cpp:实际加载、解析、字段使用或示例关联依据
  • Server/Server/GameServer/Server/Packets/CGDiscardItemHandler.cpp:实际加载、解析、字段使用或示例关联依据
  • Server/Server/GameServer/Server/Packets/CGDiscardEquipHandler.cpp:实际加载、解析、字段使用或示例关联依据
  • Server/Server/GameServer/Server/Packets/CGCGWPacketHandler.cpp:实际加载、解析、字段使用或示例关联依据
  • Server/Server/GameServer/Server/Packets/CGShopSellHandler.cpp:实际加载、解析、字段使用或示例关联依据
  • Server/Server/GameServer/Server/Packets/CGStallAddItemHandler.cpp:实际加载、解析、字段使用或示例关联依据
  • Server/Server/GameServer/Server/Obj/Obj_Human_Calc.cpp:实际加载、解析、字段使用或示例关联依据
  • Client/Client/Game/DBC/GMDataBase.cpp:实际加载、解析、字段使用或示例关联依据
  • Client/Client/Common/TDDBC_Struct.h:实际加载、解析、字段使用或示例关联依据
  • Client/Client/Game/Object/Item/Obj_Item.cpp:实际加载、解析、字段使用或示例关联依据
  • Client/Client/Game/Object/Item/Obj_Item.h:实际加载、解析、字段使用或示例关联依据
  • Client/Client/Game/Action/GMActionSystem_Item.cpp:实际加载、解析、字段使用或示例关联依据
  • Client/Client/Game/Interface/GMInterface_Script_Tooltip.cpp:实际加载、解析、字段使用或示例关联依据
  • Client/Client/Render/ResourceProvider.cpp:实际加载、解析、字段使用或示例关联依据
  • Client/Client/Render/RenderSystem.cpp:实际加载、解析、字段使用或示例关联依据
  • Client/Client/Core/Core/FairySystem.cpp:实际加载、解析、字段使用或示例关联依据
  • resources/Client/Bin/FairyResources.cfg:实际加载、解析、字段使用或示例关联依据
  • resources/Client/Bin/FairyResources正式服.cfg:实际加载、解析、字段使用或示例关联依据
  • resources/Public/Config/CommonItem.txt:实际加载、解析、字段使用或示例关联依据

本页验证原始文本读取器、规则加载和偏移查询,并核对两端字段使用。未启动游戏、服务器或数据库;规则对实际库存、绑定、鉴定和银行界面的作用仍需要实测。