From 6eb915c129fc90c6f4c82ae097dd6ffad5239efc Mon Sep 17 00:00:00 2001 From: chai Date: Mon, 25 Jan 2021 14:28:30 +0800 Subject: +scripts --- Client/Assets/Scripts/XMainClient/XReconnection.cs | 269 +++++++++++++++++++++ 1 file changed, 269 insertions(+) create mode 100644 Client/Assets/Scripts/XMainClient/XReconnection.cs (limited to 'Client/Assets/Scripts/XMainClient/XReconnection.cs') diff --git a/Client/Assets/Scripts/XMainClient/XReconnection.cs b/Client/Assets/Scripts/XMainClient/XReconnection.cs new file mode 100644 index 00000000..52d0ddc5 --- /dev/null +++ b/Client/Assets/Scripts/XMainClient/XReconnection.cs @@ -0,0 +1,269 @@ +using System; +using System.Collections.Generic; +using KKSG; +using UILib; +using XUtliPoolLib; + +namespace XMainClient +{ + internal class XReconnection : XSingleton + { + public uint SceneID + { + get + { + return this._scene_id; + } + } + + public DeathInfo PlayerDeathinfo + { + get + { + return this._player_death_info; + } + } + + public RoleAllInfo PlayerInfo + { + get + { + return this._player_info; + } + } + + public UnitAppearance PlayerApperance + { + get + { + return this._player_appearance; + } + } + + public Dictionary UnitsAppearance + { + get + { + return this._units_appearance; + } + } + + public bool IsAutoFight + { + get + { + return this._is_auto_fight; + } + } + + public bool IsLoginReconnect + { + get + { + return this._is_login_reconnect; + } + } + + private uint _scene_id; + + private DeathInfo _player_death_info = null; + + private RoleAllInfo _player_info = null; + + private UnitAppearance _player_appearance = null; + + private Dictionary _units_appearance = new Dictionary(); + + private bool _is_auto_fight; + + private bool _is_login_reconnect; + + public void SetLoginReconnectFlag(bool flag) + { + this._is_login_reconnect = flag; + } + + private bool IsValid(UnitAppearance unit) + { + return unit != null && unit.position.x >= XCommon.XEps && unit.position.z >= XCommon.XEps; + } + + private bool IsPupet(uint specialstate) + { + return ((ulong)specialstate & (ulong)(1L << (XFastEnumIntEqualityComparer.ToInt(UnitSpecialState.Unit_Puppet) & 31))) > 0UL; + } + + public void GetReconnectData(PtcG2C_ReconnectSyncNotify data) + { + this._scene_id = ((data.Data.scene == null) ? 1u : data.Data.scene.sceneid); + this._player_death_info = data.Data.deathinfo; + this._player_info = data.Data.self; + this._player_appearance = data.Data.selfAppearance; + this._is_auto_fight = data.Data.isautofight; + XSingleton.singleton.SceneStarted = (data.Data.scene == null || data.Data.scene.isready); + this._units_appearance.Clear(); + bool flag = !XSingleton.singleton.bSpectator; + if (flag) + { + bool flag2 = this.IsValid(this._player_appearance); + if (flag2) + { + this._units_appearance.Add(this._player_appearance.uID, this._player_appearance); + } + } + for (int i = 0; i < data.Data.units.Count; i++) + { + bool flag3 = !this._units_appearance.ContainsKey(data.Data.units[i].uID); + if (flag3) + { + this._units_appearance.Add(data.Data.units[i].uID, data.Data.units[i]); + } + else + { + XSingleton.singleton.AddErrorLog("Reconnect have same key ", data.Data.units[i].uID.ToString(), null, null, null, null); + } + } + this.StartReconnectSync(); + } + + private void StartReconnectSync() + { + bool flag = XSingleton.singleton.SceneID != this._scene_id || !XSingleton.singleton.SceneReady; + if (flag) + { + bool bSceneLoadedRpcSend = XSingleton.singleton.bSceneLoadedRpcSend; + if (bSceneLoadedRpcSend) + { + RpcC2G_DoEnterScene rpcC2G_DoEnterScene = new RpcC2G_DoEnterScene(); + rpcC2G_DoEnterScene.oArg.sceneid = XSingleton.singleton.SceneID; + XSingleton.singleton.Send(rpcC2G_DoEnterScene); + } + } + else + { + this.SyncData(); + } + } + + private void SyncData() + { + bool syncMode = XSingleton.singleton.SyncMode; + if (syncMode) + { + bool flag = XSingleton.singleton.Player != null && this._player_death_info != null; + if (flag) + { + XReviveDocument specificDocument = XDocuments.GetSpecificDocument(XReviveDocument.uuID); + specificDocument.SetReviveData((int)this._player_death_info.revivecount, (int)this._player_death_info.costrevivecount, this._player_death_info.type); + } + XSingleton.singleton.OnReconnect(); + XSingleton.singleton.OnReconnect(); + XSingleton.singleton.OnReconnect(); + } + bool flag2 = !this.IsPupet(this._player_appearance.specialstate); + if (flag2) + { + XSingleton.singleton.Stop(true); + } + bool flag3 = !XSingleton.singleton.bSpectator; + if (flag3) + { + XSingleton.singleton.Player.UpdateSpecialStateFromServer(this._player_appearance.specialstate, uint.MaxValue); + } + XReconnectedEventArgs @event = XEventPool.GetEvent(); + @event.Firer = XSingleton.singleton.Doc; + @event.PlayerInfo = this._player_info; + @event.PlayUnit = this._player_appearance; + XSingleton.singleton.FireEvent(@event); + } + + public void StartEnterSceneSync(List units) + { + bool flag = units.Count == 0; + if (!flag) + { + this._units_appearance.Clear(); + bool flag2 = !XSingleton.singleton.bSpectator; + if (flag2) + { + bool flag3 = this.IsValid(this._player_appearance); + if (flag3) + { + this._units_appearance.Add(XSingleton.singleton.Player.ID, this._player_appearance); + } + } + for (int i = 0; i < units.Count; i++) + { + bool flag4 = !this._units_appearance.ContainsKey(units[i].uID); + if (flag4) + { + this._units_appearance.Add(units[i].uID, units[i]); + } + else + { + XSingleton.singleton.AddErrorLog("Reconnect have same key ", units[i].uID.ToString(), null, null, null, null); + } + } + bool syncMode = XSingleton.singleton.SyncMode; + if (syncMode) + { + XSingleton.singleton.OnReconnect(); + } + } + } + + public void SetPlayerInfo(RoleAllInfo info) + { + this._player_info = info; + } + + public void StartLoginReconnectSync(LoginReconnectEnterSceneData data, List units) + { + bool flag = data == null; + if (!flag) + { + this._scene_id = XSingleton.singleton.SceneID; + this._player_death_info = data.deathinfo; + this._player_appearance = data.selfAppearance; + this._is_auto_fight = data.isautofight; + XSingleton.singleton.SceneStarted = true; + bool flag2 = XSingleton.singleton.Player != null && data.deathinfo != null; + if (flag2) + { + XReviveDocument specificDocument = XDocuments.GetSpecificDocument(XReviveDocument.uuID); + specificDocument.SetReviveData((int)data.deathinfo.revivecount, (int)data.deathinfo.costrevivecount, data.deathinfo.type); + } + this._units_appearance.Clear(); + bool flag3 = !XSingleton.singleton.bSpectator; + if (flag3) + { + bool flag4 = this.IsValid(this._player_appearance); + if (flag4) + { + this._units_appearance.Add(this._player_appearance.uID, this._player_appearance); + } + } + for (int i = 0; i < units.Count; i++) + { + bool flag5 = !this._units_appearance.ContainsKey(units[i].uID); + if (flag5) + { + this._units_appearance.Add(units[i].uID, units[i]); + } + else + { + XSingleton.singleton.AddErrorLog("Reconnect have same key ", units[i].uID.ToString(), null, null, null, null); + } + } + this.SyncData(); + } + } + + private bool OnReconnectFail(IXUIButton button) + { + XSingleton.singleton.Close(NetErrCode.Net_NoError); + XSingleton.singleton.AuthorizationSignOut(); + return true; + } + } +} -- cgit v1.1-26-g67d0