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 uint 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()); } 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, (int)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; } }