diff --git a/logic/service/fight/boss/NewSeIdx_20.go b/logic/service/fight/boss/NewSeIdx_20.go index 61c87caea..6a0131a90 100644 --- a/logic/service/fight/boss/NewSeIdx_20.go +++ b/logic/service/fight/boss/NewSeIdx_20.go @@ -1,15 +1,46 @@ package effect import ( + "blazing/logic/service/fight/info" "blazing/logic/service/fight/input" + + "github.com/alpacahq/alpacadecimal" + "github.com/samber/lo" ) // 20. 在被ID为xxx的技能命中前,任何技能都不能伤害自身;(a1-a8: 有效技能ID) // TODO: 实现在被ID为xxx的技能命中前,任何技能都不能伤害自身;(a1-a8: 有效技能ID)的核心逻辑 type NewSel20 struct { NewSel0 + can bool } +func (e *NewSel20) DamageLockEx(t *info.DamageZone) bool { + //魂印特性有不在场的情况,绑定时候将精灵和特性绑定 + if e.ID().GetCatchTime() != e.Ctx().Our.CurrentPet.Info.CatchTime { + return true + } + if e.Ctx().SkillEntity == nil { + return true + } + if t.Type != info.DamageType.Red { + return true + } + _, ok := lo.Find(e.SideEffectArgs, func(sid int) bool { + return sid == e.Ctx().SkillEntity.ID + }) + if ok { + e.can = true + } + + if e.can { + return true + } + + t.Damage = alpacadecimal.Zero + + return true +} func init() { input.InitEffect(input.EffectType.NewSel, 20, &NewSel20{}) } diff --git a/logic/service/fight/boss/NewSeIdx_21.go b/logic/service/fight/boss/NewSeIdx_21.go index 264179675..b9cf4312a 100644 --- a/logic/service/fight/boss/NewSeIdx_21.go +++ b/logic/service/fight/boss/NewSeIdx_21.go @@ -1,7 +1,11 @@ package effect import ( + "blazing/logic/service/fight/info" "blazing/logic/service/fight/input" + + "github.com/alpacahq/alpacadecimal" + "github.com/samber/lo" ) // 21. 除ID为xxx的技能外,任何能将自身体力降为 0 的技能都会使自身余下 1 体力;(a1-a8: 有效技能ID) @@ -10,6 +14,29 @@ type NewSel21 struct { NewSel0 } +func (e *NewSel21) DamageLockEx(t *info.DamageZone) bool { + //魂印特性有不在场的情况,绑定时候将精灵和特性绑定 + if e.ID().GetCatchTime() != e.Ctx().Our.CurrentPet.Info.CatchTime { + return true + } + if e.Ctx().SkillEntity == nil { + return true + } + if t.Type != info.DamageType.Red { + return true + } + _, ok := lo.Find(e.SideEffectArgs, func(sid int) bool { + return sid == e.Ctx().SkillEntity.ID + }) + if !ok { + t.Damage = alpacadecimal.Min(t.Damage, e.Ctx().Opp.CurrentPet.GetHP().Sub(alpacadecimal.NewFromInt(1))) + } + + + + return true +} + func init() { input.InitEffect(input.EffectType.NewSel, 21, &NewSel21{}) } diff --git a/logic/service/fight/boss/NewSeIdx_26.go b/logic/service/fight/boss/NewSeIdx_26.go index 8584a9270..549a0fc04 100644 --- a/logic/service/fight/boss/NewSeIdx_26.go +++ b/logic/service/fight/boss/NewSeIdx_26.go @@ -6,13 +6,15 @@ import ( ) // 26. 给一种 battle_attr 增加固定 n 点属性值;(a1: battle_attr, a2: n) -// TODO: 实现给一种 battle_attr 增加固定 n 点属性值;(a1: battle_attr, a2: n)的核心逻辑 type NewSel26 struct { NewSel0 } func (e *NewSel26) TurnStart(fattack *action.SelectSkillAction, sattack *action.SelectSkillAction) { - + e.Ctx().Our.CurrentPet.Info.Prop[int(e.Args()[0].IntPart())] += uint32(e.Args()[1].IntPart()) +} +func (e *NewSel26) TurnEnd() { + e.Ctx().Our.CurrentPet.Info.Prop[int(e.Args()[0].IntPart())] -= uint32(e.Args()[1].IntPart()) } func init() { input.InitEffect(input.EffectType.NewSel, 26, &NewSel26{})