package effect import ( "blazing/logic/service/fight/info" "blazing/logic/service/fight/input" "blazing/logic/service/fight/node" ) // ----------------------------------------------------------- // 通用状态效果(例如 麻痹 / 中毒 / 疲惫 / 混乱 等) // ----------------------------------------------------------- type Effect10 struct { node.EffectNode Status info.EnumPetStatus // 要施加的状态类型 } // 工厂函数 func newEffectStatus(status info.EnumPetStatus) *Effect10 { return &Effect10{ Status: status, } } func init() { // 批量注册状态类技能 registerStatusEffects() } func registerStatusEffects() { statusList := map[int]info.EnumPetStatus{ 10: info.PetStatus.Paralysis, 11: info.PetStatus.Poisoned, 12: info.PetStatus.Burned, 14: info.PetStatus.Frozen, 15: info.PetStatus.Fear, 16: info.PetStatus.Sleep, 22: info.PetStatus.Tired, 94: info.PetStatus.Petrified, 99: info.PetStatus.Confused, 103: info.PetStatus.Weakened, 114: info.PetStatus.Flammable, } for id, status := range statusList { input.InitEffect(input.EffectType.Skill, id, newEffectStatus(status)) } } // ----------------------------------------------------------- // 技能触发时调用 // ----------------------------------------------------------- func (e *Effect10) OnSkill() 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 }