using vnxbqy.UI; using System; using System.Collections; using System.Collections.Generic; using UnityEngine; public class ClientDungeonStageUtility { public static bool isClientDungeon { get; private set; } public static ushort clientMapId { get; private set; } public static Dungeon dungeonInfo { get; set; } static int clientErrorSymbolMapId = 0; static Action clientCustomDungeonResult; static CrossServerOneVsOneModel crossServerOneVsOneModel { get { return ModelCenter.Instance.GetModel(); } } public static void Init() { DTC0102_tagCDBPlayer.switchAccountEvent += Reset; DTC0403_tagPlayerLoginLoadOK.playerLoginOkEvent += OnPlayerLoginOk; StageLoad.Instance.onStageLoadFinish += OnStageLoadFinish; } public static void SetClientDungeon(bool value, ushort mapId) { isClientDungeon = value; clientMapId = mapId; } public static void RequestStartClientDungeon(int mapId, int lineId, Action callBack) { clientCustomDungeonResult = callBack; dungeonInfo = new Dungeon() { mapId = mapId, lineId = lineId, }; if (ClientSceneManager.Instance.IsClientFightMode) { ClientSceneManager.Instance.ExitClientFightMode(); } //个人boss有概率出现开始和结束倒计时同时出现,这里调用一次ResetBufData待观察 ModelCenter.Instance.GetModel().ResetBufData(); var pak = new CA231_tagCMClientStartCustomScene(); pak.MapID = (uint)mapId; pak.FuncLineID = (ushort)lineId; GameNetSystem.Instance.SendInfo(pak); } public static void RequestExitClientDungeon() { var pak = new CA233_tagCMClientExitCustomScene(); GameNetSystem.Instance.SendInfo(pak); } public static void ReceiveStartCustomDungeonResult(HB216_tagMCStartCustomSceneResult package) { if (package.MapID == dungeonInfo.mapId && package.FuncLineID == dungeonInfo.lineId) { if (clientCustomDungeonResult != null) { clientCustomDungeonResult(dungeonInfo, package.Result == 1); } } clientCustomDungeonResult = null; } public static void GotoNormalClientDungeon(int clientMapId, int mapId, int lineId) { if (!AssetSource.sceneFromEditor) { var assetValid = AssetVersionUtility.IsSceneAssetValid(mapId, lineId); if (!assetValid) { InGameDownLoad.Instance.TryDownLoad(InGameDownLoad.Dominant.Whole); return; } } RequestStartClientDungeon(mapId, lineId, (dungeonInfo, isOk) => { if (!isOk) { return; } var hero = PlayerDatas.Instance.hero; if (hero != null) { hero.StopAll(); } MapTransferUtility.Instance.Clear(); SetClientDungeon(true, (ushort)clientMapId); StageLoad.Instance.PushSceneLoadCommand(new StageLoad.StageLoadCommand() { toMapId = clientMapId, toLineId = 0, needEmpty = true, needLoadResource = true, serverType = ServerType.Main, isClientLoadMap = true }); var _hero = PlayerDatas.Instance.hero; if (_hero != null) { GA_Hero.recordServerPos = new Vector3((int)(_hero.Pos.x * 2), 0, (int)(_hero.Pos.z * 2)); } PlayerDatas.Instance.baseData.mainServerMapIdRecord = PlayerDatas.Instance.baseData.MapID; PlayerDatas.Instance.baseData.MapID = (ushort)clientMapId; }); } public static void ExitNormalClientDungeon() { SetClientDungeon(false, 0); PlayerDatas.Instance.extersion.pkState = 0; ModelCenter.Instance.GetModel().ResetBufData(); PlayerDatas.Instance.baseData.MapID = PlayerDatas.Instance.baseData.mainServerMapIdRecord; StageLoad.Instance.PushSceneLoadCommand(new StageLoad.StageLoadCommand() { toMapId = PlayerDatas.Instance.baseData.MapID, toLineId = 0, needEmpty = true, needLoadResource = true, serverType = ServerType.Main, isClientLoadMap = true, refreshPlayerDatas = true, exitClientMap = true, }); } public static int GetClientMapId(int mapId) { switch (mapId) { case HazyDemonKingModel.DATAMAP: case HazyDemonKingModel.CROSSSERVERDATAMAP: return HazyDemonKingModel.CLIENTDATAMAP; case HazyGrassModel.REIKI_DATAMAP: return HazyGrassModel.REIKI_CLIENTDATAMAP; case HazyGrassModel.FAIRY_DATAMAP: return HazyGrassModel.FAIRY_CLIENTDATAMAP; case PersonalBossModel.PERSONALBOSS_MAPID: case HazyRegionModel.PRECIOUS_CLIENTDATAMAP: case TreasureModel.CLIENTDATAMAP: case ClientGuardDungeon.DATAMAPID: return mapId; default: return mapId; } } private static void OnPlayerLoginOk() { if (isClientDungeon) { RequestStartClientDungeon(dungeonInfo.mapId, dungeonInfo.lineId, (dungeonInfo, isOk) => { if (!isOk) { if (StageLoad.Instance.isLoading) { clientErrorSymbolMapId = dungeonInfo.mapId; return; } if (isClientDungeon) { ExitNormalClientDungeon(); } } }); } } private static void OnStageLoadFinish() { if (clientErrorSymbolMapId != 0) { if (isClientDungeon && dungeonInfo.mapId == clientErrorSymbolMapId) { ExitNormalClientDungeon(); } } clientErrorSymbolMapId = 0; } private static void Reset() { isClientDungeon = false; clientMapId = 0; } }