using System; using System.Collections.Generic; using ET; namespace GFGGame { public class NoticeArebaRankChange : AMHandler { protected override async ETTask Run(Session session, SC_RankChange message) { ArenaDataManager.Instance.Grade = message.Grade; ArenaDataManager.Instance.Rank = message.RankInGrade; ArenaDataManager.Instance.TryUpdateHighest(); await ETTask.CompletedTask; } } public class NoticeArenaHistoryChange : AMHandler { protected override async ETTask Run(Session session, SC_ArenaHistoryAdd message) { ArenaHistoryData historyData = ArenaSproxy.GetArenaHistoryData(message.history); ArenaDataManager.Instance.HistoryDatas.Insert(0, historyData); if (ArenaDataManager.Instance.HistoryDatas.Count > 20) { ArenaDataManager.Instance.HistoryDatas.RemoveAt(ArenaDataManager.Instance.HistoryDatas.Count - 1); } // if (ViewManager.isViewOpen(typeof(ArenaView).FullName)) // { // ViewManager.Show(); // } await ETTask.CompletedTask; } } public class NoticeArenaWeekClear : AMHandler { protected override async ETTask Run(Session session, SC_ArenaWeekClear message) { ArenaDataManager.Instance.Tag = message.Tag; ArenaDataManager.Instance.ThemeList = message.Themes; if (ViewManager.isViewOpen(typeof(ArenaView).FullName)) { ViewManager.Show(); PromptController.Instance.ShowFloatTextPrompt("周结算已更新"); } await ETTask.CompletedTask; } } public class NoticeArenaSeasonEnd : AMHandler { protected override async ETTask Run(Session session, SC_ArenaSeasonEnd message) { if (ViewManager.isViewOpen(typeof(ArenaView).FullName)) { ViewManager.GoBackFrom(typeof(ArenaView).FullName); PromptController.Instance.ShowFloatTextPrompt("赛季已结束"); } ArenaDataManager.Instance.Clear(); ArenaDataManager.Instance.SeasonId = message.seasonId; ArenaDataManager.Instance.AddCheckSeasonOpenTimer(); await ETTask.CompletedTask; } } public static class ArenaSproxy { //获取竞技场信息 public static async ETTask ReqArenaInfos() { S2C_GetArenaInfos response = null; response = (S2C_GetArenaInfos)await MessageHelper.SendToServer(new C2S_GetArenaInfos()); if (response != null) { if (response.Error == ErrorCode.ERR_Success) { ArenaDataManager.Instance.LastFightTime = response.LastFightTime; ArenaDataManager.Instance.ThemeList = response.ThemeList; ArenaDataManager.Instance.Tag = response.Tag; ArenaDataManager.Instance.SeasonId = response.SeasonId; ArenaDataManager.Instance.Grade = response.Grade; ArenaDataManager.Instance.Rank = response.RankInGrade; ArenaDataManager.Instance.HighestGrade = response.HighestGradeOfSeason; ArenaDataManager.Instance.HighestRank = response.HighestRankInGradeOfSeason; OtherRoleInfoData roleInfo = new OtherRoleInfoData(); roleInfo.roleName = RoleDataManager.roleName; roleInfo.roleLv = RoleDataManager.lvl; roleInfo.headId = RoleDataManager.headId; // ArenaDataManager.Instance.Clear(); for (int i = 0; i < response.ThemeList.Count; i++) { FightData roleData = GetFightRoleData(response.DressupList.Count <= i ? null : response.DressupList[i], roleInfo, i); FightDataManager.Instance.SetItemScoreList(roleData); ScoreSystemData.Instance.SetEquipScoresWithPartId(roleData); ArenaDataManager.Instance.DressupList.Add(roleData); } for (int i = 0; i < response.targets.Count; i++) { ArenaTargetData targetData = GetArenaTargetData(response.targets[i]); ArenaDataManager.Instance.Targets.Add(targetData); if (targetData.Type == FightTargetType.PLAYER) { await ArenaSproxy.ReqArenaFightAttr(targetData.RoleInfo.roleId, targetData.FightDatas); } } ArenaDataManager.Instance.AddCheckSeasonOpenTimer(); if (ViewManager.isViewOpen(typeof(ArenaView).FullName)) { ViewManager.Show(); } } } } //刷新竞争对手 public static async ETTask ReqRefreshArenaTargets() { S2C_RefreshArenaTargets response = null; response = (S2C_RefreshArenaTargets)await MessageHelper.SendToServer(new C2S_RefreshArenaTargets()); if (response != null) { if (response.Error == ErrorCode.ERR_Success) { ArenaDataManager.Instance.Targets.Clear(); for (int i = 0; i < response.targets.Count; i++) { ArenaTargetData targetData = GetArenaTargetData(response.targets[i]); ArenaDataManager.Instance.Targets.Add(targetData); if (targetData.Type == FightTargetType.PLAYER) { await ArenaSproxy.ReqArenaFightAttr(targetData.RoleInfo.roleId, targetData.FightDatas); } } PromptController.Instance.ShowFloatTextPrompt("刷新成功"); return true; } } return false; } //更换搭配 public static async ETTask ReqChangeArenaDressup(int index, int cardId, List itemList) { S2C_ChangeArenaDressup response = null; response = (S2C_ChangeArenaDressup)await MessageHelper.SendToServer(new C2S_ChangeArenaDressup() { Index = index, CardId = cardId, EquipIds = itemList }); if (response != null) { if (response.Error == ErrorCode.ERR_Success) { ArenaDataManager.Instance.DressupList[index].cardId = cardId; ArenaDataManager.Instance.DressupList[index].itemList = itemList; return true; } } return false; } //购买挑战次数 public static async ETTask ReqBuyArenaFightTimes() { S2C_BuyArenaFightTimes response = null; response = (S2C_BuyArenaFightTimes)await MessageHelper.SendToServer(new C2S_BuyArenaFightTimes() { }); if (response != null) { if (response.Error == ErrorCode.ERR_Success) { PromptController.Instance.ShowFloatTextPrompt("购买成功"); } } } //挑战 public static async ETTask ReqArenaFight(bool isWin, ArenaTargetData targetData, List selfFightPower, List targetFightPower, List myScore, List targetScore) { S2C_ArenaFight response = null; response = (S2C_ArenaFight)await MessageHelper.SendToServer(new C2S_ArenaFight() { RoleId = RoleDataManager.roleId, Grade = targetData.Grade, RankInGrade = targetData.RankInGrade, Type = targetData.Type, TargetRoleId = targetData.RoleInfo.roleId, IsWin = isWin, SelfFightPower = selfFightPower, TargetFightPower = targetFightPower, SelfRandScore = myScore, TargetRandScore = targetScore, }, false); if (response != null) { if (response.Error == ErrorCode.ERR_Success) { //记录老数据,用于结算展示 ArenaDataManager.Instance.LastFightTime = response.LastFightTime; ArenaDataManager.Instance.LastGrade = ArenaDataManager.Instance.Grade; ArenaDataManager.Instance.LastRank = ArenaDataManager.Instance.Rank; ArenaDataManager.Instance.LastTargetInfo.roleName = targetData.RoleInfo.roleName; ArenaDataManager.Instance.LastTargetInfo.headId = targetData.RoleInfo.headId; ArenaDataManager.Instance.LastTargetInfo.headRes = targetData.RoleInfo.headRes; ArenaDataManager.Instance.BonusList = ItemUtil.CreateItemDataList(response.rewards); ArenaDataManager.Instance.LastTargets = new List(ArenaDataManager.Instance.Targets); //更新新数据 ArenaDataManager.Instance.Targets.Clear(); for (int i = 0; i < response.targets.Count; i++) { ArenaTargetData _targetData = GetArenaTargetData(response.targets[i]); ArenaDataManager.Instance.Targets.Add(_targetData); if (_targetData.Type == FightTargetType.PLAYER) { await ArenaSproxy.ReqArenaFightAttr(_targetData.RoleInfo.roleId, _targetData.FightDatas); } } ArenaDataManager.Instance.Grade = response.Grade; ArenaDataManager.Instance.Rank = response.RankInGrade; ArenaDataManager.Instance.TryUpdateHighest(); EventAgent.DispatchEvent(ConstMessage.ARENA_FIGHT_RESULT); return true; } else { //更新新数据 ArenaDataManager.Instance.Targets.Clear(); for (int i = 0; i < response.targets.Count; i++) { // ArenaDataManager.Instance.Targets.Add(GetArenaTargetData(response.targets[i])); ArenaTargetData _targetData = GetArenaTargetData(response.targets[i]); ArenaDataManager.Instance.Targets.Add(_targetData); if (_targetData.Type == FightTargetType.PLAYER) { await ArenaSproxy.ReqArenaFightAttr(_targetData.RoleInfo.roleId, _targetData.FightDatas); } } EventAgent.DispatchEvent(ConstMessage.ARENA_FIGHT_RESULT); PromptController.Instance.ShowFloatTextPrompt("对方排名已发生变化"); return false; } } return false; } //获取排行榜 public static async ETTask ReqArenaRank(int rankType, int startIndex, int endIndex) { S2C_ArenaRank response = null; response = (S2C_ArenaRank)await MessageHelper.SendToServer(new C2S_ArenaRank() { RankType = rankType, StartIndex = startIndex, EndIndex = endIndex }); if (response != null) { if (response.Error == ErrorCode.ERR_Success) { if (!ArenaDataManager.Instance.RankDatasDic.ContainsKey(rankType)) { ArenaDataManager.Instance.RankDatasDic[rankType] = new List(); } List rankDatas = ArenaDataManager.Instance.RankDatasDic[rankType]; for (int i = 0; i < response.ranks.Count; i++) { rankDatas.Add(GetArenaTargetData(response.ranks[i])); } if (response.self != null) { if (rankType == ArenaRankType.LAST_SEASON) { ArenaDataManager.Instance.SelfLastData = GetArenaTargetData(response.self); } else { ArenaDataManager.Instance.SelfData = GetArenaTargetData(response.self); } } return true; } } return false; } //获取竞技场历史记录 public static async ETTask ReqArenaHistory() { S2C_ArenaHistory response = null; response = (S2C_ArenaHistory)await MessageHelper.SendToServer(new C2S_ArenaHistory() { RoleId = RoleDataManager.roleId }); if (response != null) { if (response.Error == ErrorCode.ERR_Success) { ArenaDataManager.Instance.HistoryDatas.Clear(); for (int i = 0; i < response.history.Count; i++) { ArenaDataManager.Instance.HistoryDatas.Add(GetArenaHistoryData(response.history[i])); } } } } //获取对手服装属性 public static async ETTask ReqArenaFightAttr(long roleId, List list) { S2C_ArenaFightAttr response = null; response = (S2C_ArenaFightAttr)await MessageHelper.SendToServer(new C2S_ArenaFightAttr() { TargetRoleId = roleId }); if (response != null) { if (response.Error == ErrorCode.ERR_Success) { // if (list.Count < response.data.Count) return false; for (int i = 0; i < response.data.Count; i++) { list[i].cardScore = response.data[i].CardScore; list[i].itemScoreList = response.data[i].SuitScore; list[i].itemList = response.DressupList[i].EquipIds; list[i].cardId = response.DressupList[i].CardId; List skillCfgs = PassivitySkillCfgArray.Instance.GetCfgsBycardId(response.data[i].CardId); if (response.data[i].SkillId.Count == skillCfgs.Count) { for (int j = 0; j < skillCfgs.Count; j++) { int index = response.data[i].SkillId.IndexOf(skillCfgs[j].skillId); list[i].skillLvs.Add(response.data[i].SkillLevel[index]); } } FightDataManager.Instance.SetItemScoreList(list[i]); ScoreSystemData.Instance.SetEquipScoresWithPartId(list[i]); } return true; } } return false; } public static ArenaHistoryData GetArenaHistoryData(ArenaHistoryProto arenaHistoryProto) { ArenaHistoryData arenaHistory = new ArenaHistoryData(); arenaHistory.isWin = arenaHistoryProto.IsWin; arenaHistory.IsChallenge = arenaHistoryProto.IsChallenge; arenaHistory.FightTime = arenaHistoryProto.FightTime; arenaHistory.Grade = arenaHistoryProto.Grade; arenaHistory.Rank = arenaHistoryProto.Rank; arenaHistory.targetData = GetArenaTargetData(arenaHistoryProto.target); arenaHistory.FightScores = arenaHistoryProto.SelfFightPower; arenaHistory.GradeChangeType = arenaHistoryProto.GradeChangeType; arenaHistory.MyScores = arenaHistoryProto.SelfRandScore; arenaHistory.TargetScores = arenaHistoryProto.TargetRandScore; // arenaHistory.FightScores = arenaHistoryProto.SelfFightPower; return arenaHistory; } public static ArenaTargetData GetArenaTargetData(ArenaTargetProto arenaTargetProto) { ArenaTargetData arenaTarget = new ArenaTargetData(); arenaTarget.Grade = arenaTargetProto.Grade; arenaTarget.RankInGrade = arenaTargetProto.RankInGrade; arenaTarget.Type = arenaTargetProto.Type; arenaTarget.FightScores = arenaTargetProto.FightPower; if (arenaTarget.Type == FightTargetType.PLAYER) { arenaTarget.RoleInfo = RoleDataManager.GetOtherRoleInfoData(arenaTargetProto.RoleInfo); } else { ArenaRobotCfg robotCfg = ArenaRobotCfgArray.Instance.GetCfg(arenaTargetProto.RobotDressupInfo.RobotId); arenaTarget.RoleInfo.roleId = 0; arenaTarget.RoleInfo.roleName = arenaTargetProto.RobotDressupInfo.Name; arenaTarget.RoleInfo.roleLv = robotCfg.level; arenaTarget.RoleInfo.headRes = string.IsNullOrEmpty(arenaTargetProto.RobotDressupInfo.RobotHead) ? "self" : arenaTargetProto.RobotDressupInfo.RobotHead; } arenaTarget.FightDatas.Clear(); for (int i = 0; i < ArenaDataManager.Instance.ThemeList.Count; i++) { if (arenaTarget.Type == FightTargetType.PLAYER) { FightData roleData = GetFightRoleData(arenaTargetProto.PlayerDressupList.Count <= i ? null : arenaTargetProto.PlayerDressupList[i], arenaTarget.RoleInfo, i); arenaTarget.FightDatas.Add(roleData); } else if (arenaTarget.Type == FightTargetType.ROBOT) { FightData robotData = GetFightRobotData(arenaTargetProto.RobotDressupInfo, i); arenaTarget.FightDatas.Add(robotData); } } return arenaTarget; } private static FightData GetFightRoleData(ArenaDressupProto dressupProto, OtherRoleInfoData roleInfo, int index) { FightData fightData = new FightData(); fightData.name = roleInfo.roleName; fightData.scoreType = ArenaDataManager.Instance.ThemeList[index]; fightData.baseScore = RoleLevelCfgArray.Instance.GetCfg(roleInfo.roleLv).baseScore; if (index == 0) fightData.tags = new string[1] { ArenaDataManager.Instance.Tag }; fightData.type = FightTargetType.PLAYER; fightData.headId = roleInfo.headId; fightData.cardId = dressupProto == null ? 0 : dressupProto.CardId; fightData.itemList = dressupProto == null ? fightData.itemList : dressupProto.EquipIds;//上赛季没有穿戴数据 return fightData; } public static FightData GetFightRobotData(ArenaRobotProto robotProto, int index) { ArenaRobotCfg robotCfg = ArenaRobotCfgArray.Instance.GetCfg(robotProto.RobotId); FightData fightData = new FightData(); fightData.name = robotProto.Name; fightData.scoreType = ArenaDataManager.Instance.ThemeList[index]; fightData.baseScore = RoleLevelCfgArray.Instance.GetCfg(robotCfg.level).baseScore; fightData.cardId = robotProto.CardIdList.Count <= index ? 0 : robotProto.CardIdList[index];//上赛季没有穿戴数据 if (index == 0)//只有第一个主题才计算标签 { fightData.tags = new string[1] { ArenaDataManager.Instance.Tag }; fightData.tagAddition = robotCfg.tagAddition; } fightData.itemScoreList.Clear(); double randoms = robotProto.Randoms.Count >= robotCfg.partsScoreArr.Length ? (double)robotProto.Randoms[index] / 10000d : 1; for (int i = 0; i < robotCfg.partsScoreArr.Length; i++) { double score = (double)robotCfg.partsScoreArr[i] * randoms; fightData.itemScoreList.Add((int)Math.Ceiling(score)); } fightData.type = FightTargetType.ROBOT; fightData.res = string.IsNullOrEmpty(robotProto.RobotHead) ? "self" : robotProto.RobotHead; double cardScore = (double)robotCfg.cardScore * randoms; fightData.cardScore = (int)Math.Ceiling(cardScore); fightData.skillLvs.Add(robotCfg.skillLvs); fightData.showSuitId = robotProto.SuitList.Count <= index ? 0 : robotProto.SuitList[index];//上赛季没有穿戴数据 return fightData; } } }