feat(fight): 调整效果叠加逻辑与精灵属性处理

- 将 `MaxStack` 方法重命名为 `CanStack`,并修改其逻辑为布尔值控制是否可叠加
- 更新多个效果文件中的注释和调用方式以适配新的叠加控制方法
- 修复精灵属性类型获取逻辑,增加缓存字段 `PType`
- 修改战斗回合处理流程,优化技能解析顺序和状态比较时机
- 调整状态效果初始化逻辑,确保状态类效果默认允许无限叠加
- 更正伤害类型缺失问题,在固定伤害
This commit is contained in:
2025-11-14 06:14:49 +08:00
parent d52c6cbb79
commit 004ce51c5e
23 changed files with 298 additions and 69 deletions

View File

@@ -36,6 +36,9 @@ func Geteffect(etype EnumEffectType, id int) Effect {
//todo 获取前GetEffect
eff := deep.MustCopy(ret)
if eff.ID() >= int(EffectType.Status) && eff.ID() < int(EffectType.Sub) {
eff.CanStack(true) //状态类不能被覆盖,只能无限叠加
}
return eff
//todo 获取后GetEffect
@@ -162,19 +165,14 @@ func (our *Input) AddEffect(in *Input, e Effect) Effect {
v.Alive() && //如果之前的效果还存活
equalInts(v.Args(), e.Args()) { //如果层数可以叠加或者是无限层数
if v.MaxStack() == 0 { //说明进行了替换
if v.CanStack() { //说明进行了替换
v.Alive(false) //不允许叠层,取消效果
e.Duration(utils.Max(e.Duration(), v.Duration()))
return v //这里把V替换掉了
} else {
///e.Alive(false) //取消之前效果
if v.Stack() <= v.MaxStack() { //如果小于最大叠层,状态可以叠层
v.Stack(v.Stack() + e.Stack()) //获取到当前叠层数然后叠加
//这里直接返回,不再继续执行后续效果,因为这里是可以叠加的效果
//v.Duration(e.Duration()) //回合数覆盖
}
v.Stack(v.Stack() + e.Stack()) //获取到当前叠层数然后叠加
//这里直接返回,不再继续执行后续效果,因为这里是可以叠加的效果
//v.Duration(e.Duration()) //回合数覆盖
v.Duration(utils.Max(e.Duration(), v.Duration()))
return nil
// c.Effects = append(c.Effects, e)