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

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


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

EquipExtraAttr.txt 为既有物品模板增加有效期、交易币种等信息。虽然文件名含 Equip,服务端有效期与交易查询也可按非装备的物品编号查这张表。它不创建物品,不决定掉落,也不替代装备或普通物品的基础表。

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

文件位置与生效

项目 说明
运行文件 ../Public/Config/EquipExtraAttr.txt,相对于 Server 工作目录;玩家电脑另有自己的客户端资源。
读取程序 Server 游戏进程和 Game.exe 客户端资源
生效方法 正常保存并停服,更新各 Server 实际使用的文件后重启 Server;客户端同步同名资源后重启 Game.exe。当前检索范围未发现本表可用的单独重新加载入口。无需启动或修改数据库来验证文件格式。
样本格式 GB18030-compatibleCRLF。保留原编码;源码读取器不会自动把中文转为 UTF-8。

本表共 7 列。服务端加载第 1、2、6、7 列;客户端按同一编号读取有效期、附加说明与币种。第 3、5 列仍须保留,当前检索未发现其实际消费位置,不能仅凭表头解释为已生效的颜色或显示开关。

两端各改哪里

Server 从工作目录的 ../Public/Config 读取。玩家电脑按 Client/Bin/FairyResources.cfg 的 [General] 更新资源:FileSystem=*../Data/Config 对应 Client/Data/Config 中的同名文件;AxpFileSystem=../Data/Config.axp 对应包内同名成员。使用已有资源打包流程,随后重启 Game.exe。只修改源码 resources 样本或只改一端不会完成部署。

文件格式

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

字段详解

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

字段与类型 含义与修改要点 缺项或特殊值
第 1 列
INT:Index,物品模板编号
与 EquipBase.txt、CommonItem.txt 等基础表中的物品编号对应。表按本列数值严格递增且唯一;不要求连续。不是行号、装备格、场景对象 ID 或物品 GUID。 非空的既有有效物品编号。无本表记录与有记录但字段留空不同;改编号会改变所有同模板物品的查表结果。
第 2 列
INT:有效期(小时)
以整小时保存创建时间并比较经过小时数;例如教学值 168 为 7*24 小时。该时间包含离线经过的时间,不是累计在线时间。负数跳过到期判断,建议沿用 -1 表示永久。 空值读为 0;0 不是永久,有创建时间的物品会判到期。没有创建时间时首次检查先初始化并放行。边界和旧物品影响见下方,不直接在正式服试填 0。
第 3 列
INT:传输颜色
客户端结构中保存为 nReserve2,服务端本表加载器未读取。当前检索范围未发现本字段的实际消费依据;不能据 2005 等样本值承诺改变名称颜色或传输效果。 保留原行值。空整数变成 0;这不是已确认的默认颜色编号。需要实测,并在改此列前补齐使用依据。
第 4 列
STRING:附加属性描述$1$
客户端装备提示将本列附加到说明中;空字符串或文本 -1 不附加。描述中的数值不会成为实际属性、期限或伤害。当前已确认的是装备提示入口。 保留原编码、已有文本格式;不要插入实际 Tab 或换行拆开数据行。服务端没有读取此列,不要依靠描述文字实施限制。
第 5 列
INT:是否显示
客户端结构中为 nReserve4;当前检索未发现其实际消费依据。已核对的附加说明入口依据第 4 列是否为空或 -1 判断,没有查询本列。 示例原行此处为空,必须保留两个相邻 Tab,不能删列。不把 0/1 写成已核实的整体显示开关。
第 6 列
INT:元宝交易类型
0:当前摆摊检查允许元宝币种、禁止金币币种;1:禁止元宝、允许金币;2:两者均允许。仍受绑定、密码锁、交易规则、价格上限及商店类型等检查;不是无条件可交易。 缺整条记录时查询返回 1;存在行但空值读为 0。服务端先转 BYTE 再把大于 2 的值归为 1,客户端直接保留整数。只填 0/1/2,避免 256 等造成两端分歧。
第 7 列
INT:卖店是否获得交子
普通 NPC 卖店结算中,1 发交子,0 发金币;服务端和客户端已核对的判断都是“是否等于 1”。不改变卖价数额,也不设置玩家间交易币种。 缺整条记录时材料大类 2 默认交子,其余金币;有记录时以本列为准,空值为 0。服务端存 BYTE,禁止使用 -1、256、257 等代替有效枚举。

常用修改实例

示例为局部教学片段,先备份原运行文件,再修改对应行并保留其余配置。教学值不是程序默认值。 以下代码块保留真实 Tab;本地示例文件保留原样本编码、中文表头与 CRLF。网页文字使用浏览器编码显示,不表示运行文件应改存 UTF-8。

允许既有时装使用两种摆摊币种

修改前:

INT	INT	INT	STRING	INT	INT	INT
Index	有效期(小时)	传输颜色	附加属性描述$1$	是否显示	元宝交易类型:0可元宝交易,1不可元宝交易,2即可元宝交易也可金币交易	卖店是否获得交子,1获得交子,0获得金币
10124009	-1	2005	-1		1	0

修改后:

INT	INT	INT	STRING	INT	INT	INT
Index	有效期(小时)	传输颜色	附加属性描述$1$	是否显示	元宝交易类型:0可元宝交易,1不可元宝交易,2即可元宝交易也可金币交易	卖店是否获得交子,1获得交子,0获得金币
10124009	-1	2005	-1		2	0

在原表第一列定位 10124009(EquipBase.txt 中的紫色时装),把第 6 列从 1 改为 2。保留第 2 列 -1、第 3 列 2005、第 4 列 -1、第 5 列空值、第 7 列 0,以及整表其他行。同步客户端同一行。找一件该模板、未绑定且未加锁的测试物品,分别验证金币摊和元宝摊的上架检查;实际交易仍须满足正常玩法限制。本例不改 ItemRule,不改变卖给 NPC 的结算币种。三行文件只表示局部修改,不能替换整表。

验证与排查

先检查 Server 日志 InitEquipExtraAttrTable() Ok!,确认 7 列、ID 排序、示例仅第 6 列改变,并核对客户端同名资源。交易例子需分别检查两类摊位、被绑定或加锁时的拒绝、重登后的状态。恢复时停服并还原两端表格备份、重新启动;恢复配置不能逆转已发生的交易,也不能恢复已经清理的过期物品。

改有效期前先分清这些情况

情况 实际规则
永久 第 2 列沿用 -1。一般负数都跳过到期判断,但不建议创造额外负数约定。时装可仍记录创建时间,记录时间不等于开启过期。
限时 例如 168 表示按小时刻度比较:当前 Unix 小时数减创建 Unix 小时数小于 168 才有效;等于 168 已到期。时间在除以 3600 时取整,不保证从发放时刻起精确满 168 小时。
改已有物品 如果物品已有创建时间,会按原时间与新期限比较,缩短期限可能立即判到期。旧物品没有创建时间时,首次检查会补上当前小时并暂时通过;重启不代表统一从零计时。
到期清理 已核对的触发点包括角色查询自身装备列表时的检查,检查范围含普通、材料、任务背包、已穿装备和银行;玩家商店购买也有到期检查。不能据此承诺每秒定时删除。具体界面触发时机需要实测。
时钟回退 服务器当前小时早于记录的创建小时,服务端可判无效;客户端显示却会把负的经过时间按 0 算。因此不要以客户端剩余时间提示代替服务端判断。

缺行不等于空字段

没有某个编号的记录时,元宝交易查询采用 1,卖店币种采用物品大类规则。新增一行后留空,第 2、6、7 列都会成为 0,会同时改变有效期、交易类型和卖店币种。只想改其中一项,也要明确填写其余已核对字段。

与其他规则的关系

CommonItem.txt 的末列也叫“是否元宝交易”,但已核对的统一交易查询实际取本表。ItemRule.txt 的规则标志以及物品已绑定、已锁定状态仍单独起作用;不能靠把第 6 列改为 2 解除这些限制。

关联与依据

Public/CommonItem.txt · Public/ItemRule.txt · Public/ItemAptRate.txt

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

  • Common/DataBase/TLBB_DBC.cpp:实际加载、解析、字段使用或示例关联依据
  • Common/DataBase/TLBB_DBC.h:实际加载、解析、字段使用或示例关联依据
  • Common/ServerBase/FileDef.h:实际加载、解析、字段使用或示例关联依据
  • Server/Server/GameServer/Server/Item/ItemTable.cpp:实际加载、解析、字段使用或示例关联依据
  • Server/Server/GameServer/Server/Item/ItemTable.h:实际加载、解析、字段使用或示例关联依据
  • Common/GameStruct_Item.h:实际加载、解析、字段使用或示例关联依据
  • Client/Client/Game/DBC/GMDataBase.cpp:实际加载、解析、字段使用或示例关联依据
  • Client/Client/Common/TDDBC_Struct.h:实际加载、解析、字段使用或示例关联依据
  • 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:实际加载、解析、字段使用或示例关联依据
  • Server/Server/GameServer/Server/Item/ItemRuler.cpp:实际加载、解析、字段使用或示例关联依据
  • Server/Server/GameServer/Server/Item/Item.cpp:实际加载、解析、字段使用或示例关联依据
  • Server/Server/GameServer/Server/Packets/CGStallAddItemHandler.cpp:实际加载、解析、字段使用或示例关联依据
  • Server/Server/GameServer/Server/Packets/CGPlayerShopOnSaleHandler.cpp:实际加载、解析、字段使用或示例关联依据
  • Server/Server/GameServer/Server/Packets/CGPlayerShopBuyItemHandler.cpp:实际加载、解析、字段使用或示例关联依据
  • Server/Server/GameServer/Server/Packets/CGShopSellHandler.cpp:实际加载、解析、字段使用或示例关联依据
  • Server/Server/GameServer/Server/Obj/Obj_Human.cpp:实际加载、解析、字段使用或示例关联依据
  • Server/Server/GameServer/Server/Obj/Obj_Human_AttrRefesh.cpp:实际加载、解析、字段使用或示例关联依据
  • Client/Client/Game/Object/Item/Obj_Item.cpp:实际加载、解析、字段使用或示例关联依据
  • resources/Public/Config/EquipBase.txt:实际加载、解析、字段使用或示例关联依据

使用原始 DBC、附加表加载/查询与有效期函数做隔离测试,检查空字段、负数、零、BYTE 截断及时间边界;交易和界面入口经源码核对。未启动游戏或数据库,实际交易、提示和过期清理仍需要实测。