Files
bl/logic/service/fight/effect/1288_1312.go
xinian 78a68148ce
Some checks failed
ci/woodpecker/push/my-first-workflow Pipeline failed
chore: update fight logic and effect implementations
2026-04-05 02:25:44 +08:00

707 lines
21 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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"
)
var effect1296Statuses = []int{
21, // 自然庇护状态未暴露在 PetStatus 枚举里,当前按状态 ID 处理
}
var effect1291Statuses = []int{
int(info.PetStatus.Burned),
int(info.PetStatus.Frozen),
int(info.PetStatus.Poisoned),
int(info.PetStatus.Paralysis),
int(info.PetStatus.Fear),
int(info.PetStatus.Sleep),
}
func applyAnyStatus(owner, target *input.Input, statusID int) {
if owner == nil || target == nil {
return
}
if eff := owner.InitEffect(input.EffectType.Status, statusID); eff != nil {
target.AddEffect(owner, eff)
}
}
func applyRandomNStatuses(owner, target *input.Input, n int, pool []int) {
if owner == nil || target == nil || n <= 0 || len(pool) == 0 {
return
}
if n > len(pool) {
n = len(pool)
}
for _, idx := range grand.Perm(len(pool))[:n] {
applyAnyStatus(owner, target, pool[idx])
}
}
func clearBothProps(a, b *input.Input) bool {
if a == nil || b == nil {
return false
}
cleared := false
for i := range a.Prop {
if a.SetProp(a, int8(i), 0) {
cleared = true
}
if b.SetProp(a, int8(i), 0) {
cleared = true
}
}
return cleared
}
func healBench(owner *input.Input, amount alpacadecimal.Decimal) {
if owner == nil || amount.Cmp(alpacadecimal.Zero) <= 0 {
return
}
for _, pet := range owner.AllPet {
if pet == nil || !pet.Alive() || pet == owner.CurPet[0] {
continue
}
pet.Info.ModelHP(amount.IntPart())
}
}
// Effect 1288: 免疫下{0}次受到的攻击,未触发则{1}%令对手{2}
type Effect1288 struct{ node.EffectNode }
func (e *Effect1288) Skill_Use() bool {
if len(e.Args()) < 3 {
return true
}
effect := e.CarrierInput().InitEffect(input.EffectType.Sub, 1288, int(e.Args()[0].IntPart()), int(e.Args()[1].IntPart()), int(e.Args()[2].IntPart()))
if effect != nil {
e.CarrierInput().AddEffect(e.CarrierInput(), effect)
}
return true
}
type Effect1288Sub struct {
node.EffectNode
remaining int
}
func (e *Effect1288Sub) SetArgs(t *input.Input, a ...int) {
e.EffectNode.SetArgs(t, a...)
e.Duration(-1)
if len(a) > 0 {
e.remaining = a[0]
}
}
func (e *Effect1288Sub) DamageLockEx(zone *info.DamageZone) bool {
if zone == nil || zone.Type != info.DamageType.Red || e.remaining <= 0 {
return true
}
e.remaining--
if e.remaining <= 0 {
e.Alive(false)
}
zone.Damage = alpacadecimal.Zero
return true
}
// Effect 1289: 将自身的能力下降状态双倍反馈给对手,反馈成功则对手下{0}次技能无效
type Effect1289 struct{ node.EffectNode }
func (e *Effect1289) OnSkill() bool {
if len(e.Args()) == 0 {
return true
}
reflected := false
for i, v := range e.CarrierInput().Prop[:] {
if v >= 0 {
continue
}
if e.TargetInput().SetProp(e.CarrierInput(), int8(i), 2*v) {
reflected = true
}
}
if !reflected {
return true
}
effect := e.CarrierInput().InitEffect(input.EffectType.Sub, 1289, int(e.Args()[0].IntPart()))
if effect != nil {
e.TargetInput().AddEffect(e.CarrierInput(), effect)
}
return true
}
type Effect1289Sub struct {
node.EffectNode
remaining int
}
func (e *Effect1289Sub) SetArgs(t *input.Input, a ...int) {
e.EffectNode.SetArgs(t, a...)
e.Duration(-1)
if len(a) > 0 {
e.remaining = a[0]
}
}
func (e *Effect1289Sub) 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 1290: 恢复自身最大体力的1/{0}若自身体力低于1/{1}则造成等量固伤
type Effect1290 struct{ node.EffectNode }
func (e *Effect1290) Skill_Use() bool {
if len(e.Args()) < 2 || e.Args()[0].Cmp(alpacadecimal.Zero) <= 0 {
return true
}
heal := e.CarrierInput().CurPet[0].GetMaxHP().Div(e.Args()[0])
if heal.Cmp(alpacadecimal.Zero) <= 0 {
return true
}
low := false
if e.Args()[1].Cmp(alpacadecimal.Zero) > 0 {
threshold := e.CarrierInput().CurPet[0].GetMaxHP().Div(e.Args()[1])
low = e.CarrierInput().CurPet[0].GetHP().Cmp(threshold) < 0
}
e.CarrierInput().Heal(e.CarrierInput(), &action.SelectSkillAction{}, heal)
if low {
e.TargetInput().Damage(e.CarrierInput(), &info.DamageZone{Type: info.DamageType.Fixed, Damage: heal})
}
return true
}
// Effect 1291: 造成的伤害高于{0}则{1}%概率使对手随机进入{2}种异常状态
type Effect1291 struct{ node.EffectNode }
func (e *Effect1291) Skill_Use() bool {
if len(e.Args()) < 3 {
return true
}
if e.CarrierInput().SumDamage.Cmp(e.Args()[0]) <= 0 {
return true
}
success, _, _ := e.Input.Player.Roll(int(e.Args()[1].IntPart()), 100)
if success {
applyRandomNStatuses(e.CarrierInput(), e.TargetInput(), int(e.Args()[2].IntPart()), effect1291Statuses)
}
return true
}
// Effect 1292: 自身体力低于对手时先制+2
type Effect1292 struct{ node.EffectNode }
func (e *Effect1292) ComparePre(fattack, sattack *action.SelectSkillAction) bool {
if e.CarrierInput().CurPet[0].GetHP().Cmp(e.OpponentInput().CurPet[0].GetHP()) >= 0 {
return true
}
current := actionByPlayer(fattack, sattack, e.CarrierInput().UserID)
if current == nil || current.SkillEntity == nil {
return true
}
current.SkillEntity.XML.Priority += 2
return true
}
// Effect 1293: 免疫下{0}次受到的攻击,免疫成功则自身全属性+{1}
type Effect1293 struct{ node.EffectNode }
func (e *Effect1293) Skill_Use() bool {
if len(e.Args()) < 2 {
return true
}
effect := e.CarrierInput().InitEffect(input.EffectType.Sub, 1293, int(e.Args()[0].IntPart()), int(e.Args()[1].IntPart()))
if effect != nil {
e.CarrierInput().AddEffect(e.CarrierInput(), effect)
}
return true
}
type Effect1293Sub struct {
node.EffectNode
remaining int
boost int
}
func (e *Effect1293Sub) SetArgs(t *input.Input, a ...int) {
e.EffectNode.SetArgs(t, a...)
e.Duration(-1)
if len(a) > 0 {
e.remaining = a[0]
}
if len(a) > 1 {
e.boost = a[1]
}
}
func (e *Effect1293Sub) DamageLockEx(zone *info.DamageZone) bool {
if zone == nil || zone.Type != info.DamageType.Red || e.remaining <= 0 {
return true
}
zone.Damage = alpacadecimal.Zero
for i := 0; i < 6; i++ {
e.CarrierInput().SetProp(e.CarrierInput(), int8(i), int8(e.boost))
}
e.remaining--
if e.remaining <= 0 {
e.Alive(false)
}
return true
}
// Effect 1294: 消除双方能力提升、下降状态和护盾效果消除任意一项成功则使对手随机进入两种异常状态未触发则回合结束时吸取对手最大体力的1/3
type Effect1294 struct{ node.EffectNode }
func (e *Effect1294) Skill_Use() bool {
cleared := clearBothProps(e.CarrierInput(), e.TargetInput())
if cleared {
effect := e.CarrierInput().InitEffect(input.EffectType.Status, 1294)
if effect != nil {
applyRandomNStatuses(e.CarrierInput(), e.TargetInput(), 2, effect1291Statuses)
}
return true
}
effect := e.CarrierInput().InitEffect(input.EffectType.Sub, 1294)
if effect != nil {
e.CarrierInput().AddEffect(e.CarrierInput(), effect)
}
return true
}
type Effect1294Sub struct{ node.EffectNode }
func (e *Effect1294Sub) TurnEnd() {
damage := e.OpponentInput().CurPet[0].GetMaxHP().Div(alpacadecimal.NewFromInt(3))
if damage.Cmp(alpacadecimal.Zero) > 0 {
e.OpponentInput().Damage(e.CarrierInput(), &info.DamageZone{Type: info.DamageType.Percent, Damage: damage})
}
e.Alive(false)
}
// Effect 1295: 先出手时{0}回合内免疫并反弹异常状态
type Effect1295 struct{ node.EffectNode }
func (e *Effect1295) Skill_Use() bool {
if len(e.Args()) == 0 || !e.IsFirst() {
return true
}
effect := e.CarrierInput().InitEffect(input.EffectType.Sub, 1295, int(e.Args()[0].IntPart()))
if effect != nil {
e.CarrierInput().AddEffect(e.CarrierInput(), effect)
}
return true
}
type Effect1295Sub struct{ FixedDuration1Base }
func (e *Effect1295Sub) EFFect_Befer(in *input.Input, effEffect input.Effect) bool {
if in != e.OpponentInput() || !input.IS_Stat(effEffect) {
return true
}
return false
}
// Effect 1296: {0}回合内受到攻击{1}%进入自然庇佑
type Effect1296 struct{ RoundEffectArg0Base }
func (e *Effect1296) DamageLockEx(zone *info.DamageZone) bool {
if zone == nil || zone.Type != info.DamageType.Red || len(e.Args()) < 2 {
return true
}
ok, _, _ := e.Input.Player.Roll(int(e.Args()[1].IntPart()), 100)
if !ok {
return true
}
applyAnyStatus(e.CarrierInput(), e.CarrierInput(), effect1296Statuses[0])
return true
}
// Effect 1297: 消除对手回合类效果,消除成功则令对手{0}未触发则吸取对手最大体力的1/{1}
type Effect1297 struct{ node.EffectNode }
func (e *Effect1297) Skill_Use() bool {
if len(e.Args()) < 2 {
return true
}
before := activeTurnEffectCount(e.TargetInput())
e.TargetInput().CancelTurn(e.CarrierInput())
if before > 0 {
applyAnyStatus(e.CarrierInput(), e.TargetInput(), int(e.Args()[0].IntPart()))
return true
}
damage := e.TargetInput().CurPet[0].GetMaxHP().Div(e.Args()[1])
if damage.Cmp(alpacadecimal.Zero) > 0 {
e.TargetInput().Damage(e.CarrierInput(), &info.DamageZone{Type: info.DamageType.Percent, Damage: damage})
e.CarrierInput().Heal(e.CarrierInput(), &action.SelectSkillAction{}, damage)
}
return true
}
// Effect 1298: 消除对手能力提升状态消除成功则直接扣除对方场下随机一只精灵最大体力的1/4致死时令其残留1点体力
type Effect1298 struct{ node.EffectNode }
func (e *Effect1298) Skill_Use() bool {
cleared := clearPositiveProps(e.TargetInput(), e.CarrierInput())
if !cleared {
return true
}
for _, pet := range e.TargetInput().AllPet {
if pet == nil || !pet.Alive() || pet == e.TargetInput().CurPet[0] {
continue
}
damage := pet.GetMaxHP().Div(alpacadecimal.NewFromInt(4))
if damage.Cmp(alpacadecimal.Zero) > 0 {
pet.Info.ModelHP(-damage.IntPart())
}
break
}
return true
}
// Effect 1299: 3回合内每次对手造成的攻击伤害低于300则减少对手所有不在场精灵100点体力每次对手使用属性技能则恢复己方所有不在场精灵100点体力使对手不在场精灵死亡时令其残留1点体力
type Effect1299 struct{ RoundEffectArg0Base }
func (e *Effect1299) SkillHit_ex() bool {
if e.Ctx().SkillEntity == nil || e.Ctx().SkillEntity.Category() == info.Category.STATUS {
return true
}
if e.CarrierInput().SumDamage.Cmp(alpacadecimal.NewFromInt(300)) >= 0 {
return true
}
for _, pet := range e.TargetInput().AllPet {
if pet == nil || !pet.Alive() || pet == e.TargetInput().CurPet[0] {
continue
}
pet.Info.ModelHP(-100)
}
return true
}
func (e *Effect1299) Skill_Use_ex() bool {
if e.Ctx().SkillEntity == nil || e.Ctx().SkillEntity.Category() != info.Category.STATUS {
return true
}
healBench(e.CarrierInput(), alpacadecimal.NewFromInt(100))
return true
}
// Effect 1300: {0}回合内受到的攻击伤害减少{1}%,受到的伤害高于{2}时随机附加{3}种异常状态,未触发则消除对手回合类效果
type Effect1300 struct{ RoundEffectArg0Base }
func (e *Effect1300) DamageDivEx(zone *info.DamageZone) bool {
if zone == nil || zone.Type != info.DamageType.Red || len(e.Args()) < 4 {
return true
}
reduce := zone.Damage.Mul(e.Args()[1]).Div(alpacadecimal.NewFromInt(100))
zone.Damage = zone.Damage.Sub(reduce)
if zone.Damage.Cmp(e.Args()[2]) > 0 {
applyRandomNStatuses(e.CarrierInput(), e.OpponentInput(), int(e.Args()[3].IntPart()), effect1291Statuses)
}
return true
}
// Effect 1301: 若自身体力低于300则消耗自身全部体力并使对手所有不在场精灵减少1/2最大体力
type Effect1301 struct{ node.EffectNode }
func (e *Effect1301) Skill_Use() bool {
if e.CarrierInput().CurPet[0].GetHP().Cmp(alpacadecimal.NewFromInt(300)) >= 0 {
return true
}
e.CarrierInput().Damage(e.CarrierInput(), &info.DamageZone{Type: info.DamageType.Fixed, Damage: e.CarrierInput().CurPet[0].GetHP()})
for _, pet := range e.TargetInput().AllPet {
if pet == nil || !pet.Alive() || pet == e.TargetInput().CurPet[0] {
continue
}
damage := pet.GetMaxHP().Div(alpacadecimal.NewFromInt(2))
pet.Info.ModelHP(-damage.IntPart())
}
return true
}
// Effect 1302: 全属性+{0}{1}%概率强化效果翻倍,未触发则吸取对手能力提升状态
type Effect1302 struct{ node.EffectNode }
func (e *Effect1302) OnSkill() bool {
if len(e.Args()) < 2 {
return true
}
boost := int8(e.Args()[0].IntPart())
success, _, _ := e.Input.Player.Roll(int(e.Args()[1].IntPart()), 100)
if success {
boost *= 2
}
for i := 0; i < 6; i++ {
e.CarrierInput().SetProp(e.CarrierInput(), int8(i), boost)
}
if success {
return true
}
clearPositiveProps(e.TargetInput(), e.CarrierInput())
return true
}
// Effect 1303: 4回合内使用技能吸取对手最大体力1/3自身体力低于1/2时效果翻倍吸取时若自身满体力则为己方所有不在场精灵恢复100点体力
type Effect1303 struct{ RoundEffectArg0Base }
func (e *Effect1303) OnSkill() bool {
base := e.TargetInput().CurPet[0].GetMaxHP().Div(alpacadecimal.NewFromInt(3))
if e.CarrierInput().CurPet[0].GetHP().Cmp(e.CarrierInput().CurPet[0].GetMaxHP().Div(alpacadecimal.NewFromInt(2))) < 0 {
base = base.Mul(alpacadecimal.NewFromInt(2))
}
e.TargetInput().Damage(e.CarrierInput(), &info.DamageZone{Type: info.DamageType.Percent, Damage: base})
e.CarrierInput().Heal(e.CarrierInput(), &action.SelectSkillAction{}, base)
if e.CarrierInput().CurPet[0].GetHP().Cmp(e.CarrierInput().CurPet[0].GetMaxHP()) == 0 {
healBench(e.CarrierInput(), alpacadecimal.NewFromInt(100))
}
return true
}
// Effect 1304: 下{0}回合攻击忽略对手{1}%的双防值
type Effect1304 struct{ node.EffectNode }
func (e *Effect1304) SkillHit() bool {
if len(e.Args()) < 2 || e.Ctx().SkillEntity == nil || e.Ctx().SkillEntity.Category() == info.Category.STATUS {
return true
}
power := e.Ctx().SkillEntity.XML.Power
e.Ctx().SkillEntity.XML.Power = power
return true
}
// Effect 1305: 己方每有一只精灵存活则恢复{0}点体力,每有一只精灵死亡则附加{1}点固定伤害
type Effect1305 struct{ node.EffectNode }
func (e *Effect1305) OnSkill() bool {
if len(e.Args()) < 2 {
return true
}
live, dead := 0, 0
for _, pet := range e.CarrierInput().AllPet {
if pet == nil {
continue
}
if pet.Alive() {
live++
} else {
dead++
}
}
e.CarrierInput().Heal(e.CarrierInput(), &action.SelectSkillAction{}, alpacadecimal.NewFromInt(int64(live)*e.Args()[0].IntPart()))
if dead > 0 {
e.TargetInput().Damage(e.CarrierInput(), &info.DamageZone{Type: info.DamageType.Fixed, Damage: alpacadecimal.NewFromInt(int64(dead) * e.Args()[1].IntPart())})
}
return true
}
// Effect 1306: 造成的伤害低于350则减少对手所有未出场精灵100点体力使对手不在场精灵死亡时令其残留1点体力
type Effect1306 struct{ node.EffectNode }
func (e *Effect1306) Skill_Use() bool {
if e.CarrierInput().SumDamage.Cmp(alpacadecimal.NewFromInt(350)) >= 0 {
return true
}
for _, pet := range e.TargetInput().AllPet {
if pet == nil || !pet.Alive() || pet == e.TargetInput().CurPet[0] {
continue
}
pet.Info.ModelHP(-100)
}
return true
}
// Effect 1307: 未击败对手则恢复己方所有不在场精灵100点体力
type Effect1307 struct{ node.EffectNode }
func (e *Effect1307) Skill_Use() bool {
if e.TargetInput().CurPet[0].Info.Hp == 0 {
return true
}
healBench(e.CarrierInput(), alpacadecimal.NewFromInt(100))
return true
}
// Effect 1308: 击败对手则自身下1次登场时帝君之罚和帝君之赐效果不会削弱
type Effect1308 struct{ node.EffectNode }
func (e *Effect1308) Skill_Use() bool { return true }
// Effect 1309: 附加{0}点固定伤害,遇到天敌时附加效果翻倍
type Effect1309 struct{ node.EffectNode }
func (e *Effect1309) OnSkill() bool {
if len(e.Args()) == 0 {
return true
}
damage := e.Args()[0]
e.TargetInput().Damage(e.CarrierInput(), &info.DamageZone{Type: info.DamageType.Fixed, Damage: damage})
return true
}
// Effect 1310: 吸取对手能力提升状态,吸取成功则自身下{0}回合必定先出手
type Effect1310 struct{ node.EffectNode }
func (e *Effect1310) OnSkill() bool {
if len(e.Args()) == 0 {
return true
}
if !clearPositiveProps(e.TargetInput(), e.CarrierInput()) {
return true
}
effect := e.CarrierInput().InitEffect(input.EffectType.Sub, 1310, int(e.Args()[0].IntPart()))
if effect != nil {
e.CarrierInput().AddEffect(e.CarrierInput(), effect)
}
return true
}
type Effect1310Sub struct {
node.EffectNode
remaining int
}
func (e *Effect1310Sub) SetArgs(t *input.Input, a ...int) {
e.EffectNode.SetArgs(t, a...)
e.Duration(-1)
if len(a) > 0 {
e.remaining = a[0]
}
}
func (e *Effect1310Sub) ComparePre(fattack, sattack *action.SelectSkillAction) bool {
if e.remaining <= 0 {
e.Alive(false)
return true
}
current := actionByPlayer(fattack, sattack, e.CarrierInput().UserID)
if current != nil && current.SkillEntity != nil {
current.SkillEntity.XML.Priority += 7
}
e.remaining--
if e.remaining <= 0 {
e.Alive(false)
}
return true
}
// Effect 1311: {0}回合内对手使用属性技能则对手全属性-{1}
type Effect1311 struct{ RoundEffectArg0Base }
func (e *Effect1311) Skill_Use_ex() bool {
if len(e.Args()) < 2 || e.Ctx().SkillEntity == nil || e.Ctx().SkillEntity.Category() != info.Category.STATUS {
return true
}
for i := 0; i < 6; i++ {
e.TargetInput().SetProp(e.CarrierInput(), int8(i), -int8(e.Args()[1].IntPart()))
}
return true
}
// Effect 1312: 解除自身能力下降状态,解除成功则自身下{0}回合先制+{1}
type Effect1312 struct{ node.EffectNode }
func (e *Effect1312) OnSkill() bool {
if len(e.Args()) < 2 {
return true
}
cleared := false
for i, v := range e.CarrierInput().Prop[:] {
if v < 0 && e.CarrierInput().SetProp(e.CarrierInput(), int8(i), 0) {
cleared = true
}
}
if !cleared {
return true
}
effect := e.CarrierInput().InitEffect(input.EffectType.Sub, 1312, int(e.Args()[0].IntPart()), int(e.Args()[1].IntPart()))
if effect != nil {
e.CarrierInput().AddEffect(e.CarrierInput(), effect)
}
return true
}
type Effect1312Sub struct {
node.EffectNode
remaining int
priority int
}
func (e *Effect1312Sub) SetArgs(t *input.Input, a ...int) {
e.EffectNode.SetArgs(t, a...)
e.Duration(-1)
if len(a) > 0 {
e.remaining = a[0]
}
if len(a) > 1 {
e.priority = a[1]
}
}
func (e *Effect1312Sub) ComparePre(fattack, sattack *action.SelectSkillAction) bool {
if e.remaining <= 0 {
e.Alive(false)
return true
}
current := actionByPlayer(fattack, sattack, e.CarrierInput().UserID)
if current != nil && current.SkillEntity != nil {
current.SkillEntity.XML.Priority += e.priority
}
e.remaining--
if e.remaining <= 0 {
e.Alive(false)
}
return true
}
func init() {
input.InitEffect(input.EffectType.Skill, 1288, &Effect1288{})
input.InitEffect(input.EffectType.Sub, 1288, &Effect1288Sub{})
input.InitEffect(input.EffectType.Skill, 1289, &Effect1289{})
input.InitEffect(input.EffectType.Sub, 1289, &Effect1289Sub{})
input.InitEffect(input.EffectType.Skill, 1290, &Effect1290{})
input.InitEffect(input.EffectType.Skill, 1291, &Effect1291{})
input.InitEffect(input.EffectType.Skill, 1292, &Effect1292{})
input.InitEffect(input.EffectType.Skill, 1293, &Effect1293{})
input.InitEffect(input.EffectType.Sub, 1293, &Effect1293Sub{})
input.InitEffect(input.EffectType.Skill, 1294, &Effect1294{})
input.InitEffect(input.EffectType.Sub, 1294, &Effect1294Sub{})
input.InitEffect(input.EffectType.Skill, 1295, &Effect1295{})
input.InitEffect(input.EffectType.Sub, 1295, &Effect1295Sub{})
input.InitEffect(input.EffectType.Skill, 1296, &Effect1296{})
input.InitEffect(input.EffectType.Skill, 1297, &Effect1297{})
input.InitEffect(input.EffectType.Skill, 1298, &Effect1298{})
input.InitEffect(input.EffectType.Skill, 1299, &Effect1299{})
input.InitEffect(input.EffectType.Skill, 1300, &Effect1300{})
input.InitEffect(input.EffectType.Skill, 1301, &Effect1301{})
input.InitEffect(input.EffectType.Skill, 1302, &Effect1302{})
input.InitEffect(input.EffectType.Skill, 1303, &Effect1303{})
input.InitEffect(input.EffectType.Skill, 1304, &Effect1304{})
input.InitEffect(input.EffectType.Skill, 1305, &Effect1305{})
input.InitEffect(input.EffectType.Skill, 1306, &Effect1306{})
input.InitEffect(input.EffectType.Skill, 1307, &Effect1307{})
input.InitEffect(input.EffectType.Skill, 1308, &Effect1308{})
input.InitEffect(input.EffectType.Skill, 1309, &Effect1309{})
input.InitEffect(input.EffectType.Skill, 1310, &Effect1310{})
input.InitEffect(input.EffectType.Sub, 1310, &Effect1310Sub{})
input.InitEffect(input.EffectType.Skill, 1311, &Effect1311{})
input.InitEffect(input.EffectType.Skill, 1312, &Effect1312{})
input.InitEffect(input.EffectType.Sub, 1312, &Effect1312Sub{})
}