工程参考/配置文件/Public/SkillTemplate_V1.txt
SkillTemplate_V1.txt 是技能的总模板:一个技能叫什么、属于哪个门派、要多少心法等级、怎么选目标、打多大范围,以及 1 到 16 级各对应哪条技能实例。它是全服最核心的表之一,一张表的错行会连带影响学习、释放和界面显示。
文件位置与生效
| 项目 | 说明 |
|---|---|
| 运行文件 | ../Public/Config/SkillTemplate_V1.txt,相对于 Server 工作目录。
|
| 读取程序 | Server 在 TableInit::InitSkillTemplateDataMgr 加载;g_SkillTemplateDataMgr.GetInstanceByID 被 AI、ActionDelegator 等大量调用。客户端 GMDataBase、GMDP_Struct_Skill 注册同名表 |
| 生效方法 | 停服后备份并修改实际 Public 副本,再重启 Server。服务端另有 GM 指令 ReloadCombatTables(CGCommandHandler 里判定),会依次重跑 InitSkillTemplateDataMgr、InitSkillDataMgr、InitImpactSEDataMgr、InitStandardImpactMgr、InitPvpRulerManager、InitPunishRulerTables 等,可以热重载本表。客户端同名表须同步,否则技能名、图标与说明仍是旧内容。 |
| 样本格式 | GB18030-compatible,CRLF。保留原编码;源码读取器不会自动把中文转为 UTF-8。
|
样本 809 条记录、79 列,第一列 0 到 808 基本连号(含 0 号普通攻击)。加载器不校验列数与数值,只有第一列会参与索引:TemplateManager_T 用第一列当数组下标,容量 2049(MAX_ID 2048),越界会打印越界断言并跳过该行。
79 列里有 13 列服务端完全不读(第 2、5、7、18 到 23、36 到 38、76 列),它们是策划管理字段或交给客户端的表现数据。字段表的「类型」一栏写着「预留」「掠过」的就是这些列,改它们对服务端没有影响。
第 59 到 74 列是 16 级技能实例映射,列数上限由 MAX_CHAR_SKILL_LEVEL=16 写死,不能再加。第 54 列填的是角度,源码按 2π×角度/360 转成弧度保存。
文件格式
首行是类型行:INT INT INT STRING STRING INT INT INT INT INT INT INT INT INT INT INT INT STRING STRING STRING STRING STRING INT INT INT INT INT INT INT INT INT INT INT INT INT INT STRING INT INT INT FLOAT FLOAT INT INT INT INT INT INT INT INT INT INT FLOAT FLOAT INT INT INT INT INT INT INT INT INT INT INT INT INT INT INT INT INT INT INT INT STRING INT FLOAT INT INT;第二行是列名行,程序跳过其内容;从第三行开始读取数据。各列用真实 Tab 分隔,保留首列、空列及行尾,不用空格代替。数据行行首 # 表示注释,分号不是此表的注释规则。首列为空的行被跳过;不足的尾列补为空值,多余列不参与本页字段读取。空整数和非数字经 atoi 可能成为 0,空字符串仍为空,不把解析成功当作业务合法。第一列须唯一,重复会触发读取器错误。
字段详解
列号从 1 开始,源码列下标从 0 开始。
| 字段与类型 | 含义与修改要点 | 缺项或特殊值 |
|---|---|---|
第 1 列INT:技能编号 |
技能模板 ID,也是数组下标。客户端 GMDataBase 与 GMDP_Struct_Skill 用同一编号空间,服务端 g_SkillTemplateDataMgr.GetInstanceByID 直接用本列查询。 | 须 ≥0 且小于容量 2049;重复编号会让后读到的行覆盖前一行。 |
第 2 列INT:策划管理用ID |
样本列名标为策划专用。InitFromDB 直接跳过本列,不写入任何成员。 | 改它没有任何运行效果。 |
第 3 列INT:门派编号 |
写入 m_nMenPai。样本里 1、2、3 对应已有门派;-1 表示不限定门派。 | 空经 atoi 为 0,会被当成 0 号门派而不是「无门派」。 |
第 4 列STRING:技能名称 |
写入 m_szName,技能面板显示的文字。客户端同名表须同步,否则界面仍显示旧名。 | 空缺原样存入空指针,界面会显示空白。 |
第 5 列STRING:图标名称 |
样本列名标为图标文件名。InitFromDB 跳过本列,图标走客户端资源。 | 改它不会改变任何服务端行为。 |
第 6 列INT:技能的心法等级限制 |
写入 m_nXinFaLevelRequirement。人物心法等级不到本值就学不到、放不出这个技能。 | 空为 0,等于不限制。样本里大量技能写 -1,-1 是「不限制」的约定值。 |
第 7 列INT:连击标记(客户端) |
列名标为连击标记,服务端 InitFromDB 跳过本列。 | 改它不影响服务端。 |
第 8 列INT:是否需要武器 |
写入 m_bMustUseWeapon。非 0 时该技能要求装备可用武器。 | 空为 0,即不需要武器。 |
第 9 列INT:受限于标记1 |
写入 m_nDisableByFlag1。与第 10、11 列同为屏蔽标记,具体判定在技能可用性检查里。 | 空为 0。 |
第 10 列INT:受限于标记2 |
写入 m_nDisableByFlag2。 | 空为 0。 |
第 11 列INT:受限于标记3 |
写入 m_nDisableByFlag3。 | 空为 0。 |
第 12 列INT:心法ID |
写入 m_nXinFa,指向 Public/XinFa_V1.txt 的心法编号,决定技能归在哪本心法下面。 | 指向不存在的心法时技能无法通过心法检查,需要在心法表里补录。 |
第 13 列INT:心法修正参数 |
写入 m_nXinFaParam,交给心法属性修正逻辑使用。 | 空为 0。 |
第 14 列INT:是否是远程技能 |
写入 m_nRangedSkillFlag。 | 空为 0,按近战处理。 |
第 15 列INT:是否强制中断上一个正在执行的技能 |
写入 m_bForceBreakPreSkill。只有非 0 才为真,0 是假。 | 空为 0,即不强制中断。 |
第 16 列INT:技能类型 |
写入 m_nSkillType,区分瞬发、引导、蓄力等施法方式,决定读第 48 列还是第 47 列的时间。 | 空为 0。 |
第 17 列INT:冷却ID |
写入 m_nCooldownID。冷却时间本身在 Public/SkillData_V1.txt 的每个技能实例上,本列只是冷却分组编号。 | 指向不存在的冷却 ID 时取不到冷却时间。 |
第 18 列预留:施法特效 |
列名标为施法特效,服务端 InitFromDB 跳过。 | 改它不影响服务端。 |
第 19 列预留:施法音效 |
跳过。 | 改它不影响服务端。 |
第 20 列预留:施法特效绑定点 |
跳过。 | 改它不影响服务端。 |
第 21 列预留:射击类资源ID |
跳过。 | 改它不影响服务端。 |
第 22 列预留:射击类绑定 |
跳过。 | 改它不影响服务端。 |
第 23 列预留:施法效果ID |
跳过。 | 改它不影响服务端。 |
第 24 列INT:目标存活状态要求 |
写入 m_nTargetMustInSpecialState。-1 为无效、0 为活的、1 为死的。 | 空为 0,等于只对活目标有效。 |
第 25 列INT:按使用者类型分类 |
写入 m_nClassByUser。0 玩家、1 怪物、2 宠物、3 物品。 | 空为 0。 |
第 26 列INT:主动还是被动 |
写入 m_nPassiveFlag。0 主动、1 被动。 | 空为 0,按主动技能处理。 |
第 27 列INT:鼠标点选类型 |
写入 m_nSelectType。 | 空为 0。 |
第 28 列INT:宠物技能发动类型 |
写入 m_nOperateModeForPetSkill。0 主人手动点选、1 AI 自动执行、2 增强自身属性的被动技能。 | 空为 0。 |
第 29 列INT:宠物技能发动几率 |
写入 m_nPetRateOfSkill,只对宠物技能有效。 | 空为 0,宠物技能不会自动发动。 |
第 30 列INT:宠物技能类型 |
写入 m_nTypeOfPetSkill。0 物攻、1 法功、2 护主、3 防御、4 复仇。 | 空为 0。 |
第 31 列INT:宠物技能产生的效果ID |
写入 m_nImpactIDOfSkill,指向效果表。 | 指向不存在的效果时技能不产生效果。 |
第 32 列INT:分组ID |
写入 m_nGroupID,把同一招式的不同等级归为一组。 | 空为 0。 |
第 33 列INT:分组等级 |
写入 m_nGroupLevel,组内等级序号。 | 空为 0。 |
第 34 列INT:是否直接学会 |
写入 m_bLearnedDirectly。大于 0 为真,技能可以在满足条件时直接学会而不必先学心法。 | 空为 0,即不直接学会。 |
第 35 列INT:使用前是否需要学会 |
写入 m_bMustLearnedBeforeUsing。大于 0 为真。 | 空为 0。 |
第 36 列预留:子弹/客户表现ID |
服务端 InitFromDB 跳过。 | 改它不影响服务端。 |
第 37 列预留:子弹/客户表现参数 |
跳过。 | 改它不影响服务端。 |
第 38 列预留:客户端专用 |
跳过。 | 改它不影响服务端。 |
第 39 列INT:目标选取逻辑 |
写入 m_nTargetingLogic,决定圆形、扇形还是单体选取。 | 指向不存在的逻辑时技能选不到目标。 |
第 40 列INT:动作播放时间 |
写入 m_nPlayActionTime,单位按客户端表现解释。本列读 iValue,不读浮点。 | 空为 0。 |
第 41 列FLOAT:最小距离(m) |
写入 m_fOptimalRangeMin,转换为整数写入时会丢小数。 | 空为 0。 |
第 42 列FLOAT:最大距离(m) |
写入 m_fOptimalRangeMax。小于最小距离时技能永远放不出去。 | 空为 0。 |
第 43 列INT:阵营与友好度 |
写入 m_nStandFlag。列名注明 0 为己方、大于 0 为友方技能、小于 0 为敌方技能。 | 空为 0。 |
第 44 列INT:目标阵营关系检查 |
写入 m_nTargetLogicByStand。 | 指向不存在的逻辑时不检查阵营。 |
第 45 列INT:按对象类型检查目标 |
写入 m_nTargetCheckByObjType。 | 空为 0。 |
第 46 列INT:是否只对队友有效 |
写入 m_bPartyOnly。非 0 为真。 | 空为 0,即对非队友也有效。 |
第 47 列INT:连击数或引导间隔(ms) |
写入 m_nChargesOrInterval。技能类型为多段时是段数,为引导时是两次跳动之间的毫秒间隔。 | 空为 0。 |
第 48 列INT:是否自动连射 |
写入 m_bAutoShot。非 0 为真。 | 空为 0。 |
第 49 列INT:命中率 |
写入 m_nAccuracy。 | 空为 0。 |
第 50 列INT:暴击率 |
写入 m_nCriticalRate。 | 空为 0。 |
第 51 列INT:角色攻速是否影响技能冷却时间 |
写入 m_bUseNormalAttackRate。非 0 为真。 | 空为 0,冷却不受攻速影响。 |
第 52 列INT:生效时间 |
写入 m_nActiveTime。 | 空为 0。 |
第 53 列FLOAT:范围半径 |
写入 m_fRadius,读 fValue。 | 空为 0。 |
第 54 列FLOAT:角度参数 |
写入 m_fAngle,读 fValue 后按 2π×角度/360 转成弧度保存。填的是角度而不是弧度。 | 空为 0。 |
第 55 列INT:范围最大目标数量 |
写入 m_nMaxTargetNumber。 | 空为 0 时范围技能取不到目标。 |
第 56 列INT:中断或激活宠物攻击 |
写入 m_nInterruptOrActivatePetAttack。 | 空为 0。 |
第 57 列INT:中断或激活自动射击 |
写入 m_nInterruptOrActivateAutoShot。 | 空为 0。 |
第 58 列INT:延迟时间 |
写入 m_nDelayTime,读到负数会被改成 0。 | 空为 0。 |
第 59 列INT:1 级心法对应的实际技能ID |
写入 m_aSkillInstance[0],技能等级 1 级时真正执行的那条技能实例(Public/SkillData_V1.txt 的 ID)。等级上限由 MAX_CHAR_SKILL_LEVEL=16 写死,不能再加列。 | 空为 0;GetSkillInstance 遇到越界下标会走 AssertEx。 |
第 60 列INT:2 级心法对应的实际技能ID |
写入 m_aSkillInstance[1],技能等级 2 级时真正执行的那条技能实例(Public/SkillData_V1.txt 的 ID)。等级上限由 MAX_CHAR_SKILL_LEVEL=16 写死,不能再加列。 | 空为 0;GetSkillInstance 遇到越界下标会走 AssertEx。 |
第 61 列INT:3 级心法对应的实际技能ID |
写入 m_aSkillInstance[2],技能等级 3 级时真正执行的那条技能实例(Public/SkillData_V1.txt 的 ID)。等级上限由 MAX_CHAR_SKILL_LEVEL=16 写死,不能再加列。 | 空为 0;GetSkillInstance 遇到越界下标会走 AssertEx。 |
第 62 列INT:4 级心法对应的实际技能ID |
写入 m_aSkillInstance[3],技能等级 4 级时真正执行的那条技能实例(Public/SkillData_V1.txt 的 ID)。等级上限由 MAX_CHAR_SKILL_LEVEL=16 写死,不能再加列。 | 空为 0;GetSkillInstance 遇到越界下标会走 AssertEx。 |
第 63 列INT:5 级心法对应的实际技能ID |
写入 m_aSkillInstance[4],技能等级 5 级时真正执行的那条技能实例(Public/SkillData_V1.txt 的 ID)。等级上限由 MAX_CHAR_SKILL_LEVEL=16 写死,不能再加列。 | 空为 0;GetSkillInstance 遇到越界下标会走 AssertEx。 |
第 64 列INT:6 级心法对应的实际技能ID |
写入 m_aSkillInstance[5],技能等级 6 级时真正执行的那条技能实例(Public/SkillData_V1.txt 的 ID)。等级上限由 MAX_CHAR_SKILL_LEVEL=16 写死,不能再加列。 | 空为 0;GetSkillInstance 遇到越界下标会走 AssertEx。 |
第 65 列INT:7 级心法对应的实际技能ID |
写入 m_aSkillInstance[6],技能等级 7 级时真正执行的那条技能实例(Public/SkillData_V1.txt 的 ID)。等级上限由 MAX_CHAR_SKILL_LEVEL=16 写死,不能再加列。 | 空为 0;GetSkillInstance 遇到越界下标会走 AssertEx。 |
第 66 列INT:8 级心法对应的实际技能ID |
写入 m_aSkillInstance[7],技能等级 8 级时真正执行的那条技能实例(Public/SkillData_V1.txt 的 ID)。等级上限由 MAX_CHAR_SKILL_LEVEL=16 写死,不能再加列。 | 空为 0;GetSkillInstance 遇到越界下标会走 AssertEx。 |
第 67 列INT:9 级心法对应的实际技能ID |
写入 m_aSkillInstance[8],技能等级 9 级时真正执行的那条技能实例(Public/SkillData_V1.txt 的 ID)。等级上限由 MAX_CHAR_SKILL_LEVEL=16 写死,不能再加列。 | 空为 0;GetSkillInstance 遇到越界下标会走 AssertEx。 |
第 68 列INT:10 级心法对应的实际技能ID |
写入 m_aSkillInstance[9],技能等级 10 级时真正执行的那条技能实例(Public/SkillData_V1.txt 的 ID)。等级上限由 MAX_CHAR_SKILL_LEVEL=16 写死,不能再加列。 | 空为 0;GetSkillInstance 遇到越界下标会走 AssertEx。 |
第 69 列INT:11 级心法对应的实际技能ID |
写入 m_aSkillInstance[10],技能等级 11 级时真正执行的那条技能实例(Public/SkillData_V1.txt 的 ID)。等级上限由 MAX_CHAR_SKILL_LEVEL=16 写死,不能再加列。 | 空为 0;GetSkillInstance 遇到越界下标会走 AssertEx。 |
第 70 列INT:12 级心法对应的实际技能ID |
写入 m_aSkillInstance[11],技能等级 12 级时真正执行的那条技能实例(Public/SkillData_V1.txt 的 ID)。等级上限由 MAX_CHAR_SKILL_LEVEL=16 写死,不能再加列。 | 空为 0;GetSkillInstance 遇到越界下标会走 AssertEx。 |
第 71 列INT:13 级心法对应的实际技能ID |
写入 m_aSkillInstance[12],技能等级 13 级时真正执行的那条技能实例(Public/SkillData_V1.txt 的 ID)。等级上限由 MAX_CHAR_SKILL_LEVEL=16 写死,不能再加列。 | 空为 0;GetSkillInstance 遇到越界下标会走 AssertEx。 |
第 72 列INT:14 级心法对应的实际技能ID |
写入 m_aSkillInstance[13],技能等级 14 级时真正执行的那条技能实例(Public/SkillData_V1.txt 的 ID)。等级上限由 MAX_CHAR_SKILL_LEVEL=16 写死,不能再加列。 | 空为 0;GetSkillInstance 遇到越界下标会走 AssertEx。 |
第 73 列INT:15 级心法对应的实际技能ID |
写入 m_aSkillInstance[14],技能等级 15 级时真正执行的那条技能实例(Public/SkillData_V1.txt 的 ID)。等级上限由 MAX_CHAR_SKILL_LEVEL=16 写死,不能再加列。 | 空为 0;GetSkillInstance 遇到越界下标会走 AssertEx。 |
第 74 列INT:16 级心法对应的实际技能ID |
写入 m_aSkillInstance[15],技能等级 16 级时真正执行的那条技能实例(Public/SkillData_V1.txt 的 ID)。等级上限由 MAX_CHAR_SKILL_LEVEL=16 写死,不能再加列。 | 空为 0;GetSkillInstance 遇到越界下标会走 AssertEx。 |
第 75 列STRING:技能描述 |
写入 m_szDescription,技能面板正文。 | 空缺原样存入空指针。 |
第 76 列INT:是否显示命中名(客户端) |
列名标为客户端专用,服务端 InitFromDB 跳过。 | 改它不影响服务端。 |
第 77 列FLOAT:干扰时间百分比 |
写入 m_fDisturbTime,读 fValue。 | 空为 0。 |
第 78 列INT:干扰几率 |
写入 m_nDisturbOdds。 | 空为 0。 |
第 79 列INT:干扰时间浮动百分比 |
写入 m_nDisturbFluctuation。 | 空为 0。 |
常用修改实例
示例为局部教学片段,先备份原运行文件,再修改对应行并保留其余配置。教学值不是程序默认值。 以下代码块保留真实 Tab;本地示例文件保留原样本编码、中文表头与 CRLF。网页文字使用浏览器编码显示,不表示运行文件应改存 UTF-8。
把技能 1 的心法等级限制从 -1 改成 20
修改前:
INT INT INT STRING STRING INT INT INT INT INT INT INT INT INT INT INT INT STRING STRING STRING STRING STRING INT INT INT INT INT INT INT INT INT INT INT INT INT INT STRING INT INT INT FLOAT FLOAT INT INT INT INT INT INT INT INT INT INT FLOAT FLOAT INT INT INT INT INT INT INT INT INT INT INT INT INT INT INT INT INT INT INT INT STRING INT FLOAT INT INT ID,(技能系的ID) 策划专用ID 门派 技能名字$1$ 图标名字 技能的心法等级限制 招式类型 需要拿武器 受限于控制1 受限于控制2 受限于骑乘/变身 心法ID 心法级数修正参数 是否是远程技能 是否打断上一个正在执行的技能 技能类型 冷却ID 起手特效 起手特效绑定点 起手音xiao 引导/聚气动作组ID 序列 发招动作组ID序列 环境特效ID 所选的目标必须是活的还是死的 技能类型按使用者划分 主动技能还是被动技能 鼠标点选操作类型 珍兽技能发动类型 0:主人手动点选,1:AI自动执行,2:增强自身属性的被动技能 技能发动几率,只对珍兽技能有效 珍兽技能类型,0:物功,1:法功,2:护主,3:防御,4:复仇; 珍兽技能产生的效果ID 技能组ID 技能组等级 是否直接学会 使用前是否需要学会 子弹ID 子弹发射点 预留 目标选择逻辑 动作时间(ms) 最小射程(m) 最大射程(m) 技能友好度,=0为中性技能,>0为正面技能,<0为 负面技能 目标和使用者阵营关系 目标类型 是否仅对队友有效。注:队友珍兽算作队友。1为只对队友有效,0为无此限制。 连续攻击次数或引导的时间间隔(ms) 是否自动连续释放 命中率 会心率 角色的攻击速度是否影响技能的冷却时间。 激活时间 范围半径 角度参量 范围搜索的目标个数 中断或激活珍兽攻击 中断或激活自动释放技能 延迟时间 心法1级对应的实际技能ID 心法2级对应的实际技能ID 心法3级对应的实际技能ID 心法4级对应的实际技能ID 心法5级对应的实际技能ID 心法6级对应的实际技能ID 心法7级对应的实际技能ID 心法8级对应的实际技能ID 心法9级对应的实际技能ID 心法10级对应的实际技能ID 心法11级对应的实际技能ID 心法12级对应的实际技能ID 心法13级对应的实际技能ID 心法14级对应的实际技能ID 心法15级对应的实际技能ID 心法16级对应的实际技能ID 技能描述$1$ 是否显示打击名 干扰时间百分比 干扰几率 干扰时间浮动百分比 1 0 -1 捕兽 PetSkill2_4 -1 0 0 1 0 1 -1 -1 -1 0 0 91 188 0 -1 0 0 0 1 -1 -1 -1 -1 -1 -1 -1 1 -1 -1 5 1200 0 8 0 -1 -1 0 0 0 100 -1 0 -1 0 0 0 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 捕捉一只没有主人的珍兽。捕捉成功的话,你就可以成为它的主人。 0 0.1 50 10
修改后:
INT INT INT STRING STRING INT INT INT INT INT INT INT INT INT INT INT INT STRING STRING STRING STRING STRING INT INT INT INT INT INT INT INT INT INT INT INT INT INT STRING INT INT INT FLOAT FLOAT INT INT INT INT INT INT INT INT INT INT FLOAT FLOAT INT INT INT INT INT INT INT INT INT INT INT INT INT INT INT INT INT INT INT INT STRING INT FLOAT INT INT ID,(技能系的ID) 策划专用ID 门派 技能名字$1$ 图标名字 技能的心法等级限制 招式类型 需要拿武器 受限于控制1 受限于控制2 受限于骑乘/变身 心法ID 心法级数修正参数 是否是远程技能 是否打断上一个正在执行的技能 技能类型 冷却ID 起手特效 起手特效绑定点 起手音xiao 引导/聚气动作组ID 序列 发招动作组ID序列 环境特效ID 所选的目标必须是活的还是死的 技能类型按使用者划分 主动技能还是被动技能 鼠标点选操作类型 珍兽技能发动类型 0:主人手动点选,1:AI自动执行,2:增强自身属性的被动技能 技能发动几率,只对珍兽技能有效 珍兽技能类型,0:物功,1:法功,2:护主,3:防御,4:复仇; 珍兽技能产生的效果ID 技能组ID 技能组等级 是否直接学会 使用前是否需要学会 子弹ID 子弹发射点 预留 目标选择逻辑 动作时间(ms) 最小射程(m) 最大射程(m) 技能友好度,=0为中性技能,>0为正面技能,<0为 负面技能 目标和使用者阵营关系 目标类型 是否仅对队友有效。注:队友珍兽算作队友。1为只对队友有效,0为无此限制。 连续攻击次数或引导的时间间隔(ms) 是否自动连续释放 命中率 会心率 角色的攻击速度是否影响技能的冷却时间。 激活时间 范围半径 角度参量 范围搜索的目标个数 中断或激活珍兽攻击 中断或激活自动释放技能 延迟时间 心法1级对应的实际技能ID 心法2级对应的实际技能ID 心法3级对应的实际技能ID 心法4级对应的实际技能ID 心法5级对应的实际技能ID 心法6级对应的实际技能ID 心法7级对应的实际技能ID 心法8级对应的实际技能ID 心法9级对应的实际技能ID 心法10级对应的实际技能ID 心法11级对应的实际技能ID 心法12级对应的实际技能ID 心法13级对应的实际技能ID 心法14级对应的实际技能ID 心法15级对应的实际技能ID 心法16级对应的实际技能ID 技能描述$1$ 是否显示打击名 干扰时间百分比 干扰几率 干扰时间浮动百分比 1 0 -1 捕兽 PetSkill2_4 20 0 0 1 0 1 -1 -1 -1 0 0 91 188 0 -1 0 0 0 1 -1 -1 -1 -1 -1 -1 -1 1 -1 -1 5 1200 0 8 0 -1 -1 0 0 0 100 -1 0 -1 0 0 0 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 捕捉一只没有主人的珍兽。捕捉成功的话,你就可以成为它的主人。 0 0.1 50 10
按第一列定位技能 1。样本第 6 列是 -1(不限制),改为 20 后该技能要求心法等级 20。只改第 6 列,保留 79 列和其余 808 行。本片段含表头与该行,不能覆盖整表。
GetInstanceByID(1)->GetXinFaLevelRequirement() 返回 20。隔离加载读回 20。真实学习与释放需要实测。
验证与排查
启动日志出现 Load SkillTemplate_v1.txt ... OK!。809 条记录、79 列,技能 1 的心法等级限制为 20。把第一列写成 ≥2049 会打印 TemplateManager 越界断言并跳过该行;列数不足时后面的取值会落到空单元格。客户端未同步时界面文字仍是旧值。恢复备份后重启,或用 ReloadCombatTables 指令。
与其它技能表的分工
本表管「这个技能是什么」;Public/SkillData_V1.txt 管「每一级的技能实例具体做什么」;Public/ImpactSEData_V1.txt 管「效果实例的叠加与驱散规则」。三者由第 59-74 列和第 31 列串起来,改一处要顺着改。
编号空间
第一列是技能模板编号,不是心法编号也不是效果编号。心法编号在 Public/XinFa_V1.txt,效果编号在效果表。
关联与依据
Public/SkillData_V1.txt · Public/ImpactSEData_V1.txt · Public/XinFa_V1.txt
其他配置及整理状态 · 服务端外网设置 · Lua 接口索引
Server/Server/GameServer/Server/Main/GameTable.cpp:实际加载、解析、字段使用或示例关联依据Server/Server/GameServer/Server/Main/GameTable.h:实际加载、解析、字段使用或示例关联依据Common/Combat/TemplateManager.h:实际加载、解析、字段使用或示例关联依据Common/Combat/DataRecords.cpp:实际加载、解析、字段使用或示例关联依据Common/Combat/DataRecords.h:实际加载、解析、字段使用或示例关联依据Common/ServerBase/FileDef.h:实际加载、解析、字段使用或示例关联依据Server/Server/GameServer/Server/Packets/CGCommandHandler.cpp:实际加载、解析、字段使用或示例关联依据Server/Server/GameServer/Server/AI/AI_Human.cpp:实际加载、解析、字段使用或示例关联依据resources/Public/Config/SkillTemplate_V1.txt:实际加载、解析、字段使用或示例关联依据
原始 SkillTemplateData_T::InitFromDB 与 TemplateManager_T 索引隔离加载测试。技能学习、释放与客户端显示未在游戏中执行。