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<int[][]>(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<int>();
|
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<TeamModel>();
|
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<LoadingWin>();
|
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>();
|
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>();
|
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<DungeonModel>().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;
|
}
|
|
}
|