package effect import ( "blazing/logic/service/fight/info" "blazing/logic/service/fight/input" "blazing/logic/service/fight/node" ) // ----------------------------------------------------------- // n回合内,每次直接攻击都有m%几率附带衰弱效果 // ----------------------------------------------------------- type Effect104 struct { node.EffectNode Status info.EnumPetStatus // 要施加的状态类型 can bool } // 工厂函数 func newEffectStatusn(status info.EnumPetStatus) *Effect104 { return &Effect104{ Status: status, } } func init() { // 批量注册状态类技能 registerStatusEffectsn() } func registerStatusEffectsn() { statusList := map[int]info.EnumPetStatus{ 104: info.PetStatus.Weakened, 109: info.PetStatus.Frozen, } for id, status := range statusList { input.InitEffect(input.EffectType.Skill, id, newEffectStatusn(status)) } } // 默认添加回合 func (e *Effect104) SetArgs(t *input.Input, a ...int) { e.EffectNode.SetArgs(t, a...) e.EffectNode.Duration(e.EffectNode.SideEffectArgs[0]) } // ----------------------------------------------------------- // 技能触发时调用 // ----------------------------------------------------------- func (e *Effect104) OnSkill() bool { if !e.can { e.can = true return true } // n% 触发概率(默认 SideEffectArgs[0]) chance := e.EffectNode.SideEffectArgs[1] success, _, _ := e.Input.Player.Roll(chance, 100) if !success { return true } // 持续回合 duration := int(e.Input.FightC.GetRand().Int31n(2)) // 默认随机 2~3 回合 duration++ // 获取状态效果 eff := e.Ctx().Our.InitEffect(input.EffectType.Status, int(e.Status)) if eff == nil { return true } e.Ctx().Opp.AddEffect(e.Ctx().Our, eff) return true }