# 伤害计算自定义 > 注意:如需自定义伤害计算,请先确保你拥有对伤害计算的基础知识,可参考[此帖][伤害计算]了解伤害计算的组成部分与计算方法。 角色伤害计算文件为[character/角色名/calc.js](./character/),如需自定义,将**calc.js**复制一份并重命名为**calc_user.js**后自行修改其中逻辑即可。**data.json**为技能倍率、天赋加成数据,如需自定义,同理将**data.json**复制一份并重命名为**data_user.json**后自行修改即可。[套装计算](./set/)和[武器计算](./weapon/)同理。 如需新增角色伤害计算,可复制[模板](./character/模板/)并重命名后修改相应逻辑。 后文将带你入门插件伤害计算逻辑,只要你需要自定义伤害计算,都建议你完整阅读: > 开发者已对伤害计算进行了规范化、模块化,只需要填参数就可以实现常见的伤害计算逻辑,即使不懂代码也可以参考模板独立完成。若存在问题,可于插件群内提问,或联系我的邮箱:UCPr251@gmail.com 伤害计算需要明确这几部分:**初始属性**、**局内Buff**、**技能属性**、**敌方属性**,后文将分别说明 ## 初始属性 初始属性,即**局外**时代理人的面板属性(参见[上帖][伤害计算]完整描述) 在伤害计算逻辑中,此部分数据可直接获取,不作过多说明 ## 局内Buff 局内Buff,即仅在局内生效的所有增益,一个buff只能对单一属性进行增益,但可以同时作用于多个技能。合理管控buff,是做好伤害计算最重要的一步 ### 认识buff 每个buff由各项[buff参数](./BuffManager.ts#L46)组成,重要参数: ```JS { /** Buff名称 */ name: string /** Buff来源 */ source: buffSource /** Buff增益的类型 */ type: buffType /** * Buff增益数值,可为数值、数组、函数、字符串 * @number * - 一般情况下此值即为提高值 * - 当buff增益类型为攻击力/冲击力/异常精通/异常掌控/防御力/生命值时,若此值<1,则将此值理解为初始属性的百分比提高 * @array * 根据buff.source自动选择对应等级/星级的值,支持: * - Weapon:武器星级(进阶) * - Talent/Addition:天赋(核心技)等级 * @function * 函数返回值则为提高值 * @string * 角色自身的buff提高值可能随技能/天赋等级提高而提高,此时可以于data.json的"buff"中添加对应的倍率信息,此时value即为键名,其首字母必须为对应技能的基类(参考技能类型命名标准) */ value: number | Function | string /** Buff增益技能类型范围,无则对全部生效;参考技能类型命名标准 */ range?: string[] /** Buff增益属性类型,无则对全部属性生效 */ element?: element | element[] } ``` 额外说明: - **name**:Buff名称。可重复 - **source**:Buff来源。用于管理buff、简化参数、判断生效条件等。查看[buff来源](./BuffManager.ts#L30) - **type**:Buff增益的类型。查看[增益类型](./BuffManager.ts#L32) - **value**:Buff增益值。具体解释如上述 - **range**:Buff增益技能类型范围。该参数用于鉴别不同buff的[生效范围](#技能类型命名对buff作用的影响)(比如只对普攻生效),[填写方法](#技能类型命名标准)会在技能属性中详细说明 - **element**:Buff增益属性类型。该参数用于鉴别不同buff的生效属性(比如只对冰属性伤害生效)。查看[属性类型](./BuffManager.ts#L6) ### 注册buff 伤害计算模块提供了注册、管理各buff的接口[BuffManager](./BuffManager.ts),所有buff都需要通过此类的实例**buffM**进行注册、管理 Buff来源可分为三大类:武器、套装、角色(影画、核心被动、额外能力、技能),buff的注册也分为此三步骤、三部分。具体计算文件分别位于[武器](./weapon/) [套装](./set/) [角色](./character/) - 自定义方法:复制对应的计算文件,重命名为**原名_user.js**(如:星见雅_user.js),修改相应逻辑重启即可 - buff注册方法:武器、套装、角色每部分buff的注册,我都为你提供了两种方式: - 一:[直接导出](./character/模板/calc.js#L66):在计算文件中导出buffs数组,数组中保存各buff即可 - 二:[函数导出](./character/模板/calc.js#L1):调用[BuffManager](./BuffManager.ts)实例**buffM**的**new**方法,传入你需要注册的buff即可 - 当上述两方式同时存在时,会**先**注册**直接导出**的buffs,**然后**调用**导出的函数** - 一般情况下,都更推荐**直接导出**的方法。如果你需要更灵活的导出方式,可以选择使用函数导出。 - buff注册原则:应尽可能地将能够吃到的buff都注册上;不考虑失衡易伤和任何需失衡触发的buff 后文将说明武器、套装、角色三部分各自的buff注册细则 ### 武器Buff [武器buff计算文件模板](./weapon/模板.js) [武器buff两种导出方式实例](./weapon/霰落星殿.js) 注意事项: - 武器的**基础属性**和**高级属性**皆已计入[**初始属性**](#初始属性),无需处理 - 武器的**音擎效果**需要自己注册 - 武器buff的**value**值一般为数组类型,具体参考[认识buff](#认识buff)部分 - 武器与角色的职业检查会自动进行 ### 套装Buff [套装buff计算文件模板](./set/模板.js) [套装buff两种导出方式实例](./set/折枝剑歌.js) 注意事项: - 主词条的提升会自动注册,无需处理 - 二件套效果只有**属性伤害提升**需要注册,其他已包含于初始属性 - 四件套效果需要自己注册 ### 角色Buff [角色buff计算文件模板](./character/模板/calc.js) [角色buff两种导出方式实例](./character/星见雅/calc.js) 角色buff分为影画、核心被动、额外能力、技能此四个来源 - **影画·Rank** **name**建议按照模板填写,此时命座检查会自动进行 - **核心被动·Talent** 核心被动中的**buff增益值**可能随核心技等级提升而提升,此时**value**的类型对应字符串情况,并且需要于data.json中添加对应的倍率信息,你可参考[安东伤害计算](./character/安东/calc.js#L17)的处理 - **额外能力·Addition** 额外能力的阵营效果直接视为生效,正常注册即可 - **技能·Skill** 部分角色释放技能后会给自己附加增益,正常注册即可 ### 管理buff - [BuffManager](./BuffManager.ts)提供了部分管理buff的函数,可自行查看使用 - 较为推荐的管理buff方式为:在使用**直接导出**注册相应的buff的基础上,通过**导出函数**来管理buff,在函数中调整各buff - **在线调试**:将云崽底层的日志类型(根目录/config/config/bot.yaml中的log_level)修改为**debug**并重启后,插件会自动监听当前各计算文件,实时更新,并会在控制台输出伤害计算的详细过程:初始属性、buff情况、技能数据、buff生效情况、各乘区数据,可据此调试 - 游戏中的buff生效情况难以确定,但通过[自定义敌方属性](#自定义敌方属性)和对buff的精确管控,插件的计算结果将与游戏实机十分吻合