Files
bl/logic/service/fight/effect/1127_1131.go
2026-04-01 00:48:42 +08:00

165 lines
3.8 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 1127: 吸取对手能力提升状态,若对手不处于能力提升状态则使对手全属性-{0}
type Effect1127 struct {
node.EffectNode
}
func (e *Effect1127) OnSkill() bool {
if len(e.Args()) == 0 {
return true
}
absorbed := false
for i, v := range e.Ctx().Opp.Prop[:] {
if v <= 0 {
continue
}
if e.Ctx().Opp.SetProp(e.Ctx().Our, int8(i), 0) {
e.Ctx().Our.SetProp(e.Ctx().Our, int8(i), v)
absorbed = true
}
}
if absorbed {
return true
}
applyAllPropDown(e.Ctx().Our, e.Ctx().Opp, int8(e.Args()[0].IntPart()))
return true
}
// Effect 1128: 击败对手则令对手下{0}次使用的攻击技能无效
type Effect1128 struct {
node.EffectNode
}
func (e *Effect1128) Skill_Use() bool {
if len(e.Args()) == 0 || e.Ctx().Opp.CurrentPet == nil || e.Ctx().Opp.CurrentPet.Info.Hp > 0 {
return true
}
sub := e.Ctx().Our.InitEffect(input.EffectType.Sub, 1128, int(e.Args()[0].IntPart()))
if sub != nil {
e.Ctx().Opp.AddEffect(e.Ctx().Our, sub)
}
return true
}
type Effect1128Sub struct {
node.EffectNode
remaining int
}
func (e *Effect1128Sub) SetArgs(t *input.Input, a ...int) {
e.EffectNode.SetArgs(t, a...)
e.Duration(-1)
if len(a) > 0 {
e.remaining = a[0]
}
}
func (e *Effect1128Sub) ActionStart(a, b *action.SelectSkillAction) bool {
if e.remaining <= 0 {
e.Alive(false)
return true
}
if e.Ctx().SkillEntity == nil || e.Ctx().SkillEntity.Category() == info.Category.STATUS {
return true
}
e.Ctx().SkillEntity.SetMiss()
e.remaining--
if e.remaining <= 0 {
e.Alive(false)
}
return true
}
// Effect 1129: {0}%概率伤害为{1}倍,自身处于能力提升状态时概率翻倍
type Effect1129 struct {
node.EffectNode
}
func (e *Effect1129) Damage_Mul(zone *info.DamageZone) bool {
if zone == nil || zone.Type != info.DamageType.Red || len(e.Args()) < 2 {
return true
}
chance := int(e.Args()[0].IntPart())
if e.Ctx().Our.HasPropADD() {
chance *= 2
}
if ok, _, _ := e.Input.Player.Roll(chance, 100); ok {
zone.Damage = zone.Damage.Mul(e.Args()[1])
}
return true
}
// Effect 1130: 使对手全属性-{0},自身体力低于对手时弱化效果翻倍
type Effect1130 struct {
node.EffectNode
}
func (e *Effect1130) Skill_Use() bool {
if len(e.Args()) == 0 {
return true
}
level := int8(e.Args()[0].IntPart())
if e.Ctx().Our.CurrentPet.GetHP().Cmp(e.Ctx().Opp.CurrentPet.GetHP()) < 0 {
level *= 2
}
applyAllPropDown(e.Ctx().Our, e.Ctx().Opp, level)
return true
}
// Effect 1131: 随机附加{0}-{1}点固定伤害,自身处于能力提升状态时变为{2}-{3}点固定伤害
type Effect1131 struct {
node.EffectNode
}
func (e *Effect1131) Skill_Use() bool {
if len(e.Args()) < 4 {
return true
}
minDamage := int(e.Args()[0].IntPart())
maxDamage := int(e.Args()[1].IntPart())
if e.Ctx().Our.HasPropADD() {
minDamage = int(e.Args()[2].IntPart())
maxDamage = int(e.Args()[3].IntPart())
}
if maxDamage < minDamage {
maxDamage = minDamage
}
damage := minDamage
if maxDamage > minDamage {
damage += grand.Intn(maxDamage - minDamage + 1)
}
e.Ctx().Opp.Damage(e.Ctx().Our, &info.DamageZone{
Type: info.DamageType.Fixed,
Damage: alpacadecimal.NewFromInt(int64(damage)),
})
return true
}
func init() {
input.InitEffect(input.EffectType.Skill, 1127, &Effect1127{})
input.InitEffect(input.EffectType.Skill, 1128, &Effect1128{})
input.InitEffect(input.EffectType.Sub, 1128, &Effect1128Sub{})
input.InitEffect(input.EffectType.Skill, 1129, &Effect1129{})
input.InitEffect(input.EffectType.Skill, 1130, &Effect1130{})
input.InitEffect(input.EffectType.Skill, 1131, &Effect1131{})
}