diff --git a/common/utils/tomap.go b/common/utils/tomap.go index eb131f0da..9c15f8e02 100644 --- a/common/utils/tomap.go +++ b/common/utils/tomap.go @@ -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 +} diff --git a/logic/service/fight/effect/effect_9.go b/logic/service/fight/effect/effect_9.go index edeffddc9..5a98d6e77 100644 --- a/logic/service/fight/effect/effect_9.go +++ b/logic/service/fight/effect/effect_9.go @@ -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++ + +} diff --git a/logic/service/fight/effect/effect_damage.go b/logic/service/fight/effect/effect_damage.go index a854b0512..17e7ac688 100644 --- a/logic/service/fight/effect/effect_damage.go +++ b/logic/service/fight/effect/effect_damage.go @@ -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) + } } } diff --git a/logic/service/fight/input/nodemanger.go b/logic/service/fight/input/nodemanger.go index 44ca3948c..cfe9e9847 100644 --- a/logic/service/fight/input/nodemanger.go +++ b/logic/service/fight/input/nodemanger.go @@ -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 {