hch
昨天 ee7f8b5362d27b228274c197dba97b17cb6bda57
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
100
101
102
103
104
105
106
107
 
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);
            }
        }
 
        // 处理主目标列表
        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);
        }
    }
 
    protected override void OnHitEachTarget(int _hitIndex, BattleObject target, HB427_tagSCUseSkill.tagSCUseSkillHurt hurt)
    {
        BattleHurtParam hurtParam = BattleUtility.CalcBattleHurtParam(this, _hitIndex, target, hurt, null, null);
 
        // 先调用目标受伤
        target.Hurt(hurtParam);
        
        // 再调用施法者吸血/反伤
        caster.OnHurtTarget(hurtParam);
    }
 
    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(); // 修复:添加空值检查
    }
 
}