ArenaSproxy.cs 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313
  1. using System;
  2. using System.Collections.Generic;
  3. using ET;
  4. namespace GFGGame
  5. {
  6. public class NoticeArebaRankChange : AMHandler<SC_RankChange>
  7. {
  8. protected override async ETTask Run(Session session, SC_RankChange message)
  9. {
  10. ArenaDataManager.Instance.Grade = message.Grade;
  11. ArenaDataManager.Instance.Rank = message.RankInGrade;
  12. ArenaDataManager.Instance.TryUpdateHighest();
  13. await ETTask.CompletedTask;
  14. }
  15. }
  16. public class NoticeArenaHistoryChange : AMHandler<SC_ArenaHistoryAdd>
  17. {
  18. protected override async ETTask Run(Session session, SC_ArenaHistoryAdd message)
  19. {
  20. ArenaHistoryData historyData = ArenaSproxy.GetArenaHistoryData(message.history);
  21. ArenaDataManager.Instance.historyDatas.Insert(0, historyData);
  22. ArenaDataManager.Instance.historyDatas.RemoveAt(ArenaDataManager.Instance.historyDatas.Count - 1);
  23. await ETTask.CompletedTask;
  24. }
  25. }
  26. public static class ArenaSproxy
  27. {
  28. //获取竞技场信息
  29. public static async ETTask GetArenaInfos()
  30. {
  31. S2C_GetArenaInfos response = null;
  32. response = (S2C_GetArenaInfos)await MessageHelper.SendToServer(new C2S_GetArenaInfos());
  33. if (response != null)
  34. {
  35. if (response.Error == ErrorCode.ERR_Success)
  36. {
  37. ArenaDataManager.Instance.ThemeList = response.ThemeList;
  38. // ArenaDataManager.Instance.Tag = response.Tag;
  39. ArenaDataManager.Instance.SeasonId = response.SeasonId;
  40. ArenaDataManager.Instance.Grade = response.Grade;
  41. ArenaDataManager.Instance.Rank = response.RankInGrade;
  42. ArenaDataManager.Instance.HighestGrade = response.HighestGradeOfSeason;
  43. ArenaDataManager.Instance.HighestRank = response.HighestRankInGradeOfSeason;
  44. ArenaDataManager.Instance.Clear();
  45. for (int i = 0; i < response.ThemeList.Count; i++)
  46. {
  47. FightRoleData roleData = new FightRoleData();
  48. roleData.cardId = response.DressupList.Count > i ? response.DressupList[i].CardId : 0;
  49. roleData.itemList = response.DressupList.Count > i ? response.DressupList[i].EquipIds : new List<int>();
  50. ArenaDataManager.Instance.DressupList.Add(roleData);
  51. }
  52. for (int i = 0; i < response.targets.Count; i++)
  53. {
  54. ArenaDataManager.Instance.Targets.Add(GetArenaTargetData(response.targets[i]));
  55. }
  56. }
  57. }
  58. }
  59. //刷新竞争对手
  60. public static async ETTask<bool> ReqRefreshArenaTargets()
  61. {
  62. S2C_RefreshArenaTargets response = null;
  63. response = (S2C_RefreshArenaTargets)await MessageHelper.SendToServer(new C2S_RefreshArenaTargets());
  64. if (response != null)
  65. {
  66. if (response.Error == ErrorCode.ERR_Success)
  67. {
  68. ArenaDataManager.Instance.Targets.Clear();
  69. for (int i = 0; i < response.targets.Count; i++)
  70. {
  71. ArenaDataManager.Instance.Targets.Add(GetArenaTargetData(response.targets[i]));
  72. if (response.targets[i].Type == ArenaFightTargetType.PLAYER)
  73. {
  74. await ReqArenaFightAttr(response.targets[i].RoleInfo.RoleId, ArenaDataManager.Instance.Targets[i].RoleDressupList);
  75. }
  76. }
  77. PromptController.Instance.ShowFloatTextPrompt("刷新成功");
  78. return true;
  79. }
  80. }
  81. return false;
  82. }
  83. //更换搭配
  84. public static async ETTask<bool> ReqChangeArenaDressup(int index, int cardId, List<int> itemList)
  85. {
  86. ArenaDressupProto dressupInfo = new ArenaDressupProto();
  87. dressupInfo.CardId = cardId;
  88. dressupInfo.EquipIds = itemList;
  89. S2C_ChangeArenaDressup response = null;
  90. response = (S2C_ChangeArenaDressup)await MessageHelper.SendToServer(new C2S_ChangeArenaDressup() { Index = index, DressupInfo = dressupInfo });
  91. if (response != null)
  92. {
  93. if (response.Error == ErrorCode.ERR_Success)
  94. {
  95. ArenaDataManager.Instance.DressupList[index].cardId = cardId;
  96. ArenaDataManager.Instance.DressupList[index].itemList = itemList;
  97. PromptController.Instance.ShowFloatTextPrompt("保存成功");
  98. return true;
  99. }
  100. }
  101. return false;
  102. }
  103. //购买挑战次数
  104. public static async ETTask ReqBuyArenaFightTimes(int times)
  105. {
  106. S2C_BuyArenaFightTimes response = null;
  107. response = (S2C_BuyArenaFightTimes)await MessageHelper.SendToServer(new C2S_BuyArenaFightTimes() { Times = times });
  108. if (response != null)
  109. {
  110. if (response.Error == ErrorCode.ERR_Success)
  111. {
  112. PromptController.Instance.ShowFloatTextPrompt("购买成功");
  113. }
  114. }
  115. }
  116. //挑战
  117. public static async ETTask ReqArenaFight(bool _isWin, int type, int roleId)
  118. {
  119. S2C_ArenaFight response = null;
  120. response = (S2C_ArenaFight)await MessageHelper.SendToServer(new C2S_ArenaFight() { Grade = ArenaDataManager.Instance.Grade, RankInGrade = ArenaDataManager.Instance.Rank, Type = type, RoleId = roleId, isWin = _isWin });
  121. if (response != null && response.targets != null)
  122. {
  123. if (response.Error != ErrorCode.ERR_Success)
  124. {
  125. PromptController.Instance.ShowFloatTextPrompt("该玩家排名已经发生变化,请重新选择");
  126. }
  127. if (response.Grade > ArenaDataManager.Instance.Grade)
  128. {
  129. ViewManager.Show<ArenaDanUpView>(new object[] { ArenaDataManager.Instance.Grade, response.Grade, response.RewardId });
  130. }
  131. else if (response.RankInGrade > ArenaDataManager.Instance.Rank)
  132. {
  133. ViewManager.Show<ArenaRankUpView>(new object[] { ArenaDataManager.Instance.Rank, response.RankInGrade });
  134. }
  135. ArenaDataManager.Instance.Grade = response.Grade;
  136. ArenaDataManager.Instance.Rank = response.RankInGrade;
  137. ArenaDataManager.Instance.TryUpdateHighest();
  138. ArenaDataManager.Instance.Targets.Clear();
  139. for (int i = 0; i < response.targets.Count; i++)
  140. {
  141. ArenaDataManager.Instance.Targets.Add(GetArenaTargetData(response.targets[i]));
  142. }
  143. }
  144. }
  145. //获取排行榜
  146. public static async ETTask ReqArenaRank(int rankType, int startIndex, int endIndex)
  147. {
  148. S2C_ArenaRank response = null;
  149. response = (S2C_ArenaRank)await MessageHelper.SendToServer(new C2S_ArenaRank() { RankType = rankType, StartIndex = startIndex, EndIndex = endIndex });
  150. if (response != null)
  151. {
  152. if (response.Error == ErrorCode.ERR_Success)
  153. {
  154. if (startIndex == 0)
  155. {
  156. ArenaDataManager.Instance.rankDatas.Clear();
  157. }
  158. for (int i = 0; i < response.ranks.Count; i++)
  159. {
  160. ArenaDataManager.Instance.Targets.Add(GetArenaTargetData(response.ranks[i]));
  161. }
  162. ArenaDataManager.Instance.SelfData = GetArenaTargetData(response.self);
  163. }
  164. }
  165. }
  166. //获取竞技场历史记录
  167. public static async ETTask ReqArenaHistory(int rankType, int startIndex, int endIndex)
  168. {
  169. S2C_ArenaHistory response = null;
  170. response = (S2C_ArenaHistory)await MessageHelper.SendToServer(new C2S_ArenaHistory() { });
  171. if (response != null)
  172. {
  173. if (response.Error == ErrorCode.ERR_Success)
  174. {
  175. ArenaDataManager.Instance.historyDatas.Clear();
  176. for (int i = 0; i < response.history.Count; i++)
  177. {
  178. ArenaDataManager.Instance.historyDatas.Add(GetArenaHistoryData(response.history[i]));
  179. }
  180. }
  181. }
  182. }
  183. //获取对手服装属性
  184. public static async ETTask ReqArenaFightAttr(long roleId, List<FightRoleData> list)
  185. {
  186. S2C_ArenaFightAttr response = null;
  187. response = (S2C_ArenaFightAttr)await MessageHelper.SendToServer(new C2S_ArenaFightAttr() { TargetRoleId = roleId });
  188. if (response != null)
  189. {
  190. if (response.Error == ErrorCode.ERR_Success)
  191. {
  192. for (int i = 0; i < response.data.Count; i++)
  193. {
  194. list[i].cardScore = response.data[i].CardScore;
  195. list[i].skillLvs = response.data[i].SkillLevel;
  196. list[i].itemScoreList = response.data[i].SuitScore;
  197. }
  198. }
  199. }
  200. }
  201. public static ArenaHistoryData GetArenaHistoryData(ArenaHistoryProto arenaHistory)
  202. {
  203. ArenaHistoryData arenaTarget = new ArenaHistoryData();
  204. arenaTarget.isWin = arenaHistory.IsWin;
  205. arenaTarget.IsChallenge = arenaHistory.IsChallenge;
  206. arenaTarget.FightTime = arenaHistory.FightTime;
  207. arenaTarget.Type = arenaHistory.Type;
  208. arenaTarget.RoleInfo = DataChangeUtil.Instance.GetOtherRoleInfoData(arenaHistory.RoleInfo);
  209. for (int i = 0; i < ArenaDataManager.Instance.ThemeList.Count; i++)
  210. {
  211. if (arenaTarget.Type == ArenaFightTargetType.PLAYER)
  212. {
  213. FightRoleData roleData = GetFightRoleData(arenaHistory.PlayerDressupList[i], arenaTarget.RoleInfo, i);
  214. arenaTarget.RoleDressupList.Add(roleData);
  215. }
  216. else if (arenaTarget.Type == ArenaFightTargetType.ROBOT)
  217. {
  218. FightRobotData robotData = GetFightRobotData(arenaHistory.RobotDressupInfo, i);
  219. arenaTarget.RobotDressupList.Add(robotData);
  220. }
  221. }
  222. arenaTarget.GradeChangeType = arenaHistory.GradeChangeType;
  223. arenaTarget.SelfFightScore = arenaHistory.SelfFightScore;
  224. arenaTarget.OtherFightScore = arenaHistory.OtherFightScore;
  225. arenaTarget.Grade = arenaHistory.Grade;
  226. arenaTarget.Rank = arenaHistory.Rank;
  227. arenaTarget.SelfFightPower = arenaHistory.SelfFightPower;
  228. arenaTarget.TargetFightPower = arenaHistory.TargetFightPower;
  229. return arenaTarget;
  230. }
  231. private static ArenaTargetData GetArenaTargetData(ArenaTargetProto arenaTargetProto)
  232. {
  233. ArenaTargetData arenaTarget = new ArenaTargetData();
  234. arenaTarget.Grade = arenaTargetProto.Grade;
  235. arenaTarget.RankInGrade = arenaTargetProto.RankInGrade;
  236. arenaTarget.Type = arenaTargetProto.Type;
  237. arenaTarget.RoleInfo = DataChangeUtil.Instance.GetOtherRoleInfoData(arenaTargetProto.RoleInfo);
  238. arenaTarget.RoleDressupList.Clear();
  239. arenaTarget.RobotDressupList.Clear();
  240. for (int j = 0; j < ArenaDataManager.Instance.ThemeList.Count; j++)
  241. {
  242. if (arenaTarget.Type == ArenaFightTargetType.PLAYER)
  243. {
  244. FightRoleData roleData = GetFightRoleData(arenaTargetProto.PlayerDressupList[j], arenaTarget.RoleInfo, j);
  245. arenaTarget.RoleDressupList.Add(roleData);
  246. }
  247. else if (arenaTarget.Type == ArenaFightTargetType.ROBOT)
  248. {
  249. FightRobotData robotData = GetFightRobotData(arenaTargetProto.RobotDressupInfo, j);
  250. arenaTarget.RobotDressupList.Add(robotData);
  251. }
  252. }
  253. return arenaTarget;
  254. }
  255. private static FightRoleData GetFightRoleData(ArenaDressupProto dressupProto, OtherRoleInfoData roleInfoData, int index)
  256. {
  257. FightRoleData roleData = new FightRoleData();
  258. roleData.name = roleInfoData.roleName;
  259. roleData.headId = roleInfoData.roleHead;
  260. roleData.headBorderId = roleInfoData.roleHeadBorder;
  261. roleData.baseScore = RoleLevelCfgArray.Instance.GetCfg(roleInfoData.roleLv).baseScore;
  262. roleData.cardId = dressupProto.CardId;
  263. roleData.itemList = dressupProto.EquipIds;
  264. if (index == 0) roleData.tags = new string[1] { ArenaDataManager.Instance.Tag };
  265. return roleData;
  266. }
  267. private static FightRobotData GetFightRobotData(ArenaRobotProto robotProto, int index)
  268. {
  269. ArenaRobotCfg robotCfg = ArenaRobotCfgArray.Instance.GetCfg(robotProto.RobotId);
  270. FightRobotData robotData = new FightRobotData();
  271. robotData.name = robotCfg.gradeName;
  272. robotData.res = robotCfg.targetRes;
  273. robotData.itemScoreList = new List<int>(robotCfg.partsScoreArr);
  274. robotData.baseScore = robotCfg.baseScore;
  275. robotData.cardId = robotProto.CardIdList[index];
  276. double cardScore = (double)robotCfg.cardScore * (double)robotProto.Random / 10000 * 100;
  277. robotData.cardScore = (int)Math.Ceiling(cardScore);
  278. robotData.skillLvs.Add(robotCfg.skillLvs);
  279. robotData.showSuitId = robotProto.SuitList[index];
  280. if (index == 0)//只有第一个主题才计算标签
  281. {
  282. robotData.tags = new string[1] { ArenaDataManager.Instance.Tag };
  283. robotData.tagAddition = robotCfg.tagAddition;
  284. }
  285. return robotData;
  286. }
  287. }
  288. }