2025-11-14 00:26:34 +08:00
|
|
|
|
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 // 差异化:目标攻击类型(物理/特殊等)
|
2025-12-14 05:34:39 +08:00
|
|
|
|
can bool
|
2025-11-14 00:26:34 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 工厂函数:创建"指定攻击类型必定miss"效果实例
|
|
|
|
|
|
func newEffectAttackMiss(category info.EnumCategory) *EffectAttackMiss {
|
|
|
|
|
|
return &EffectAttackMiss{
|
|
|
|
|
|
targetCategory: category,
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 初始化:批量注册所有"攻击类型必定miss"类效果
|
|
|
|
|
|
func init() {
|
|
|
|
|
|
registerAttackMissEffects()
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 批量注册:绑定效果ID与对应的目标攻击类型
|
|
|
|
|
|
func registerAttackMissEffects() {
|
2025-11-14 03:21:00 +08:00
|
|
|
|
// 效果ID与目标攻击类型的映射
|
2025-11-14 00:26:34 +08:00
|
|
|
|
categoryMap := map[int]info.EnumCategory{
|
|
|
|
|
|
78: info.Category.PHYSICAL, // Effect78:物理攻击必定miss
|
2025-11-14 03:21:00 +08:00
|
|
|
|
86: info.Category.STATUS, // Effect86:状态攻击必定miss
|
|
|
|
|
|
106: info.Category.SPECIAL, // Effect106:特殊攻击必定miss
|
2025-11-14 00:26:34 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 循环注册所有效果
|
|
|
|
|
|
for effectID, category := range categoryMap {
|
|
|
|
|
|
input.InitEffect(input.EffectType.Skill, effectID, newEffectAttackMiss(category))
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// -----------------------------------------------------------
|
|
|
|
|
|
// 核心逻辑:技能命中时,若为目标攻击类型则强制miss
|
|
|
|
|
|
// -----------------------------------------------------------
|
2026-01-04 22:10:34 +08:00
|
|
|
|
func (e *EffectAttackMiss) SkillHit_ex() bool {
|
2025-11-14 00:26:34 +08:00
|
|
|
|
|
|
|
|
|
|
// 技能为空时不处理
|
|
|
|
|
|
skill := e.Ctx().SkillEntity
|
|
|
|
|
|
if skill == nil {
|
|
|
|
|
|
return true
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-11-14 03:21:00 +08:00
|
|
|
|
// 若攻击类型匹配目标类型,则强制miss(设置AttackTime=0)
|
2025-11-14 00:26:34 +08:00
|
|
|
|
if skill.Category() == e.targetCategory {
|
2025-11-30 10:21:57 +00:00
|
|
|
|
skill.SetMiss()
|
|
|
|
|
|
|
2025-11-14 00:26:34 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return true
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 设置参数:复用父类逻辑,设置持续回合
|
|
|
|
|
|
func (e *EffectAttackMiss) SetArgs(t *input.Input, a ...int) {
|
|
|
|
|
|
e.EffectNode.SetArgs(t, a...)
|
2025-12-14 05:34:39 +08:00
|
|
|
|
e.CanStack(true)
|
2025-11-15 15:22:58 +08:00
|
|
|
|
e.EffectNode.Duration(e.EffectNode.SideEffectArgs[0] - 1) // 持续回合由SideEffectArgs[0]指定
|
2025-11-14 00:26:34 +08:00
|
|
|
|
}
|