All checks were successful
ci/woodpecker/push/my-first-workflow Pipeline was successful
fix(fight/boss): 修复技能实体空指针问题并优化必定秒杀效果实现 - 修复NewSeIdx_148中sks映射为空时的panic问题,在访问前进行nil检查并初始化 - 重构NewSeIdx_223必定秒杀效果的实现,将原有的ComparePre和DamageFloor方法 合并为OnSkill方法,简化逻辑并提高代码可读性 - 更新注释描述,使功能说明更加准确清晰 ```
50 lines
1016 B
Go
50 lines
1016 B
Go
package effect
|
|
|
|
import (
|
|
"blazing/logic/service/fight/info"
|
|
"blazing/logic/service/fight/input"
|
|
|
|
"github.com/alpacahq/alpacadecimal"
|
|
)
|
|
|
|
// 148.非连续技能无效
|
|
type NewSel148 struct {
|
|
NewSel0
|
|
sks map[int]info.SkillEntity
|
|
}
|
|
|
|
func (e *NewSel148) DamageDivEx(t *info.DamageZone) bool {
|
|
//魂印特性有不在场的情况,绑定时候将精灵和特性绑定
|
|
if e.ID().GetCatchTime() != e.Ctx().Our.CurrentPet.Info.CatchTime {
|
|
return true
|
|
}
|
|
|
|
// 检查对手是否使用了指定攻击类型
|
|
if e.Ctx().SkillEntity == nil {
|
|
return true
|
|
}
|
|
if t.Type != info.DamageType.Red {
|
|
return true
|
|
}
|
|
if e.sks == nil {
|
|
e.sks = make(map[int]info.SkillEntity)
|
|
}
|
|
old, ok := e.sks[e.Ctx().SkillEntity.ID]
|
|
if !ok {
|
|
e.sks[e.Ctx().SkillEntity.ID] = *e.Ctx().SkillEntity
|
|
t.Damage = alpacadecimal.Zero
|
|
return true
|
|
}
|
|
|
|
if old.Power == e.Ctx().SkillEntity.Power {
|
|
t.Damage = alpacadecimal.Zero
|
|
return true
|
|
}
|
|
|
|
return true
|
|
}
|
|
|
|
func init() {
|
|
input.InitEffect(input.EffectType.NewSel, 148, &NewSel148{})
|
|
}
|