feat: 实现新特效20、21和26的核心逻辑

特效20: 在被指定技能命中前免疫伤害
特效21: 除指定技能外保留1点体力
特效26: 战斗属性增减逻辑
This commit is contained in:
xinian
2026-01-29 16:43:32 +08:00
parent 8116130cc8
commit fc420bfdb5
3 changed files with 62 additions and 2 deletions

View File

@@ -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{})
}

View File

@@ -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{})
}

View File

@@ -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{})