查看“︁工程参考/配置文件/Server/ItemSegAffect.txt”︁的源代码
来自天龙知识库
←
工程参考/配置文件/Server/ItemSegAffect.txt
跳到导航
跳到搜索
因为以下原因,您没有权限编辑该页面:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
{{DISPLAYTITLE:<span style="font-size:24px;line-height:1.4;overflow-wrap:anywhere;">工程参考/配置文件/Server/ItemSegAffect.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;"> [[首页|首页]] · [[工程参考/配置文件索引|配置文件索引]] · [[工程参考/配置文件修改约定|修改约定]] ItemSegAffect.txt 决定新装备在九个品质段之间怎样抽取。改动一条分布可能影响多种装备和来源;先核对 ItemSegQuality.txt 的引用,再改权重。表头虽然写“几率”,填写的是整数权重,不能直接加百分号。 [[#文件位置与生效|位置与生效]] · [[#文件格式|文件格式]] · [[#字段详解|字段详解]] · [[#常用修改实例|修改实例]] == 文件位置与生效 == {| 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;">./Config/ItemSegAffect.txt</code>,相对于读取程序的工作目录。源码 resources/Server/Config 是样本位置,实际部署可能另有副本。 |- | 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;" | 正常保存并停服后修改各 Server 工作目录下的 Config 文件,重启 Server。当前检索范围未发现这两张表的单独重载入口;无需据此要求客户端同步这两份 Server 配置。若同时修改其他 Public 表或资源,其同步要求另行核对。 |- | 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。 |} 固定 11 列 INT。当前样本 480 条,所有行的 total 均等于九个权重之和;分布 1..9 各自只允许一个对应品质段。第一列必须唯一,业务按文件顺序线性查找,不按行号查编号。 === 先分清这几个编号 === {| 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;" | 例如 10200001“银背砍山刀”。在 EquipBase.txt 找第一列,再看第 26 列品质随机开关和第 91 列品质分布规则;不是拿物品编号直接查本表。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 品质分布规则 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | EquipBase 第 91 列。本例为 10,在 ItemSegQuality.txt 第一列找规则 10。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 创建原因 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 由发物品、掉落或制造的调用入口传来,用于选择规则行里的列。它不是最终品质段。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 品质分布编号 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 从 ItemSegQuality 选中列得到,再查 ItemSegAffect 第一列。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 最终品质段 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | ItemSegAffect 的九个权重决定 1..9 中哪一段,另有段内浮动。它不等于物品编号中表示装备档次的数字,也不直接等于某项属性点数。 |} == 文件格式 == 首行是类型行:<code style="white-space:normal;overflow-wrap:anywhere;">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:品质分布编号 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | ItemSegQuality 实际选中列引用的编号;不是品质段或物品号。保留已有编号和记录顺序。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 找不到编号时返回本文件第一条数据记录,包括引用 0、-1 或未存在编号的情况。首条样本恰好是编号 1;不要改首条来批量调整默认值。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 2 列</code><br>INT:total,总抽取范围 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 先生成 0..1 范围的随机数,乘 total 后用 Float2Int 四舍五入,再与累计权重比较。因此抽取整数范围包含 0 与 total。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 填写正整数并等于九列非负权重之和,控制在有符号 32 位累加范围。加载器不自动归一化或检查合计。0/空值不会关闭生成,负数不作为合法示例。 |- | 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 的权重。程序按段号顺序累加,在累计值非零且随机整数小于或等于累计值时命中。只选择第一处命中。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 合法配置中 0/空值不增加本段区间,保持非负整数。所有权重均为 0 时抽取不命中,最后仍保留初始段 1,并非停止产出。权重合计低于 total 时还可能因未命中而回到段 1。 |- | 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 的权重。程序按段号顺序累加,在累计值非零且随机整数小于或等于累计值时命中。只选择第一处命中。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 合法配置中 0/空值不增加本段区间,保持非负整数。所有权重均为 0 时抽取不命中,最后仍保留初始段 1,并非停止产出。权重合计低于 total 时还可能因未命中而回到段 1。 |- | 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 的权重。程序按段号顺序累加,在累计值非零且随机整数小于或等于累计值时命中。只选择第一处命中。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 合法配置中 0/空值不增加本段区间,保持非负整数。所有权重均为 0 时抽取不命中,最后仍保留初始段 1,并非停止产出。权重合计低于 total 时还可能因未命中而回到段 1。 |- | 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 的权重。程序按段号顺序累加,在累计值非零且随机整数小于或等于累计值时命中。只选择第一处命中。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 合法配置中 0/空值不增加本段区间,保持非负整数。所有权重均为 0 时抽取不命中,最后仍保留初始段 1,并非停止产出。权重合计低于 total 时还可能因未命中而回到段 1。 |- | 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 的权重。程序按段号顺序累加,在累计值非零且随机整数小于或等于累计值时命中。只选择第一处命中。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 合法配置中 0/空值不增加本段区间,保持非负整数。所有权重均为 0 时抽取不命中,最后仍保留初始段 1,并非停止产出。权重合计低于 total 时还可能因未命中而回到段 1。 |- | 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 的权重。程序按段号顺序累加,在累计值非零且随机整数小于或等于累计值时命中。只选择第一处命中。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 合法配置中 0/空值不增加本段区间,保持非负整数。所有权重均为 0 时抽取不命中,最后仍保留初始段 1,并非停止产出。权重合计低于 total 时还可能因未命中而回到段 1。 |- | 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 的权重。程序按段号顺序累加,在累计值非零且随机整数小于或等于累计值时命中。只选择第一处命中。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 合法配置中 0/空值不增加本段区间,保持非负整数。所有权重均为 0 时抽取不命中,最后仍保留初始段 1,并非停止产出。权重合计低于 total 时还可能因未命中而回到段 1。 |- | 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 的权重。程序按段号顺序累加,在累计值非零且随机整数小于或等于累计值时命中。只选择第一处命中。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 合法配置中 0/空值不增加本段区间,保持非负整数。所有权重均为 0 时抽取不命中,最后仍保留初始段 1,并非停止产出。权重合计低于 total 时还可能因未命中而回到段 1。 |- | 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 的权重。程序按段号顺序累加,在累计值非零且随机整数小于或等于累计值时命中。只选择第一处命中。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 合法配置中 0/空值不增加本段区间,保持非负整数。所有权重均为 0 时抽取不命中,最后仍保留初始段 1,并非停止产出。权重合计低于 total 时还可能因未命中而回到段 1。 |} == 常用修改实例 == 示例为局部教学片段,先备份原运行文件,再修改对应行并保留其余配置。教学值不是程序默认值。 以下代码块保留真实 Tab;本地示例文件保留原样本编码、中文表头与 CRLF。网页文字使用浏览器编码显示,不表示运行文件应改存 UTF-8。 === 把分布 10 的一部分段 1 权重移给段 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 INT INT INT INT INT INT INT INT INT INT 品质分布编号 total 段1几率 段2几率 段3几率 段4几率 段5几率 段6几率 段7几率 段8几率 段9几率 10 100000 84703 14286 1000 10 1 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 品质分布编号 total 段1几率 段2几率 段3几率 段4几率 段5几率 段6几率 段7几率 段8几率 段9几率 10 100000 83703 15286 1000 10 1 0 0 0 0</pre> 在原表第一列找到 10。第 3 列段 1 从 84703 改为 83703,第 4 列段 2 从 14286 改为 15286;total 保持 100000,段 3..9 保持 1000、10、1、0、0、0、0。本次转移 1000 个权重单位,合计仍为 100000;段 1 相对减少、段 2 相对增加,其余累计边界不变。不能写成每一百件必有一件升级。 现有 10200001“银背砍山刀”启用品质随机,规则 10 在创建原因 0 时选中分布 10,可用于隔离验证。先检查实际发物品入口传的是原因 0;换成原因 1 会查分布 20,不能验证本例。其他模板和原因对分布 10 的引用同样受到影响。保留全部其他行,三行片段不能覆盖整表。 == 验证与排查 == 先查 11 列、唯一编号、正 total、九权重非负且合计一致,确认实际运行副本与引用链。原加载函数没有自己的成功日志,不编造 InitItemSegAffectTable Ok 提示;可结合 Server 初始化结果及创建日志 CreateBlueEquip::ID、Reason、Qual 核对。隔离环境以同模板、同原因统计新生成的段分布,保留足够样本及旧分布对照,检查保存后重登。少量抽取不能证明概率。恢复时停服还原原表并重启,已生成装备需按测试库存另行清理。 === 为什么不能直接当作精确百分比 === 例如 total=1000,前两段各 500:随机小数 0.5004 乘 total 后为 500.4,四舍五入为 500,仍命中段 1;到 500.5 才变为 501 并落入段 2。代码使用小于或等于,且随机数是有限精度序列,所以权重比例是配置意图,不是任意样本下的精确频率。本页只验证边界和计算路径,长期分布需要实测。 === 修改影响哪些物品 === 两表用于创建装备时选择品质段;多种模板和创建原因可能共用同一分布。先从 EquipBase 的规则号,再从 ItemSegQuality 的实际选中列反向统计引用,不能只看一个物品。品质随机开关为 0 的模板仍先取一次随机数,但保持初始品质段 1。 最终附加属性还取决于装备选中的属性、ItemSegValue 的起始段值、品质段及下一段的倍率、段内浮动和装备的浮动控制。这里只改分布不会凭空增加附加属性条数,也不改变物品模板号。已生成物品保存了品质段和浮动值,重启不会按新分布重新抽签;恢复表格也不会把已发出的装备改回去。 === Lua 调用关联 === [[Lua接口/服务端/TryRecieveItem|TryRecieveItem]] 的调用顺序为 <code style="white-space:normal;overflow-wrap:anywhere;">TryRecieveItem(sceneId, selfId, itemId, reason</code><code>)</code>:场景 ID、当前场景玩家对象 ID、物品模板号、创建原因。源码里的旧注释把最后一项称为品质段,但当前装备创建路径将它用于选择本页规则列。成功返回背包格,格 0 可以合法;它会实际生成物品,不能当作不产生副作用的检查函数。枚举含义按实际调用链核对,不根据函数参数名猜测。 == 关联与依据 == [[工程参考/配置文件/Server/ItemSegQuality.txt|Server/ItemSegQuality.txt]] [[工程参考/配置文件索引|其他配置及整理状态]] · [[工程参考/服务端外网设置|服务端外网设置]] · [[Lua接口/服务端函数索引|Lua 接口索引]] * <code style="white-space:normal;overflow-wrap:anywhere;">Server/Server/GameServer/Server/Item/ItemTable.cpp</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">Server/Server/GameServer/Server/Item/ItemTable.h</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">Server/Server/GameServer/Server/Item/ItemRuler.cpp</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">Server/Server/GameServer/Server/Item/ItemHelper.cpp</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">Server/Server/GameServer/Server/Item/ItemHelper.h</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">Server/Server/GameServer/Server/Item/ItemManager.cpp</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">Server/Server/GameServer/Server/Item/HumanItemLogic.cpp</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">Server/Server/GameServer/Server/Ability/AbilityCompound.cpp</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">Server/Server/GameServer/Server/Ability/AbilityAdvancedCompound.cpp</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">Server/Server/GameServer/Server/Script/LuaFnTbl_Ability.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;">Common/ServerBase/FileDef.h</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;">Common/Rand.h</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">Common/GameUtil.h</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">Common/GameStruct.cpp</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">Common/GameStruct_Item.h</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">resources/Public/Config/EquipBase.txt</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">resources/Server/Config/ItemSegAffect.txt</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">resources/Server/Config/ItemSegQuality.txt</code>:实际加载、解析、字段使用或示例关联依据 原始 DBC、两表加载/查询、Float2Int 和创建函数中的品质选择原句经隔离测试。随机输入可控以核对边界;原始随机生成器另做范围检查。未启动游戏或创建真实库存,实际长期分布和保存效果需要实测。 </div> [[Category:工程参考]]
返回
工程参考/配置文件/Server/ItemSegAffect.txt
。
导航菜单
页面操作
页面
讨论
阅读
查看源代码
历史
页面操作
页面
讨论
更多
工具
个人工具
创建账号
登录
导航
首页
最近更改
随机页面
MediaWiki帮助
特殊页面
搜索
工具
链入页面
相关更改
页面信息