feat(技能系统): 扩展Buff运行类型并修复治疗与护盾配置
- 扩展BuffRunType枚举,新增Permanent和Timed类型,明确区分永久、定时和间隔效果 - 在HeroAttrsComp中重构addBuff方法,根据配置智能解析运行类型 - 为治疗(10301)和护盾(10302)配置显式添加runType: Permanent,确保逻辑一致性 - 修复定时Buff的持续时间处理,避免time为0时使用默认值1
This commit is contained in:
@@ -48,8 +48,9 @@ export enum SkillKind {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export enum BuffRunType {
|
export enum BuffRunType {
|
||||||
Attr = 0,
|
Permanent = 0,
|
||||||
Interval = 1
|
Timed = 1,
|
||||||
|
Interval = 2
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -329,9 +330,9 @@ export const BuffsList: Record<number, BuffConf> = {
|
|||||||
|
|
||||||
// ========== 治疗与护盾 (转换自原 SType) ========== 10300 - 10399
|
// ========== 治疗与护盾 (转换自原 SType) ========== 10300 - 10399
|
||||||
// 治疗 (基于攻击力百分比)
|
// 治疗 (基于攻击力百分比)
|
||||||
10301: { uuid: 10301, name: "治疗", icon: "1292", buff: Attrs.hp, BType: BType.RATIO, value: 30, time: 0, chance: 1, info: "回复30%最大生命值" },
|
10301: { uuid: 10301, name: "治疗", icon: "1292", buff: Attrs.hp, BType: BType.RATIO, value: 30, time: 0, chance: 1, runType: BuffRunType.Permanent, info: "回复30%最大生命值" },
|
||||||
// 护盾 (基于攻击力百分比)
|
// 护盾 (基于攻击力百分比)
|
||||||
10302: { uuid: 10302, name: "护盾", icon: "1255", buff: Attrs.shield, BType: BType.RATIO, value: 30, time: 0, chance: 1, info: "获得30%最大生命值护盾" },
|
10302: { uuid: 10302, name: "护盾", icon: "1255", buff: Attrs.shield, BType: BType.RATIO, value: 30, time: 0, chance: 1, runType: BuffRunType.Permanent, info: "获得30%最大生命值护盾" },
|
||||||
10311: { uuid: 10311, name: "持续治疗", icon: "1292", buff: Attrs.hp, BType: BType.RATIO, value: 5, time: 5, interval: 1, chance: 1, runType: BuffRunType.Interval, info: "每秒回复5%最大生命值,持续5秒" },
|
10311: { uuid: 10311, name: "持续治疗", icon: "1292", buff: Attrs.hp, BType: BType.RATIO, value: 5, time: 5, interval: 1, chance: 1, runType: BuffRunType.Interval, info: "每秒回复5%最大生命值,持续5秒" },
|
||||||
10312: { uuid: 10312, name: "流血", icon: "10211", buff: Attrs.hp, BType: BType.RATIO, value: -4, time: 5, interval: 1, chance: 1, isDebuff: true, runType: BuffRunType.Interval, info: "每秒损失4%最大生命值,持续5秒" },
|
10312: { uuid: 10312, name: "流血", icon: "10211", buff: Attrs.hp, BType: BType.RATIO, value: -4, time: 5, interval: 1, chance: 1, isDebuff: true, runType: BuffRunType.Interval, info: "每秒损失4%最大生命值,持续5秒" },
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,4 @@
|
|||||||
import { ecs } from "../../../../extensions/oops-plugin-framework/assets/libs/ecs/ECS";
|
import { ecs } from "../../../../extensions/oops-plugin-framework/assets/libs/ecs/ECS";
|
||||||
import { oops } from "../../../../extensions/oops-plugin-framework/assets/core/Oops";
|
|
||||||
import { GameEvent } from "../common/config/GameEvent";
|
|
||||||
import { Attrs, BType } from "../common/config/HeroAttrs";
|
import { Attrs, BType } from "../common/config/HeroAttrs";
|
||||||
import { BuffConf, BuffRunType, SkillDisVal, SkillRange } from "../common/config/SkillSet";
|
import { BuffConf, BuffRunType, SkillDisVal, SkillRange } from "../common/config/SkillSet";
|
||||||
import { HeroInfo, HType } from "../common/config/heroSet";
|
import { HeroInfo, HType } from "../common/config/heroSet";
|
||||||
@@ -9,12 +7,7 @@ import { smc } from "../common/SingletonModuleComp";
|
|||||||
import { HeroViewComp } from "./HeroViewComp";
|
import { HeroViewComp } from "./HeroViewComp";
|
||||||
import { _decorator } from "cc";
|
import { _decorator } from "cc";
|
||||||
|
|
||||||
const { property } = _decorator;
|
|
||||||
|
|
||||||
interface talTrigger{
|
|
||||||
value:number
|
|
||||||
count:number
|
|
||||||
}
|
|
||||||
interface ActiveBuffState {
|
interface ActiveBuffState {
|
||||||
id: number
|
id: number
|
||||||
attr: Attrs
|
attr: Attrs
|
||||||
@@ -180,7 +173,8 @@ export class HeroAttrsComp extends ecs.Comp {
|
|||||||
*/
|
*/
|
||||||
addBuff(buffConf: BuffConf) {
|
addBuff(buffConf: BuffConf) {
|
||||||
const normalized = this.normalizeBuffValue(buffConf);
|
const normalized = this.normalizeBuffValue(buffConf);
|
||||||
if (buffConf.runType === BuffRunType.Interval) {
|
const runType = this.resolveRunType(buffConf);
|
||||||
|
if (runType === BuffRunType.Interval) {
|
||||||
const interval = buffConf.interval && buffConf.interval > 0 ? buffConf.interval : 1;
|
const interval = buffConf.interval && buffConf.interval > 0 ? buffConf.interval : 1;
|
||||||
const remain = buffConf.time > 0 ? buffConf.time : interval;
|
const remain = buffConf.time > 0 ? buffConf.time : interval;
|
||||||
this.INTERVAL_EFFECTS.push({
|
this.INTERVAL_EFFECTS.push({
|
||||||
@@ -195,10 +189,11 @@ export class HeroAttrsComp extends ecs.Comp {
|
|||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (buffConf.time <= 0) {
|
if (runType === BuffRunType.Permanent) {
|
||||||
this.applyAttrChange(buffConf.buff, normalized.value, normalized.BType);
|
this.applyAttrChange(buffConf.buff, normalized.value, normalized.BType);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
const duration = buffConf.time > 0 ? buffConf.time : 1;
|
||||||
|
|
||||||
const targetList = buffConf.isDebuff ? this.DEBUFFS : this.BUFFS;
|
const targetList = buffConf.isDebuff ? this.DEBUFFS : this.BUFFS;
|
||||||
const attrKey = buffConf.buff as unknown as number; // 强制转换 key 类型以适配 Record
|
const attrKey = buffConf.buff as unknown as number; // 强制转换 key 类型以适配 Record
|
||||||
@@ -213,12 +208,18 @@ export class HeroAttrsComp extends ecs.Comp {
|
|||||||
sourceUuid: buffConf.uuid,
|
sourceUuid: buffConf.uuid,
|
||||||
value: normalized.value,
|
value: normalized.value,
|
||||||
BType: normalized.BType,
|
BType: normalized.BType,
|
||||||
time: buffConf.time
|
time: duration
|
||||||
});
|
});
|
||||||
|
|
||||||
this.applyAttrChange(buffConf.buff, normalized.value, normalized.BType);
|
this.applyAttrChange(buffConf.buff, normalized.value, normalized.BType);
|
||||||
|
|
||||||
mLogger.log(this.debugMode, 'HeroAttrs', `添加Buff: ${buffConf.name}, 属性:${buffConf.buff}, 值:${normalized.value}, 时间:${buffConf.time}`);
|
mLogger.log(this.debugMode, 'HeroAttrs', `添加Buff: ${buffConf.name}, 属性:${buffConf.buff}, 值:${normalized.value}, 时间:${duration}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
private resolveRunType(buffConf: BuffConf): BuffRunType {
|
||||||
|
if (buffConf.runType !== undefined) return buffConf.runType;
|
||||||
|
if (buffConf.interval && buffConf.interval > 0) return BuffRunType.Interval;
|
||||||
|
return buffConf.time > 0 ? BuffRunType.Timed : BuffRunType.Permanent;
|
||||||
}
|
}
|
||||||
|
|
||||||
private normalizeBuffValue(buffConf: BuffConf): { value: number; BType: BType } {
|
private normalizeBuffValue(buffConf: BuffConf): { value: number; BType: BType } {
|
||||||
|
|||||||
Reference in New Issue
Block a user