查看“︁工程参考/配置文件/Server/ItemSerial.ini”︁的源代码
来自天龙知识库
←
工程参考/配置文件/Server/ItemSerial.ini
跳到导航
跳到搜索
因为以下原因,您没有权限编辑该页面:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
{{DISPLAYTITLE:<span style="font-size:24px;line-height:1.4;overflow-wrap:anywhere;">工程参考/配置文件/Server/ItemSerial.ini</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;"> [[首页|首页]] · [[工程参考/配置文件索引|配置文件索引]] · [[工程参考/配置文件修改约定|修改约定]] ItemSerial.ini 保存非共享内存模式下新物品 GUID 的流水号起点。它是会被程序写回的状态文件,不是物品模板表,也不控制掉落、数量、属性或价格。已有角色和物品的环境,不要把它重置为 0,也不要像普通参数文件那样直接恢复旧备份。 [[#文件位置与生效|位置与生效]] · [[#文件格式|文件格式]] · [[#字段详解|字段详解]] · [[#常用修改实例|修改实例]] == 文件位置与生效 == {| 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/ItemSerial.ini</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 初始化物品管理器时读取并尝试写回;运行中改文件不会改变内存中的当前计数。启用共享内存时应核对 ServerInfo.ini 的 ItemSerialKey 与 ShareMemInfo.ini 中 Type=7 的键,不修改本 INI 来重置共享计数。客户端不读取本文件。 |- | 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。 |} 原始 INI 写回器会把缓冲末字节写为 NUL;这不是编辑器自动追加的可见字符。缺键时的自动补写也不能当作修复:隔离测试中仅有 [ItemConfig] 和 Other=1、并以 CRLF 结束的文件,本来要补写 1000,却写成了可读数值 100。应在停服后由人工确认完整节、键、值和行尾,再核对启动写回,不能故意删除键让程序重建。 只有 [ItemConfig] 的 ItemSerial 一个字段。先查看当前 Server 对应的 ServerInfo.ini [ServerN] EnableShareMem:关闭共享内存时使用本 INI;启用时从 ItemSerialKey 对应的共享数据读取流水号,本 INI 不参与这一分支。不要为让本文件生效而切换存储模式。 == 文件格式 == 使用 [节名] 与 Key=Value,节名和键名区分大小写,保持节标题位于行首。用单独一行分号写注释,保留原编码及 CRLF 换行;重复节或键取先匹配项,不依赖后写覆盖。缺项、空值与 0 分别按下表处理。 == 字段详解 == 模板 [n] 表示从 0 开始的序号,写入时应展开为实际数字;不是字面键名。 === [ItemConfig] === {| 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;">ItemSerial</code><br>INT:十进制流水号起点 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 非共享内存启动时读入为 N,文件写回 N+1000,内存仍为 N;本次运行第一次生成返回 N+1,以后逐次加 1。物品 GUID 由 World、Server 和该流水号共同组成,跟 GemInfo/CommonItem 的模板 index、角色 GUID、对象 ID 或背包格号不同。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 读取失败将内存初值设为 0,空值或非法数字也可能经 atoi 成为 0。代码不拒绝负数,不自动检查已有物品是否占用。不得用缺项、空值、负数或超出 INT 的数作为修复;还须为启动 +1000 和持续递增保留空间,接近上限时停止生成并专门处理,不能依赖溢出回绕。 |} == 常用修改实例 == 示例为局部教学片段,先备份原运行文件,再修改对应行并保留其余配置。教学值不是程序默认值。 === 仅在全新空测试环境演示流水号起点 === 修改前: <pre style="white-space:pre-wrap;overflow-wrap:anywhere;font-size:13px;line-height:1.7;padding:12px;background:#f5f7f8;border:1px solid #dbe3e6;">[ItemConfig] ItemSerial=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;">[ItemConfig] ItemSerial=10000</pre> 本例仅适用于尚未生成、导入或保存任何物品的全新隔离测试区,且该区原本就采用非共享内存模式,World/Server 标识不与其他数据环境混用。10000 是教学值,不是通用修复值。停服后保留其他文件和存储模式,只将起点由 0 改为 10000。按当前代码,启动写回应为 11000,本次运行首个流水号为 10001;它可能先被启动过程生成的其他物品使用,不能承诺玩家拿到的第一件恰好是此号。有既存物品的环境不适用本例。 == 验证与排查 == 在隔离测试环境记录启动前后的文件值、当前 EnableShareMem、WorldID 和 ServerID;关闭共享内存时检查启动后成功写回起点 +1000。物品的 GUID 可在已有物品日志或检查工具中核对,不用物品模板编号代替。程序没有检查 Write/Save 返回值,仅看到 Server 启动成功不能证明写回成功;确认目录可写。共享模式下本 INI 不变是符合读取分支的结果。实际物品生成及持久化恢复仍需要实测。 === 为什么不能照普通配置恢复旧值 === 非共享内存代码只在初始化时写回 N+1000,后续每次生成只增加内存计数,本文件不逐件更新。假设某次读取 N=10000,文件写成 11000,本轮生成 1001 次就已经用过 11001。下一次重启从文件 11000 开始,第一次又生成 11001。这个 +1000 的预留不能保证长期运行后不会重用流水号;把起点提高一次也没有修复该机制。 已有数据的恢复必须同时核对保存下来的物品 GUID、共享状态/数据库和同一 World、Server 范围内所有生成来源。旧 INI 备份可能低于实际已用流水号,不应直接覆盖;不能只扫描一个角色的背包就认定找到了全部物品最大号。本页不提供重置数据库或清空共享内存命令。全新测试区如果已按示例生成物品,也不能继续把旧的 0 值恢复回去当作普通回滚。 === 与共享内存及区服编号的关系 === 共享内存模式使用 ItemSerialKey 对应的数据,ShareMemory 有独立的数据库读取和保存流程;它不会自动从本 INI 迁移当前计数。两种模式之间迁移需要专门核对数据,不能只切 EnableShareMem。生成 GUID 时 World 和 Server 被转为 BYTE,超出 0 到 255 会截断,不能靠增大区服编号创造可靠的新范围;保持已核对的原标识。 当前源码明确存在上述启动写回与持续生成的区别,原生隔离测试可以复现。实际服的生成速率、其他持久化来源及恢复后的唯一性需要实测和完整数据核查。 == 关联与依据 == [[工程参考/配置文件/Server/ServerInfo.ini|Server/ServerInfo.ini]] · [[工程参考/配置文件/Server/WorldInfo.ini|Server/WorldInfo.ini]] · [[工程参考/配置文件/Server/ShareMemInfo.ini|Server/ShareMemInfo.ini]] [[工程参考/配置文件索引|其他配置及整理状态]] · [[工程参考/服务端外网设置|服务端外网设置]] · [[Lua接口/服务端函数索引|Lua 接口索引]] * <code style="white-space:normal;overflow-wrap:anywhere;">Common/ServerBase/Ini.cpp</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">Common/ServerBase/Ini.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/GameStruct_Item.h</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">Common/DB_Struct.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/ItemManager.h</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">Server/Server/GameServer/Server/Main/Server.cpp</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">Server/Server/GameServer/Server/Main/ShareMemManager.cpp</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">Server/Server/ShareMemory/ShareMemory/ShareData/SMULogicManager.cpp</code>:实际加载、解析、字段使用或示例关联依据 本页以原始 INI 解析器和物品流水号初始化、递增、GUID 赋值函数作隔离验证;共享内存访问以测试桩验证分支。未启动服务或数据库,不代表已验证线上持久化恢复。 </div> [[Category:工程参考]]
返回
工程参考/配置文件/Server/ItemSerial.ini
。
导航菜单
页面操作
页面
讨论
阅读
查看源代码
历史
页面操作
页面
讨论
更多
工具
个人工具
创建账号
登录
导航
首页
最近更改
随机页面
MediaWiki帮助
特殊页面
搜索
工具
链入页面
相关更改
页面信息