Files
bl/logic/service/fight/effect/1132_1136.go
xinian 9c6f3988de
All checks were successful
ci/woodpecker/push/my-first-workflow Pipeline was successful
refactor: 重构 CurrentPet 为 CurPet
2026-04-04 04:34:43 +08:00

167 lines
3.9 KiB
Go

package effect
import (
"blazing/logic/service/fight/action"
"blazing/logic/service/fight/info"
"blazing/logic/service/fight/input"
"blazing/logic/service/fight/node"
"github.com/alpacahq/alpacadecimal"
"github.com/gogf/gf/v2/util/grand"
)
// Effect 1132: 随机恢复自身{0}-{1}点体力,自身不处于能力提升状态时变为{2}-{3}点体力
type Effect1132 struct {
node.EffectNode
}
func (e *Effect1132) Skill_Use() bool {
if len(e.Args()) < 4 {
return true
}
minHeal := int(e.Args()[0].IntPart())
maxHeal := int(e.Args()[1].IntPart())
if !e.Ctx().Our.HasPropADD() {
minHeal = int(e.Args()[2].IntPart())
maxHeal = int(e.Args()[3].IntPart())
}
if maxHeal < minHeal {
maxHeal = minHeal
}
healValue := minHeal
if maxHeal > minHeal {
healValue += grand.Intn(maxHeal - minHeal + 1)
}
if healValue <= 0 {
return true
}
e.Ctx().Our.Heal(e.Ctx().Our, &action.SelectSkillAction{}, alpacadecimal.NewFromInt(int64(healValue)))
return true
}
// Effect 1133: 对手每有{0}项能力等级与自身相同则附加{1}点固定伤害
type Effect1133 struct {
node.EffectNode
}
func (e *Effect1133) OnSkill() bool {
if len(e.Args()) < 2 {
return true
}
step := int(e.Args()[0].IntPart())
if step <= 0 {
return true
}
sameCount := 0
for i, v := range e.Ctx().Our.Prop[:] {
if e.Ctx().Opp.Prop[i] == v {
sameCount++
}
}
times := sameCount / step
if times <= 0 {
return true
}
damage := e.Args()[1].Mul(alpacadecimal.NewFromInt(int64(times)))
if damage.Cmp(alpacadecimal.Zero) <= 0 {
return true
}
e.Ctx().Opp.Damage(e.Ctx().Our, &info.DamageZone{
Type: info.DamageType.Fixed,
Damage: damage,
})
return true
}
// Effect 1134: 将自身能力下降状态反馈给对手,反馈失败则令自身全属性+{0}
type Effect1134 struct {
node.EffectNode
}
func (e *Effect1134) OnSkill() bool {
reflected := false
for i, v := range e.Ctx().Our.Prop[:] {
if v >= 0 {
continue
}
if e.Ctx().Opp.SetProp(e.Ctx().Our, int8(i), v) {
reflected = true
}
}
if reflected || len(e.Args()) == 0 {
return true
}
boost := int8(e.Args()[0].IntPart())
for i := range e.Ctx().Our.Prop[:] {
e.Ctx().Our.SetProp(e.Ctx().Our, int8(i), boost)
}
return true
}
// Effect 1135: 若自身当前体力低于最大体力的1/{0}则恢复自身全部体力并造成等量固定伤害
type Effect1135 struct {
node.EffectNode
}
func (e *Effect1135) OnSkill() bool {
if len(e.Args()) == 0 || e.Args()[0].Cmp(alpacadecimal.Zero) <= 0 {
return true
}
threshold := e.Ctx().Our.CurPet[0].GetMaxHP().Div(e.Args()[0])
if e.Ctx().Our.CurPet[0].GetHP().Cmp(threshold) >= 0 {
return true
}
missing := e.Ctx().Our.CurPet[0].GetMaxHP().Sub(e.Ctx().Our.CurPet[0].GetHP())
if missing.Cmp(alpacadecimal.Zero) <= 0 {
return true
}
e.Ctx().Our.Heal(e.Ctx().Our, &action.SelectSkillAction{}, missing)
e.Ctx().Opp.Damage(e.Ctx().Our, &info.DamageZone{
Type: info.DamageType.Fixed,
Damage: missing,
})
return true
}
// Effect 1136: 自身体力高于1/{0}时附加自身当前体力1/{1}的百分比伤害
type Effect1136 struct {
node.EffectNode
}
func (e *Effect1136) Skill_Use() bool {
if len(e.Args()) < 2 || e.Args()[0].Cmp(alpacadecimal.Zero) <= 0 || e.Args()[1].Cmp(alpacadecimal.Zero) <= 0 {
return true
}
threshold := e.Ctx().Our.CurPet[0].GetMaxHP().Div(e.Args()[0])
if e.Ctx().Our.CurPet[0].GetHP().Cmp(threshold) <= 0 {
return true
}
damage := e.Ctx().Our.CurPet[0].GetHP().Div(e.Args()[1])
if damage.Cmp(alpacadecimal.Zero) <= 0 {
return true
}
e.Ctx().Opp.Damage(e.Ctx().Our, &info.DamageZone{
Type: info.DamageType.Percent,
Damage: damage,
})
return true
}
func init() {
input.InitEffect(input.EffectType.Skill, 1132, &Effect1132{})
input.InitEffect(input.EffectType.Skill, 1133, &Effect1133{})
input.InitEffect(input.EffectType.Skill, 1134, &Effect1134{})
input.InitEffect(input.EffectType.Skill, 1135, &Effect1135{})
input.InitEffect(input.EffectType.Skill, 1136, &Effect1136{})
}