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<Dungeon, bool> clientCustomDungeonResult;
|
|
static CrossServerOneVsOneModel crossServerOneVsOneModel { get { return ModelCenter.Instance.GetModel<CrossServerOneVsOneModel>(); } }
|
|
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<Dungeon, bool> callBack)
|
{
|
clientCustomDungeonResult = callBack;
|
|
dungeonInfo = new Dungeon()
|
{
|
mapId = mapId,
|
lineId = lineId,
|
};
|
|
if (ClientSceneManager.Instance.IsClientFightMode)
|
{
|
ClientSceneManager.Instance.ExitClientFightMode();
|
}
|
//个人boss有概率出现开始和结束倒计时同时出现,这里调用一次ResetBufData待观察
|
ModelCenter.Instance.GetModel<DungeonModel>().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<DungeonModel>().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;
|
}
|
}
|