少年修仙传客户端代码仓库
hch
2025-06-12 204ef05a831c9484e2abc561d27ecbff7c797453
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
using UnityEngine;
using System.Collections.Generic;
 
public class ClientStatus : Status_Base
{
    private float m_FinishTime = 0;
    private SkillHelper.SkillInfo m_SkillInfo;
    private GActorFight m_Target;
 
    private float m_TriggerInterval;
    private float m_LastTriggerTime;
    private ulong m_HurtValue;
    private byte m_AttackType;
 
    public override void Init(uint sid, int skillId, uint srcSid, int type, int lastTime)
    {
        base.Init(sid, skillId, srcSid, type, lastTime);
        m_FinishTime = Time.time + lastTime * Constants.F_GAMMA + Time.deltaTime * 2;
        m_SkillInfo = SkillHelper.Instance.Get(skillId);
        m_Target = GAMgr.Instance.GetBySID(sid) as GActorFight;
        var _hero = PlayerDatas.Instance.hero;
        AttackHandler.CalculateDamage(_hero, m_Target, _hero.SkillMgr.Get(skillId), 0, ref m_HurtValue, ref m_AttackType);
 
        SkillHelper.EffectValue _effectValue;
        if (m_SkillInfo.effectValue.TryGetValue(4012, out _effectValue))
        {
            if (_effectValue.value1 == 13)
            {
                m_AttackType = (byte)HurtAttackType.Burning;
            }
 
            if (!m_Target.ActorInfo.status4012.ContainsKey((byte)_effectValue.value1))
            {
                m_Target.ActorInfo.status4012.Add((byte)_effectValue.value1, new Dictionary<uint, int>());
            }
 
            if (!m_Target.ActorInfo.status4012[(byte)_effectValue.value1].ContainsKey(srcSid))
            {
                m_Target.ActorInfo.status4012[(byte)_effectValue.value1].Add(srcSid, 1);
            }
            else
            {
                int _count = m_Target.ActorInfo.status4012[(byte)_effectValue.value1][srcSid];
                _count += 1;
                m_Target.ActorInfo.status4012[(byte)_effectValue.value1][srcSid] = _count;
            }
        }
 
        if (m_SkillInfo.effectValue.TryGetValue(9999, out _effectValue))
        {
            m_TriggerInterval = _effectValue.value1 * Constants.F_GAMMA;
        }
 
        m_LastTriggerTime = 0;
    }
 
    public override void Update()
    {
        if (m_Target == null || m_Target.ActorInfo.serverDie)
        {
            return;
        }
 
        if (Time.time - m_LastTriggerTime > m_TriggerInterval)
        {
            if (m_Target.ActorInfo.RealHp < m_HurtValue)
            {
                m_Target.ActorInfo.SyncServerHp = 0;
            }
            else
            {
                m_Target.ActorInfo.SyncServerHp = m_Target.ActorInfo.RealHp - m_HurtValue;
            }
 
            m_Target.ActorInfo.ReduceHp(m_HurtValue);
            GAStaticDefine.PopHp(PlayerDatas.Instance.hero,
                                    m_Target, m_AttackType, m_HurtValue);
 
            if (m_Target.ActorInfo.SyncServerHp == 0)
            {
                var _clientNpc = m_Target as GA_NpcClientFightNorm;
                if (_clientNpc != null && _clientNpc.belongEventID != -1)
                {
                    ClientSceneManager.Instance.NpcDead(m_Target.belongEventID, m_Target, _clientNpc.NpcConfig.NPCID);
                }
                m_Target.ActorInfo.serverDie = true;
                m_Target.Die(PlayerDatas.Instance.PlayerId, 0, m_AttackType);
            }
 
            m_LastTriggerTime = Time.time + m_TriggerInterval;
        }
    }
 
    public override bool IsComplete()
    {
        return Time.time > m_FinishTime;
    }
 
    public override void UnInit(uint objID, byte buffType)
    {
        base.UnInit(objID, buffType);
        m_SkillInfo = null;
        m_Target = null;
    }
}