Files
bl/logic/service/fight/effect/effect_74_75.go
昔念 0f524aab85 ```
fix(fight): 修复战斗命中判断逻辑并移除冗余命中检查

- 修复 NewSel32 中的命中判断,将 Side 字段改为 Hit 字段
- 移除 EffectAttackMiss 中的冗余命中判断逻辑
- 移除 EffectDefeatTrigger 中的重复命中检查
- 移除 EffectPhysicalAttackAddStatus 中的冗余命中判断
- 移除多个效果文件中的重复命中检查逻辑
- 修正 Effect136 中的命中处理逻辑,确保在技能命中时正确触发
- 移除其他多个效果中的重复命中检查代码
```
2026-01-04 21:41:10 +08:00

76 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"
)
// 定义状态区间配置包含概率上限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() {
// Effect7410%中毒、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冻伤
}))
// 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害怕
}))
}