diff --git a/logic/service/fight/boss/NewSeIdx_28.go b/logic/service/fight/boss/NewSeIdx_28.go index 9c2608447..8398aa23b 100644 --- a/logic/service/fight/boss/NewSeIdx_28.go +++ b/logic/service/fight/boss/NewSeIdx_28.go @@ -24,7 +24,7 @@ func (e *NewSel28) Damage_ADD(t *info.DamageZone) bool { if e.Ctx().SkillEntity.Type != int(e.Args()[0]) { return true } - t.Damage = t.Damage.Add(t.Damage.Mul(decimal.NewFromInt(int64(e.Args()[1])))) + t.Damage = t.Damage.Add(t.Damage.Mul(decimal.NewFromInt(int64(e.Args()[1])).Div(decimal.NewFromInt(100)))) return true } func init() { diff --git a/logic/service/fight/boss/NewSeIdx_33.go b/logic/service/fight/boss/NewSeIdx_33.go index 1f3b0edc0..355470915 100644 --- a/logic/service/fight/boss/NewSeIdx_33.go +++ b/logic/service/fight/boss/NewSeIdx_33.go @@ -2,6 +2,8 @@ package effect import ( "blazing/logic/service/fight/input" + + "github.com/shopspring/decimal" ) // 33. 精灵体力降低到 1/n 时有 m% 几率体力回满;(a1: n, a2: m 百分比) @@ -15,17 +17,16 @@ func (e *NewSel33) Action_end_ex() bool { return true } // 3. 概率判定(Args()[1]为触发概率) - success, _, _ := e.Input.Player.Roll(e.Args()[0], 100) - if !success { - return true - } - - if e.Ctx().Our.CurrentPet.Info.Hp == 0 { + cmp := e.Ctx().Our.CurrentPet.GetMaxHP().Div(decimal.NewFromInt(int64(e.Args()[0]))) + if e.Ctx().Our.CurrentPet.GetHP().Cmp(cmp) == -1 { + success, _, _ := e.Input.Player.Roll(e.Args()[1], 100) + if !success { + return true + } e.Ctx().Our.Heal(e.Ctx().Our, nil, e.Ctx().Our.GetPetInfo().GetMaxHP()) } - return true } func init() { diff --git a/logic/service/fight/effect/effect_73.go b/logic/service/fight/effect/effect_73.go index 2c4079b72..50e9e1f05 100644 --- a/logic/service/fight/effect/effect_73.go +++ b/logic/service/fight/effect/effect_73.go @@ -32,7 +32,7 @@ func (e *Effect73) SetArgs(t *input.Input, a ...int) { e.EffectNode.Duration(e.EffectNode.SideEffectArgs[0] - 1) } -func (e *Effect73) Skill_Use_ex() bool { +func (e *Effect73) Action_end_ex() bool { if !e.Hit() { return true @@ -40,11 +40,15 @@ func (e *Effect73) Skill_Use_ex() bool { if !e.Input.FightC.IsFirst(e.Ctx().Our.Player) { return true } - - e.Ctx().Opp.Damage(e.Ctx().Our, &info.DamageZone{ + tt := &info.DamageZone{ Type: info.DamageType.Fixed, Damage: e.Ctx().Opp.SumDamage.Mul(decimal.NewFromInt(2)), - }) + } + maxhp := e.Ctx().Our.CurrentPet.GetMaxHP().Mul(decimal.NewFromInt(30)) + if tt.Damage.Cmp(maxhp) == 1 { + tt.Damage = maxhp + } + e.Ctx().Opp.Damage(e.Ctx().Our, tt) return true }