package effect import ( "blazing/logic/service/fight/info" "blazing/logic/service/fight/input" "blazing/logic/service/fight/node" ) // 定义状态区间配置:包含概率上限(0-100)和对应的状态 type statusRange struct { upper int // 概率区间上限(例如10表示0-9区间) status info.EnumPetStatus // 该区间触发的状态 } // 通用随机状态效果结构体 type EffectRandomStatus struct { node.EffectNode ranges []statusRange // 当前效果的状态概率配置 } // 工厂函数:创建通用随机状态效果实例(接收状态配置) func newEffectRandomStatus(ranges []statusRange) *EffectRandomStatus { return &EffectRandomStatus{ ranges: ranges, } } // 通用逻辑:命中后按概率随机触发状态 func (e *EffectRandomStatus) OnSkill() bool { // 生成0-99的随机数(100种可能) randVal := int(e.Input.FightC.GetRand().Int31n(100)) targetStatus := info.PetStatus.NULL // 根据配置匹配对应的状态 for _, r := range e.ranges { if randVal < r.upper { targetStatus = r.status break } } // 未匹配到任何状态(概率外情况) if targetStatus == info.PetStatus.NULL { return true } // 获取状态效果并设置参数 eff := e.Ctx().Our.InitEffect(input.EffectType.Status, int(targetStatus)) if eff == nil { return true } e.Ctx().Opp.AddEffect(e.Ctx().Our, eff) return true } // 初始化:注册Effect74和Effect75(通过不同配置区分) func init() { // Effect74:10%中毒、10%烧伤、10%冻伤(70%无效果) input.InitEffect(input.EffectType.Skill, 74, newEffectRandomStatus([]statusRange{ {upper: 10, status: info.PetStatus.Poisoned}, // 0-9:中毒 {upper: 20, status: info.PetStatus.Burned}, // 10-19:烧伤 {upper: 30, status: info.PetStatus.Frozen}, // 20-29:冻伤 })) // Effect75:10%麻痹、10%睡眠、10%害怕(70%无效果) input.InitEffect(input.EffectType.Skill, 75, newEffectRandomStatus([]statusRange{ {upper: 10, status: info.PetStatus.Paralysis}, // 0-9:麻痹 {upper: 20, status: info.PetStatus.Sleep}, // 10-19:睡眠 {upper: 30, status: info.PetStatus.Fear}, // 20-29:害怕 })) }