using System; using KKSG; using UnityEngine; using XMainClient.UI; using XMainClient.UI.UICommon; using XUtliPoolLib; namespace XMainClient { internal class Process_RpcC2G_DoEnterScene { public static uint runstate { get { return Process_RpcC2G_DoEnterScene._runstate; } } private static uint _runstate = 0u; public static void OnReply(DoEnterSceneArg oArg, DoEnterSceneRes oRes) { bool flag = oRes.errorcode == ErrorCode.ERR_INVALID_REQUEST; if (flag) { XSingleton.singleton.AddErrorLog("RpcC2G_DoEnterScene ERR_INVALID_REQUEST!", null, null, null, null, null); } else { bool flag2 = !XSingleton.singleton.bSceneLoadedRpcSend; if (!flag2) { XSingleton.singleton.bSceneServerReady = true; XSingleton.singleton.bSceneLoadedRpcSend = false; XSingleton.singleton.AddLog("Enter scene ", XSingleton.singleton.SceneID.ToString(), null, null, null, null, XDebugColor.XDebug_None); bool flag3 = oRes.errorcode == ErrorCode.ERR_DOENTERSCENE_FAILED; if (flag3) { XSingleton.singleton.AddLog("ERR_DOENTERSCENE_FAILED", null, null, null, null, null, XDebugColor.XDebug_None); } else { Process_RpcC2G_DoEnterScene._runstate = oRes.scenestate.runstate; Vector3 vector; vector = new Vector3(oRes.pos.x, oRes.pos.y, oRes.pos.z); Vector3 vector2 = XSingleton.singleton.FloatToAngle(oRes.face); Vector3 face = XSingleton.singleton.FloatToAngle(oRes.initface); XSingleton.singleton.Player.Attributes.OnFightGroupChange((XSingleton.singleton.SyncModeValue != 0) ? oRes.fightgroup : 1u); XSingleton.singleton.Player.Attributes.AppearAt = vector; XSingleton.singleton.Player.Net.CorrectNet(vector, face, 0u, true); XBattleDocument.MiniMapSetRotation(oRes.initface); GameObject gameObject = GameObject.Find("Scene/BattlePoint"); XSingleton.singleton.BattleTargetPoint = ((gameObject != null) ? gameObject.transform.position : Vector3.zero); gameObject = GameObject.Find("Scene/NestPoint"); XSingleton.singleton.NestTargetPoint = ((gameObject != null) ? gameObject.transform.position : Vector3.zero); XSingleton.singleton.GameCamera.Root_R_Y_Default = XSingleton.singleton.Player.EngineObject.Rotation.eulerAngles.y; XSingleton.singleton.GameCamera.Root_R_Y = XSingleton.singleton.GameCamera.Root_R_Y_Default; bool flag4 = XSingleton.singleton.GameCamera.Wall != null; if (flag4) { XSingleton.singleton.GameCamera.Wall.TargetY = XSingleton.singleton.GameCamera.Root_R_Y_Default; } bool bSpectator = XSingleton.singleton.bSpectator; if (bSpectator) { XSingleton.singleton.Puppets(XSingleton.singleton.Player, true, true); XSingleton.singleton.Freezed = true; XSingleton.singleton.Player.Attributes.OnFightGroupChange(2u); } else { bool flag5 = XSingleton.singleton.Player.Nav != null; if (flag5) { XSingleton.singleton.Player.Nav.Active(); } bool flag6 = XSingleton.singleton.Player.AI != null; if (flag6) { XSingleton.singleton.Player.AI.Active(); } bool flag7 = ((ulong)oRes.specialstate & (ulong)(1L << (XFastEnumIntEqualityComparer.ToInt(UnitSpecialState.Unit_Puppet) & 31))) > 0UL; bool flag8 = ((ulong)oRes.specialstate & (ulong)(1L << (XFastEnumIntEqualityComparer.ToInt(UnitSpecialState.Unit_Invisible) & 31))) > 0UL; bool flag9 = flag7 || flag8; if (flag9) { XSingleton.singleton.Player.UpdateSpecialStateFromServer(oRes.specialstate, uint.MaxValue); } else { XSingleton.singleton.Player.Present.ShowUp(); } } bool bSpectator2 = XSingleton.singleton.bSpectator; if (bSpectator2) { XSpectateSceneDocument specificDocument = XDocuments.GetSpecificDocument(XSpectateSceneDocument.uuID); specificDocument.IsCrossServerBattle = oRes.is_cross; } else { XBattleDocument specificDocument2 = XDocuments.GetSpecificDocument(XBattleDocument.uuID); specificDocument2.IsCrossServerBattle = oRes.is_cross; } for (int i = 0; i < XSingleton.singleton.Doc.Components.Count; i++) { (XSingleton.singleton.Doc.Components[i] as XDocComponent).OnEnterSceneFinally(); } XOutlookHelper.SetStatusState(XSingleton.singleton.Player.Attributes, XSingleton.singleton.Player, oRes.state, true); XSingleton.singleton.SceneStarted = oRes.scenestate.isready; bool flag10 = !XSingleton.singleton.SceneStarted && DlgBase.singleton.IsLoaded() && DlgBase.singleton.IsVisible(); if (flag10) { DlgBase.singleton.uiBehaviour.m_PromptFrame.gameObject.SetActive(true); DlgBase.singleton.SetLoadingPrompt(null, false); } bool flag11 = XSingleton.singleton.bSpectator && oRes.iswatchend; if (flag11) { DlgBase.singleton.ShowBackToMainCityTips(); } XSingleton.singleton.LevelRewardToken = oRes.battlestamp; bool isViewGridScene = XSingleton.singleton.IsViewGridScene; if (isViewGridScene) { XSingleton.singleton.Player.Net.SetHallSequence(); } bool flag12 = XSingleton.singleton.CurrentStage.Stage == EXStage.World; if (flag12) { XSingleton.singleton.Player.Attributes.SecurityStatistics.OnStart(); } XSingleton.singleton.SetLoginReconnectFlag(oRes.lrdata != null); bool flag13 = oRes.lrdata != null; if (flag13) { XSingleton.singleton.StartLoginReconnectSync(oRes.lrdata, oRes.otherunits); } else { XSingleton.singleton.StartEnterSceneSync(oRes.otherunits); } } } } } public static void OnTimeout(DoEnterSceneArg oArg) { } } }