Files
bl/logic/service/fight/effect/effect_74_75.go
xinian 875ad668aa
Some checks failed
ci/woodpecker/push/my-first-workflow Pipeline failed
feat: 实现战斗效果逻辑和接口重构
2026-03-28 21:57:22 +08:00

79 lines
2.2 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package effect
import (
"blazing/logic/service/fight/info"
"blazing/logic/service/fight/input"
"blazing/logic/service/fight/node"
"github.com/gogf/gf/v2/util/grand"
)
// 定义状态区间配置包含概率上限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 := grand.Intn(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冻伤
})
// Effect7410%中毒、10%烧伤、10%冻伤70%无效果)
input.InitEffect(input.EffectType.Skill, 74, tf)
input.InitEffect(input.EffectType.Skill, 451, tf)
// Effect7510%麻痹、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害怕
}))
}