feat(fight): 实现 boss 战斗中精灵特性的支持与多个新魂印效果

- 在 `fight_boss.go` 中为 Boss 的每只宠物增加了 CatchTime 字段以区分不同精灵,
  并修复了技能特效参数解析的问题。
- 新增多个魂印(NewSeIdx)实现,包括:
  * 无限 PP、伤害倍率控制、命中屏蔽、属性克制、暴击率调整等。
- 调整了部分已有 NewSeIdx 文件中的方法调用方式,统一使用 `ID().GetCatchTime()`
  来判断精灵是否在场。
- 修改了 EffectIDCombiner 的字段访问方式,改为通过 Get/Set 方法操作。
- 优化战斗逻辑,在 NPC 战斗中加入 AI 自动出招机制。
This commit is contained in:
2025-11-26 15:25:10 +08:00
parent f76587f952
commit 0ea1a24419
47 changed files with 518 additions and 102 deletions

View File

@@ -1,6 +1,7 @@
package effect
import (
"blazing/logic/service/fight/info"
"blazing/logic/service/fight/input"
)
@@ -10,6 +11,37 @@ type NewSel66 struct {
NewSel0
}
func (e *NewSel66) OnSkill() bool {
if e.ID().GetCatchTime() != e.Ctx().Our.CurrentPet.Info.CatchTime {
return true
}
if e.Ctx().SkillEntity.Category() != info.Category.PHYSICAL {
return true
}
// n% 触发概率(默认 SideEffectArgs[0]
chance := e.EffectNode.SideEffectArgs[0]
success, _, _ := e.Input.Player.Roll(chance, 100)
if !success {
return true
}
var duration int
// 持续回合
duration = int(e.Input.FightC.GetRand().Int31n(2)) // 默认随机 2~3 回合
duration++
// 获取状态效果
eff := input.Geteffect(input.EffectType.Status, int(e.Args()[1]))
if eff == nil {
return true
}
eff.Duration(duration)
eff.SetArgs(e.Ctx().Our) //输入参数是对方
e.Ctx().Opp.AddEffect(e.Ctx().Our, eff)
return true
}
func init() {
input.InitEffect(input.EffectType.NewSel, 66, &NewSel66{})
}