少年修仙传客户端代码仓库
hch
2025-03-03 28785d6ddf9c08e49527ede9405c7b6c93c6ed32
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
using UnityEngine;
using System.Collections.Generic;
 
public class SkillManager
{
    private Dictionary<int, Skill> m_SkillDict;
    private List<int> m_SkillList;
    private List<int> m_PassiveSkill;
 
    private uint m_OwnerID;
 
    private Skill m_CurrentSkill;
    public Skill CurCastSkill
    {
        get
        {
            return m_CurrentSkill;
        }
        private set
        {
            m_CurrentSkill = value;
        }
    }
 
    private bool m_DoingPrepareSkill = false;
    public bool DoingPrepareSkill
    {
        get
        {
            return m_DoingPrepareSkill;
        }
        set
        {
            m_DoingPrepareSkill = value;
        }
    }
 
    public SkillManager(uint sid)
    {
        m_OwnerID = sid;
        m_SkillDict = new Dictionary<int, Skill>();
        m_SkillList = new List<int>();
        m_PassiveSkill = new List<int>();
    }
 
    public bool TryGetPassiveEffectValue(int id, out SkillHelper.EffectValue effectValue,
                                                 out SkillHelper.SkillInfo skill)
    {
        SkillHelper.SkillInfo _skill;
        foreach (var _id in m_PassiveSkill)
        {
            _skill = SkillHelper.Instance.Get(_id);
            if (_skill.effectValue.TryGetValue(id, out effectValue))
            {
                skill = _skill;
                return true;
            }
        }
        effectValue = default(SkillHelper.EffectValue);
        skill = null;
        return false;
    }
 
    public void ResetAllCD()
    {
        foreach (var _skill in m_SkillDict.Values)
        {
            if (_skill != null
             && _skill.skillInfo != null
             && _skill.skillInfo.config != null)
            {
                if (Skill.RefreshCD != null)
                {
                    _skill.cd = 0;
                    Skill.RefreshCD(_skill.id, 0, _skill.skillInfo.config.CoolDownTime * Constants.F_GAMMA);
                }
            }
        }
    }
 
    public Skill Get(int id, int ElementID = 0)
    {
        if (id <= 0)
        {
            Debug.LogWarningFormat("传入了非法的技能id...[ {0} ]", id);
            return null;
        }
 
        if (!m_SkillDict.ContainsKey(id))
        {
            Skill _skill = new Skill(m_OwnerID, id, ElementID);
            m_SkillDict[id] = _skill;
            m_SkillList.Add(id);
            if (_skill.skillInfo.config.FuncType == (int)E_SkillFuncType.FaBaoPassiveSkills)
            {
                if (!m_PassiveSkill.Contains(id))
                {
                    m_PassiveSkill.Add(id);
                }
            }
        }
        else
        {
            if (ElementID != 0)
                m_SkillDict[id].SkillElementID = ElementID;
        }
 
        return m_SkillDict[id];
    }
 
    /// <summary>
    /// 释放给定id技能
    /// </summary>
    /// <param name="id">技能id</param>
    /// <param name="force">是否强制,忽略cd</param>
    public void CastSkill(uint userSID, int id, bool force = false)
    {
        CurCastSkill = Get(id);
 
        if (!force)
        {
            if (!CurCastSkill.IsValid())
            {
                return;
            }
        }
 
        CurCastSkill.SkillCompelete = false;
 
        CurCastSkill.Cast(userSID);
 
        CurCastSkill.hurtClientList.Clear();
        CurCastSkill.hurtClntFightNpcList.Clear();
    }
 
    public void Update()
    {
        for (int i = 0; i < m_SkillList.Count; ++i)
        {
            if (m_SkillDict.ContainsKey(m_SkillList[i]) == false)
            {
                continue;
            }
            m_SkillDict[m_SkillList[i]].Update();
        }
    }
 
    public void Clear()
    {
        Skill _skill = null;
        GActorFight _owner = GAMgr.Instance.GetBySID(m_OwnerID) as GActorFight;
        foreach (var _skillID in m_SkillList)
        {
            _skill = m_SkillDict[_skillID];
            _skill.ClearSkillKillTargets();
        }
    }
}