77 lines
2.2 KiB
Go
77 lines
2.2 KiB
Go
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() {
|
||
tf := 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:冻伤
|
||
})
|
||
// Effect74:10%中毒、10%烧伤、10%冻伤(70%无效果)
|
||
input.InitEffect(input.EffectType.Skill, 74, tf)
|
||
input.InitEffect(input.EffectType.Skill, 451, tf)
|
||
// 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:害怕
|
||
}))
|
||
|
||
}
|