hch
2025-12-31 4debfee66e8d8aabd179e2f8a61c7ca5ce62af3d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
 
using System.Collections.Generic;
using UnityEngine;
using System;
using System.Linq;
 
public class RebornSkill : SkillBase
{
 
    public RebornSkill(BattleObject _caster, SkillConfig _skillCfg,
            HB427_tagSCUseSkill _vNetData, List<GameNetPackBasic> _packList, BattleField _battleField)
            : base(_caster, _skillCfg, _vNetData, _packList, _battleField)
    {
 
    }
 
    protected override void OnHitTargets(int _hitIndex, List<HB427_tagSCUseSkill.tagSCUseSkillHurt> hitList)
    {
        for (int i = 0; i < hitList.Count; i++)
        {
            var hurt = hitList[i];
            BattleObject battleObject = battleField.battleObjMgr.GetBattleObject((int)hitList[i].ObjID);
            if (battleObject != null)
            {
                battleObject.OnReborn(hurt, hurt.ObjID == caster.teamHero.ObjID);
            }
        }
 
        bool vValue = true;
 
        // 处理主目标列表
        foreach (var hurt in hitList)
        { 
            BattleObject target = caster.battleField.battleObjMgr.GetBattleObject((int)hurt.ObjID);
            if (target == null)
            {
                Debug.LogError("目标为空 target == null ObjId : " + hurt.ObjID);
                continue;
            }
            OnHitEachTarget(_hitIndex, target, hurt, vValue);
            vValue = false;
        }
    }
 
    public override void Cast()
    {
        bool isCasterReborn = IsRebornTarget(caster);
 
        //    如果是复活施法者 先调用预复活 把角色显示出来回到idle动画
        if (isCasterReborn)
        {
            caster.PreReborn(true);
        }
 
        // for (int i = 0; i < tagUseSkillAttack.HurtList.Length; i++)
        // {
        //     var hurt = tagUseSkillAttack.HurtList[i];
        //     BattleObject battleObject = battleField.battleObjMgr.GetBattleObject((int)tagUseSkillAttack.HurtList[i].ObjID);
        //     if (battleObject != null)
        //     {
        //         battleObject.PreReborn();
        //     }
        // }
        base.Cast();
    }
 
    private bool IsRebornTarget(BattleObject _battleObj)
    {
        if (null == _battleObj) return false;
 
        for (int i = 0; i < tagUseSkillAttack.HurtList.Length; i++)
        {
            var hurt = tagUseSkillAttack.HurtList[i];
            BattleObject battleObject = battleField.battleObjMgr.GetBattleObject((int)tagUseSkillAttack.HurtList[i].ObjID);
            if (battleObject.ObjID == _battleObj.ObjID)
            {
                return true;
            }
        }
        return false;
    }
 
    public override void OnMiddleFrameStart(int times)
    {
        skillEffect.OnMiddleFrameStart(times); // 修复:添加空值检查
    }
 
    // 技能中摇结束回调:通知技能效果处理中摇结束
    public override void OnMiddleFrameEnd(int times, int hitIndex)
    {
        skillEffect.OnMiddleFrameEnd(times, hitIndex); // 修复:添加空值检查
    }
 
    public override void OnFinalFrameEnd()
    {
        skillEffect?.OnFinalFrameEnd(); // 修复:添加空值检查
    }
 
}