package effect import ( "blazing/logic/service/fight/info" "blazing/logic/service/fight/input" "blazing/logic/service/fight/node" "fmt" "sync" "github.com/shopspring/decimal" ) /** * n回合内没有击败,则对方死亡 */ type Effect62 struct { node.EffectNode Hide bool // 是否隐藏 正常是命中就可用,镇魂歌是回合数到才可用 opp *input.Input e *Effect62_sub l sync.Once } type Effect62_sub struct { node.EffectNode bindpet *info.BattlePetEntity bind *input.Input // Hide bool // 是否隐藏 正常是命中就可用,镇魂歌是回合数到才可用 } // 这个实际上在对方回合执行的 func (e *Effect62_sub) OnSkill(ctx input.Ctx) bool { //defer e.Alive(false) if e.bindpet == e.bind.CurrentPet { //说明对方没有切换精灵 //直接扣除所有血量OnSkill ctx.DamageZone.Type = info.DamageType.Fixed ctx.DamageZone.Damage = decimal.NewFromInt(int64(e.bind.CurrentPet.Info.MaxHp)) e.bind.Damage(ctx) } return true } func init() { t := &Effect62{ EffectNode: node.EffectNode{}, } input.InitEffect(input.EffectType.Skill, 62, t) } func (e *Effect62) Turn_Start(ctx input.Ctx) { //如果对面还是我方放技能时候的玩家 // if ctx.Player != e.opp.Player { // return // } fmt.Println(e.Duration(), "镇魂歌剩余回合") if e.Duration() != 0 { //说明还没到生效节点 e.Hide = true //隐藏效果 } else { e.opp.AddEffect(e.e) } // if !e.Hide { //说明是自身回合//如果还在隐藏,就直接返回 // //t.Duration(e.SideEffectArgs[0]) // e.opp.AddEffect(e.e) // //defer e.EffectNode.NotALive() //失效 // //应该是对方固定伤害等于自身血量 // //e.Input.Death() //本只死亡 // //否则触发秒杀 在对面使用技能后 // //return true // } } func (e *Effect62) OnSkill(ctx input.Ctx) bool { if !e.Hit() { //e.Alive(false) return true } e.l.Do(func() { //e.Duration(1) //必须保持到下一回合,这样才会被复制 e.opp = ctx.Input e.e = &Effect62_sub{ EffectNode: node.EffectNode{}, bindpet: ctx.CurrentPet, bind: ctx.Input, } e.e.ID(e.ID() + int(input.EffectType.Sub)) //子效果ID //e.e.EffectNode.Duration(e.EffectNode.SideEffectArgs[0]) //给对方添加我方施加的buff e.e.SetArgs(e.Input, e.SideEffectArgs...) }) return true } func (e *Effect62) SetArgs(t *input.Input, a ...int) { e.EffectNode.SetArgs(t, a...) e.EffectNode.Duration(e.EffectNode.SideEffectArgs[0]) } // // 因为对方切精灵,这个效果也要无效掉 // func (this *Effect62) OnSwitchIn(input.Ctx) bool { // if this.Hide { //如果还在隐藏,就直接返回 // return true // } // //this.GetBattle().Effects[this.GetInput().UserID].RemoveEffect(this) // //否则触发秒杀 在对面使用技能后 // return true // }