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;
|
}
|
}
|