Files
bl/logic/service/fight/effect/effect_78_86_106.go
昔念 55ff5c6119 ```
refactor(effect): 更新状态枚举类型为 EnumPetStatus

将多个技能效果文件中的 EnumBattleStatus 类型统一更新为 EnumPetStatus,
以更准确地反映其用途。同时修改了相关函数签名和变量声明。

此外,清理了部分注释格式,并补充了关于被动效果不能被免疫的说明。
```
2025-11-14 00:26:34 +08:00

74 lines
2.3 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"
)
// -----------------------------------------------------------
// 通用效果n回合内指定类型的攻击对自身必定miss
// -----------------------------------------------------------
type EffectAttackMiss struct {
node.EffectNode
targetCategory info.EnumCategory // 差异化:目标攻击类型(物理/特殊等)
}
// 工厂函数:创建"指定攻击类型必定miss"效果实例
func newEffectAttackMiss(category info.EnumCategory) *EffectAttackMiss {
return &EffectAttackMiss{
targetCategory: category,
}
}
// 初始化:批量注册所有"攻击类型必定miss"类效果
func init() {
registerAttackMissEffects()
}
// 批量注册绑定效果ID与对应的目标攻击类型
func registerAttackMissEffects() {
// 效果ID与目标攻击类型的映射可扩展
// 78: 物理攻击必定miss假设有79: 特殊攻击必定miss
categoryMap := map[int]info.EnumCategory{
78: info.Category.PHYSICAL, // Effect78物理攻击必定miss
86: info.Category.STATUS,
106: info.Category.SPECIAL,
// 79: info.Category.SPECIAL, // 新增特殊攻击必定miss示例
}
// 循环注册所有效果
for effectID, category := range categoryMap {
input.InitEffect(input.EffectType.Skill, effectID, newEffectAttackMiss(category))
}
}
// -----------------------------------------------------------
// 核心逻辑技能命中时若为目标攻击类型则强制miss
// -----------------------------------------------------------
func (e *EffectAttackMiss) Skill_Hit_ex() bool {
// 命中判定失败,不触发(按原逻辑保留)
if !e.Hit() {
return true
}
// 技能为空时不处理
skill := e.Ctx().SkillEntity
if skill == nil {
return true
}
// 若攻击类型匹配目标类型则强制miss设置AttackTime=0与原逻辑一致
if skill.Category() == e.targetCategory {
skill.AttackTime = 0 // 强制命中失效
}
return true
}
// 设置参数:复用父类逻辑,设置持续回合
func (e *EffectAttackMiss) SetArgs(t *input.Input, a ...int) {
e.EffectNode.SetArgs(t, a...)
e.EffectNode.Duration(e.EffectNode.SideEffectArgs[0]) // 持续回合由SideEffectArgs[0]指定
}