package effect import ( "blazing/logic/service/fight/info" "blazing/logic/service/fight/input" "blazing/logic/service/fight/node" ) // Effect 10: 命中后{0}%令对方麻痹 type Effect10 struct { node.EffectNode Status info.EnumPetStatus // 要施加的状态类型 } // 工厂函数 func newEffectStatus(status info.EnumPetStatus) *Effect10 { return &Effect10{ Status: status, } } func init() { // 批量注册状态类技能 registerStatusEffects() } func registerStatusEffects() { statusList := []struct { id int status info.EnumPetStatus }{ {id: 10, status: info.PetStatus.Paralysis}, {id: 11, status: info.PetStatus.Poisoned}, {id: 12, status: info.PetStatus.Burned}, {id: 14, status: info.PetStatus.Frozen}, {id: 15, status: info.PetStatus.Fear}, {id: 16, status: info.PetStatus.Sleep}, {id: 22, status: info.PetStatus.Tired}, {id: 94, status: info.PetStatus.Petrified}, {id: 99, status: info.PetStatus.Confused}, {id: 103, status: info.PetStatus.Weakened}, {id: 114, status: info.PetStatus.Flammable}, } for _, item := range statusList { input.InitEffect(input.EffectType.Skill, item.id, newEffectStatus(item.status)) } } // ----------------------------------------------------------- // 技能触发时调用 // ----------------------------------------------------------- func (e *Effect10) Skill_Use() bool { // n% 触发概率(默认 SideEffectArgs[0]) chance := e.EffectNode.SideEffectArgs[0] success, _, _ := e.Input.Player.Roll(chance, 100) if !success { return true } // 持续回合 // 获取状态效果 eff := e.Ctx().Our.InitEffect(input.EffectType.Status, int(e.Status)) if eff == nil { return true } if len(e.EffectNode.SideEffectArgs) > 1 { // 持续回合 eff.Duration(e.EffectNode.SideEffectArgs[1]) } e.Ctx().Opp.AddEffect(e.Ctx().Our, eff) return true }