From 6eb915c129fc90c6f4c82ae097dd6ffad5239efc Mon Sep 17 00:00:00 2001 From: chai Date: Mon, 25 Jan 2021 14:28:30 +0800 Subject: +scripts --- .../Assets/Scripts/XMainClient/XActionReceiver.cs | 239 +++++++++++++++++++++ 1 file changed, 239 insertions(+) create mode 100644 Client/Assets/Scripts/XMainClient/XActionReceiver.cs (limited to 'Client/Assets/Scripts/XMainClient/XActionReceiver.cs') diff --git a/Client/Assets/Scripts/XMainClient/XActionReceiver.cs b/Client/Assets/Scripts/XMainClient/XActionReceiver.cs new file mode 100644 index 00000000..3a8ad8b6 --- /dev/null +++ b/Client/Assets/Scripts/XMainClient/XActionReceiver.cs @@ -0,0 +1,239 @@ +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); + } + } +} -- cgit v1.1-26-g67d0