工程参考/配置文件/Server/DefaultChar.ini
DefaultChar.ini 是角色初始化模板。正常创建角色由 Login 取模板,已经存在的角色不会因为改文件就统一变更。World 另有非共享内存模式下、角色档案不存在时的初始化路径;两条路径读取项目并不完全相同。
文件位置与生效
| 项目 | 说明 |
|---|---|
| 运行文件 | ./Config/DefaultChar.ini,相对于读取程序的工作目录。源码 resources/Server/Config 是样本位置,实际部署可能另有副本。
|
| 读取程序 | Login;World 的非共享内存档案初始化分支也读取 |
| 生效方法 | Login 在进程初始化时加载模板,修改后正常重启 Login,再创建测试角色。World 的档案缺失分支每次初始化角色时读取文件,正常共享内存流程不以此路径重置角色。需要测试该分支时沿用独立测试环境,不能为测试删除已有角色档案或关闭生产环境共享内存。无需把此 INI 复制到玩家客户端;快捷栏等初始设置通过角色设置协议下发。 |
| 样本格式 | GB18030-compatible,CRLF。保留原编码;源码读取器不会自动把中文转为 UTF-8。
|
[baseinfo] 为基础初值,[attribute] 为五项一级属性,[skill]/[xinfa]/[ability]/[table] 为初始技能、心法、生活技能和配方,[setting] 为设置记录,[startscene] 为 Login 接受的出生场景选项。
文件格式
使用 [节名] 与 Key=Value,节名和键名区分大小写,保持节标题位于行首。用单独一行分号写注释,保留原编码及 CRLF 换行;重复节或键取先匹配项,不依赖后写覆盖。缺项、空值与 0 分别按下表处理。
字段详解
模板 [n] 表示从 0 开始的序号,写入时应展开为实际数字;不是字面键名。
[baseinfo]
| 字段与类型 | 含义与修改要点 | 缺项或特殊值 |
|---|---|---|
name样本文字 |
当前两条读取路径都没有从此键取得角色名。正常创建保留客户端创建流程确定的名字,World 档案路径的调用方也另设名字。 | 样本保留项;不能改它给所有角色改名。 |
scene整数,场景 ID |
初始出生场景,不是地图资源编号。Login 首次登录时若选择的出生场景位于 [startscene] 列表,会以所选场景及其坐标替换本项。 | 读取路径要求存在;没有可依赖的程序默认值。空或非法数字不等于有效配置。 |
pos_x小数,场景平面坐标 |
初始 X 坐标,经 atof 读取;必须落在 scene 指定场景的有效位置。不是像素、经纬度或角色对象 ID。 | 读取路径要求存在;没有可依赖的程序默认值。空或非法数字不等于有效配置。 |
pos_z小数,场景平面坐标 |
初始 Z 坐标,经 atof 读取;必须落在 scene 指定场景的有效位置。不是像素、经纬度或角色对象 ID。 | 读取路径要求存在;没有可依赖的程序默认值。空或非法数字不等于有效配置。 |
sex整数,角色性别标志 |
Login 正常创建保留创建请求的性别,不用此键。World 档案初始化读取它,但外层请求还会写入请求性别。不要以此键作为正常角色性别设置入口。 | 仅 World 此路径读取;保留已有合法值。不同客户端性别显示需要实测。 |
hp非负整数,点数 |
角色初始当前生命值,不是上限。运行时上限由等级、属性和修正计算;改变本值不会永久固定上限。 | 读取路径要求存在;没有可依赖的程序默认值。空或非法数字不等于有效配置。 |
mp非负整数,点数 |
角色初始当前气值,不是上限。运行时上限由等级、属性和修正计算;改变本值不会永久固定上限。 | 读取路径要求存在;没有可依赖的程序默认值。空或非法数字不等于有效配置。 |
level正整数,等级 |
直接存入角色等级,没有在本加载器减 1。应处于当前等级表、全局上限和客户端支持范围;不能用等级表的从 0 开始行号代替。 | 必填;保留正常起始等级,不凭 BYTE 容量推断可用等级上限。 |
exp非负整数,经验点数 |
初始经验存量,和 level 分开。直接填经验不等于执行升级流程;等级、经验阈值与后续升级逻辑需一致。 | 读取路径要求存在;没有可依赖的程序默认值。空或非法数字不等于有效配置。 |
vigor非负整数,点数 |
初始当前活力,使用不超过有效上限的数值;不是生命或气。 | 读取路径要求存在;没有可依赖的程序默认值。空或非法数字不等于有效配置。 |
max_vigor非负整数,点数 |
持久数据中的基础活力上限,实际有效上限还会叠加生活技能修正。 | 读取路径要求存在;没有可依赖的程序默认值。空或非法数字不等于有效配置。 |
vigor_regenerate整数,恢复加成百分点 |
参与每次恢复量的倍率 (1 + 有效恢复率/100)。基础量为 有效上限/100 + 2,计算后向整数截断;有效恢复率还会叠加生活技能修正,疲劳状态也会调整。0 表示基础倍率,100 表示倍率 2,不是每秒恢复 100 点。 | 必填。恢复周期来自 ConfigInfo 的 Human/HumanVERecoverInterval;本键不表示秒数。使用非负值,负值效果不作为调参建议。 |
energy非负整数,点数 |
初始当前精力,使用不超过有效上限的数值;不是生命或气。 | 读取路径要求存在;没有可依赖的程序默认值。空或非法数字不等于有效配置。 |
max_energy非负整数,点数 |
持久数据中的基础精力上限,实际有效上限还会叠加生活技能修正。 | 读取路径要求存在;没有可依赖的程序默认值。空或非法数字不等于有效配置。 |
energy_regenerate整数,恢复加成百分点 |
参与每次恢复量的倍率 (1 + 有效恢复率/100)。基础量为 有效上限/100 + 2,计算后向整数截断;有效恢复率还会叠加生活技能修正,疲劳状态也会调整。0 表示基础倍率,100 表示倍率 2,不是每秒恢复 100 点。 | 必填。恢复周期来自 ConfigInfo 的 Human/HumanVERecoverInterval;本键不表示秒数。使用非负值,负值效果不作为调参建议。 |
camp样本整数项 |
当前两条模板读取路径没有读取此键。不能仅修改它就认为新角色阵营已改变。 | 样本保留项;当前检索范围未发现此键加载依据。 |
menpai整数,门派编号 |
当前枚举 0 少林、1 明教、2 丐帮、3 武当、4 峨眉、5 星宿、6 大理、7 天山、8 逍遥、9 无门派。这里直接设置初值,不执行正常入门派时的技能、心法、属性初始化。 | 必填;一般保留无门派等现有初值,不能仅改此项就视作完整入门派。 |
money非负整数,铜币 |
初始金钱:100 铜为 1 银,10000 铜为 1 金。不是元宝、交子或充值金额,还受角色等级对应携带上限约束。 | 读取路径要求存在;没有可依赖的程序默认值。空或非法数字不等于有效配置。 |
actualAge非负整数,年龄初值 |
仅 World 档案初始化分支读取到角色实际年龄字段;Login 正常模板不读取此键,登录认证分支还可能按防沉迷标识改写。不能用此项替代认证配置。 | World 此路径必填;正常创建的实际年龄来源与运行环境有关,需要实测。 |
[attribute]
| 字段与类型 | 含义与修改要点 | 缺项或特殊值 |
|---|---|---|
str非负整数,属性点 |
写入基础一级属性中的力量,不是对应攻击、防御或血量的最终数值。最终效果由门派、等级属性表及修正共同计算。 | 读取路径要求存在;没有可依赖的程序默认值。空或非法数字不等于有效配置。 |
spr非负整数,属性点 |
写入基础一级属性中的灵气,不是对应攻击、防御或血量的最终数值。最终效果由门派、等级属性表及修正共同计算。 | 读取路径要求存在;没有可依赖的程序默认值。空或非法数字不等于有效配置。 |
con非负整数,属性点 |
写入基础一级属性中的体力,不是对应攻击、防御或血量的最终数值。最终效果由门派、等级属性表及修正共同计算。 | 读取路径要求存在;没有可依赖的程序默认值。空或非法数字不等于有效配置。 |
int非负整数,属性点 |
写入基础一级属性中的定力,不是对应攻击、防御或血量的最终数值。最终效果由门派、等级属性表及修正共同计算。 | 读取路径要求存在;没有可依赖的程序默认值。空或非法数字不等于有效配置。 |
dex非负整数,属性点 |
写入基础一级属性中的身法,不是对应攻击、防御或血量的最终数值。最终效果由门派、等级属性表及修正共同计算。 | 读取路径要求存在;没有可依赖的程序默认值。空或非法数字不等于有效配置。 |
[skill]
| 字段与类型 | 含义与修改要点 | 缺项或特殊值 |
|---|---|---|
number整数,0 到 128 |
启用 id0 到 idN-1。Login 超过 128 会截断,但 World 路径没有相同保护,因此必须自行保持范围。 | 必填;0 表示没有模板技能,禁止负值。 |
id[n]整数,技能 ID |
写入角色初始技能记录,必须是已经核对的技能编号;编号与数组序号 n 不同。对应技能资源与规则须匹配。 | n=0 到 number-1,逐项必填。 |
[xinfa]
| 字段与类型 | 含义与修改要点 | 缺项或特殊值 |
|---|---|---|
number整数,0 到 16 |
启用同序号 id[n] 和 level[n]。Login 超过 16 会截断,World 路径没有相同保护。 | 必填;0 表示无模板心法,不能使用负值。 |
id[n]整数,心法 ID |
初始心法记录的配置编号,和技能 ID、门派 ID 分开。即使样本 number=0 没有列出成员,程序仍支持该动态键。 | n=0 到 number-1,逐项必填。 |
level[n]非负整数,心法等级 |
与同序号 id[n] 配对;受心法配置支持范围约束,World 此路径转为 BYTE。不能利用截断设置超范围数值。 | 启用条目必填;不是角色等级。 |
[ability]
| 字段与类型 | 含义与修改要点 | 缺项或特殊值 |
|---|---|---|
count非负整数,生活技能条目数 |
循环读取 abilityskill[n]、level[n]、exp[n],n 从 0 开始。建议每种技能只写一次,最多对应 64 个存储槽;加载器没有自动纠正非法索引。 | 读取路径要求存在;没有可依赖的程序默认值。空或非法数字不等于有效配置。 |
abilityskill[n]整数,0 到 63 的技能槽标识 |
直接用作生活技能数组下标,必须同时是当前生活技能配置支持的 ID;0..63 仅为存储边界,不代表每个值都已实现。不是此条在 INI 中的 n。 | 启用条目必填;越界可能访问无效内存。 |
level[n]非负整数,生活技能等级 |
写入同条 abilityskill 的等级,须与该生活技能升级表和上限一致;重复技能 ID 时后面的记录改写前值。 | 启用条目必填;不要根据存储类型推断可用最大等级。 |
exp[n]非负整数,生活技能经验 |
写入同条生活技能的经验值,不是角色经验;不会在此加载器自动学习、升级。 | 启用条目必填。 |
[table]
| 字段与类型 | 含义与修改要点 | 缺项或特殊值 |
|---|---|---|
number非负整数,配方条目数 |
读取 peifang0 到 peifangN-1。建议不重复列同一配方,合法配方位最多 2048 个。 | 读取路径要求存在;没有可依赖的程序默认值。空或非法数字不等于有效配置。 |
peifang[n]整数,0 到 2047 的配方标识 |
把配方标识对应位设置为已知:字节下标=标识/8,位=标识%8。必须对应实际可用配方;不能用产物物品编号代替。重复标识只是重复置位。 | 启用条目必填;负数及越界没有可靠保护。 |
[setting]
| 字段与类型 | 含义与修改要点 | 缺项或特殊值 |
|---|---|---|
count非负整数,设置条目数 |
循环读取 settingindex/type/data 同序号三项。建议每个设置槽只写一次,存储槽共 128 个;重复槽后读记录改写前值。 | 读取路径要求存在;没有可依赖的程序默认值。空或非法数字不等于有效配置。 |
settingindex[n]整数,0 到 127 的设置槽 |
不是快捷栏从 0 开始的位置。槽 1 为一般游戏设置,2..51 为 50 个快捷栏位置(界面槽=本值-2),61 聊天背景,62 商店直接购买,63 当前主动技能。其他槽须按对应客户端语义核对,不能把存储范围当作全部可用项。 | 启用条目必填;越界可能写入无效内存。 |
settingtype[n]整数,按设置槽解释 |
快捷栏槽使用动作类型:0 空,1 战斗技能,2 生活技能,3 物品,5 珍兽技能,7 聊天动作,18 珍兽出战,19 珍兽休息。一般设置槽 1 的位标志来自 data,不由此键选功能。其他枚举存在不代表快捷栏恢复代码支持。 | 启用条目必填;保存为 BYTE,不传负值或超出 255 的值。 |
settingdata[n]整数,含义由槽和 type 决定 |
快捷栏技能填对应技能 ID;珍兽技能低 16 位存技能、高 16 位存珍兽索引。物品动作历史分支对 0..100 优先作为背包位置查询,其他值按物品标识路径恢复,不能混用。槽 1 是位标志和:1 拒加好友、2 拒邮件、4 拒陌生人邮件、8 拒组队、65536 拒查看配偶、131072 拒交易、262144 关泡泡框、524288 手动升级。 | 启用条目必填。初始快捷栏不负责给角色发物品或学技能;缺少对应对象时需实测显示。 |
[startscene]
| 字段与类型 | 含义与修改要点 | 缺项或特殊值 |
|---|---|---|
scenecount整数,0 到 10 |
Login 的可选出生场景条数,读取 scene[n]/pos_x[n]/pos_z[n]。超过 10 截断;使用非负值,0 表示无此列表条目。 | 读取路径要求存在;没有可依赖的程序默认值。空或非法数字不等于有效配置。 |
scene[n]整数,场景 ID |
允许创建/首次登录流程选择的场景标识;须配置并能由游戏服务承载。不是地图资源号,不能只添加不存在的编号。 | n=0 到 scenecount-1,逐项必填。 |
pos_x[n]小数,场景平面坐标 |
为同条 scene[n] 提供 X 坐标;选择该场景时采用此位置。重复场景 ID 的查找先取第一条。 | 启用条目必填。 |
pos_z[n]小数,场景平面坐标 |
为同条 scene[n] 提供 Z 坐标;选择该场景时采用此位置。重复场景 ID 的查找先取第一条。 | 启用条目必填。 |
[private]
| 字段与类型 | 含义与修改要点 | 缺项或特殊值 |
|---|---|---|
luckword样本文字 |
当前 Login 采用源码内置初始个性签名,未读取此键;World 档案初始化也未读取它。 | 样本保留项;改此项不能保证改变初始签名。 |
常用修改实例
示例为局部教学片段,先备份原运行文件,再修改对应行并保留其余配置。教学值不是程序默认值。
调整以后新建角色的初始铜币
修改前:
[baseinfo] money=0
修改后:
[baseinfo] money=10000
教学值 10000 为 1 金。先核对起始等级的携带金钱上限允许该值,备份运行中的 DefaultChar.ini,只改 money,保留出生点、等级、技能与设置。重启 Login 后新建测试角色检查初始金额;既有角色不会因此获得金钱。恢复备份只恢复以后创建的模板,不自动扣回已创建测试角色的金额。
验证与排查
正常停服备份并重启 Login,以新创建测试角色检查金额、出生场景、属性和快捷栏。已有角色无变化属于模板机制。发现出生失败或技能异常时核对数量、索引和关联配置,再恢复备份;对已写入角色的数据单独记录,不能声称文件恢复就回滚了数据库。
不要整份覆盖旧文件来增加一个技能;每一组 count/number 与连续序号要一起核对。name/camp/luckword 等样本字段不能按字面猜效果。普通技能、心法、生活技能和配方分别使用自己的配置编号。当前正文提供新角色模板修改;World 档案兜底路径不作为找回丢失角色数据的方法。
关联与依据
Server/LoginInfo.ini · Server/WorldInfo.ini
其他配置及整理状态 · 服务端外网设置 · Lua 接口索引
Common/ServerBase/Ini.cpp:实际加载、解析、字段使用或示例关联依据Common/ServerBase/Ini.h:实际加载、解析、字段使用或示例关联依据Common/DB_Struct.h:实际加载、解析、字段使用或示例关联依据Common/GameDefine.h:实际加载、解析、字段使用或示例关联依据Common/GameDefine2.h:实际加载、解析、字段使用或示例关联依据Server/Server/LoginServer/Login/DB/CharConfig.cpp:实际加载、解析、字段使用或示例关联依据Server/Server/WorldServer/World/WorldData/OnlineUser.cpp:实际加载、解析、字段使用或示例关联依据Server/Server/WorldServer/World/Packets/GWAskUserDataHandler.cpp:实际加载、解析、字段使用或示例关联依据Server/Server/LoginServer/Login/Packets/WLRetCharLoginHandler.cpp:实际加载、解析、字段使用或示例关联依据Server/Server/LoginServer/Login/Packets/CLAskCreateCharHander.cpp:实际加载、解析、字段使用或示例关联依据Server/Server/LoginServer/Login/Packets/LCRetCreateCharHandler.cpp:实际加载、解析、字段使用或示例关联依据Server/Server/GameServer/Server/Obj/Obj_Human.cpp:实际加载、解析、字段使用或示例关联依据Server/Server/GameServer/Server/Obj/Obj_Human.inl:实际加载、解析、字段使用或示例关联依据Server/Server/GameServer/Server/Obj/Obj_Human_Attributes.cpp:实际加载、解析、字段使用或示例关联依据Common/ServerBase/Config.cpp:实际加载、解析、字段使用或示例关联依据Client/Client/Common/TDActionSystem.h:实际加载、解析、字段使用或示例关联依据Client/Client/Game/Network/PacketHandler/GCRetSettingHandler.cpp:实际加载、解析、字段使用或示例关联依据Client/Client/Game/Action/GMActionSystem.cpp:实际加载、解析、字段使用或示例关联依据Client/Client/Game/Interface/GMGameInterface_Script_Bank.cpp:实际加载、解析、字段使用或示例关联依据
本页核对源码读取、字段使用与样本格式,未启动游戏、服务端或数据库。解析验证不等于游戏实测;广播、权限、客户端交互等运行结果需要实测。