查看“︁工程参考/配置文件/Public/RepairRate.txt”︁的源代码
来自天龙知识库
←
工程参考/配置文件/Public/RepairRate.txt
跳到导航
跳到搜索
因为以下原因,您没有权限编辑该页面:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
{{DISPLAYTITLE:<span style="font-size:24px;line-height:1.4;overflow-wrap:anywhere;">工程参考/配置文件/Public/RepairRate.txt</span>}} __NOTOC__ <div class="config-file-reference" style="max-width:1200px;margin:0 auto;line-height:1.8;color:#29343a;font-family:Arial,'Microsoft YaHei',sans-serif;letter-spacing:0;overflow-wrap:anywhere;"> [[首页|首页]] · [[工程参考/配置文件索引|配置文件索引]] · [[工程参考/配置文件修改约定|修改约定]] RepairRate.txt 决定按耐久损耗计算修理费时使用的系数,不是修理成功率,也不决定能修哪种装备。以需求等级 10~19 的武器为例,它使用第 2 行第 3 列;防具和部分饰品使用第 4 列。普通修理、高级修理报价和客户端显示存在差异,修改后应同时核对报价与实际扣费。 [[#文件位置与生效|位置与生效]] · [[#文件格式|文件格式]] · [[#字段详解|字段详解]] · [[#常用修改实例|修改实例]] == 文件位置与生效 == {| class="wikitable" style="width:100%;table-layout:fixed;border-collapse:collapse;font-size:13px;" ! scope="col" style="width:24%;text-align:left;background:#edf3f2;padding:8px;" | 项目 ! scope="col" style="width:76%;text-align:left;background:#edf3f2;padding:8px;" | 说明 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 运行文件 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">../Public/Config/RepairRate.txt</code>,相对于 Server 工作目录。客户端另有 General 资源组里的 RepairRate.txt;二者是不同副本。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 读取程序 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | Server 计算实际修理费与高级报价;客户端另读同名资源用于显示 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 生效方法 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 正常保存并停服,备份并修改实际 Public 副本,随后重启使用该目录的 Server。当前检索范围未发现单独重载入口。若修改费用系数,同步更新客户端实际加载的同名表并重启 Game.exe,再对照报价与扣费。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 样本格式 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">GB18030-compatible</code>,<code style="white-space:normal;overflow-wrap:anywhere;">CRLF</code>。保留原编码;源码读取器不会自动把中文转为 UTF-8。 |} 样本有 15 条数据行,每行 4 列。服务端允许 1..20 行,但两列编号必须按有效数据行从 1 连续递增,不能排序、跳号或只保留中间一行。 === 装备等级怎样对应行 === {| class="wikitable" style="width:100%;table-layout:fixed;border-collapse:collapse;font-size:13px;" ! scope="col" style="width:24%;text-align:left;background:#edf3f2;padding:8px;" | 装备需求等级 L ! scope="col" style="width:76%;text-align:left;background:#edf3f2;padding:8px;" | 使用哪行 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 0..9 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 第 1 行,ID=1;客户端本报价函数只接受需求等级大于 0。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 10..19 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 第 2 行,ID=2。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 20..29 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 第 3 行,ID=3。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 40..49 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 第 5 行,ID=5;注意 40 级附加费的入口差异。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 一般规则 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">行号 r = 整数除法(L / 10) + 1</code>;第 15 行对应 140..149,但客户端此报价函数只接受不超过 120 级。 |} 这里的 L 是装备使用需求等级,不是人物等级。服务端对暗器还可能取暗器等级与模板需求等级中的较大值;暗器也有特殊耐久和费用分支,不能直接套用普通武器示例。ID=2 不是物品编号、装备点、对象 ID 或 GUID。 == 文件格式 == 首行是类型行:<code style="white-space:normal;overflow-wrap:anywhere;">INT INT FLOAT FLOAT</code>;第二行是列名行,程序跳过其内容;从第三行开始读取数据。各列用真实 Tab 分隔,保留首列、空列及行尾,不用空格代替。数据行行首 # 表示注释,分号不是此表的注释规则。首列为空的行被跳过;不足的尾列补为空值,多余列不参与本页字段读取。空整数和非数字经 atoi 可能成为 0,空字符串仍为空,不把解析成功当作业务合法。第一列须唯一,重复会触发读取器错误。 == 字段详解 == 列号从 1 开始,源码列下标从 0 开始。 {| class="wikitable" style="width:100%;table-layout:fixed;border-collapse:collapse;font-size:13px;" ! scope="col" style="width:34%;text-align:left;background:#edf3f2;padding:8px;" | 字段与类型 ! scope="col" style="width:42%;text-align:left;background:#edf3f2;padding:8px;" | 含义与修改要点 ! scope="col" style="width:24%;text-align:left;background:#edf3f2;padding:8px;" | 缺项或特殊值 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 1 列</code><br>INT:ID | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 从 1 开始连续编号,必须等于当前有效数据行号。业务实际按 r-1 的数组位置取行,不能靠改 ID 改变等级段。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 空首列跳过整行,后面编号可能失配;重复键报错。0、负数、跳号和交换顺序不合法。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 2 列</code><br>INT:装备级别 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 等级段编号,必须与第 1 列及有效行号相同。2 表示 10..19 段,不表示只有需求等级 2。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 空值或非数字变为 0,不能通过连续编号检查。不要填 10、20、30 来表示十级一段。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 3 列</code><br>FLOAT:武器修理率 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 武器装备点 0 使用的费用系数。服务端表分支将缺失耐久点数乘 ConfigInfo 的 EquipmentDamagePoint 再乘本值,取整数;不是百分比成功率,不填写百分号。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 缺少尾值、空值或非数字可变为 0。负值不能通过服务端检查。使用有限非负小数,拒绝 NaN/Infinity,避免超出费用整数范围;没有通用最大值钳制。0 不保证免费。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 4 列</code><br>FLOAT:防具修理率 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 服务端表分支用于装备点 1..7:帽子、盔甲、旧护腕位、鞋、腰带、第一戒指、项链。客户端则将非武器都选此列,其他装备位可能与实际扣费走不同公式。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 空值等可变为 0,负值不合法。不要把所有非武器都当成服务端必用本列;第二戒指、护符等装备位走服务端退回公式。 |} == 常用修改实例 == 示例为局部教学片段,先备份原运行文件,再修改对应行并保留其余配置。教学值不是程序默认值。 以下代码块保留真实 Tab;本地示例文件为 ASCII/CRLF,列名用英文便于核对分隔符。 === 调整需求等级 10~19 武器的修理系数 === 修改前: <pre style="white-space:pre-wrap;overflow-wrap:anywhere;font-size:13px;line-height:1.7;padding:12px;background:#f5f7f8;border:1px solid #dbe3e6;">INT INT FLOAT FLOAT ID EquipLevel WeaponRepair DefenceRepair 1 1 0.00184 0.005 2 2 0.007801095 0.005710784</pre> 修改后: <pre style="white-space:pre-wrap;overflow-wrap:anywhere;font-size:13px;line-height:1.7;padding:12px;background:#f5f7f8;border:1px solid #dbe3e6;">INT INT FLOAT FLOAT ID EquipLevel WeaponRepair DefenceRepair 1 1 0.00184 0.005 2 2 0.01 0.005710784</pre> 定位完整原表中 ID=2 的行,只把第 3 列样本值 0.007801095 改为教学值 0.01。保留第 4 列 0.005710784、两列编号、前一行以及其余 13 行。本片段包含第 1、2 行以说明连续编号,不能覆盖完整 15 行表;英文表头仅便于核对,原文件中文表头可以保留。 已有模板 10100001“泼风刀”需求等级 10、装备点 0、模板最大耐久 125。选择当前最大耐久确为 125、当前耐久为 115 的测试物品,使用可修该武器的普通 NPC 商店,保持 EquipmentDamagePoint=500、商店修理倍率为 1。缺失 10 点耐久,服务端费用由整数部分(10×500×0.007801095)=39,变为整数部分(10×500×0.01)=50,单位为角色金钱最小单位。这不是重新生成装备的操作,也不是只影响泼风刀:同等级段武器共享系数。 同步客户端同名表后,此普通武器在上述条件下显示值也由 39 变为 50。需在修理前记录耐久、报价和余额,修理后比较余额差;不能用修满后的同一状态再次比较。原始代码隔离测试已核对上述结果,实际界面、NPC限制和网络流程需要实测。回退时两端恢复原值 0.007801095 并重启;恢复配置不会退还已经花费的钱。 == 验证与排查 == 先检查 4 列、原 15 行及两列编号均为 1..15,浮点列非负且有限。Load RepairRate.txt ... OK! 只说明服务端加载成功。两端原始样本已有部分小数末位不同,不能以同名文件推定内容一致;本例第2行两端原值相同。确认修改的是实际 Public 副本,客户端读取资源已更新,目标装备属于本表费用分支;检查 NPC 修理类型、最高修理等级和角色金钱。不要只看客户端提示就判断收费正确。出现不一致时按下表核对入口,恢复备份后重新登录并用同一耐久条件复查。 === 普通修理的费用 === 设 d=最大耐久减当前耐久、D=ConfigInfo.ini 的 EquipmentDamagePoint、k=本表系数。服务端表分支先取 <code style="white-space:normal;overflow-wrap:anywhere;">整数部分(d × D × k)</code>,正数截去小数部分,不是四舍五入。普通装备需求等级 L≥40 时再加 <code style="white-space:normal;overflow-wrap:anywhere;">225 × r + 900</code>,最终计算值小于等于 0 时收取至少 1。已满耐久或最大耐久不大于 0 时,费用辅助函数直接返回 0。D 的样本值为 500,不能把它当成这张表内的默认值。 找不到等级段,或装备点不在 0..7 时,普通修理改用 <code style="white-space:normal;overflow-wrap:anywhere;">int((1 - 当前耐久/最大耐久) × 物品基础价格 × 商店修理倍率 + 舍入补量)</code>,再处理附加费和最低费用。背包单件入口补量 0.99,身上单件及全部修理入口补量 0.5。不要删行来调整收费,那可能让装备转入另一公式。普通修理还要通过商店允许类型、等级、距离和资金等检查。 === 三种入口不要混为一谈 === {| class="wikitable" style="width:100%;table-layout:fixed;border-collapse:collapse;font-size:13px;" ! scope="col" style="width:24%;text-align:left;background:#edf3f2;padding:8px;" | 入口 ! scope="col" style="width:76%;text-align:left;background:#edf3f2;padding:8px;" | 与本表相关的差异 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 服务端普通 NPC 修理 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 表分支用 D(样本500),只对装备点0..7使用本表;该分支不乘商店倍率。L≥40加固定费,非满耐久最终至少1。普通入口从角色金钱扣款。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | GetHighRepairPrice 高级报价 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 服务端表分支也用 D;附加费条件是 L>40,因此恰好40级与普通修理不同。没有最终至少1的钳制。退回公式用物品基础价和0.99补量,不乘普通商店倍率。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 客户端 GetRepairPrice 显示 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 使用固定500,所有非武器取防具列;L≥40加费后,再乘商店倍率并取整。等级≤0、>120、满耐久或查不到行返回-1。没有至少1的钳制。 |} 因此本表填 0 不能作为统一“免费修理”开关;改商店倍率或 EquipmentDamagePoint 也可能导致显示与扣款不一致。这些是已核对的源码差异,不通过修改本表去掩盖。 === 客户端副本在哪里 === 客户端以 General 资源组加载 RepairRate.txt。查看实际 Client/Bin/FairyResources.cfg:[General] 中 FileSystem=*../Data/Config 对应 Client/Data/Config/RepairRate.txt,AxpFileSystem=../Data/Config.axp 对应包内同名成员;其他映射以实际配置为准。不要只改源码样本。表分支的最终扣款由服务端决定,改客户端不能单独降低费用。 === 服务端 Lua 报价关联 === 在已有事件提供有效参数时,报价调用为: <pre style="white-space:pre-wrap;overflow-wrap:anywhere;font-size:13px;line-height:1.7;padding:12px;background:#f5f7f8;border:1px solid #dbe3e6;">local price = GetHighRepairPrice(sceneId, selfId, bagPos)</pre> 参数依次为场景 ID、玩家场景对象 ID、背包位置;bagPos 不是物品模板编号或 GUID。该调用只报价:物品指针为空或满耐久时可返回0,人物上下文失败可返回-5,异常路径可能无返回值;非装备或缺模板不是本页推荐调用对象。0不是保证可以成功免费修理,正值也不是修理成功标志。 实际高级修理 <code style="white-space:normal;overflow-wrap:anywhere;">DoHighRepair(sceneId, selfId, bagPos, price)</code> 使用脚本传入的第4项扣费,不在内部重新查本表。现有 event/xunhuan/equiprepair.lua 的普通装备分支先取报价再调用;神器分支另有材料与价格处理,不能套用本页示例。高级修理的扣款、失败次数和成功判定另见 [[Lua接口/服务端/GetHighRepairPrice|GetHighRepairPrice]]、[[Lua接口/服务端/DoHighRepair|DoHighRepair]]。本表不改变这些成功判定。 == 关联与依据 == [[工程参考/配置文件/Server/ConfigInfo.ini|Server/ConfigInfo.ini]] [[工程参考/配置文件索引|其他配置及整理状态]] · [[工程参考/服务端外网设置|服务端外网设置]] · [[Lua接口/服务端函数索引|Lua 接口索引]] * <code style="white-space:normal;overflow-wrap:anywhere;">Server/Server/GameServer/Server/Main/GameTable.cpp</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">Server/Server/GameServer/Server/Main/GameTable.h</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">Server/Server/GameServer/Server/Packets/CGShopRepairHandler.cpp</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">Server/Server/GameServer/Server/Script/LuaFnTbl_Shop.h</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">Server/Server/GameServer/Server/Script/LuaFnRegister.cpp</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">Server/Server/GameServer/Server/Item/Item.cpp</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">Server/Server/GameServer/Server/Item/ItemTable.cpp</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">Common/GameDefine_Item.h</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">Common/ServerBase/FileDef.h</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">Common/ServerBase/Config.cpp</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">Common/DataBase/TLBB_DBC.cpp</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">Common/DataBase/TLBB_DBC.h</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">Client/Client/Game/Object/Item/Obj_Item_Equip.cpp</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">Client/Client/Common/TDDBC_Struct.h</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">Client/Client/Game/DBC/GMDataBase.cpp</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">Client/Client/Render/ResourceProvider.cpp</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">Client/Client/Render/RenderSystem.cpp</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">Client/Client/Core/Core/FairySystem.cpp</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">resources/Client/Bin/FairyResources.cfg</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">resources/Client/Data/Config/RepairRate.txt</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">resources/Public/Config/EquipBase.txt</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">resources/Public/Data/Script/event/xunhuan/equiprepair.lua</code>:实际加载、解析、字段使用或示例关联依据 隔离运行原始DBC、表加载、普通修理费用函数、完整高级报价函数和客户端报价函数;人物/物品上下文及客户端数据库用测试替身提供已知状态。未执行扣款、修理动作、游戏界面或数据库,实际业务流程需要实测。 </div> [[Category:工程参考]]
返回
工程参考/配置文件/Public/RepairRate.txt
。
导航菜单
页面操作
页面
讨论
阅读
查看源代码
历史
页面操作
页面
讨论
更多
工具
个人工具
创建账号
登录
导航
首页
最近更改
随机页面
MediaWiki帮助
特殊页面
搜索
工具
链入页面
相关更改
页面信息