package effect import ( "blazing/logic/service/fight/info" "blazing/logic/service/fight/input" "blazing/logic/service/fight/node" "sync" "github.com/shopspring/decimal" ) /** * m~n回合每回合反弹对手1/k的伤害 */ func init() { input.InitEffect(input.EffectType.Skill, 21, &Effect21{}) } type Effect21 struct { node.EffectNode l sync.Once } // 使用技能时,不可被继承,继承Miss和Hit就行 func (e *Effect21) OnSkill(input.Ctx) bool { if !e.Hit() { return true } e.l.Do(func() { //保证技能使用后初始化一次就行 statIndex := e.SideEffectArgs[0] endindex := e.SideEffectArgs[1] //回合产生 n := int(e.Input.FightC.GetRand().Int31n(int32(endindex-statIndex+1))) + statIndex e.Duration(n) //产生回合收益 //e.Input.AddEffect(input.Geteffect(input.EffectType.Status, int(info.PetStatus.Tired))) }) return true } // 被攻击时候反弹 func (e *Effect21) Skill_Use(ctx input.Ctx) bool { //未命中 if !e.Hit() { return true } //不是技能 if ctx.SkillEntity == nil { return true } //0血不触发 if e.Input.CurrentPet.Info.Hp <= 0 { return true } ctx.DamageZone.Type = info.DamageType.Fixed ctx.DamageZone.Damage = decimal.NewFromInt(int64(ctx.DamageZone.Damage.IntPart())).Div(decimal.NewFromInt(int64(e.SideEffectArgs[0]))) ctx.Input.Damage(ctx) return true }