查看“︁工程参考/配置文件/Public/CampAndStand.txt”︁的源代码
来自天龙知识库
←
工程参考/配置文件/Public/CampAndStand.txt
跳到导航
跳到搜索
因为以下原因,您没有权限编辑该页面:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
{{DISPLAYTITLE:<span style="font-size:24px;line-height:1.4;overflow-wrap:anywhere;">工程参考/配置文件/Public/CampAndStand.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;"> [[首页|首页]] · [[工程参考/配置文件索引|配置文件索引]] · [[工程参考/配置文件修改约定|修改约定]] CampAndStand.txt 是一张 16×16 的布尔矩阵。第 1 列是本行阵营的编号,第 2 到 17 列依次是对 0 到 15 号阵营的立场:非 0 表示友好,0 表示不友好。样本 16 行、17 列。 判定入口是 <code style="white-space:normal;overflow-wrap:anywhere;">CalcRelationType(对象1阵营, 对象2阵营, 管理器)</code>:先按对象 1 的阵营取一行,再按对象 2 的阵营查一列,得到友好或敌对。查不到行或对象 2 越界时按友好处理。 [[#文件位置与生效|位置与生效]] · [[#文件格式|文件格式]] · [[#字段详解|字段详解]] · [[#常用修改实例|修改实例]] == 文件位置与生效 == {| 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/CampAndStand.txt</code>(宏 FILE_CAMP_AND_STAND),相对于进程工作目录;客户端从资源目录按同名文件加载。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 读取程序 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | GameServer:TableInit::InitCampAndStandDataMgr 用 g_CampAndStandDataMgr.InitFromDB(FILE_CAMP_AND_STAND);客户端经 DBC_CAMP_AND_STAND 用 InitFromDBMemory 读同一份;判定在 Common/Combat/CampAndStand.cpp 的 CalcRelationType |- | 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;">ASCII</code>,<code style="white-space:normal;overflow-wrap:anywhere;">CRLF</code>。保留原编码;源码读取器不会自动把中文转为 UTF-8。 |} 加载由 <code style="white-space:normal;overflow-wrap:anywhere;">TemplateManager_T</code> 完成:第 1 列的值当作数组下标写入第 nID 项,随后由 <code style="white-space:normal;overflow-wrap:anywhere;">CampStandRecord_T::InitFromDB</code> 从第 2 列开始读 16 个整数。 {| 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;" | 不能。必须在 0 到 15 之间,否则 AssertEx 并丢弃该行(CampStandRecord_T::MAX_ID = 15)。 |- | 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;" | <code style="white-space:normal;overflow-wrap:anywhere;">CalcRelationType</code> 取不到行、或对象 2 的阵营不在 0 到 15 之间时,按友好返回。 |- | 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;">!= 0</code>,1 与其它正数完全等价。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 两端副本 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 服务端从文件读,客户端从自己的 DBC 读,必须同时改。 |} == 文件格式 == 首行是类型行:<code style="white-space:normal;overflow-wrap:anywhere;">INT INT INT INT INT INT INT INT INT INT INT INT INT INT INT INT INT</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:Camp\Camp | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 本行阵营的编号,同时是 DBC 索引列。TemplateManager_T 把它当作数组下标写入 m_vTemplateList[nID],因此必须落在 0 到 15 之间。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 必填且不能重复。超出 0 到 15 会触发 AssertEx 并丢弃该行;空首列同样让整行被跳过。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 2 列</code><br>INT:0 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 本阵营对 0 号阵营的立场。非 0 表示友好,0 表示不友好。CalcRelationType 先按对象 1 的阵营取这一行,再按对象 2 的阵营查这一列。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 空或非数字经 atoi 视为 0,也就是不友好。矩阵不要求对称:A 对 B 友好不代表 B 对 A 友好。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 3 列</code><br>INT:1 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 本阵营对 1 号阵营的立场。非 0 表示友好,0 表示不友好。CalcRelationType 先按对象 1 的阵营取这一行,再按对象 2 的阵营查这一列。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 空或非数字经 atoi 视为 0,也就是不友好。矩阵不要求对称:A 对 B 友好不代表 B 对 A 友好。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 4 列</code><br>INT:2 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 本阵营对 2 号阵营的立场。非 0 表示友好,0 表示不友好。CalcRelationType 先按对象 1 的阵营取这一行,再按对象 2 的阵营查这一列。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 空或非数字经 atoi 视为 0,也就是不友好。矩阵不要求对称:A 对 B 友好不代表 B 对 A 友好。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 5 列</code><br>INT:3 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 本阵营对 3 号阵营的立场。非 0 表示友好,0 表示不友好。CalcRelationType 先按对象 1 的阵营取这一行,再按对象 2 的阵营查这一列。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 空或非数字经 atoi 视为 0,也就是不友好。矩阵不要求对称:A 对 B 友好不代表 B 对 A 友好。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 6 列</code><br>INT:4 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 本阵营对 4 号阵营的立场。非 0 表示友好,0 表示不友好。CalcRelationType 先按对象 1 的阵营取这一行,再按对象 2 的阵营查这一列。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 空或非数字经 atoi 视为 0,也就是不友好。矩阵不要求对称:A 对 B 友好不代表 B 对 A 友好。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 7 列</code><br>INT:5 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 本阵营对 5 号阵营的立场。非 0 表示友好,0 表示不友好。CalcRelationType 先按对象 1 的阵营取这一行,再按对象 2 的阵营查这一列。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 空或非数字经 atoi 视为 0,也就是不友好。矩阵不要求对称:A 对 B 友好不代表 B 对 A 友好。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 8 列</code><br>INT:6 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 本阵营对 6 号阵营的立场。非 0 表示友好,0 表示不友好。CalcRelationType 先按对象 1 的阵营取这一行,再按对象 2 的阵营查这一列。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 空或非数字经 atoi 视为 0,也就是不友好。矩阵不要求对称:A 对 B 友好不代表 B 对 A 友好。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 9 列</code><br>INT:7 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 本阵营对 7 号阵营的立场。非 0 表示友好,0 表示不友好。CalcRelationType 先按对象 1 的阵营取这一行,再按对象 2 的阵营查这一列。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 空或非数字经 atoi 视为 0,也就是不友好。矩阵不要求对称:A 对 B 友好不代表 B 对 A 友好。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 10 列</code><br>INT:8 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 本阵营对 8 号阵营的立场。非 0 表示友好,0 表示不友好。CalcRelationType 先按对象 1 的阵营取这一行,再按对象 2 的阵营查这一列。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 空或非数字经 atoi 视为 0,也就是不友好。矩阵不要求对称:A 对 B 友好不代表 B 对 A 友好。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 11 列</code><br>INT:9 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 本阵营对 9 号阵营的立场。非 0 表示友好,0 表示不友好。CalcRelationType 先按对象 1 的阵营取这一行,再按对象 2 的阵营查这一列。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 空或非数字经 atoi 视为 0,也就是不友好。矩阵不要求对称:A 对 B 友好不代表 B 对 A 友好。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 12 列</code><br>INT:10 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 本阵营对 10 号阵营的立场。非 0 表示友好,0 表示不友好。CalcRelationType 先按对象 1 的阵营取这一行,再按对象 2 的阵营查这一列。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 空或非数字经 atoi 视为 0,也就是不友好。矩阵不要求对称:A 对 B 友好不代表 B 对 A 友好。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 13 列</code><br>INT:11 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 本阵营对 11 号阵营的立场。非 0 表示友好,0 表示不友好。CalcRelationType 先按对象 1 的阵营取这一行,再按对象 2 的阵营查这一列。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 空或非数字经 atoi 视为 0,也就是不友好。矩阵不要求对称:A 对 B 友好不代表 B 对 A 友好。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 14 列</code><br>INT:12 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 本阵营对 12 号阵营的立场。非 0 表示友好,0 表示不友好。CalcRelationType 先按对象 1 的阵营取这一行,再按对象 2 的阵营查这一列。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 空或非数字经 atoi 视为 0,也就是不友好。矩阵不要求对称:A 对 B 友好不代表 B 对 A 友好。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 15 列</code><br>INT:13 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 本阵营对 13 号阵营的立场。非 0 表示友好,0 表示不友好。CalcRelationType 先按对象 1 的阵营取这一行,再按对象 2 的阵营查这一列。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 空或非数字经 atoi 视为 0,也就是不友好。矩阵不要求对称:A 对 B 友好不代表 B 对 A 友好。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 16 列</code><br>INT:14 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 本阵营对 14 号阵营的立场。非 0 表示友好,0 表示不友好。CalcRelationType 先按对象 1 的阵营取这一行,再按对象 2 的阵营查这一列。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 空或非数字经 atoi 视为 0,也就是不友好。矩阵不要求对称:A 对 B 友好不代表 B 对 A 友好。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 17 列</code><br>INT:15 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 本阵营对 15 号阵营的立场。非 0 表示友好,0 表示不友好。CalcRelationType 先按对象 1 的阵营取这一行,再按对象 2 的阵营查这一列。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 空或非数字经 atoi 视为 0,也就是不友好。矩阵不要求对称:A 对 B 友好不代表 B 对 A 友好。 |} == 常用修改实例 == 示例为局部教学片段,先备份原运行文件,再修改对应行并保留其余配置。教学值不是程序默认值。 以下代码块保留真实 Tab;本地示例文件保留原样本编码、中文表头与 CRLF。网页文字使用浏览器编码显示,不表示运行文件应改存 UTF-8。 === 把 0 号阵营对 10 号阵营的立场从友好改为不友好 === 修改前: <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 INT INT INT INT INT INT INT INT INT INT INT INT INT INT INT Camp\Camp 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0</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 INT INT INT INT INT INT INT INT INT INT INT INT INT INT INT Camp\Camp 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0</pre> 按第 1 列定位 0 号阵营。它第 12 列对应 10 号阵营(第 2 列对应 0 号,依次后移),样本值是 1,这里改成 0,其余 16 列与另 15 行全部保留。 改完后 0 号阵营的成员看 10 号阵营不再是友好关系。注意矩阵不对称:10 号阵营那一行仍然写着对 0 号友好,反过来判定不会变,需要同时改第 11 行第 2 列。 示例块含类型行、列名行与该行原文,不能覆盖整张表。改完需要重启 Server,并同步更新客户端资源。 == 验证与排查 == Server 启动日志出现 “Load CampAndStand.txt ... OK!”。改完重启后,让两个阵营的角色互相接近,用可选目标的颜色或技能可否命中验证关系是否按新矩阵判定;同时确认反向(10 对 0)没有跟着变。客户端要更新资源后重启再看显示。失败时恢复备份并重启。 === 列名是 0 到 15,不是 1 到 16 === 第 2 列对应 0 号阵营,第 17 列对应 15 号阵营。改的时候别把列号当成阵营号。 === 矩阵不对称 === 判定按「对象 1 的行、对象 2 的列」,改一行只影响一个方向。想让两个阵营互相敌对,要改两个格子。 === 查不到按友好处理 === <code style="white-space:normal;overflow-wrap:anywhere;">CalcRelationType</code> 在取不到行、或对方阵营越界时返回 RELATION_FRIEND。删掉一行的后果是「所有人看它都算友好」,而不是报错。 === 两端副本要同步 === 服务端从 FILE_CAMP_AND_STAND 指的文件读,客户端从自己的 DBC 读。只改一边会让判定和显示不一致。 == 关联与依据 == [[工程参考/配置文件/Public/ReputationTable.txt|Public/ReputationTable.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/Combat/CampAndStand.cpp</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">Common/Combat/CampAndStand.h</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">Common/ServerBase/FileDef.h</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/Game/Procedure/GameProcedure.cpp</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">resources/Public/Config/CampAndStand.txt</code>:实际加载、解析、字段使用或示例关联依据 本页核对 TemplateManager_T 按下标写入的行为、CampStandRecord_T::InitFromDB 的 16 列循环与 MAX_ID=15、CalcRelationType 的取行查列与越界按友好处理;样本 16 行的编号范围经脚本核算。未启动服务端与客户端,实际敌我表现需要实测。 </div> [[Category:工程参考]]
返回
工程参考/配置文件/Public/CampAndStand.txt
。
导航菜单
页面操作
页面
讨论
阅读
查看源代码
历史
页面操作
页面
讨论
更多
工具
个人工具
创建账号
登录
导航
首页
最近更改
随机页面
MediaWiki帮助
特殊页面
搜索
工具
链入页面
相关更改
页面信息