using System.Collections; using System.Collections.Generic; using UnityEngine; using vnxbqy.UI; using System; using LitJson; using System.Text; public class ClientCrossServerOneVsOne { public const int mapId = 1000; public static uint OPPONENT_PLAYERID; public static bool isClientCrossServerOneVsOne { get; private set; } public static FightResultSupplement resultSupplement; public static int myPlace { get; private set; } //我的位置,1-左;2-右 public static string opponentName { get; private set; } static FightObstacle[] m_Obstacles; public static FightObstacle[] obstacles { get { if (m_Obstacles == null) { var configString = FuncConfigConfig.Get("CrossRealmPKFB").Numerical1; var matches = JsonMapper.ToObject(configString); m_Obstacles = new FightObstacle[matches.Length]; for (var i = 0; i < matches.Length; i++) { m_Obstacles[i] = new FightObstacle() { aPosX = matches[i][0], aPosY = matches[i][1], bPosX = matches[i][2], bPosY = matches[i][3], angle = matches[i][4], }; } } return m_Obstacles; } } public static string GetRandomOpponentName(int job) { return StringUtility.Contact(RandomNameConfig.GetFirstName(job), RandomNameConfig.GetSecondName(job)); } public static GA_PlayerClient.PlayerInfo GetRandomOpponentPlayerInfo(int scoreClass, int job, string playerName, int level, ulong maxHp) { var config = CrossServerOneVsOneRobotConfig.GetRandomRobotConfig(scoreClass); var jsonData = JsonMapper.ToObject(config.equips); var equipItems = new List(); if (jsonData.Keys.Contains(job.ToString())) { var equipJson = jsonData[job.ToString()]; for (var i = 0; i < equipJson.Count; i++) { equipItems.Add((int)equipJson[i]); } } var equipInfos = new GA_PlayerClient.CEquipInfo[equipItems.Count]; for (int i = 0; i < equipInfos.Length; i++) { var equipInfo = new GA_PlayerClient.CEquipInfo(); var itemConfig = ItemConfig.Get(equipItems[i]); equipInfo.id = itemConfig.ID; equipInfo.place = itemConfig.EquipPlace; equipInfos[i] = equipInfo; } var playerInfo = new GA_PlayerClient.PlayerInfo() { maxHp = maxHp, hp = maxHp, level = (ushort)level, job = (byte)job, face = AvatarHelper.GetAvatarDefaultID(job), facePic = AvatarHelper.GetAvatarFrameDefaultID(job), pos = Vector3.zero, name = playerName, itemDatas = equipInfos, }; return playerInfo; } //挑战机器人 ID固定为 1-对应高分段机器人,2-中分段,3-低分段 public static void JiaMatchOk(HC001_tagGCCrossRealmPKMatchOK.tagGCCrossRealmPKMatchPlayer player) { var teamModel = ModelCenter.Instance.GetModel(); if (teamModel.isMatching) { teamModel.RequestCancelAutoMatchTeam(); } myPlace = 1; opponentName = player.PlayerName; OPPONENT_PLAYERID = player.PlayerID; StartClientCrossServerOneVsOne(); } public static void StartClientCrossServerOneVsOne() { isClientCrossServerOneVsOne = true; LoadingWin.isCrossServerOneVsOne = true; WindowCenter.Instance.Open(); MapTransferUtility.Instance.Clear(); ClientDungeonStageUtility.SetClientDungeon(true, mapId); var sendInfo = new CA231_tagCMClientStartCustomScene(); GameNetSystem.Instance.SendInfo(sendInfo); StageLoad.Instance.PushSceneLoadCommand(new StageLoad.StageLoadCommand() { toMapId = mapId, toLineId = 0, needEmpty = true, needLoadResource = true, serverType = ServerType.Main, isClientLoadMap = true }); PlayerDatas.Instance.baseData.mainServerMapIdRecord = PlayerDatas.Instance.baseData.MapID; PlayerDatas.Instance.baseData.MapID = mapId; } public static void JiaWaitFight(int waitSeconds) { var jiaBarrier = new HA713_tagMCDynamicBarrierState(); jiaBarrier.State = 1; jiaBarrier.BarrierList = new HA713_tagMCDynamicBarrierState.tagMCDynamicBarrier[obstacles.Length]; jiaBarrier.Count = (byte)obstacles.Length; for (var i = 0; i < jiaBarrier.BarrierList.Length; i++) { var obstacle = obstacles[i]; jiaBarrier.BarrierList[i] = new HA713_tagMCDynamicBarrierState.tagMCDynamicBarrier() { APosX = (ushort)obstacle.aPosX, APosY = (ushort)obstacle.aPosY, BPosX = (ushort)obstacle.bPosX, BPosY = (ushort)obstacle.bPosY, Angle = (ushort)obstacle.angle, }; } GameNetSystem.Instance.PushPackage(jiaBarrier, ServerType.Main); var timeTick = new H0431_tagTimeTick(); timeTick.Type = (int)DungeonCoolDownType.WaitStart; timeTick.Tick = (uint)waitSeconds * 1000; GameNetSystem.Instance.PushPackage(timeTick, ServerType.Main); } public static void JiaFightBegin() { var jiaBarrier = new HA713_tagMCDynamicBarrierState(); jiaBarrier.State = 0; jiaBarrier.BarrierList = new HA713_tagMCDynamicBarrierState.tagMCDynamicBarrier[obstacles.Length]; jiaBarrier.Count = (byte)obstacles.Length; for (var i = 0; i < jiaBarrier.BarrierList.Length; i++) { var obstacle = obstacles[i]; jiaBarrier.BarrierList[i] = new HA713_tagMCDynamicBarrierState.tagMCDynamicBarrier() { APosX = (ushort)obstacle.aPosX, APosY = (ushort)obstacle.aPosY, BPosX = (ushort)obstacle.bPosX, BPosY = (ushort)obstacle.bPosY, Angle = (ushort)obstacle.angle, }; } GameNetSystem.Instance.PushPackage(jiaBarrier, ServerType.Main); } public static void JiaRoundBegin(int round, uint[] winnerIds) { var waitStartTimeTick = new H0431_tagTimeTick(); waitStartTimeTick.Type = (int)DungeonCoolDownType.FightStart; waitStartTimeTick.Tick = 60 * 1000; GameNetSystem.Instance.PushPackage(waitStartTimeTick, ServerType.Main); var roundWinnerIds = new int[winnerIds.Length]; for (var i = 0; i < roundWinnerIds.Length; i++) { roundWinnerIds[i] = (int)winnerIds[i]; } var missionData = new DungeonMissionData() { roundNum = round, roundWinerIDList = roundWinnerIds, isStart = 1, }; var dungeonModel = ModelCenter.Instance.GetModel(); dungeonModel.UpdateJiaDungeonMission(mapId, missionData); } public static void JiaRoundEnd(bool isOver, int round, uint[] winnerIds) { var roundWinnerIds = new int[winnerIds.Length]; for (var i = 0; i < roundWinnerIds.Length; i++) { roundWinnerIds[i] = (int)winnerIds[i]; } var missionData = new DungeonMissionData() { roundNum = round, roundWinerIDList = roundWinnerIds, prepareTime = isOver ? 0 : 3000, isStart = 0, }; var dungeonModel = ModelCenter.Instance.GetModel(); dungeonModel.UpdateJiaDungeonMission(mapId, missionData); } public static void JiaDungeonExit(int seconds) { var exitDungeon = new H0431_tagTimeTick(); exitDungeon.Type = (int)DungeonCoolDownType.LeaveMap; exitDungeon.Tick = (uint)seconds * 1000; GameNetSystem.Instance.PushPackage(exitDungeon, ServerType.Main); } public static void ReportDungeonResult(FightResultSupplement resultSupplement) { ClientCrossServerOneVsOne.resultSupplement = resultSupplement; var sendInfo = new CC108_tagCMCrossRealmPKRobotOver(); sendInfo.IsWin = (byte)(resultSupplement.winPlayerId == PlayerDatas.Instance.baseData.PlayerID ? 1 : 0); sendInfo.TagPlayerID = OPPONENT_PLAYERID; GameNetSystem.Instance.SendInfo(sendInfo); } public static void StopClientCrossServerOneVsOne() { isClientCrossServerOneVsOne = false; ClientDungeonStageUtility.SetClientDungeon(false, 0); PlayerDatas.Instance.extersion.pkState = 0; ModelCenter.Instance.GetModel().ResetBufData(); PersonalEnemy.ReleaseAll(); 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.CrossSever, isClientLoadMap = true, refreshPlayerDatas = true }); } public struct FightResultSupplement { public DateTime endTime; public int overType; public int winPlayerId; public int roundCount; public uint[] roundWinnerId; public string opponentName; } public struct FightObstacle { public int aPosX; public int aPosY; public int bPosX; public int bPosY; public int angle; } }