查看“︁工程参考/配置文件/Public/CommerceRelation.txt”︁的源代码
来自天龙知识库
←
工程参考/配置文件/Public/CommerceRelation.txt
跳到导航
跳到搜索
因为以下原因,您没有权限编辑该页面:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
{{DISPLAYTITLE:<span style="font-size:24px;line-height:1.4;overflow-wrap:anywhere;">工程参考/配置文件/Public/CommerceRelation.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;"> [[首页|首页]] · [[工程参考/配置文件索引|配置文件索引]] · [[工程参考/配置文件修改约定|修改约定]] CommerceRelation.txt 是一张 21×21 的价格系数矩阵。文件和列数都必须正好是 22(MAX_COMMERCE_SCOPE + 1):第 1 行是表头行,内容是 0 到 21 的商区号,加载时被跳过;第 2 到 22 行是真正的源商区,每行第 1 列是自己的商区号,第 2 到 22 列是到 1 到 21 号商区的系数。样本 22 行、22 列。 [[#文件位置与生效|位置与生效]] · [[#文件格式|文件格式]] · [[#字段详解|字段详解]] · [[#常用修改实例|修改实例]] == 文件位置与生效 == {| 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/CommerceRelation.txt</code>,路径写死在加载函数里,相对于 GameServer 工作目录。当前核对范围内客户端与 World 都不读本表。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 读取程序 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | GameServer:TableInit::InitCommerceRelationTable 用 DBCFile::OpenFromTXT 打开 "../Public/Config/CommerceRelation.txt";读取后存进 g_CommerceRelationTbl |- | 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;" | <code style="white-space:normal;overflow-wrap:anywhere;">GB18030-compatible</code>,<code style="white-space:normal;overflow-wrap:anywhere;">CRLF</code>。保留原编码;源码读取器不会自动把中文转为 UTF-8。 |} 加载先断言行数与列数都等于 MAX_COMMERCE_SCOPE + 1(22),然后逐行取 <code style="white-space:normal;overflow-wrap:anywhere;">nRecordLine = i + 1</code>,断言第 1 列等于 i + 1,再读 21 个 FLOAT。 {| 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;" | 第 1 行为什么被跳过 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 它是表头行,写的是目标商区号 0 到 21,不参与读取。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 源商区号怎么校验 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 第 i+1 行的第 1 列必须等于 i+1,对不上会记错误日志并中止整表加载。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 系数的取值范围 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 0 到 100,超出会记错误日志并把整张表清零。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 矩阵是否要求对称 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 不要求。A 到 B 与 B 到 A 是两个独立的格子。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 失败后的状态 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 整表 memset 清零,商路系数全部变成 0。 |} == 文件格式 == 首行是类型行:<code style="white-space:normal;overflow-wrap:anywhere;">INT FLOAT FLOAT FLOAT FLOAT FLOAT FLOAT FLOAT FLOAT FLOAT FLOAT FLOAT FLOAT FLOAT FLOAT FLOAT FLOAT FLOAT FLOAT FLOAT 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 个数据行是表头行(内容是 0 到 21),加载时被整体跳过;真正被读取的是第 2 到 22 行,且第 i 行的这一列必须等于 i。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 必填。第 2 行必须是 1、第 3 行必须是 2,依此类推;对不上会记错误日志并中止整表加载。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 2 列</code><br>FLOAT:商区ID | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 从本行商区到 1 号商区的价格系数,按 FLOAT 读取。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 必须落在 0 到 100 之间,超范围会记错误日志并把整张表清零。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 3 列</code><br>FLOAT:商区ID | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 从本行商区到 2 号商区的价格系数,按 FLOAT 读取。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 必须落在 0 到 100 之间,超范围会记错误日志并把整张表清零。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 4 列</code><br>FLOAT:商区ID | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 从本行商区到 3 号商区的价格系数,按 FLOAT 读取。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 必须落在 0 到 100 之间,超范围会记错误日志并把整张表清零。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 5 列</code><br>FLOAT:商区ID | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 从本行商区到 4 号商区的价格系数,按 FLOAT 读取。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 必须落在 0 到 100 之间,超范围会记错误日志并把整张表清零。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 6 列</code><br>FLOAT:商区ID | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 从本行商区到 5 号商区的价格系数,按 FLOAT 读取。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 必须落在 0 到 100 之间,超范围会记错误日志并把整张表清零。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 7 列</code><br>FLOAT:商区ID | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 从本行商区到 6 号商区的价格系数,按 FLOAT 读取。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 必须落在 0 到 100 之间,超范围会记错误日志并把整张表清零。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 8 列</code><br>FLOAT:商区ID | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 从本行商区到 7 号商区的价格系数,按 FLOAT 读取。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 必须落在 0 到 100 之间,超范围会记错误日志并把整张表清零。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 9 列</code><br>FLOAT:商区ID | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 从本行商区到 8 号商区的价格系数,按 FLOAT 读取。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 必须落在 0 到 100 之间,超范围会记错误日志并把整张表清零。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 10 列</code><br>FLOAT:商区ID | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 从本行商区到 9 号商区的价格系数,按 FLOAT 读取。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 必须落在 0 到 100 之间,超范围会记错误日志并把整张表清零。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 11 列</code><br>FLOAT:商区ID | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 从本行商区到 10 号商区的价格系数,按 FLOAT 读取。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 必须落在 0 到 100 之间,超范围会记错误日志并把整张表清零。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 12 列</code><br>FLOAT:商区ID | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 从本行商区到 11 号商区的价格系数,按 FLOAT 读取。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 必须落在 0 到 100 之间,超范围会记错误日志并把整张表清零。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 13 列</code><br>FLOAT:商区ID | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 从本行商区到 12 号商区的价格系数,按 FLOAT 读取。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 必须落在 0 到 100 之间,超范围会记错误日志并把整张表清零。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 14 列</code><br>FLOAT:商区ID | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 从本行商区到 13 号商区的价格系数,按 FLOAT 读取。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 必须落在 0 到 100 之间,超范围会记错误日志并把整张表清零。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 15 列</code><br>FLOAT:商区ID | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 从本行商区到 14 号商区的价格系数,按 FLOAT 读取。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 必须落在 0 到 100 之间,超范围会记错误日志并把整张表清零。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 16 列</code><br>FLOAT:商区ID | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 从本行商区到 15 号商区的价格系数,按 FLOAT 读取。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 必须落在 0 到 100 之间,超范围会记错误日志并把整张表清零。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 17 列</code><br>FLOAT:商区ID | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 从本行商区到 16 号商区的价格系数,按 FLOAT 读取。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 必须落在 0 到 100 之间,超范围会记错误日志并把整张表清零。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 18 列</code><br>FLOAT:商区ID | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 从本行商区到 17 号商区的价格系数,按 FLOAT 读取。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 必须落在 0 到 100 之间,超范围会记错误日志并把整张表清零。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 19 列</code><br>FLOAT:商区ID | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 从本行商区到 18 号商区的价格系数,按 FLOAT 读取。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 必须落在 0 到 100 之间,超范围会记错误日志并把整张表清零。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 20 列</code><br>FLOAT:商区ID | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 从本行商区到 19 号商区的价格系数,按 FLOAT 读取。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 必须落在 0 到 100 之间,超范围会记错误日志并把整张表清零。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 21 列</code><br>FLOAT:商区ID | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 从本行商区到 20 号商区的价格系数,按 FLOAT 读取。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 必须落在 0 到 100 之间,超范围会记错误日志并把整张表清零。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 22 列</code><br>FLOAT:商区ID | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 从本行商区到 21 号商区的价格系数,按 FLOAT 读取。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 必须落在 0 到 100 之间,超范围会记错误日志并把整张表清零。 |} == 常用修改实例 == 示例为局部教学片段,先备份原运行文件,再修改对应行并保留其余配置。教学值不是程序默认值。 以下代码块保留真实 Tab;本地示例文件保留原样本编码、中文表头与 CRLF。网页文字使用浏览器编码显示,不表示运行文件应改存 UTF-8。 === 把 1 号商区到 1 号商区的系数从 0.1 改为 0.2 === 修改前: <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 FLOAT FLOAT FLOAT FLOAT FLOAT FLOAT FLOAT FLOAT FLOAT FLOAT FLOAT FLOAT FLOAT FLOAT FLOAT FLOAT FLOAT FLOAT FLOAT FLOAT FLOAT 商区ID 商区ID 商区ID 商区ID 商区ID 商区ID 商区ID 商区ID 商区ID 商区ID 商区ID 商区ID 商区ID 商区ID 商区ID 商区ID 商区ID 商区ID 商区ID 商区ID 商区ID 商区ID 1 0.1 0.5 0.5 1 1.2 2.3 2.8 2.8 2.3 1.73 1.8 2.8 2.8 2.8 2.8 1.8 2.3 2.8 2.8 2.8 2.8</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 FLOAT FLOAT FLOAT FLOAT FLOAT FLOAT FLOAT FLOAT FLOAT FLOAT FLOAT FLOAT FLOAT FLOAT FLOAT FLOAT FLOAT FLOAT FLOAT FLOAT FLOAT 商区ID 商区ID 商区ID 商区ID 商区ID 商区ID 商区ID 商区ID 商区ID 商区ID 商区ID 商区ID 商区ID 商区ID 商区ID 商区ID 商区ID 商区ID 商区ID 商区ID 商区ID 商区ID 1 0.2 0.5 0.5 1 1.2 2.3 2.8 2.8 2.3 1.73 1.8 2.8 2.8 2.8 2.8 1.8 2.3 2.8 2.8 2.8 2.8</pre> 按第 1 列定位 1 号商区那一行(第 2 个数据行;第 1 个数据行是表头,值为 0 到 21,不参与读取)。第 2 列对应 1 号目标商区,样本值是 0.1,这里改成 0.2,其余 21 列与另 21 行全部保留。 系数按 FLOAT 读取,必须落在 0 到 100 之间,超出会把整张表清零——改之前先确认没有手滑多打一个零。 示例块含类型行、列名行与该行原文,不能覆盖整张表。改完需要重启 Server。 == 验证与排查 == Server 启动日志出现 “Load CommerceRelation.txt ... OK!”。改完重启后,在两个商区之间跑一趟商路,确认买入与卖出的价格按新系数变化。若日志出现 Failed 且带 source / dest / value,说明有系数越界或源商区号错位,整张表此时已被清零。失败时恢复备份并重启。 === 第 1 个数据行是表头 === 样本第 1 行的内容是 0 到 21,是给人看的目标商区号,加载时整体跳过。不要把它当成 0 号商区的数据行。 === 源商区号必须等于行号 === 第 2 行的第 1 列必须是 1,第 3 行必须是 2。挪动行的顺序而不改第 1 列,会立刻触发错误日志并中止加载。 === 越界会清空整表 === 任何一个系数不在 0 到 100 之间,都会把 <code style="white-space:normal;overflow-wrap:anywhere;">g_CommerceRelationTbl</code> 整体 memset 成 0。后果是所有商路无利可图,而不是只有那一条出错。 === 常数写死 21 === <code style="white-space:normal;overflow-wrap:anywhere;">MAX_COMMERCE_SCOPE</code> 是 21,行数与列数都必须正好是 22。想加一个商区必须同时改类型行、列名行、所有数据行并改这个常量。 == 关联与依据 == [[工程参考/配置文件/Public/CityInfo.txt|Public/CityInfo.txt]] [[工程参考/配置文件索引|其他配置及整理状态]] · [[工程参考/服务端外网设置|服务端外网设置]] · [[Lua接口/服务端函数索引|Lua 接口索引]] * <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;">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;">Common/GameDefine_City.h</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">Common/ServerBase/FileDef.h</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">resources/Public/Config/CommerceRelation.txt</code>:实际加载、解析、字段使用或示例关联依据 本页核对 InitCommerceRelationTable 的 22×22 断言、源商区号等于行号的校验、系数的 0 到 100 范围与失败清零行为;样本 22 行的行数列数与编号递增经脚本核算。未启动服务端,商路价格的实际变化需要实测。 </div> [[Category:工程参考]]
返回
工程参考/配置文件/Public/CommerceRelation.txt
。
导航菜单
页面操作
页面
讨论
阅读
查看源代码
历史
页面操作
页面
讨论
更多
工具
个人工具
创建账号
登录
导航
首页
最近更改
随机页面
MediaWiki帮助
特殊页面
搜索
工具
链入页面
相关更改
页面信息