diff --git a/logic/service/fight/effect/165.go b/logic/service/fight/effect/165.go new file mode 100644 index 00000000..7e572859 --- /dev/null +++ b/logic/service/fight/effect/165.go @@ -0,0 +1,26 @@ +package effect + +import ( + "blazing/logic/service/fight/input" + "blazing/logic/service/fight/node" +) + +// 165 - n回合内,每回合防御和特防等级+m +type Effect165 struct { + node.EffectNode +} + +func (e *Effect165) Skill_Use() bool { + e.Ctx().Our.SetProp(e.Ctx().Our, 1, int8(e.SideEffectArgs[1])) + e.Ctx().Our.SetProp(e.Ctx().Our, 3, int8(e.SideEffectArgs[1])) + return true +} +func init() { + input.InitEffect(input.EffectType.Skill, 165, &Effect165{}) + +} + +func (e *Effect165) SetArgs(t *input.Input, a ...int) { + e.EffectNode.SetArgs(t, a...) + e.EffectNode.Duration(a[0]) // 持续m回合 +} diff --git a/logic/service/fight/effect/184.go b/logic/service/fight/effect/184.go new file mode 100644 index 00000000..ca4886fd --- /dev/null +++ b/logic/service/fight/effect/184.go @@ -0,0 +1,34 @@ +package effect + +import ( + "blazing/logic/service/fight/input" + "blazing/logic/service/fight/node" +) + +// 184 - 若对手处于能力提升状态,则m%自身XX等级k +type Effect184 struct { + node.EffectNode +} + +func (e *Effect184) OnSkill() bool { + if e.Ctx().Opp.HasPropADD() { // 对手处于能力提升状态 + chance := e.Args()[0].IntPart() + success, _, _ := e.Input.Player.Roll(int(chance), 100) + if success { + effectType := int(e.Args()[1].IntPart()) // XX类型 + effectValue := int(e.Args()[2].IntPart()) // 等级k + + statusEffect := e.Ctx().Our.InitEffect(input.EffectType.Status, effectType) + if statusEffect != nil { + statusEffect.SetArgs(e.Ctx().Our, effectValue) + e.Ctx().Our.AddEffect(e.Ctx().Our, statusEffect) + } + } + } + + return true +} +func init() { + input.InitEffect(input.EffectType.Skill, 184, &Effect184{}) + +} diff --git a/logic/service/fight/effect/430.go b/logic/service/fight/effect/430.go new file mode 100644 index 00000000..eeb8cc6c --- /dev/null +++ b/logic/service/fight/effect/430.go @@ -0,0 +1,41 @@ +package effect + +import ( + "blazing/logic/service/fight/input" + "blazing/logic/service/fight/node" +) + +// 430 - 消除对手能力强化状态,若消除状态成功,则自身XX等级m +type Effect430 struct { + node.EffectNode +} + +func (e *Effect430) Skill_Use() bool { + var isadd bool + // 检查对手是否有能力强化状态 + for i, v := range e.Ctx().Opp.Prop[:] { + if v > 0 { + + if e.Ctx().Opp.SetProp(e.Ctx().Our, int8(i), 0) { + isadd = true + } + return true + } + + } + if !isadd { + return true + } + + // 如果成功消除了状态,提升自身能力等级 + effectType := int8(e.Args()[0].IntPart()) // XX类型 + effectValue := int8(e.Args()[1].IntPart()) // 等级m + + e.Ctx().Our.SetProp(e.Ctx().Our, effectType, effectValue) + return true +} + +func init() { + input.InitEffect(input.EffectType.Skill, 184, &Effect184{}) + +} diff --git a/logic/service/fight/effect/434.go b/logic/service/fight/effect/434.go index d26e362a..030ef37f 100644 --- a/logic/service/fight/effect/434.go +++ b/logic/service/fight/effect/434.go @@ -11,7 +11,7 @@ type Effect434 struct { } func (e *Effect434) OnSkill() bool { - if e.Ctx().Our.CurrentPet.HasPositiveBuff() { // 自身处于能力强化状态 + if e.Ctx().Our.HasPropADD() { // 自身处于能力强化状态 chance := e.Args()[0].IntPart() success, _, _ := e.Input.Player.Roll(int(chance), 100) if success { diff --git a/logic/service/fight/effect/453.go b/logic/service/fight/effect/453.go new file mode 100644 index 00000000..b07439ef --- /dev/null +++ b/logic/service/fight/effect/453.go @@ -0,0 +1,39 @@ +package effect + +import ( + "blazing/logic/service/fight/input" + "blazing/logic/service/fight/node" +) + +// 453 - 消除对手能力强化状态,若消除成功,则对手XX +type Effect453 struct { + node.EffectNode +} + +func (e *Effect453) Skill_Use() bool { + // 检查对手是否有能力强化状态 + ispwoer := false + for i, v := range e.Ctx().Opp.Prop[:] { + if v > 0 { + e.Ctx().Our.SetProp(e.Ctx().Opp, int8(i), 0) + ispwoer = true + return true + } + + } + if ispwoer { + // 如果成功消除了状态,对对手施加异常状态 + effectType := int(e.Args()[0].IntPart()) // XX类型,比如麻痹 + + statusEffect := e.Ctx().Our.InitEffect(input.EffectType.Status, effectType) + if statusEffect != nil { + e.Ctx().Opp.AddEffect(e.Ctx().Our, statusEffect) + } + } + + return true +} +func init() { + input.InitEffect(input.EffectType.Skill, 453, &Effect453{}) + +} diff --git a/logic/service/fight/effect/468.go b/logic/service/fight/effect/468.go new file mode 100644 index 00000000..058dd0c4 --- /dev/null +++ b/logic/service/fight/effect/468.go @@ -0,0 +1,38 @@ +package effect + +import ( + "blazing/logic/service/fight/input" + "blazing/logic/service/fight/node" +) + +// 468 - 回合开始时,若自身处于能力下降状态,则威力翻倍,同时解除能力下降状态 +type Effect468 struct { + node.EffectNode +} + +func (e *Effect468) SkillHit() bool { + if e.Ctx().SkillEntity == nil { + return true + } + ispwoer := false + for i, v := range e.Ctx().Our.Prop[:] { + if v < 0 { + e.Ctx().Our.SetProp(e.Ctx().Our, int8(i), 0) + ispwoer = true + return true + } + + } + + if ispwoer { + // 威力翻倍 + e.Ctx().SkillEntity.Power *= 2 + + } + + return true +} +func init() { + input.InitEffect(input.EffectType.Skill, 468, &Effect468{}) + +} diff --git a/logic/service/fight/effect/471.go b/logic/service/fight/effect/471.go new file mode 100644 index 00000000..a0a913e9 --- /dev/null +++ b/logic/service/fight/effect/471.go @@ -0,0 +1,75 @@ +package effect + +import ( + "blazing/logic/service/fight/input" + "blazing/logic/service/fight/node" +) + +// 471 - 先出手时n回合内免疫异常状态 +type Effect471 struct { + node.EffectNode + can bool +} + +func (e *Effect471) SetArgs(t *input.Input, a ...int) { + e.EffectNode.SetArgs(t, a...) + e.EffectNode.Duration(a[0]) // 持续m回合 +} + +func init() { + input.InitEffect(input.EffectType.Skill, 471, &Effect471{}) + +} + +func (e *Effect471) EFFect_Befer(in *input.Input, effEffect input.Effect) bool { + + if !e.can { + return true + } + + if in != e.Ctx().Opp { + return true + } + if input.IS_Stat(effEffect) { + return false + } + + return true +} +func (e *Effect471) OnSkill() bool { + if e.Input.FightC.IsFirst(e.Input.Player) { // 先出手 + e.can = true + } + + return true +} + +func init() { + input.InitEffect(input.EffectType.Skill, 191, &Effect191{}) + +} + +// 191 - n回合内免疫并反弹所有受到的异常状态 +type Effect191 struct { + node.EffectNode +} + +func (e *Effect191) SetArgs(t *input.Input, a ...int) { + e.EffectNode.SetArgs(t, a...) + e.EffectNode.Duration(a[0]) // 持续m回合 +} +func (e *Effect191) EFFect_Befer(in *input.Input, effEffect input.Effect) bool { + + if in != e.Ctx().Opp { + return true + } + if input.IS_Stat(effEffect) { + statusEffect1 := e.Ctx().Our.InitEffect(input.EffectType.Status, int(effEffect.ID().Suffix())) + if statusEffect1 != nil { + e.Ctx().Opp.AddEffect(e.Ctx().Our, statusEffect1) + } + return false + } + + return true +} diff --git a/logic/service/fight/effect/521.go b/logic/service/fight/effect/521.go new file mode 100644 index 00000000..17f97eac --- /dev/null +++ b/logic/service/fight/effect/521.go @@ -0,0 +1,29 @@ +package effect + +import ( + "blazing/logic/service/fight/input" + "blazing/logic/service/fight/node" +) + +// 521 - 反转自身能力下降状态 +type Effect521 struct { + node.EffectNode +} + +func (e *Effect521) OnSkill() bool { + + for i, v := range e.Ctx().Our.Prop[:] { + if v < 0 { + e.Ctx().Our.SetProp(e.Ctx().Our, int8(i), -2*v) + + return true + } + + } + + return true +} +func init() { + input.InitEffect(input.EffectType.Skill, 521, &Effect521{}) + +} diff --git a/logic/service/fight/effect/back.go b/logic/service/fight/effect/back.go index d09fa7cf..a1d3cded 100644 --- a/logic/service/fight/effect/back.go +++ b/logic/service/fight/effect/back.go @@ -9,33 +9,6 @@ import ( "github.com/alpacahq/alpacadecimal" ) -// 165 - n回合内,每回合防御和特防等级+m -type Effect165 struct { - node.EffectNode -} - -func (e *Effect165) OnSkill() bool { - // 增加防御和特防等级 - defBoostEffect := e.Ctx().Our.InitEffect(input.EffectType.Status, int(info.PetStatus.DefUp)) - if defBoostEffect != nil { - defBoostEffect.SetArgs(e.Ctx().Our, int(e.Args()[1].IntPart())) - e.Ctx().Our.AddEffect(e.Ctx().Our, defBoostEffect) - } - - spDefBoostEffect := e.Ctx().Our.InitEffect(input.EffectType.Status, int(info.PetStatus.SpDefUp)) - if spDefBoostEffect != nil { - spDefBoostEffect.SetArgs(e.Ctx().Our, int(e.Args()[1].IntPart())) - e.Ctx().Our.AddEffect(e.Ctx().Our, spDefBoostEffect) - } - - return true -} - -func (e *Effect165) SetArgs(t *input.Input, a ...int) { - e.EffectNode.SetArgs(t, a...) - e.EffectNode.Duration(a[0]) // 持续n回合 -} - // 483 - -1 -1 -1 -1 -1 -1,后出手时弱化效果翻倍 type Effect483 struct { node.EffectNode @@ -172,30 +145,6 @@ func (e *Effect462) SetArgs(t *input.Input, a ...int) { e.EffectNode.Duration(a[0]) // 持续n回合 } -// 184 - 若对手处于能力提升状态,则m%自身XX等级k -type Effect184 struct { - node.EffectNode -} - -func (e *Effect184) OnSkill() bool { - if e.Ctx().Opp.CurrentPet.HasPositiveBuff() { // 对手处于能力提升状态 - chance := e.Args()[0].IntPart() - success, _, _ := e.Input.Player.Roll(int(chance), 100) - if success { - effectType := int(e.Args()[1].IntPart()) // XX类型 - effectValue := int(e.Args()[2].IntPart()) // 等级k - - statusEffect := e.Ctx().Our.InitEffect(input.EffectType.Status, effectType) - if statusEffect != nil { - statusEffect.SetArgs(e.Ctx().Our, effectValue) - e.Ctx().Our.AddEffect(e.Ctx().Our, statusEffect) - } - } - } - - return true -} - // 1044 - 吸取对手能力提升状态,吸取成功则下n回合造成的伤害翻倍 type Effect1044 struct { node.EffectNode @@ -359,33 +308,6 @@ func (e *Effect496) SkillHit_ex() bool { return true } -// 430 - 消除对手能力强化状态,若消除状态成功,则自身XX等级m -type Effect430 struct { - node.EffectNode -} - -func (e *Effect430) OnSkill() bool { - // 检查对手是否有能力强化状态 - if e.Ctx().Opp.CurrentPet.HasPositiveBuff() { - // 消除对手的能力强化状态 - removedCount := e.Ctx().Opp.RemoveAllPositiveBuffs() - - if removedCount > 0 { - // 如果成功消除了状态,提升自身能力等级 - effectType := int(e.Args()[0].IntPart()) // XX类型 - effectValue := int(e.Args()[1].IntPart()) // 等级m - - statusEffect := e.Ctx().Our.InitEffect(input.EffectType.Status, effectType) - if statusEffect != nil { - statusEffect.SetArgs(e.Ctx().Our, effectValue) - e.Ctx().Our.AddEffect(e.Ctx().Our, statusEffect) - } - } - } - - return true -} - // 501 - 若造成的伤害不足m,则对手XX等级-n type Effect501 struct { node.EffectNode @@ -497,25 +419,6 @@ func (e *Effect457) Skill_Use_ex() bool { return true } -// 468 - 回合开始时,若自身处于能力下降状态,则威力翻倍,同时解除能力下降状态 -type Effect468 struct { - node.EffectNode -} - -func (e *Effect468) Action_start() bool { - if e.Ctx().Our.CurrentPet.HasNegativeBuff() { - // 威力翻倍 - if e.Ctx().SkillEntity != nil { - e.Ctx().SkillEntity.Power *= 2 - } - - // 解除能力下降状态 - e.Ctx().Our.RemoveNegativeBuffs() - } - - return true -} - // 492 - 2回合内若对手使用属性技能,自身立刻恢复1/m体力且防御+x特防+y type Effect492 struct { node.EffectNode @@ -636,23 +539,6 @@ func (e *Effect486) OnSkill() bool { return true } -// 471 - 先出手时n回合内免疫异常状态 -type Effect471 struct { - node.EffectNode -} - -func (e *Effect471) OnSkill() bool { - if e.Ctx().Our.Speed > e.Ctx().Opp.Speed { // 先出手 - immunityEffect := e.Ctx().Our.InitEffect(input.EffectType.Status, int(info.PetStatus.ImmuneStatus)) - if immunityEffect != nil { - immunityEffect.Duration(int(e.Args()[0].IntPart())) // n回合 - e.Ctx().Our.AddEffect(e.Ctx().Our, immunityEffect) - } - } - - return true -} - // 197 - n回合内若被对方击败,则对手所有能力加强状态消失 type Effect197 struct { node.EffectNode @@ -672,31 +558,6 @@ func (e *Effect197) SetArgs(t *input.Input, a ...int) { e.EffectNode.Duration(a[0]) // 持续n回合 } -// 453 - 消除对手能力强化状态,若消除成功,则对手XX -type Effect453 struct { - node.EffectNode -} - -func (e *Effect453) OnSkill() bool { - // 检查对手是否有能力强化状态 - if e.Ctx().Opp.CurrentPet.HasPositiveBuff() { - // 消除对手的能力强化状态 - removedCount := e.Ctx().Opp.RemoveAllPositiveBuffs() - - if removedCount > 0 { - // 如果成功消除了状态,对对手施加异常状态 - effectType := int(e.Args()[0].IntPart()) // XX类型,比如麻痹 - - statusEffect := e.Ctx().Our.InitEffect(input.EffectType.Status, effectType) - if statusEffect != nil { - e.Ctx().Opp.AddEffect(e.Ctx().Our, statusEffect) - } - } - } - - return true -} - // 505 - 若打出致命一击,则造成伤害值的m%恢复自身体力 type Effect505 struct { node.EffectNode @@ -776,18 +637,6 @@ func (e *Effect425) OnSkill() bool { return true } -// 521 - 反转自身能力下降状态 -type Effect521 struct { - node.EffectNode -} - -func (e *Effect521) OnSkill() bool { - // 反转自身的能力下降状态,即将下降变为提升 - e.Ctx().Our.ReverseNegativeBuffs() - - return true -} - // 412 - 若自身体力小于1/n,则每次攻击不消耗PP值 type Effect412 struct { node.EffectNode @@ -806,29 +655,6 @@ func (e *Effect412) SkillHit() bool { return true } -// 191 - n回合内免疫并反弹所有受到的异常状态 -type Effect191 struct { - node.EffectNode -} - -func (e *Effect191) OnSkill() bool { - // 设置免疫异常状态效果 - immunityEffect := e.Ctx().Our.InitEffect(input.EffectType.Status, int(info.PetStatus.ImmuneStatus)) - if immunityEffect != nil { - immunityEffect.Duration(int(e.Args()[0].IntPart())) // n回合 - e.Ctx().Our.AddEffect(e.Ctx().Our, immunityEffect) - } - - // 设置反弹异常状态效果 - reflectEffect := e.Ctx().Our.InitEffect(input.EffectType.Status, int(info.PetStatus.ReflectStatus)) - if reflectEffect != nil { - reflectEffect.Duration(int(e.Args()[0].IntPart())) // n回合 - e.Ctx().Our.AddEffect(e.Ctx().Our, reflectEffect) - } - - return true -} - // 199 - 下次被击败后,下一个出场的精灵xx等级+k type Effect199 struct { node.EffectNode