feat: 实现新特效20、21和26的核心逻辑
特效20: 在被指定技能命中前免疫伤害 特效21: 除指定技能外保留1点体力 特效26: 战斗属性增减逻辑
This commit is contained in:
@@ -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{})
|
||||
}
|
||||
|
||||
@@ -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{})
|
||||
}
|
||||
|
||||
@@ -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{})
|
||||
|
||||
Reference in New Issue
Block a user