diff --git a/logic/service/fight/boss/NewSeIdx_6.go b/logic/service/fight/boss/NewSeIdx_6.go index 0a7ad5efe..2ee2ef354 100644 --- a/logic/service/fight/boss/NewSeIdx_6.go +++ b/logic/service/fight/boss/NewSeIdx_6.go @@ -29,15 +29,11 @@ func (e *NewSel6) Action_end_ex() bool { return true } - duration := int(e.Input.FightC.GetRand().Int31n(2)) // 默认随机 2~3 回合 - duration++ // 5. 获取状态效果实例并设置参数 - statusEffect := input.Geteffect(input.EffectType.Status, int(e.Args()[0].IntPart())) + statusEffect := e.Ctx().Our.InitEffect(input.EffectType.Status, int(e.Args()[0].IntPart())) if statusEffect == nil { return true } - statusEffect.Duration(duration) - statusEffect.SetArgs(e.Ctx().Our) // 目标为对手 // 6. 给对手添加状态 //然后这里是被动添加,所以对方不能消除 diff --git a/logic/service/fight/boss/NewSeIdx_66.go b/logic/service/fight/boss/NewSeIdx_66.go index 79295b129..91d62db6b 100644 --- a/logic/service/fight/boss/NewSeIdx_66.go +++ b/logic/service/fight/boss/NewSeIdx_66.go @@ -32,13 +32,11 @@ func (e *NewSel66) OnSkill() bool { duration++ // 获取状态效果 - eff := input.Geteffect(input.EffectType.Status, int(e.Args()[1].IntPart())) + eff := e.Ctx().Our.InitEffect(input.EffectType.Status, int(e.Args()[1].IntPart())) if eff == nil { return true } - eff.Duration(duration) - eff.SetArgs(e.Ctx().Our) //输入参数是对方 e.Ctx().Opp.AddEffect(e.Ctx().Our, eff) return true } diff --git a/logic/service/fight/boss/NewSeIdx_67.go b/logic/service/fight/boss/NewSeIdx_67.go index a37dd9293..b929a1573 100644 --- a/logic/service/fight/boss/NewSeIdx_67.go +++ b/logic/service/fight/boss/NewSeIdx_67.go @@ -32,13 +32,11 @@ func (e *NewSel67) OnSkill() bool { duration++ // 获取状态效果 - eff := input.Geteffect(input.EffectType.Status, int(e.Args()[1].IntPart())) + eff := e.Ctx().Our.InitEffect(input.EffectType.Status, int(e.Args()[1].IntPart())) if eff == nil { return true } - eff.Duration(duration) - eff.SetArgs(e.Ctx().Our) //输入参数是对方 e.Ctx().Opp.AddEffect(e.Ctx().Our, eff) return true } diff --git a/logic/service/fight/effect/EffectDefeatTrigger.go b/logic/service/fight/effect/EffectDefeatTrigger.go index fa0524e98..70f6802db 100644 --- a/logic/service/fight/effect/EffectDefeatTrigger.go +++ b/logic/service/fight/effect/EffectDefeatTrigger.go @@ -150,10 +150,9 @@ func (e *EffectDefeatTrigger) triggerNextEnemyStatusOnDefeat(at info.AttackValue // 简化示例:直接处理状态施加 for i, v := range at.Status { if v > 0 { - nv := input.Geteffect(input.EffectType.Status, int(i)) + nv := e.Ctx().Our.InitEffect(input.EffectType.Status, int(i)) if nv != nil { - nv.Duration(int(e.Input.FightC.GetRand().Int31n(2))) - nv.SetArgs(e.Ctx().Our) //输入参数是对方 + e.Ctx().Opp.AddEffect(e.Ctx().Our, nv) } } diff --git a/logic/service/fight/effect/EffectPhysicalAttackAddStatus.go b/logic/service/fight/effect/EffectPhysicalAttackAddStatus.go index c41bde459..e7f397e26 100644 --- a/logic/service/fight/effect/EffectPhysicalAttackAddStatus.go +++ b/logic/service/fight/effect/EffectPhysicalAttackAddStatus.go @@ -64,16 +64,11 @@ func (e *EffectPhysicalAttackAddStatus) Skill_Use_ex() bool { return true } - // 4. 计算持续回合(默认2~3回合,支持通过参数指定) - duration := e.getDuration() - // 5. 获取状态效果实例并设置参数 - statusEffect := input.Geteffect(input.EffectType.Status, int(e.targetStatus)) + statusEffect := e.Ctx().Our.InitEffect(input.EffectType.Status, int(e.targetStatus)) if statusEffect == nil { return true } - statusEffect.Duration(duration) - statusEffect.SetArgs(e.Ctx().Our) // 目标为对手 // 6. 给对手添加状态 e.Ctx().Opp.AddEffect(e.Ctx().Our, statusEffect) @@ -85,10 +80,3 @@ func (e *EffectPhysicalAttackAddStatus) SetArgs(t *input.Input, a ...int) { e.EffectNode.SetArgs(t, a...) e.EffectNode.Duration(e.EffectNode.SideEffectArgs[0]) } - -// 计算持续回合(封装为独立方法,增强可读性) -func (e *EffectPhysicalAttackAddStatus) getDuration() int { - - // 默认随机2~3回合(Int31n(2)返回0/1,+2后为2/3) - return int(e.Input.FightC.GetRand().Int31n(2)) + 2 -} diff --git a/logic/service/fight/effect/effect_1.go b/logic/service/fight/effect/effect_1.go index 3a58ce095..af96790b9 100644 --- a/logic/service/fight/effect/effect_1.go +++ b/logic/service/fight/effect/effect_1.go @@ -15,10 +15,11 @@ type Effect1 struct { node.EffectNode } +func initskill(id int, e input.Effect) { + input.InitEffect(input.EffectType.Skill, id, e) +} func init() { - ret := &Effect1{} - - input.InitEffect(input.EffectType.Skill, 1, ret) + initskill(1, &Effect1{}) } diff --git a/logic/service/fight/effect/effect_104_109.go b/logic/service/fight/effect/effect_104_109.go index 20bf0c344..4e6ba5a40 100644 --- a/logic/service/fight/effect/effect_104_109.go +++ b/logic/service/fight/effect/effect_104_109.go @@ -68,13 +68,11 @@ func (e *Effect104) OnSkill() bool { duration++ // 获取状态效果 - eff := input.Geteffect(input.EffectType.Status, int(e.Status)) + eff := e.Ctx().Our.InitEffect(input.EffectType.Status, int(e.Status)) if eff == nil { return true } - eff.Duration(duration) - eff.SetArgs(e.Ctx().Our) //输入参数是对方 e.Ctx().Opp.AddEffect(e.Ctx().Our, eff) return true } diff --git a/logic/service/fight/effect/effect_13.go b/logic/service/fight/effect/effect_13.go index f0e857b7f..3f08af2e3 100644 --- a/logic/service/fight/effect/effect_13.go +++ b/logic/service/fight/effect/effect_13.go @@ -32,16 +32,14 @@ func (e *Effect13) OnSkill() bool { if gconv.Int(e.Ctx().Opp.CurrentPet.PetInfo.Type) == int(element.ElementTypeGrass) { return true } - duration := e.EffectNode.SideEffectArgs[0] - 1 - //duration++ + // 获取状态效果 - eff := input.Geteffect(input.EffectType.Status, int(info.PetStatus.DrainedHP)) + eff := e.Ctx().Our.InitEffect(input.EffectType.Status, int(info.PetStatus.DrainedHP)) if eff == nil { return true } + eff.Duration(e.EffectNode.SideEffectArgs[0] - 1) - eff.Duration(duration) - eff.SetArgs(e.Ctx().Our) e.Ctx().Opp.AddEffect(e.Ctx().Our, eff) return true } diff --git a/logic/service/fight/effect/effect_1605.go b/logic/service/fight/effect/effect_1605.go index 194858cd7..6c19c7bfe 100644 --- a/logic/service/fight/effect/effect_1605.go +++ b/logic/service/fight/effect/effect_1605.go @@ -38,13 +38,11 @@ func (e *Effect1605) OnSkill() bool { duration++ // 获取状态效果 - eff := input.Geteffect(input.EffectType.Status, int(e.SideEffectArgs[1])) + eff := e.Ctx().Our.InitEffect(input.EffectType.Status, int(e.SideEffectArgs[1])) if eff == nil { return true } - eff.Duration(duration) - eff.SetArgs(e.Ctx().Our) //输入参数是对方 e.Ctx().Opp.AddEffect(e.Ctx().Our, eff) return true } diff --git a/logic/service/fight/effect/effect_20.go b/logic/service/fight/effect/effect_20.go index a68ce1534..83fd990f8 100644 --- a/logic/service/fight/effect/effect_20.go +++ b/logic/service/fight/effect/effect_20.go @@ -25,7 +25,7 @@ func (e *Effect20) OnSkill() bool { if !ok { return true } - t := input.Geteffect(input.EffectType.Status, int(info.PetStatus.Tired)) + t := e.Ctx().Our.InitEffect(input.EffectType.Status, int(info.PetStatus.Tired)) t.Duration(e.SideEffectArgs[1]) e.Ctx().Our.AddEffect(e.Ctx().Our, t) return true diff --git a/logic/service/fight/effect/effect_4_5.go b/logic/service/fight/effect/effect_4_5.go index 6c7ef99a7..61c60631a 100644 --- a/logic/service/fight/effect/effect_4_5.go +++ b/logic/service/fight/effect/effect_4_5.go @@ -10,10 +10,9 @@ import ( // 注册 // ----------------------------------------------------------- func init() { - // 自身能力变化 - input.InitEffect(input.EffectType.Skill, 4, newEffectStat(false)) - // 对方能力变化 - input.InitEffect(input.EffectType.Skill, 5, newEffectStat(true)) + initskill(4, newEffectStat(false)) + initskill(5, newEffectStat(true)) + } // ----------------------------------------------------------- diff --git a/logic/service/fight/effect/effect_74_75.go b/logic/service/fight/effect/effect_74_75.go index a947fdac6..e562fd70e 100644 --- a/logic/service/fight/effect/effect_74_75.go +++ b/logic/service/fight/effect/effect_74_75.go @@ -49,15 +49,11 @@ func (e *EffectRandomStatus) OnSkill() bool { } // 获取状态效果并设置参数 - eff := input.Geteffect(input.EffectType.Status, int(targetStatus)) + eff := e.Ctx().Our.InitEffect(input.EffectType.Status, int(targetStatus)) if eff == nil { return true } - - // 持续时间:随机2-3回合(与原逻辑一致) - duration := int(e.Input.FightC.GetRand().Int31n(2)) + 2 - eff.Duration(duration) - eff.SetArgs(e.Ctx().Our) + e.Ctx().Opp.AddEffect(e.Ctx().Our, eff) return true diff --git a/logic/service/fight/effect/effect_8.go b/logic/service/fight/effect/effect_8.go index 3a8643deb..4b15009a9 100644 --- a/logic/service/fight/effect/effect_8.go +++ b/logic/service/fight/effect/effect_8.go @@ -1,7 +1,6 @@ package effect import ( - "blazing/common/utils" "blazing/logic/service/fight/info" "blazing/logic/service/fight/input" "blazing/logic/service/fight/node" @@ -26,8 +25,8 @@ type Effect8 struct { // DamageFloor 伤害落实前触发,限制最大伤害 func (e *Effect8) DamageFloor(t *info.DamageZone) bool { if t.Type == info.DamageType.Red { - t.Damage = alpacadecimal.NewFromInt(utils.Min(t.Damage.IntPart(), - int64(e.Ctx().Opp.CurrentPet.Info.Hp)-1)) + + t.Damage = alpacadecimal.Min(t.Damage, e.Ctx().Opp.CurrentPet.GetHP().Sub(alpacadecimal.NewFromInt(1))) e.max = t.Damage } diff --git a/logic/service/fight/effect/effect_status.go b/logic/service/fight/effect/effect_status.go index 68525d908..9d2d4b429 100644 --- a/logic/service/fight/effect/effect_status.go +++ b/logic/service/fight/effect/effect_status.go @@ -136,13 +136,11 @@ func (e *Flammable) Skill_Use_ex() bool { return true } // 获取状态效果 - eff := input.Geteffect(input.EffectType.Status, info.PetStatus.Burned) + eff := e.Ctx().Our.InitEffect(input.EffectType.Status, int(info.PetStatus.Burned)) if eff == nil { return true } - duration := int(e.Input.FightC.GetRand().Int31n(2)) // 默认随机 2~3 回合 - eff.Duration(duration) - eff.SetArgs(e.Ctx().Our) //输入参数是对方 + e.Ctx().Our.AddEffect(e.Ctx().Our, eff) return true diff --git a/logic/service/fight/effect/sterStatusEffects.go b/logic/service/fight/effect/sterStatusEffects.go index b934fcf48..adeda34a0 100644 --- a/logic/service/fight/effect/sterStatusEffects.go +++ b/logic/service/fight/effect/sterStatusEffects.go @@ -63,26 +63,22 @@ func (e *Effect10) OnSkill() bool { if !success { return true } - var duration int - if len(e.EffectNode.SideEffectArgs) > 1 { - // 持续回合 - duration = e.EffectNode.SideEffectArgs[1] - } + // 持续回合 - if duration == 0 { - duration = int(e.Input.FightC.GetRand().Int31n(2)) // 默认随机 2~3 回合 - duration++ - } - // 获取状态效果 - eff := input.Geteffect(input.EffectType.Status, int(e.Status)) + eff := e.Ctx().Our.InitEffect(input.EffectType.Status, int(e.Status)) if eff == nil { return true } - eff.Duration(duration) - eff.SetArgs(e.Ctx().Our) //输入参数是对方 + if len(e.EffectNode.SideEffectArgs) > 1 { + // 持续回合 + + eff.Duration(e.EffectNode.SideEffectArgs[1]) + + } + e.Ctx().Opp.AddEffect(e.Ctx().Our, eff) return true } diff --git a/logic/service/fight/input/effect.go b/logic/service/fight/input/effect.go index e37d422fb..968704c7e 100644 --- a/logic/service/fight/input/effect.go +++ b/logic/service/fight/input/effect.go @@ -11,6 +11,7 @@ import ( "github.com/alpacahq/alpacadecimal" "github.com/brunoga/deep" "github.com/gogf/gf/v2/util/gconv" + "github.com/gogf/gf/v2/util/grand" "github.com/tnnmigga/enum" ) @@ -72,6 +73,7 @@ func Geteffect[T int | byte | uint16](etype EnumEffectType, id T) Effect { if etype == EffectType.Status { eff.CanStack(true) //状态类不能被覆盖,只能无限叠加 + eff.Duration(grand.N(1, 2)) } @@ -80,6 +82,12 @@ func Geteffect[T int | byte | uint16](etype EnumEffectType, id T) Effect { } return nil } +func (our *Input) InitEffect(etype EnumEffectType, id int) Effect { + ret := Geteffect(etype, id) + ret.SetArgs(our) //输入参数是对方 + return ret + +} // * battle_lv: atk(0), def(1), sp_atk(2), sp_def(3), spd(4), accuracy(5) // 是否需要真实提升