From 322d5ea64d325fc7c6f6af428be4171b7da4e57b Mon Sep 17 00:00:00 2001 From: xinian Date: Tue, 17 Mar 2026 15:25:08 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E6=88=98=E6=96=97?= =?UTF-8?q?=E6=8A=80=E8=83=BD=E6=95=88=E6=9E=9C=20524-580?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- logic/service/fight/effect/524.go | 36 +++++++++++++++++++++++++++++ logic/service/fight/effect/533.go | 27 ++++++++++++++++++++++ logic/service/fight/effect/539.go | 36 +++++++++++++++++++++++++++++ logic/service/fight/effect/546.go | 28 +++++++++++++++++++++++ logic/service/fight/effect/552.go | 30 ++++++++++++++++++++++++ logic/service/fight/effect/567.go | 26 +++++++++++++++++++++ logic/service/fight/effect/570.go | 35 ++++++++++++++++++++++++++++ logic/service/fight/effect/572.go | 32 ++++++++++++++++++++++++++ logic/service/fight/effect/575.go | 24 +++++++++++++++++++ logic/service/fight/effect/580.go | 38 +++++++++++++++++++++++++++++++ 10 files changed, 312 insertions(+) create mode 100644 logic/service/fight/effect/524.go create mode 100644 logic/service/fight/effect/533.go create mode 100644 logic/service/fight/effect/539.go create mode 100644 logic/service/fight/effect/546.go create mode 100644 logic/service/fight/effect/552.go create mode 100644 logic/service/fight/effect/567.go create mode 100644 logic/service/fight/effect/570.go create mode 100644 logic/service/fight/effect/572.go create mode 100644 logic/service/fight/effect/575.go create mode 100644 logic/service/fight/effect/580.go diff --git a/logic/service/fight/effect/524.go b/logic/service/fight/effect/524.go new file mode 100644 index 000000000..630563622 --- /dev/null +++ b/logic/service/fight/effect/524.go @@ -0,0 +1,36 @@ +package effect + +import ( + "blazing/logic/service/fight/info" + "blazing/logic/service/fight/input" + "blazing/logic/service/fight/node" +) + +// 524 - {0}回合内若被对手击败则对手疲惫{1}回合 +type Effect524 struct { + node.EffectNode +} + +func (e *Effect524) SetArgs(t *input.Input, a ...int) { + e.EffectNode.SetArgs(t, a...) + e.EffectNode.Duration(a[0]) // 持续n回合 +} + +func (e *Effect524) SwitchOut(in *input.Input) bool { + if e.Input == in { + if !e.Ctx().Our.CurrentPet.Alive() { // 被击败 + // 给对手添加疲惫状态 + tiredEffect := e.Ctx().Our.InitEffect(input.EffectType.Status, int(info.PetStatus.Tired)) + if tiredEffect != nil { + tiredEffect.Duration(int(e.Args()[1].IntPart())) + e.Ctx().Opp.AddEffect(e.Ctx().Our, tiredEffect) + } + } + e.Alive(false) + } + return true +} + +func init() { + input.InitEffect(input.EffectType.Skill, 524, &Effect524{}) +} \ No newline at end of file diff --git a/logic/service/fight/effect/533.go b/logic/service/fight/effect/533.go new file mode 100644 index 000000000..278903338 --- /dev/null +++ b/logic/service/fight/effect/533.go @@ -0,0 +1,27 @@ +package effect + +import ( + "blazing/logic/service/fight/input" + "blazing/logic/service/fight/node" +) + +// 533 - 消除双方能力提升、下降状态 +type Effect533 struct { + node.EffectNode +} + +func (e *Effect533) OnSkill() bool { + // 消除自己 + for i := 0; i < len(e.Ctx().Our.Prop); i++ { + e.Ctx().Our.SetProp(e.Ctx().Our, int8(i), 0) + } + // 消除对手 + for i := 0; i < len(e.Ctx().Opp.Prop); i++ { + e.Ctx().Opp.SetProp(e.Ctx().Our, int8(i), 0) + } + return true +} + +func init() { + input.InitEffect(input.EffectType.Skill, 533, &Effect533{}) +} \ No newline at end of file diff --git a/logic/service/fight/effect/539.go b/logic/service/fight/effect/539.go new file mode 100644 index 000000000..622b29243 --- /dev/null +++ b/logic/service/fight/effect/539.go @@ -0,0 +1,36 @@ +package effect + +import ( + "blazing/logic/service/fight/action" + "blazing/logic/service/fight/input" + "blazing/logic/service/fight/node" +) + +// 539 - 对手处于能力提升状态时先制额外+1且威力翻倍 +type Effect539 struct { + node.EffectNode +} + +func (e *Effect539) ComparePre(fattack *action.SelectSkillAction, sattack *action.SelectSkillAction) bool { + if e.Ctx().Opp.HasPropADD() { + // 增加自身技能优先级 + if sattack != nil && sattack.PlayerID == e.Ctx().Our.UserID && sattack.SkillEntity != nil { + sattack.SkillEntity.XML.Priority += 1 + } + } + return true +} + +func (e *Effect539) SkillHit() bool { + if e.Ctx().SkillEntity == nil { + return true + } + if e.Ctx().Opp.HasPropADD() { + e.Ctx().SkillEntity.XML.Power *= 2 + } + return true +} + +func init() { + input.InitEffect(input.EffectType.Skill, 539, &Effect539{}) +} \ No newline at end of file diff --git a/logic/service/fight/effect/546.go b/logic/service/fight/effect/546.go new file mode 100644 index 000000000..59c0136e9 --- /dev/null +++ b/logic/service/fight/effect/546.go @@ -0,0 +1,28 @@ +package effect + +import ( + "blazing/logic/service/fight/info" + "blazing/logic/service/fight/input" + "blazing/logic/service/fight/node" +) + +// 546 - 若对手处于{0}状态则对手{1} +type Effect546 struct { + node.EffectNode +} + +func (e *Effect546) OnSkill() bool { + triggerStatus := info.EnumPetStatus(e.Args()[0].IntPart()) + if e.Ctx().Opp.StatEffect_Exist(triggerStatus) { + targetStatus := int(e.Args()[1].IntPart()) + statusEffect := e.Ctx().Our.InitEffect(input.EffectType.Status, targetStatus) + if statusEffect != nil { + e.Ctx().Opp.AddEffect(e.Ctx().Our, statusEffect) + } + } + return true +} + +func init() { + input.InitEffect(input.EffectType.Skill, 546, &Effect546{}) +} \ No newline at end of file diff --git a/logic/service/fight/effect/552.go b/logic/service/fight/effect/552.go new file mode 100644 index 000000000..523d10452 --- /dev/null +++ b/logic/service/fight/effect/552.go @@ -0,0 +1,30 @@ +package effect + +import ( + "blazing/logic/service/fight/info" + "blazing/logic/service/fight/input" + "blazing/logic/service/fight/node" + + "github.com/alpacahq/alpacadecimal" +) + +// 552 - 若对手处于异常状态,则{0}%概率附加{1}点伤害 +type Effect552 struct { + node.EffectNode +} + +func (e *Effect552) DamageModify(t *info.DamageZone) bool { + if t.Type == info.DamageType.Red && e.Ctx().Opp.StatEffect_Exist_all() { + chance := e.Args()[0].IntPart() + success, _, _ := e.Input.Player.Roll(int(chance), 100) + if success { + extra := alpacadecimal.NewFromInt(e.Args()[1].IntPart()) + t.Damage = t.Damage.Add(extra) + } + } + return true +} + +func init() { + input.InitEffect(input.EffectType.Skill, 552, &Effect552{}) +} diff --git a/logic/service/fight/effect/567.go b/logic/service/fight/effect/567.go new file mode 100644 index 000000000..28670bbcc --- /dev/null +++ b/logic/service/fight/effect/567.go @@ -0,0 +1,26 @@ +package effect + +import ( + "blazing/logic/service/fight/input" + "blazing/logic/service/fight/node" +) + +// 567 - 对手为自身天敌时造成的伤害翻倍 +type Effect567 struct { + node.EffectNode +} + +func (e *Effect567) SkillHit() bool { + if e.Ctx().SkillEntity == nil { + return true + } + // 判断对手是否为自身天敌(即对手属性克制自己) + if e.ISNaturalEnemy() { + e.Ctx().SkillEntity.XML.Power *= 2 + } + return true +} + +func init() { + input.InitEffect(input.EffectType.Skill, 567, &Effect567{}) +} \ No newline at end of file diff --git a/logic/service/fight/effect/570.go b/logic/service/fight/effect/570.go new file mode 100644 index 000000000..ff1c7837c --- /dev/null +++ b/logic/service/fight/effect/570.go @@ -0,0 +1,35 @@ +package effect + +import ( + "blazing/logic/service/fight/info" + "blazing/logic/service/fight/input" + "blazing/logic/service/fight/node" + + "github.com/alpacahq/alpacadecimal" +) + +// 570 - 免疫下{0}次受到的攻击 +type Effect570 struct { + node.EffectNode + remaining int +} + +func (e *Effect570) SetArgs(t *input.Input, a ...int) { + e.EffectNode.Duration(-1) + // 持续次数,不是回合,用Duration可能不合适,但可以用次数。我们通过子效果计数 +} + +func (e *Effect570) DamageLockEx(t *info.DamageZone) bool { + if e.remaining > 0 && t.Type == info.DamageType.Red { + t.Damage = alpacadecimal.Zero + e.remaining-- + if e.remaining <= 0 { + e.Alive(false) // 效果结束 + } + } + return true +} + +func init() { + input.InitEffect(input.EffectType.Skill, 570, &Effect570{}) +} diff --git a/logic/service/fight/effect/572.go b/logic/service/fight/effect/572.go new file mode 100644 index 000000000..486df86e2 --- /dev/null +++ b/logic/service/fight/effect/572.go @@ -0,0 +1,32 @@ +package effect + +import ( + "blazing/logic/service/fight/info" + "blazing/logic/service/fight/input" + "blazing/logic/service/fight/node" +) + +// 572 - 攻击对手时若对手处于{0}状态,则{1}%使对手{2} +type Effect572 struct { + node.EffectNode +} + +func (e *Effect572) OnSkill() bool { + triggerStatus := info.EnumPetStatus(e.Args()[0].IntPart()) + if e.Ctx().Opp.StatEffect_Exist(triggerStatus) { + chance := e.Args()[1].IntPart() + success, _, _ := e.Input.Player.Roll(int(chance), 100) + if success { + targetStatus := int(e.Args()[2].IntPart()) + statusEffect := e.Ctx().Our.InitEffect(input.EffectType.Status, targetStatus) + if statusEffect != nil { + e.Ctx().Opp.AddEffect(e.Ctx().Our, statusEffect) + } + } + } + return true +} + +func init() { + input.InitEffect(input.EffectType.Skill, 572, &Effect572{}) +} \ No newline at end of file diff --git a/logic/service/fight/effect/575.go b/logic/service/fight/effect/575.go new file mode 100644 index 000000000..707ab0e3a --- /dev/null +++ b/logic/service/fight/effect/575.go @@ -0,0 +1,24 @@ +package effect + +import ( + "blazing/logic/service/fight/action" + "blazing/logic/service/fight/input" + "blazing/logic/service/fight/node" +) + +// 575 - 对手处于任意异常状态时造成的伤害将全额恢复体力 +type Effect575 struct { + node.EffectNode +} + +func (e *Effect575) Skill_Use_ex() bool { + if e.Ctx().Opp.StatEffect_Exist_all() { + damage := e.Ctx().Our.SumDamage + e.Ctx().Our.Heal(e.Ctx().Our, &action.SelectSkillAction{}, damage) + } + return true +} + +func init() { + input.InitEffect(input.EffectType.Skill, 575, &Effect575{}) +} diff --git a/logic/service/fight/effect/580.go b/logic/service/fight/effect/580.go new file mode 100644 index 000000000..ac204cc4e --- /dev/null +++ b/logic/service/fight/effect/580.go @@ -0,0 +1,38 @@ +package effect + +import ( + "blazing/logic/service/fight/info" + "blazing/logic/service/fight/input" + "blazing/logic/service/fight/node" + + "github.com/alpacahq/alpacadecimal" +) + +// 580 - {0}回合内自身受到直接攻击伤害的{1}%反馈给对手 +type Effect580 struct { + node.EffectNode +} + +func (e *Effect580) SetArgs(t *input.Input, a ...int) { + e.EffectNode.SetArgs(t, a...) + e.EffectNode.Duration(a[0]) // 持续n回合 +} + +func (e *Effect580) Skill_Use_ex() bool { + // 自己受到直接攻击伤害时触发 + + damage := e.Ctx().Opp.SumDamage + reflectDamage := damage.Mul(e.Args()[1]).Div(alpacadecimal.NewFromInt(100)) + // 对对手造成固定伤害 + damageZone := &info.DamageZone{ + Type: info.DamageType.Fixed, + Damage: reflectDamage, + } + e.Ctx().Opp.Damage(e.Ctx().Our, damageZone) + + return true +} + +func init() { + input.InitEffect(input.EffectType.Skill, 580, &Effect580{}) +}