refactor(fight/effect): 实现Effect9的BeforeSkill逻辑,新增Min泛型函数并优化效果叠加处理

This commit is contained in:
1
2025-09-24 22:20:59 +00:00
parent 1bccc4a2da
commit 2d187e4474
4 changed files with 34 additions and 2 deletions

View File

@@ -35,3 +35,10 @@ func Max[T Number](a, b T) T {
}
return b
}
// Max 泛型函数:接收两个同类型的 Number 参数,返回最大值
func Min[T Number](a, b T) T {
if a < b {
return a
}
return b
}

View File

@@ -1,6 +1,8 @@
package effect
import (
"blazing/common/utils"
"blazing/logic/service/fight/info"
"blazing/logic/service/fight/input"
"blazing/logic/service/fight/node"
)
@@ -18,6 +20,22 @@ func init() {
type Effect9 struct {
node.EffectNode
skillid int //记录使用的技能 如果技能变了就删除effect
Skillid int //记录使用的技能 如果技能变了就删除effect
UseSkillCount int //技能使用了多少次切换后置0
}
func (e *Effect9) BeforeSkill(opp *input.Input, skill *info.SkillEntity) {
if e.Skillid != 0 && skill.ID != e.Skillid {
e.NotALive()
e.UseSkillCount = 0
return
}
e.Skillid = skill.ID
add := e.EffectNode.SideEffectArgs[0] * e.UseSkillCount
skill.Power += utils.Min(add, e.EffectNode.SideEffectArgs[1])
e.UseSkillCount++
}

View File

@@ -48,6 +48,9 @@ func (e *Effect0) OnSkill(opp *input.Input, skill *info.SkillEntity) {
})
e.Stack(e.Stack() * 2)
if e.MaxStack != 0 && e.Stack() > e.MaxStack { //限制最大伤害
e.Stack(e.MaxStack)
}
}
}

View File

@@ -112,12 +112,16 @@ func (c *Input) AddEffect(e *EffectID) {
//TODO 先激活
// 如果已有同 ID 的效果,尝试叠加
_, ok := c.Effects.Load(e.ID)
eff, ok := c.Effects.Load(e.ID)
if !ok {
// 否则新加入
c.Effects.Store(e.ID, e.Effect)
return
}
if !eff.Alive() { //如果不存活
c.Effects.Store(e.ID, e.Effect)
return
}
c.Effects.Range(func(key int, value Effect) bool {
if e.ID == key {