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

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


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

ItemAptRate.txt 是装备资质的换算表:先用一项属性保存的资质点找第一列,再取该属性对应列的百分比。例如资质点 189、物理攻击列 16,表示该装备基础外功攻击额外增加 16%。它不设置洗资质的概率,也不把装备资质点直接改成 189。

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

文件位置与生效

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

共 7 列 INT;服务端检查列数必须为 7、数据行数不超过 255。样本保留资质点 1..255 共 255 行。查询按第一列二分查找,加载器不会排序,必须保持第一列数值递增且唯一。

两端各改哪里

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

文件格式

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

字段详解

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

字段与类型 含义与修改要点 缺项或特殊值
第 1 列
INT:资质点
查询键,对应物品保存的某一项资质点。六项属性可以各有不同资质点,因此同一件装备可能查六行。不是角色等级、装备需求等级、资质文字档位、物品编号或洗练次数。 物品以 BYTE 保存,正常点数 1..255;0 在已核对的属性计算和 Lua 查询中被跳过。保留全部 255 个既有键;缺行查询返回 0 加成,重复触发 DBC 错误,乱序可能查不到已有行。
第 2 列
INT:物理攻击,外功攻击
该行资质点对应的基础外功攻击加成百分比;16 表示 +16%,不是 16 点攻击或 16 倍。服务端按基础值*本列*0.01 计算额外值。 空值为 0,即本项没有资质额外加成。建议保留非负且经过平衡验证的整数;没有通用的自动夹到 100 的保护。Lua GetItemApt 类型 1 取本列。
第 3 列
INT:物理防御,外功防御
该行资质点对应的基础外功防御加成百分比,计算方式同第 2 列。只增加对应装备基础属性的这一部分。 0 或空值不增加;负数可能减少最终值,不能当作“自动”。Lua GetItemApt 类型 3 取本列。
第 4 列
INT:魔法攻击,内功攻击
该行资质点对应的基础内功攻击加成百分比。与第 3 列顺序不能互换。 0 或空值不增加;保留非负、经过验证的整数。Lua GetItemApt 类型 2 取本列。
第 5 列
INT:魔法防御,内功防御
该行资质点对应的基础内功防御加成百分比;不是元素抗性、伤害减免或受击概率。 0 或空值不增加;保留非负、经过验证的整数。Lua GetItemApt 类型 4 取本列。
第 6 列
INT:闪避
该行资质点对装备基础闪避属性值的加成百分比。不是最终躲避一次攻击的概率。 0 或空值不增加;不要据数值 20 承诺 20% 的实战闪避概率。Lua GetItemApt 类型 5 取本列。
第 7 列
INT:命中
该行资质点对装备基础命中属性值的加成百分比。不是最终命中率。 0 或空值不增加;保留末列及行尾,不能因临时不改命中而删去。Lua GetItemApt 类型 6 取本列。

常用修改实例

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

把资质点 189 的基础外功攻击加成从 16% 改为 17%

修改前:

INT	INT	INT	INT	INT	INT	INT
资质点	物理攻击	物理防御	魔法攻击	魔法防御	闪避	命中
189	16	16	16	16	16	16

修改后:

INT	INT	INT	INT	INT	INT	INT
资质点	物理攻击	物理防御	魔法攻击	魔法防御	闪避	命中
189	17	16	16	16	16	16

在原表第一列找到 189,只改第 2 列 16 为 17,第 3..7 列仍为 16,并保留其他 254 行。同步客户端同一行。教学计算:假定这件装备基础外功攻击为 1000、外功资质点确为 189、资质已启用,则资质额外值从 160 变为 170;这不是角色总攻击提高 1%。本例不会让资质点 188 或 190 自动跟着变化,也不自动生成一件点数为 189 的装备。必须使用已确认条件的测试物品,不能只凭提示档位认定点数。

验证与排查

没有专门的 InitAptRateTable() Ok! 日志可作为保证。先检查 Server 启动没有本表读取/断言错误,再检查 7 列、第一列递增且唯一、1..255 的覆盖和示例只改一个值。用已启用资质、点数明确且对应基础属性为正的装备,核对 Lua 返回、客户端百分比和装备重新计算后的角色属性;同时用点数不等于 189 的装备作对照。正常停服恢复两端表备份后重启;本表修改不改库存保存的资质点,别为回滚而重洗物品。

加成算在哪里

资质额外值 = 该装备这一项基础值 * 查表百分比 / 100。服务端把它与基础值、同项额外/宝石值及强化相关值相加,再转换整数,正值上限限制为 32767。不是把角色总属性乘以百分比,也不会把全部宝石和强化数值再乘一次。资质必须已启用且该项点数大于 0;改表不会替代启用流程。极端数值和负数会造成不合理结果,不建议用于玩法配置。

百分比与提示档位分开

客户端按原资质点的 64、126、189 等门槛选择文字档位,另按 250 以上等条件选择颜色;显示百分比则查本表。把 16 改为 17 不会将保存的点数或全部提示档位同步提高。

服务端 Lua 查询

第 4 个参数 本表对应列
1 外功攻击 第 2 列
2 内功攻击 第 4 列
3 外功防御 第 3 列
4 内功防御 第 5 列
5 闪避 第 6 列
6 命中 第 7 列
local percent = GetItemApt(sceneId, selfId, equipBagPos, 1)
if percent < 0 then
    return
end
-- 配置已核对为非负;percent 是查表百分比
-- 0 也可能表示没有匹配的配置行

sceneId 是当前场景 ID,selfId 是其中玩家对象 ID,equipBagPos 是测试装备所在背包格,不是物品模板号、GUID 或已穿装备栏位置。正常样本对应资质点 189 返回 16,本例修改后返回 17。表内负数也会原样返回,配置应保持非负。参见 GetItemApt;该查询不检查资质启用标志,读到百分比不代表角色已获得加成。

LuaFnReSetItemApt 成功后的结果分类也查本表:只考察基础值为正、点数不为 0 的项,百分比大于 17 可使返回值为 2;点数大于 250 优先返回 3。改表可能改变脚本据返回值发出的提示或奖励判断;不能把 2、3 当作本表行号。本例只改到 17,没有跨过“大于 17”的门槛。

关联与依据

Public/EquipExtraAttr.txt · Public/SlotCost.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/Obj/Obj_Human_Calc.cpp:实际加载、解析、字段使用或示例关联依据
  • Server/Server/GameServer/Server/Script/LuaFnTbl_Ability.h:实际加载、解析、字段使用或示例关联依据
  • Server/Server/GameServer/Server/Script/LuaFnRegister.cpp:实际加载、解析、字段使用或示例关联依据

原始 DBC、表加载、二分查询与 Lua GetItemApt 在独立夹具核对;百分比计算与客户端映射经源码核对。测试不启动服务、不生成真实库存,角色实际属性及提示仍需要实测。