feat(pet): 添加精灵进化功能并优化融合系统

- 新增PetELV方法实现精灵进化功能,支持分支进化选择
- 添加进化相关的数据结构定义
- 实现进化材料检查和扣除逻辑
- 优化宠物融合失败处理机制

fix(fight): 修复战斗系统和效果计算问题

- 修复NewSeIdx_11和effect_60中的伤害计算逻辑
- 修复战斗状态判断条件,避免非PVP模式下的错误处理
- 优化战斗回合处理流程,修复效果缓存清空时机
- 修复effect_69
This commit is contained in:
2026-01-03 01:35:32 +08:00
parent c056fdcebc
commit a62b94446a
17 changed files with 323 additions and 66 deletions

View File

@@ -244,56 +244,60 @@ func (f *FightC) resolveRound(p1Action, p2Action action.BattleActionI) {
return
}
// fmt.Println("开始结算回合")
// 动作优先级排序
b1, b2 := f.Compare(p1Action, p2Action)
switch a := b1.(type) {
switch actionType := b1.(type) {
case *action.ActiveSwitchAction:
if f.GetInputByAction(a, false).CurrentPet.Info.Hp <= 0 {
f.GetInputByAction(a, false).CurrentPet.Info.Hp = 1
}
if b2k, ok := b2.(*action.SelectSkillAction); ok {
if b2k.SkillEntity != nil {
if b2k.CD != nil {
f.waittime = *b2k.CD
}
}
f.enterturn(b2.(*action.SelectSkillAction), nil)
} else {
f.enterturn(nil, nil)
}
f.handleActiveSwitchAction(actionType, b2)
case *action.UseItemAction:
f.handleItemAction(a)
if f.GetInputByAction(a, false).CurrentPet.Info.Hp <= 0 {
f.GetInputByAction(a, false).CurrentPet.Info.Hp = 1
}
if b2k, ok := b2.(*action.SelectSkillAction); ok {
if b2k.SkillEntity != nil {
if b2k.CD != nil {
f.waittime = *b2k.CD
}
}
f.enterturn(b2.(*action.SelectSkillAction), nil)
} else {
if a1, ok := b2.(*action.UseItemAction); ok {
f.handleItemAction(a1)
}
f.enterturn(nil, nil)
}
f.handleUseItemAction(actionType, b2)
default:
f.handleSkillActions(b1, b2)
}
}
// handleActiveSwitchAction 处理主动切换精灵动作
func (f *FightC) handleActiveSwitchAction(switchAction *action.ActiveSwitchAction, otherAction action.BattleActionI) {
input := f.GetInputByAction(switchAction, false)
if input.CurrentPet.Info.Hp <= 0 {
input.CurrentPet.Info.Hp = 1
}
if skillAction, ok := otherAction.(*action.SelectSkillAction); ok {
if skillAction.SkillEntity != nil && skillAction.CD != nil {
f.waittime = *skillAction.CD
}
f.enterturn(skillAction, nil)
} else {
f.enterturn(nil, nil)
}
}
// handleUseItemAction 处理使用道具动作
func (f *FightC) handleUseItemAction(itemAction *action.UseItemAction, otherAction action.BattleActionI) {
f.handleItemAction(itemAction)
input := f.GetInputByAction(itemAction, false)
if input.CurrentPet.Info.Hp <= 0 {
input.CurrentPet.Info.Hp = 1
}
if skillAction, ok := otherAction.(*action.SelectSkillAction); ok {
if skillAction.SkillEntity != nil && skillAction.CD != nil {
f.waittime = *skillAction.CD
}
f.enterturn(skillAction, nil)
} else {
if otherItemAction, ok := otherAction.(*action.UseItemAction); ok {
f.handleItemAction(otherItemAction)
}
f.enterturn(nil, nil)
}
}
// 使用道具的逻辑封装
func (f *FightC) handleItemAction(a *action.UseItemAction) {