3 Commits

Author SHA1 Message Date
panFD
79687fbace fix(SCastSystem): 修改治疗量计算逻辑
将治疗量计算从基于施法者ap改为基于被治疗者最终最大生命值,同时更新注释说明
2026-09-05 22:25:23 +08:00
panFD
bd2e4cb16d chore(constants): update support ultimate skill list
add new support ultimate skill ids to SUPPORT_ULT constant
2026-09-05 22:21:52 +08:00
panFD
00c875ff18 feat(hero&skill): 新增反伤相关光环技能与属性计算
1. 扩展英雄反伤属性计算逻辑,加入驻场光环加成
2. 新增两个永久反伤强化技能6413、6414
3. 新增FieldSkillType反伤相关枚举与光环配置
2026-09-05 22:18:57 +08:00
4 changed files with 30 additions and 7 deletions

View File

@@ -445,6 +445,16 @@ export const SkillSet: Record<number, SkillConfig> = {
DTType: DTType.single, kind: SkillKind.Support, ap: 50, hit_count: 1, hitcd: 0.2, speed: 720, with: 0, ready: 0.2, EAnm: 0, DAnm: "", IType: IType.support,
RType: RType.fixed, EType: EType.animationEnd, buff_type: Attrs.defense, info: "全体友方防御提升50点, 持续1次",
},
6413: {
uuid: 6413, name: "荆棘强化", sp_name: "buff_wind", icon: "Stat_Defense", TGroup: TGroup.Team, readyAnm: "up_blue", endAnm: "", act: "atk",
DTType: DTType.single, kind: SkillKind.Support, ap: 10, hit_count: 1, hitcd: 0.2, speed: 720, with: 0, ready: 0.2, EAnm: 0, DAnm: "", IType: IType.support,
RType: RType.fixed, EType: EType.animationEnd, buff_type: Attrs.thorns_dmg, info: "全体友方固定反伤提升10点, 永久生效",
},
6414: {
uuid: 6414, name: "荆棘比例强化", sp_name: "buff_wind", icon: "Stat_Defense", TGroup: TGroup.Team, readyAnm: "up_blue", endAnm: "", act: "atk",
DTType: DTType.single, kind: SkillKind.Support, ap: 10, hit_count: 1, hitcd: 0.2, speed: 720, with: 0, ready: 0.2, EAnm: 0, DAnm: "", IType: IType.support,
RType: RType.fixed, EType: EType.animationEnd, buff_type: Attrs.thorns_rate, info: "全体友方比例反伤提升10%, 永久生效",
},
6501: {
uuid: 6501, name: "复活", sp_name: "buff_wind", icon: "Stat_HolyDamage", TGroup: TGroup.Self, readyAnm: "up_ap", endAnm: "", act: "atk",
DTType: DTType.single, kind: SkillKind.Support, ap: 50, hit_count: 3, hitcd: 0.2, speed: 720, with: 0, ready: 0.2, EAnm: 0, DAnm: "", IType: IType.support,
@@ -525,6 +535,12 @@ export const SkillSet: Record<number, SkillConfig> = {
uuid: 6515, name: "荆棘比例", sp_name: "buff_wind", icon: "Stat_Defense", TGroup: TGroup.Team, readyAnm: "up_blue", endAnm: "", act: "atk",
DTType: DTType.single, kind: SkillKind.Support, ap: 0, hit_count: 3, hitcd: 0.2, speed: 720, with: 0, ready: 0.2, EAnm: 0, DAnm: "", IType: IType.support,
RType: RType.fixed, EType: EType.animationEnd, buff_type: Attrs.thorns_rate, timed_buff_id: 7028, info: "全体友方获得10%比例反伤, 持续5秒",
},
// 次级反伤技能(供触发器引用,无 buff_type,效果由引用处 overrides 注入)
6516: {
uuid: 6516, name: "次级荆棘", sp_name: "buff_wind", icon: "Stat_Defense", TGroup: TGroup.Self, readyAnm: "up_blue", endAnm: "", act: "atk",
DTType: DTType.single, kind: SkillKind.Support, ap: 0, hit_count: 1, hitcd: 0.2, speed: 720, with: 0, ready: 0.2, EAnm: 0, DAnm: "", IType: IType.support,
RType: RType.fixed, EType: EType.animationEnd, info: "次级反伤技能,效果由引用处 overrides 注入",
}
};
@@ -547,6 +563,8 @@ export enum FieldSkillType {
AtkCount = 19, // 攻击触发技能次数提升
BeAtkCount = 20, // 被攻击触发技能次数提升
HeroPunctureDmg = 21, // 英雄穿透后伤害加成(百分点;乘算:PUNCTURE_DMG_RATIO * (1 + bonus/100))
HeroThornsDmg = 22, // 英雄固定反伤加成
HeroThornsRate = 23, // 英雄比例反伤加成(百分点)
}
export interface FieldSkillConfig {
@@ -581,4 +599,6 @@ export const FieldSkillSet: Record<number, FieldSkillConfig> = {
7018: { uuid: 7018, name: "攻击强化", icon: "Stat_Attack_03", type: FieldSkillType.AtkCount, info: "攻击触发技能次数提升" },
7019: { uuid: 7019, name: "受击强化", icon: "Stat_Armor_01", type: FieldSkillType.BeAtkCount, info: "被攻击触发技能次数提升" },
7020: { uuid: 7020, name: "穿透强化", icon: "Stat_Tripleshot", type: FieldSkillType.HeroPunctureDmg, info: "英雄穿透后伤害提升(百分点)" },
7021: { uuid: 7021, name: "荆棘光环", icon: "Stat_Defense", type: FieldSkillType.HeroThornsDmg, info: "英雄固定反伤提升" },
7022: { uuid: 7022, name: "荆棘比例光环", icon: "Stat_Defense", type: FieldSkillType.HeroThornsRate, info: "英雄比例反伤提升(百分点)" },
};

View File

@@ -542,16 +542,18 @@ export class HeroAttrsComp extends ecs.Comp {
return Math.max(0, this.defense + mods.flatSum + mods.pctSum);
}
/** 最终反伤固定值 = 基础 + 限时修饰(加法模型) */
/** 最终反伤固定值 = 基础 + 限时修饰 + 驻场光环(加法模型) */
public getFinalThornsDmg(): number {
const mods = this.aggregateTimedMods(Attrs.thorns_dmg);
return Math.max(0, this.thorns_dmg + mods.flatSum + mods.pctSum);
const field = this.fac === FacSet.HERO ? HeroAttrsComp.getFieldPercentValue(FieldSkillType.HeroThornsDmg) : 0;
return Math.max(0, this.thorns_dmg + mods.flatSum + mods.pctSum + field);
}
/** 最终反伤比例 = 基础 + 限时修饰(加法模型,百分点) */
/** 最终反伤比例 = 基础 + 限时修饰 + 驻场光环(加法模型,百分点) */
public getFinalThornsRate(): number {
const mods = this.aggregateTimedMods(Attrs.thorns_rate);
return Math.max(0, this.thorns_rate + mods.flatSum + mods.pctSum);
const field = this.fac === FacSet.HERO ? HeroAttrsComp.getFieldPercentValue(FieldSkillType.HeroThornsRate) : 0;
return Math.max(0, this.thorns_rate + mods.flatSum + mods.pctSum + field);
}
/**

View File

@@ -528,8 +528,9 @@ export class SCastSystem extends ecs.ComblockSystem implements ecs.ISystemUpdate
}
if (kind === SkillKind.Heal && sAp !== 0) {
// 治疗强化(heal_power,百分点):辅助专精天赋写入,放大施法者的治疗量
const addHp = Math.floor(sAp * _cAttrsComp.ap / 100 * (1 + _cAttrsComp.heal_power / 100));
// 治疗量 = 被治疗者最终最大生命(getFinalHpMax 含驻场光环与计时 buff 加成)× 技能 ap%
// 治疗强化(heal_power,百分点):辅助专精天赋写入,按施法者放大治疗量
const addHp = Math.floor(model.getFinalHpMax() * sAp / 100 * (1 + _cAttrsComp.heal_power / 100));
model.add_hp(addHp);
target.health(addHp);
if (_cAttrsComp.fac === FacSet.HERO) {

View File

@@ -52,7 +52,7 @@ export const ROLE_ULT_SKILL = {
}
// 辅助类技能(任意职业可用作大招)
export const SUPPORT_ULT = [6301, 6302, 6412, 6501]
export const SUPPORT_ULT = [6301, 6302, 6412, 6413, 6414, 6501, 6514, 6515, 6516]
export function defaultHero() {
return {