using System; using KKSG; using UnityEngine; using XUtliPoolLib; namespace XMainClient { internal class XActionReceiver : XSingleton { public void OnActionReceived(XEntity entity, StepSyncData data) { XStateDefine xstateDefine = (XStateDefine)(data.Common >> 12 & 15); Vector3 pos; pos= new Vector3((float)(data.PosXZ >> 16) / 100f, 0f, (float)(data.PosXZ & 65535) / 100f); Vector3 face = XSingleton.singleton.FloatToAngle((float)(data.Common & 4095)); uint num = (uint)(data.Common >> 16); bool flag = xstateDefine != XStateDefine.XState_Skill && entity.Skill != null && entity.Skill.IsCasting(); if (flag) { entity.Skill.EndSkill(false, true); } switch (xstateDefine) { case XStateDefine.XState_Idle: entity.Net.OnIdle(); break; case XStateDefine.XState_Move: { bool flag2 = entity.Machine.Current != XStateDefine.XState_Move; if (flag2) { entity.Machine.Stop(); bool flag3 = entity.Net.SyncSequence != num; if (flag3) { XMoveEventArgs @event = XEventPool.GetEvent(); @event.Speed = (float)data.Velocity / 10f; @event.Destination = entity.MoveObj.Position; @event.Inertia = false; @event.Firer = entity; XSingleton.singleton.FireEvent(@event); } } entity.Net.CorrectMoveSpeed((float)data.Velocity / 10f); break; } case XStateDefine.XState_Freeze: { bool isPlayer = entity.IsPlayer; if (isPlayer) { XSingleton.singleton.Empty(); } bool flag4 = entity.Net.SyncSequence != num; if (flag4) { XEntity entity2 = XSingleton.singleton.GetEntity(data.OpposerID); bool flag5 = entity2 != null; if (flag5) { bool freezedFromHit = data.FreezedFromHit; if (freezedFromHit) { XSkillCore skill = entity2.SkillMgr.GetSkill((uint)data.Skillid); bool flag6 = skill != null && skill.Soul.Hit != null && skill.Soul.Hit.Count > data.HitIdx; if (flag6) { XHitData hitData = skill.Soul.Hit[data.HitIdx]; XFreezeEventArgs event2 = XEventPool.GetEvent(); event2.HitData = hitData; event2.Dir = Vector3.forward; event2.Firer = entity; XSingleton.singleton.FireEvent(event2); } } else { XFreezeEventArgs event3 = XEventPool.GetEvent(); event3.Present = data.PresentInFreezed; event3.Dir = Vector3.forward; event3.Firer = entity; XSingleton.singleton.FireEvent(event3); } } } break; } case XStateDefine.XState_BeHit: { bool isPlayer2 = entity.IsPlayer; if (isPlayer2) { XSingleton.singleton.Empty(); } bool flag7 = entity.Net.SyncSequence != num; if (flag7) { XEntity entity3 = XSingleton.singleton.GetEntity(data.OpposerID); bool flag8 = entity3 != null; if (flag8) { XSkillCore skill2 = entity3.SkillMgr.GetSkill((uint)data.Skillid); bool flag9 = skill2 != null && skill2.Soul.Hit != null && skill2.Soul.Hit.Count > data.HitIdx; if (flag9) { entity.Machine.Stop(); XHitData hitData2 = skill2.Soul.Hit[data.HitIdx]; entity.Machine.Stop(); XBeHitEventArgs event4 = XEventPool.GetEvent(); event4.DepracatedPass = true; event4.HitDirection = Vector3.forward; event4.HitData = hitData2; event4.Firer = entity; event4.HitFrom = entity3; event4.Paralyze = (float)data.HitParalyzeFactor / 100f; event4.ForceToFlyHit = data.HitForceToFly; XSingleton.singleton.FireEvent(event4); } } } break; } case XStateDefine.XState_Death: { bool isPlayer3 = entity.IsPlayer; if (isPlayer3) { XSingleton.singleton.Empty(); } break; } case XStateDefine.XState_Skill: { int num2 = data.SkillCommon & 255; bool flag10 = num2 == 255; if (flag10) { num2 = -1; } float num3 = (float)(data.SkillCommon >> 8 & 255) / 100f; float num4 = (float)(data.SkillCommon >> 16 & 255) / 10f; float num5 = (float)(data.SkillCommon >> 24 & 255) / 100f; bool flag11 = entity.Net.SyncSequence != num; if (flag11) { XEntity target = data.OpposerIDSpecified ? XSingleton.singleton.GetEntity(data.OpposerID) : null; bool flag12 = false; XJAComboSkill xjacomboSkill = entity.Skill.CurrentSkill as XJAComboSkill; bool flag13 = xjacomboSkill != null; if (flag13) { uint num6 = (xjacomboSkill.MainCore.Soul.Ja == null || xjacomboSkill.MainCore.Soul.Ja.Count == 0) ? 0u : XSingleton.singleton.XHash(xjacomboSkill.MainCore.Soul.Ja[0].Name); bool flag14 = num6 == (uint)data.Skillid; if (flag14) { xjacomboSkill.ReFire((uint)data.Skillid, target, num2, num4, num); flag12 = true; } } bool flag15 = !flag12; if (flag15) { entity.Skill.EndSkill(false, true); XAttackEventArgs event5 = XEventPool.GetEvent(); event5.Target = target; event5.Identify = (uint)data.Skillid; event5.Firer = entity; event5.Slot = num2; event5.TimeScale = num4; event5.SyncSequence = num; XSingleton.singleton.FireEvent(event5); } bool flag16 = num3 == 0f; if (flag16) { bool flag17 = data.Skillid == (int)entity.SkillMgr.GetBrokenIdentity(); if (flag17) { XArmorBrokenArgs event6 = XEventPool.GetEvent(); event6.Firer = entity; XSingleton.singleton.FireEvent(event6); XArmorBrokenArgs event7 = XEventPool.GetEvent(); event7.Firer = XSingleton.singleton.Doc; event7.Self = entity; XSingleton.singleton.FireEvent(event7); } else { bool flag18 = data.Skillid == (int)entity.SkillMgr.GetRecoveryIdentity(); if (flag18) { XArmorRecoverArgs event8 = XEventPool.GetEvent(); event8.Firer = entity; XSingleton.singleton.FireEvent(event8); XArmorRecoverArgs event9 = XEventPool.GetEvent(); event9.Firer = XSingleton.singleton.Doc; event9.Self = entity; XSingleton.singleton.FireEvent(event9); } } } } bool flag19 = num5 > 0f && entity.Skill.IsCasting(); if (flag19) { entity.Skill.TagTrigger(); entity.Skill.CurrentSkill.MultipleDirectionFactorByServer = num5; } break; } } bool flag20 = xstateDefine > XStateDefine.XState_Idle; if (flag20) { entity.Net.KillIdle(); } entity.IsPassive = (data.PassiveSpecified && data.Passive); entity.Net.CorrectNet(pos, face, num, entity.Skill != null && entity.Skill.Enabled && entity.Machine != null && entity.Machine.Enabled); } public void OnMoveReceived(XEntity entity, StepMoveData data) { Vector3 destination; destination= new Vector3((float)(data.PosXZ >> 16) / 100f, 0f, (float)(data.PosXZ & 65535) / 100f); XMoveEventArgs @event = XEventPool.GetEvent(); @event.Speed = entity.Attributes.RunSpeed; @event.Destination = destination; @event.Inertia = data.Stoppage; @event.Stoppage = data.Stoppage; bool stoppage = data.Stoppage; if (stoppage) { @event.StopTowards = (float)data.Face / 10f; } @event.Firer = entity; XSingleton.singleton.FireEvent(@event); } } }