Files
bl/logic/service/fight/effect/effect_133.go
昔念 3c067751f1 fix(logic/service/fight): 修正状态效果判断逻辑中的类型转换问题
将 StatEffect_Exist 方法的参数类型从 int 改为 info.EnumPetStatus,
并在调用 GetEffect 时进行显式类型转换,以提高代码可读性和类型安全性。
同时清理了部分冗余的类型转换调用。
2025-11-14 00:47:49 +08:00

114 lines
3.9 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/shopspring/decimal"
)
// -----------------------------------------------------------
// 通用效果满足特定条件时附加n点固定伤害
// -----------------------------------------------------------
// 条件回调函数判断对方是否满足触发条件返回true则触发伤害
type conditionFunc func(e *EffectConditionalAddDamage) bool
type EffectConditionalAddDamage struct {
node.EffectNode
condition conditionFunc // 差异化:判断触发条件的函数
}
// 工厂函数:创建"条件附加伤害"效果实例,传入条件判断函数
func newEffectConditionalAddDamage(cond conditionFunc) *EffectConditionalAddDamage {
return &EffectConditionalAddDamage{
condition: cond,
}
}
// 初始化:批量注册所有"条件附加伤害"类效果
func init() {
registerConditionalAddDamageEffects()
}
// 批量注册绑定效果ID与对应的条件函数可扩展
func registerConditionalAddDamageEffects() {
// 效果ID与条件函数的映射
// 133: 对方烧伤时附加伤害134:对方冻伤时附加伤害135:对方是X属性时附加伤害136:对方处于异常状态时附加伤害
effectMap := map[int]conditionFunc{
133: conditionIsBurned, // Effect133对方烧伤时
141: conditionIsFrozen, // 新增:对方冻伤时
135: conditionIsAbnormal, // 新增对方是X属性时示例需根据实际属性枚举调整
130: conditionIsTypeX, // 新增:对方处于任意异常状态时
167: conditionprop, //167 若对手处于能力下降状态则附加n点伤害
}
// 循环注册所有效果
for effectID, cond := range effectMap {
input.InitEffect(input.EffectType.Skill, effectID, newEffectConditionalAddDamage(cond))
}
}
// -----------------------------------------------------------
// 核心共性逻辑:命中且满足条件时,附加固定伤害
// -----------------------------------------------------------
func (e *EffectConditionalAddDamage) OnSkill() bool {
// 1. 命中判定失败,不触发
if !e.Hit() {
return true
}
// 2. 检查是否满足触发条件(调用差异化的条件函数)
if !e.condition(e) {
return true
}
// 3. 附加固定伤害伤害值从SideEffectArgs[0]获取与原Effect133一致
damageValue := decimal.NewFromInt(int64(e.SideEffectArgs[0]))
e.Ctx().Opp.Damage(e.Ctx().Our, &info.DamageZone{
Type: info.DamageType.Fixed,
Damage: damageValue,
})
return true
}
// -----------------------------------------------------------
// 差异化条件函数的实现(对应不同效果的判断逻辑)
// -----------------------------------------------------------
// conditionIsBurned判断对方是否处于烧伤状态对应原Effect133
func conditionIsBurned(e *EffectConditionalAddDamage) bool {
return e.Ctx().Opp.StatEffect_Exist(info.PetStatus.Burned)
}
// conditionIsFrozen判断对方是否处于冻伤状态新增效果
func conditionIsFrozen(e *EffectConditionalAddDamage) bool {
return e.Ctx().Opp.StatEffect_Exist(info.PetStatus.Frozen)
}
// conditionIsTypeX判断对方是否为X属性示例需根据实际属性枚举调整
// 假设属性枚举为info.PetTypeX属性为info.PetType.X
func conditionIsTypeX(e *EffectConditionalAddDamage) bool {
return e.Ctx().Opp.CurrentPet.Gender == e.Args()[0]
}
// conditionIsAbnormal判断对方是否处于任意异常状态新增效果
// 假设异常状态包含烧伤、冻伤、麻痹等,通过检查是否存在任意异常状态实现
func conditionIsAbnormal(e *EffectConditionalAddDamage) bool {
return e.Ctx().Opp.StatEffect_Exist_all()
}
func conditionprop(e *EffectConditionalAddDamage) bool {
for _, v := range e.Ctx().Opp.Prop {
if v < 0 {
return true
}
}
return false
}