| | |
| | | TransBytes (out MatchList[i].Face, vBytes, NetDataType.DWORD); |
| | | TransBytes (out MatchList[i].FacePic, vBytes, NetDataType.DWORD); |
| | | TransBytes (out MatchList[i].TitleID, vBytes, NetDataType.DWORD); |
| | | TransBytes (out MatchList[i].ServerID, vBytes, NetDataType.DWORD); |
| | | } |
| | | } |
| | | |
| | |
| | | public uint Face; //基本脸型 |
| | | public uint FacePic; //头像框 |
| | | public uint TitleID; //称号 |
| | | public uint ServerID; |
| | | } |
| | | |
| | | } |
| | |
| | | enemyAvatarCell.InitUI(AvatarHelper.GetAvatarModel((int)tagPlayerID, (int)enemyFace, (int)enemyFacePic)); |
| | | enemyAvatarCell.SetListener(() => |
| | | { |
| | | AvatarHelper.TryViewOtherPlayerInfo((int)tagPlayerID, viewPlayerLineupType: (int)BattlePreSetType.Arena); |
| | | int serverID = (ArenaManager.Instance.IsOpenCrossServer() && tagPlayerID != PlayerDatas.Instance.baseData.PlayerID) ? (int)info.ServerID : 0; |
| | | AvatarHelper.TryViewOtherPlayerInfo((int)tagPlayerID, serverID, viewPlayerLineupType: (int)BattlePreSetType.Arena); |
| | | }); |
| | | |
| | | txtMyName.text = PlayerDatas.Instance.baseData.PlayerName; |
| | |
| | | enemyAvatarCell.InitUI(AvatarHelper.GetAvatarModel((int)tagPlayerID, (int)enemyFace, (int)enemyFacePic)); |
| | | enemyAvatarCell.SetListener(() => |
| | | { |
| | | AvatarHelper.TryViewOtherPlayerInfo((int)tagPlayerID, viewPlayerLineupType: (int)BattlePreSetType.Arena); |
| | | int serverID = (ArenaManager.Instance.IsOpenCrossServer() && tagPlayerID != PlayerDatas.Instance.baseData.PlayerID) ? (int)info.ServerID : 0; |
| | | AvatarHelper.TryViewOtherPlayerInfo((int)tagPlayerID, serverID, viewPlayerLineupType: (int)BattlePreSetType.Arena); |
| | | }); |
| | | |
| | | txtMyName.text = PlayerDatas.Instance.baseData.PlayerName; |
| | |
| | | [SerializeField] AvatarCell avatarCell; |
| | | [SerializeField] TextEx txtName; |
| | | [SerializeField] TextEx txtAddScore; |
| | | [SerializeField] TextEx txtServerName; |
| | | [SerializeField] TextEx txtAddCrossScore; |
| | | [SerializeField] TextEx txtFightPoint; |
| | | [SerializeField] OfficialTitleCell officialTitleCell; |
| | | [SerializeField] List<ItemCell> itemCells; |
| | |
| | | avatarCell.InitUI(AvatarHelper.GetAvatarModel((int)arenaMatchInfo.PlayerID, (int)arenaMatchInfo.Face, (int)arenaMatchInfo.FacePic)); |
| | | avatarCell.SetListener(() => |
| | | { |
| | | AvatarHelper.TryViewOtherPlayerInfo((int)arenaMatchInfo.PlayerID, viewPlayerLineupType: (int)BattlePreSetType.Arena); |
| | | int serverID = (ArenaManager.Instance.IsOpenCrossServer() && arenaMatchInfo.PlayerID != PlayerDatas.Instance.baseData.PlayerID) ? (int)arenaMatchInfo.ServerID : 0; |
| | | AvatarHelper.TryViewOtherPlayerInfo((int)arenaMatchInfo.PlayerID, serverID, viewPlayerLineupType: (int)BattlePreSetType.Arena); |
| | | }); |
| | | |
| | | txtName.text = UIHelper.ServerStringTrim(arenaMatchInfo.PlayerName); |
| | | txtFightPoint.text = UIHelper.ReplaceLargeArtNum(arenaMatchInfo.FightPower); |
| | | txtAddScore.text = Language.Get("Arena16", ArenaManager.Instance.GetChallengePoints(index)); |
| | | |
| | | |
| | | bool isCrossServer = ArenaManager.Instance.IsOpenCrossServer(); |
| | | if (isCrossServer) |
| | | { |
| | | txtAddScore.SetActive(false); |
| | | txtServerName.SetActive(true); |
| | | txtServerName.text = ServerListCenter.Instance.GetServerName((int)arenaMatchInfo.ServerID); |
| | | txtAddCrossScore.SetActive(true); |
| | | txtAddCrossScore.text = Language.Get("Arena16", ArenaManager.Instance.GetChallengePoints(index)); |
| | | } |
| | | else |
| | | { |
| | | txtAddScore.SetActive(true); |
| | | txtAddScore.text = Language.Get("Arena16", ArenaManager.Instance.GetChallengePoints(index)); |
| | | txtServerName.SetActive(false); |
| | | txtAddCrossScore.SetActive(false); |
| | | } |
| | | |
| | | officialTitleCell.InitUI(arenaMatchInfo.RealmLV, (int)arenaMatchInfo.TitleID, 0.55f); |
| | | |
| | | int[][] rewards = ArenaManager.Instance.fixedChallengeRewards; |
| New file |
| | |
| | | using System.Collections.Generic; |
| | | using System.Linq; |
| | | using UnityEngine; |
| | | |
| | | /// <summary> |
| | | /// 竞技场奖励单元格 |
| | | /// </summary> |
| | | public class ArenaCrossAwardCell : CellView |
| | | { |
| | | [SerializeField] ImageEx imgRank; |
| | | [SerializeField] TextEx txtRank; |
| | | [SerializeField] ItemCell[] itemCells; |
| | | |
| | | public void Display(int index, CellView cellView) |
| | | { |
| | | int functionOrder = cellView.info.Value.infoInt1; |
| | | var rewardDict = ArenaManager.Instance.GetCrossArenaAwardDict(functionOrder); |
| | | if (rewardDict.IsNullOrEmpty()) return; |
| | | |
| | | var sortedKeys = rewardDict.Keys.ToList(); |
| | | sortedKeys.Sort(); |
| | | |
| | | DisplayRank(sortedKeys, index); |
| | | DisplayItems(sortedKeys, index, rewardDict); |
| | | } |
| | | |
| | | private void DisplayRank(List<int> sortedKeys, int index) |
| | | { |
| | | int rank = sortedKeys[index]; |
| | | if (rank <= 3) |
| | | { |
| | | imgRank.SetActive(true); |
| | | txtRank.SetActive(false); |
| | | imgRank.SetSprite($"Rank{rank}"); |
| | | } |
| | | else |
| | | { |
| | | imgRank.SetActive(false); |
| | | txtRank.SetActive(true); |
| | | int lastIndex = index - 1; |
| | | txtRank.text = lastIndex > 0 && lastIndex < sortedKeys.Count |
| | | ? Language.Get("Arena15", sortedKeys[lastIndex] + 1, rank) |
| | | : string.Empty; |
| | | } |
| | | } |
| | | |
| | | private void DisplayItems(List<int> sortedKeys, int index, Dictionary<int, int[][]> rewardDict) |
| | | { |
| | | int[][] rewardArr = rewardDict[sortedKeys[index]]; |
| | | if (rewardArr.IsNullOrEmpty()) |
| | | { |
| | | for (int i = 0; i < itemCells.Length; i++) |
| | | itemCells[i].SetActive(false); |
| | | return; |
| | | } |
| | | |
| | | for (int i = 0; i < itemCells.Length; i++) |
| | | { |
| | | bool hasReward = i < rewardArr.Length; |
| | | itemCells[i].SetActive(hasReward); |
| | | if (hasReward) |
| | | { |
| | | int itemId = rewardArr[i][0]; |
| | | itemCells[i].Init(new ItemCellModel(itemId, true, rewardArr[i][1])); |
| | | itemCells[i].button.SetListener(() => ItemTipUtility.Show(itemId)); |
| | | } |
| | | } |
| | | } |
| | | } |
| New file |
| | |
| | | fileFormatVersion: 2 |
| | | guid: db50e766c48693241827170a23113478 |
| | | MonoImporter: |
| | | externalObjects: {} |
| | | serializedVersion: 2 |
| | | defaultReferences: [] |
| | | executionOrder: 0 |
| | | icon: {instanceID: 0} |
| | | userData: |
| | | assetBundleName: |
| | | assetBundleVariant: |
| New file |
| | |
| | | using System; |
| | | using System.Linq; |
| | | using UnityEngine; |
| | | |
| | | /// <summary> |
| | | /// 竞技场奖励窗口:functionOrder=0/1/2 → 本服日/本服周/跨服周奖励 |
| | | /// </summary> |
| | | public class ArenaCrossAwardWin : FunctionsBaseWin |
| | | { |
| | | [HideInInspector] public string valueFormat = "{0}"; |
| | | [SerializeField] ArenaPlayerRankCell myRankCell; |
| | | [SerializeField] ButtonEx btnClose; |
| | | [SerializeField] TextEx txtCountdown; |
| | | |
| | | [SerializeField] Transform localDayRect; |
| | | [SerializeField] ScrollerController scrLocalDayAward; |
| | | [SerializeField] Transform localWeekRect; |
| | | [SerializeField] ScrollerController scrLocalWeekAward; |
| | | [SerializeField] Transform crossWeekRect; |
| | | [SerializeField] ScrollerController scrCrossWeekAward; |
| | | |
| | | protected override void InitComponent() |
| | | { |
| | | base.InitComponent(); |
| | | btnClose.SetListener(CloseWindow); |
| | | } |
| | | |
| | | protected override void OnPreOpen() |
| | | { |
| | | base.OnPreOpen(); |
| | | ArenaManager.Instance.OnArenaMatchListEvent += OnArenaMatchListEvent; |
| | | ArenaManager.Instance.OnUpdateArenaPlayerInfo += OnUpdateArenaPlayerInfo; |
| | | ArenaManager.Instance.OnUpdateGameRecInfo += OnUpdateGameRecInfo; |
| | | RankModel.Instance.onRankRefresh += OnRankRefresh; |
| | | GlobalTimeEvent.Instance.secondEvent += OnSecondEvent; |
| | | scrLocalDayAward.OnRefreshCell += OnRefreshLocalDayCell; |
| | | scrLocalWeekAward.OnRefreshCell += OnRefreshLocalWeekCell; |
| | | scrCrossWeekAward.OnRefreshCell += OnRefreshCrossWeekCell; |
| | | Display(); |
| | | } |
| | | |
| | | protected override void OnPreClose() |
| | | { |
| | | base.OnPreClose(); |
| | | ArenaManager.Instance.OnArenaMatchListEvent -= OnArenaMatchListEvent; |
| | | ArenaManager.Instance.OnUpdateArenaPlayerInfo -= OnUpdateArenaPlayerInfo; |
| | | ArenaManager.Instance.OnUpdateGameRecInfo -= OnUpdateGameRecInfo; |
| | | RankModel.Instance.onRankRefresh -= OnRankRefresh; |
| | | GlobalTimeEvent.Instance.secondEvent -= OnSecondEvent; |
| | | scrLocalDayAward.OnRefreshCell -= OnRefreshLocalDayCell; |
| | | scrLocalWeekAward.OnRefreshCell -= OnRefreshLocalWeekCell; |
| | | scrCrossWeekAward.OnRefreshCell -= OnRefreshCrossWeekCell; |
| | | } |
| | | |
| | | private void OnSecondEvent() |
| | | { |
| | | TimeSpan remainingTime; |
| | | |
| | | if (functionOrder == 0) |
| | | { |
| | | // 本服日奖励:使用到明天0点的时间 |
| | | remainingTime = TimeUtility.ServerNow.AddDays(1).Date - TimeUtility.ServerNow; |
| | | |
| | | } |
| | | else if (functionOrder == 1) |
| | | { |
| | | // 本服周奖励:使用本服赛季结束时间 |
| | | ArenaManager.Instance.GetCurrentSeasonDates(out _, out DateTime seasonEndDate); |
| | | remainingTime = seasonEndDate - TimeUtility.ServerNow; |
| | | } |
| | | else |
| | | { |
| | | // 跨服周奖励:使用跨服赛季结束时间 |
| | | var crossZoneInfo = CrossServerBaseManager.Instance.GetCrossZoneInfo(ArenaManager.Instance.DataMapID); |
| | | int zoneID = crossZoneInfo != null ? (int)crossZoneInfo.ZoneID : 0; |
| | | ArenaManager.Instance.GetCrossCurrentSeasonDates(zoneID, out _, out DateTime crossSeasonEndDate); |
| | | remainingTime = crossSeasonEndDate - TimeUtility.ServerNow; |
| | | } |
| | | |
| | | int remainingSeconds = (int)remainingTime.TotalSeconds; |
| | | bool hasTime = remainingSeconds > 0; |
| | | txtCountdown.SetActive(hasTime); |
| | | if (hasTime) |
| | | txtCountdown.text = Language.Get("Arena14", TimeUtility.SecondsToDHMSCHS(remainingSeconds)); |
| | | } |
| | | |
| | | protected override void OpenSubUIByTabIndex() |
| | | { |
| | | Display(); |
| | | } |
| | | |
| | | private void OnRefreshLocalDayCell(ScrollerDataType type, CellView cell) |
| | | { |
| | | cell.GetComponent<ArenaCrossAwardCell>()?.Display(cell.index, cell); |
| | | } |
| | | |
| | | private void OnRefreshLocalWeekCell(ScrollerDataType type, CellView cell) |
| | | { |
| | | cell.GetComponent<ArenaCrossAwardCell>()?.Display(cell.index, cell); |
| | | } |
| | | |
| | | private void OnRefreshCrossWeekCell(ScrollerDataType type, CellView cell) |
| | | { |
| | | cell.GetComponent<ArenaCrossAwardCell>()?.Display(cell.index, cell); |
| | | } |
| | | |
| | | private void OnArenaMatchListEvent() => Display(); |
| | | private void OnUpdateArenaPlayerInfo() => Display(); |
| | | private void OnUpdateGameRecInfo() => Display(); |
| | | private void OnRankRefresh(int _) => DisplayMyRank(); |
| | | |
| | | private void Display() |
| | | { |
| | | localDayRect.SetActive(functionOrder == 0); |
| | | localWeekRect.SetActive(functionOrder == 1); |
| | | crossWeekRect.SetActive(functionOrder == 2); |
| | | CreateScroller(); |
| | | DisplayMyRank(); |
| | | OnSecondEvent(); |
| | | } |
| | | |
| | | private void CreateScroller() |
| | | { |
| | | switch (functionOrder) |
| | | { |
| | | case 0: |
| | | CreateLocalDayScroller(); |
| | | break; |
| | | case 1: |
| | | CreateLocalWeekScroller(); |
| | | break; |
| | | case 2: |
| | | CreateCrossWeekScroller(); |
| | | break; |
| | | } |
| | | DisplayMyRank(); |
| | | OnSecondEvent(); |
| | | } |
| | | |
| | | private void CreateLocalDayScroller() |
| | | { |
| | | scrLocalDayAward.Refresh(); |
| | | var rewardDict = ArenaManager.Instance.GetCrossArenaAwardDict(0); |
| | | if (rewardDict.IsNullOrEmpty()) return; |
| | | |
| | | var sortedKeys = rewardDict.Keys.ToList(); |
| | | sortedKeys.Sort(); |
| | | |
| | | CellInfo cellInfo = new CellInfo { infoInt1 = 0 }; |
| | | for (int i = 0; i < sortedKeys.Count; i++) |
| | | scrLocalDayAward.AddCell(ScrollerDataType.Header, i, cellInfo); |
| | | |
| | | scrLocalDayAward.Restart(); |
| | | } |
| | | |
| | | private void CreateLocalWeekScroller() |
| | | { |
| | | scrLocalWeekAward.Refresh(); |
| | | var rewardDict = ArenaManager.Instance.GetCrossArenaAwardDict(1); |
| | | if (rewardDict.IsNullOrEmpty()) return; |
| | | |
| | | var sortedKeys = rewardDict.Keys.ToList(); |
| | | sortedKeys.Sort(); |
| | | |
| | | CellInfo cellInfo = new CellInfo { infoInt1 = 1 }; |
| | | for (int i = 0; i < sortedKeys.Count; i++) |
| | | scrLocalWeekAward.AddCell(ScrollerDataType.Header, i, cellInfo); |
| | | |
| | | scrLocalWeekAward.Restart(); |
| | | } |
| | | |
| | | private void CreateCrossWeekScroller() |
| | | { |
| | | scrCrossWeekAward.Refresh(); |
| | | var rewardDict = ArenaManager.Instance.GetCrossArenaAwardDict(2); |
| | | if (rewardDict.IsNullOrEmpty()) return; |
| | | |
| | | var sortedKeys = rewardDict.Keys.ToList(); |
| | | sortedKeys.Sort(); |
| | | |
| | | CellInfo cellInfo = new CellInfo { infoInt1 = 2 }; |
| | | for (int i = 0; i < sortedKeys.Count; i++) |
| | | scrCrossWeekAward.AddCell(ScrollerDataType.Header, i, cellInfo); |
| | | |
| | | scrCrossWeekAward.Restart(); |
| | | } |
| | | |
| | | private void DisplayMyRank() |
| | | { |
| | | myRankCell.Display(ArenaManager.Instance.rankType, 0, valueFormat); |
| | | } |
| | | } |
| New file |
| | |
| | | fileFormatVersion: 2 |
| | | guid: f638d0723d6fc9347ac43f23a5a2f944 |
| | | MonoImporter: |
| | | externalObjects: {} |
| | | serializedVersion: 2 |
| | | defaultReferences: [] |
| | | executionOrder: 0 |
| | | icon: {instanceID: 0} |
| | | userData: |
| | | assetBundleName: |
| | | assetBundleVariant: |
| | |
| | | using System.Collections.Generic; |
| | | using System.Linq; |
| | | using UnityEngine; |
| | | using LitJson; |
| | | using System; |
| | |
| | | public class ArenaManager : GameSystemManager<ArenaManager> |
| | | { |
| | | public readonly int rankType = 1; // 榜单类型 |
| | | public readonly int corssRankType = 151; // 榜单类型 |
| | | public readonly int funcId = 27; // 功能Id |
| | | public readonly int DeployTroopsFuncId = 31; // 布阵功能ID |
| | | public readonly int BattleChangeTabFuncId = 32; // 战斗能切换页签功能ID |
| | |
| | | public Dictionary<int, int[][]> dailyRankRewards; // 每日排行奖励 {"名次":[[物品ID, 个数,是否拍品], ...], ...} 配置的名次key,自动按小于等于对应名次给奖励 |
| | | public Dictionary<int, int[][]> seasonRankRewards; // 赛季排行奖励 {"名次":[[物品ID, 个数,是否拍品], ...], ...} |
| | | |
| | | public Dictionary<int, int> crossRewardTemps;//数值2:跨服赛季排行奖励模版 {"互通服务器数";对应活动排行奖励表模版编号, ...} 按小于等于判断,大于最大配置的服务器数时默认取配置中最大服务器数对应奖励 |
| | | public Dictionary<int, int[][]> crossWeekRewards; |
| | | public uint score; // 当前积分 |
| | | public int totalWinCnt; //累计胜利次数 |
| | | |
| | |
| | | public event Action OnArenaMatchListEvent; |
| | | public event Action OnUpdateArenaPlayerInfo; |
| | | public event Action OnUpdateGameRecInfo; |
| | | |
| | | private int lastLocalWeekday; // 上次本服weekday (1-7, 周一=1, 周日=7) |
| | | private int lastCrossWeekday; // 上次跨服weekday |
| | | |
| | | public override void Init() |
| | | { |
| | | DTC0102_tagCDBPlayer.beforePlayerDataInitializeEventOnRelogin += BeforePlayerDataInitializeEventOnRelogin; |
| | | PlayerDatas.Instance.playerDataRefreshEvent += PlayerDataRefresh; |
| | | GlobalTimeEvent.Instance.secondEvent += OnSecondEvent; |
| | | CrossServerBaseManager.Instance.OnCrossZoneInfoUpdateEvent += OnCrossZoneInfoUpdate; |
| | | InitTable(); |
| | | InitRedpoint(); |
| | | InitCrossServerState(); |
| | | } |
| | | |
| | | public override void Release() |
| | | { |
| | | DTC0102_tagCDBPlayer.beforePlayerDataInitializeEventOnRelogin -= BeforePlayerDataInitializeEventOnRelogin; |
| | | PlayerDatas.Instance.playerDataRefreshEvent -= PlayerDataRefresh; |
| | | GlobalTimeEvent.Instance.secondEvent -= OnSecondEvent; |
| | | CrossServerBaseManager.Instance.OnCrossZoneInfoUpdateEvent -= OnCrossZoneInfoUpdate; |
| | | } |
| | | |
| | | void InitCrossServerState() |
| | | { |
| | | lastLocalWeekday = TimeUtility.GetCommonWeekday(); // zoneID=0本服 |
| | | int crossZoneID = GetCrossZoneID(); |
| | | lastCrossWeekday = crossZoneID > 0 ? TimeUtility.GetCommonWeekday(crossZoneID) : lastLocalWeekday; |
| | | } |
| | | |
| | | void OnSecondEvent() |
| | | { |
| | | CheckCrossWeekChange(); |
| | | } |
| | | |
| | | // 跨服状态更新事件处理 |
| | | void OnCrossZoneInfoUpdate(int mapID) |
| | | { |
| | | if (mapID != DataMapID) |
| | | return; |
| | | |
| | | bool currentIsOpenCrossServer = IsOpenCrossServer(); |
| | | |
| | | // 只会从未跨服变为跨服,变为跨服时关闭ArenaWin |
| | | if (currentIsOpenCrossServer) |
| | | { |
| | | CloseArenaWinAndClearData(); |
| | | } |
| | | |
| | | int crossZoneID = GetCrossZoneID(); |
| | | lastCrossWeekday = crossZoneID > 0 ? TimeUtility.GetCommonWeekday(crossZoneID) : TimeUtility.GetCommonWeekday(); |
| | | } |
| | | |
| | | int GetCrossZoneID() |
| | | { |
| | | var crossZoneInfo = CrossServerBaseManager.Instance.GetCrossZoneInfo(DataMapID); |
| | | return crossZoneInfo != null ? (int)crossZoneInfo.ZoneID : 0; |
| | | } |
| | | |
| | | void CheckCrossWeekChange() |
| | | { |
| | | int currentLocalWeekday = TimeUtility.GetCommonWeekday(); // zoneID=0本服 |
| | | int crossZoneID = GetCrossZoneID(); |
| | | int currentCrossWeekday = crossZoneID > 0 ? TimeUtility.GetCommonWeekday(crossZoneID) : currentLocalWeekday; |
| | | |
| | | // 条件1: 本服时间过周 (weekday从7变为1, 周日->周一) |
| | | if (lastLocalWeekday == 7 && currentLocalWeekday == 1) |
| | | { |
| | | CloseArenaWinAndClearData(); |
| | | } |
| | | lastLocalWeekday = currentLocalWeekday; |
| | | |
| | | bool currentIsOpenCrossServer = IsOpenCrossServer(); |
| | | if (!currentIsOpenCrossServer) |
| | | return; |
| | | // 条件2: 跨服时间过周 (weekday从7变为1, 周日->周一) |
| | | if (crossZoneID > 0 && lastCrossWeekday == 7 && currentCrossWeekday == 1) |
| | | { |
| | | CloseArenaWinAndClearData(); |
| | | } |
| | | lastCrossWeekday = currentCrossWeekday; |
| | | } |
| | | |
| | | void CloseArenaWinAndClearData() |
| | | { |
| | | if (UIManager.Instance.IsOpened<ArenaWin>()) |
| | | { |
| | | UIManager.Instance.CloseWindow<ArenaWin>(); |
| | | } |
| | | matchInfoList.Clear(); |
| | | gameRecDict.Clear(); |
| | | } |
| | | |
| | | public void BeforePlayerDataInitializeEventOnRelogin() |
| | |
| | | config = FuncConfigConfig.Get("ArenaBillboradAward"); |
| | | dailyRankRewards = ConfigParse.ParseIntArray2Dict(config.Numerical1); |
| | | seasonRankRewards = ConfigParse.ParseIntArray2Dict(config.Numerical2); |
| | | |
| | | config = FuncConfigConfig.Get("ArenaCross"); |
| | | crossRewardTemps = ConfigParse.ParseIntDict(config.Numerical2); |
| | | } |
| | | public void UpdateRedPonit() |
| | | { |
| | |
| | | RealmLV = item.RealmLV, |
| | | FightPower = (ulong)item.FightPowerEx * 100000000 + (ulong)item.FightPower, |
| | | Face = item.Face, |
| | | FacePic = item.FacePic |
| | | FacePic = item.FacePic, |
| | | TitleID = item.TitleID, |
| | | ServerID = item.ServerID, |
| | | }; |
| | | matchInfoList.Add(matchInfo); |
| | | allFaceInfoDict[item.PlayerID] = matchInfo; |
| | |
| | | string name = userData["Name"].ToString(); |
| | | int addScore = int.Parse(userData["AddScore"].ToString()); |
| | | ulong fightPower = ulong.Parse(userData["FightPower"].ToString()); |
| | | uint serverID = 0; |
| | | if (userData.ContainsKey("ServerID")) |
| | | { |
| | | serverID = uint.Parse(userData["ServerID"].ToString()); |
| | | } |
| | | uint cross = 0; |
| | | if (userData.ContainsKey("Cross")) |
| | | { |
| | | cross = uint.Parse(userData["Cross"].ToString()); |
| | | } |
| | | |
| | | var arenaGameRec = new ArenaGameRec |
| | | { |
| | |
| | | Value8 = rec.Value8, |
| | | Name = name, |
| | | AddScore = addScore, |
| | | FightPower = fightPower |
| | | FightPower = fightPower, |
| | | ServerID = serverID, |
| | | Cross = cross |
| | | }; |
| | | |
| | | gameRecDict[recID].Add(arenaGameRec); |
| | |
| | | seasonEndDate = new DateTime(sunday.Year, sunday.Month, sunday.Day, 23, 59, 59); |
| | | } |
| | | |
| | | |
| | | |
| | | /// <summary> |
| | | /// 根据recID获取按时间从大到小排序的List<ArenaGameRec> |
| | | /// </summary> |
| | |
| | | PlayerDatas.Instance.baseData.FightPower : |
| | | FightPowerManager.Instance.GetTeamFightPower(TeamManager.Instance.GetTeamID(BattlePreSetType.Arena), false); |
| | | } |
| | | |
| | | public readonly int DataMapID = 3; |
| | | public bool IsOpenCrossServer() |
| | | { |
| | | bool isOpenCrossServer = CrossServerBaseManager.Instance.IsOpenCrossServer(DataMapID); |
| | | return isOpenCrossServer; |
| | | } |
| | | |
| | | public Dictionary<int, int[][]> GetCrossArenaAwardDict(int functionOrder) |
| | | { |
| | | return functionOrder switch |
| | | { |
| | | 0 => dailyRankRewards, |
| | | 1 => seasonRankRewards, |
| | | 2 => GetCrossWeekRewards(), |
| | | _ => new Dictionary<int, int[][]>() |
| | | }; |
| | | } |
| | | public Dictionary<int, int[][]> GetCrossWeekRewards() |
| | | { |
| | | var crossZoneInfo = CrossServerBaseManager.Instance.GetCrossZoneInfo(DataMapID); |
| | | if (crossZoneInfo == null || crossZoneInfo.ServerIDList == null || crossRewardTemps.IsNullOrEmpty()) |
| | | { |
| | | return new Dictionary<int, int[][]>(); |
| | | } |
| | | |
| | | int serverCount = crossZoneInfo.ServerIDList.Length; |
| | | |
| | | // 先对key进行排序,避免遍历顺序依赖 |
| | | var sortedKeys = crossRewardTemps.Keys.OrderBy(k => k).ToList(); |
| | | |
| | | int templateID = 0; |
| | | int matchedKey = 0; |
| | | |
| | | foreach (var key in sortedKeys) |
| | | { |
| | | if (key <= serverCount && key >= matchedKey) |
| | | { |
| | | matchedKey = key; |
| | | templateID = crossRewardTemps[key]; |
| | | } |
| | | } |
| | | |
| | | // 如果没有匹配的key(serverCount小于所有配置的key),取最小key对应的奖励 |
| | | if (templateID == 0 && sortedKeys.Count > 0) |
| | | { |
| | | var minKey = sortedKeys[0]; |
| | | templateID = crossRewardTemps[minKey]; |
| | | } |
| | | |
| | | if (templateID == 0) return new Dictionary<int, int[][]>(); |
| | | |
| | | var rankList = ActBillboardAwardConfig.GetRankASortList(templateID); |
| | | if (rankList.IsNullOrEmpty()) return new Dictionary<int, int[][]>(); |
| | | |
| | | var result = new Dictionary<int, int[][]>(); |
| | | foreach (var rankA in rankList) |
| | | { |
| | | var config = ActBillboardAwardConfig.GetConfig(templateID, rankA); |
| | | if (config?.AwardItemList != null) |
| | | { |
| | | result[rankA] = config.AwardItemList; |
| | | } |
| | | } |
| | | return result; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 获得当前赛季的起止日期(跨服版本)。赛季从周一 00:00:00 开始,到周日 23:59:59 结束。 |
| | | /// 服务端定义周一为每周的第一天。 |
| | | /// </summary> |
| | | /// <param name="zoneID">跨服zoneID,0表示本服时间,非0表示跨服时间</param> |
| | | /// <param name="seasonStartDate">输出参数:赛季的起始日期(本周一 00:00:00)</param> |
| | | /// <param name="seasonEndDate">输出参数:赛季的结束日期(本周日 23:59:59)</param> |
| | | public void GetCrossCurrentSeasonDates(int zoneID, out DateTime seasonStartDate, out DateTime seasonEndDate) |
| | | { |
| | | DateTime now = TimeUtility.GetCommServerNow(zoneID); |
| | | // 为了符合周一是一周第一天的计算标准,将周日视为一周的第7天。 |
| | | int currentDayOfWeek = (int)now.DayOfWeek; |
| | | if (currentDayOfWeek == 0) // 如果是周日 (Sunday = 0) |
| | | { |
| | | currentDayOfWeek = 7; |
| | | } |
| | | DateTime monday = now.AddDays(-(currentDayOfWeek - 1)); |
| | | seasonStartDate = new DateTime(monday.Year, monday.Month, monday.Day, 0, 0, 0); |
| | | DateTime sunday = seasonStartDate.AddDays(6); |
| | | seasonEndDate = new DateTime(sunday.Year, sunday.Month, sunday.Day, 23, 59, 59); |
| | | } |
| | | } |
| | | |
| | | |
| | |
| | | public ulong FightPower; //战力 |
| | | public uint Face; //基本脸型 |
| | | public uint FacePic; //头像框 |
| | | public uint ServerID; |
| | | |
| | | } |
| | | |
| | |
| | | public int AddScore; //本次自己变更的积分,有正负 |
| | | public ulong FightPower; //目标战力 |
| | | public int TitileId; //未来接入 |
| | | public uint ServerID; //对手区服ID |
| | | public uint Cross; //是否跨服记录 |
| | | |
| | | } |
| | |
| | | [SerializeField] Text rankText; |
| | | [SerializeField] Text rankValueText; //排名比较内容 |
| | | [SerializeField] Text nameText; |
| | | [SerializeField] Text serverText; |
| | | [SerializeField] OfficialTitleCell officialTitleCell; |
| | | [SerializeField] Button queryPlayerBtn; //后续添加点击查看玩家详情 |
| | | |
| | | |
| | | // rank 为0 代表玩家自己 |
| | | public void Display(int rankType, int rank, string valueFormat) |
| | | { |
| | | DisplayCross(rankType, rank, valueFormat, false); |
| | | } |
| | | |
| | | public void DisplayCross(int rankType, int rank, string valueFormat) |
| | | { |
| | | DisplayCross(rankType, rank, valueFormat, true); |
| | | } |
| | | |
| | | void DisplayCross(int rankType, int rank, string valueFormat, bool isCross) |
| | | { |
| | | RankData rankData = null; |
| | | int viewPlayerId = (int)PlayerDatas.Instance.baseData.PlayerID; |
| | |
| | | avatarCell.SetActive(false); |
| | | nameText.text = Language.Get("L1124"); |
| | | rankValueText.text = "0";//Language.Get("L1125"); |
| | | if (serverText != null) |
| | | serverText.text = ""; |
| | | } |
| | | else |
| | | { |
| | |
| | | officialTitleCell.InitUI((int)rankData.value1, (int)rankData.value2); |
| | | avatarCell.SetActive(true); |
| | | avatarCell.InitUI(AvatarHelper.GetAvatarModel((int)rankData.id, (int)rankData.value3, (int)rankData.value4)); |
| | | |
| | | // 跨服显示服务器名称 |
| | | if (isCross && serverText != null) |
| | | { |
| | | serverText.text = ServerListCenter.Instance.GetServerName(UIHelper.GetServerIDByAccount(rankData.name2)); |
| | | } |
| | | |
| | | avatarCell.SetListener(() => |
| | | { |
| | | AvatarHelper.TryViewOtherPlayerInfo((int)rankData.id, viewPlayerLineupType: (int)BattlePreSetType.Arena); |
| | | int serverID = (ArenaManager.Instance.IsOpenCrossServer() && rankData.id != PlayerDatas.Instance.baseData.PlayerID) ? UIHelper.GetServerIDByAccount(rankData.name2) : 0; |
| | | AvatarHelper.TryViewOtherPlayerInfo((int)rankData.id, serverID, viewPlayerLineupType: (int)BattlePreSetType.Arena); |
| | | }); |
| | | nameText.text = rankData.name1; |
| | | rankValueText.text = string.Format(valueFormat, UIHelper.ReplaceLargeNum(rankData.cmpValue)); |
| | |
| | | { |
| | | queryPlayerBtn.AddListener(() => |
| | | { |
| | | AvatarHelper.TryViewOtherPlayerInfo(viewPlayerId, viewPlayerLineupType: (int)BattlePreSetType.Arena); |
| | | int serverID = (ArenaManager.Instance.IsOpenCrossServer() && viewPlayerId != PlayerDatas.Instance.baseData.PlayerID) ? UIHelper.GetServerIDByAccount(rankData.name2) : 0; |
| | | AvatarHelper.TryViewOtherPlayerInfo(viewPlayerId, serverID, viewPlayerLineupType: (int)BattlePreSetType.Arena); |
| | | }); |
| | | } |
| | | } |
| | |
| | | using UnityEngine; |
| | | using UnityEngine.UI; |
| | | |
| | | |
| | | public class ArenaPlayerTop3Cell : MonoBehaviour |
| | | { |
| | | //[SerializeField] Model 显示NPC 武将模型 |
| | | [SerializeField] Text rankValueText; //排名比较内容 |
| | | [SerializeField] Text nameText; |
| | | [SerializeField] Text serverText; |
| | | [SerializeField] OfficialTitleCell officialTitleCell; |
| | | [SerializeField] Button queryPlayerBtn; //后续添加点击查看玩家详情 |
| | | [SerializeField] HorseController model; |
| | | |
| | | public void Display(int rankType, int rank, string valueFormat = "{0}") |
| | | { |
| | | DisplayCross(rankType, rank, valueFormat, false); |
| | | } |
| | | |
| | | public void DisplayCross(int rankType, int rank, string valueFormat = "{0}") |
| | | { |
| | | DisplayCross(rankType, rank, valueFormat, true); |
| | | } |
| | | |
| | | void DisplayCross(int rankType, int rank, string valueFormat, bool isCross) |
| | | { |
| | | var rankData = RankModel.Instance.GetRankDataByRank(rankType, rank); |
| | | if (rankData == null) |
| | |
| | | rankValueText.text = "0";//Language.Get("L1125"); |
| | | nameText.text = Language.Get("L1124"); |
| | | officialTitleCell.SetActive(false); |
| | | if (serverText != null) |
| | | serverText.text = ""; |
| | | return; |
| | | } |
| | | officialTitleCell.SetActive(true); |
| | |
| | | nameText.text = rankData.name1; |
| | | officialTitleCell.InitUI((int)rankData.value1, (int)rankData.value2); |
| | | model.Create(HorseManager.Instance.GetOtherPlayerHorseSkinID((int)rankData.value6), (int)rankData.value5, 1); |
| | | |
| | | if (isCross && serverText != null) |
| | | { |
| | | serverText.text = ServerListCenter.Instance.GetServerName(UIHelper.GetServerIDByAccount(rankData.name2)); |
| | | } |
| | | |
| | | queryPlayerBtn.SetListener(() => |
| | | { |
| | | AvatarHelper.TryViewOtherPlayerInfo((int)rankData.id, viewPlayerLineupType: (int)BattlePreSetType.Arena); |
| | |
| | | [SerializeField] AvatarCell avatarCell; |
| | | [SerializeField] TextEx txtName; |
| | | [SerializeField] TextEx txtDate; |
| | | [SerializeField] TextEx txtCrossDate; |
| | | [SerializeField] TextEx txtServerName; |
| | | [SerializeField] TextEx txtFightPoint; |
| | | [SerializeField] TextEx txtState; |
| | | [SerializeField] TextEx txtAdd; |
| | |
| | | return; |
| | | arenaGameRec = sortedList[index]; |
| | | imgType.SetSprite(arenaGameRec.Value2 == 1 ? "ArenaRecordTypeAtk" : "ArenaRecordTypeDef"); |
| | | txtDate.text = FormatTime(arenaGameRec.Time); |
| | | |
| | | // 跨服记录样式显示逻辑 |
| | | if (ArenaManager.Instance.IsOpenCrossServer()) |
| | | { |
| | | // 跨服样式:txtDate隐藏,txtCrossDate和txtServerName显示 |
| | | txtDate.SetActive(false); |
| | | txtCrossDate.SetActive(true); |
| | | txtServerName.SetActive(true); |
| | | |
| | | if (arenaGameRec.Cross == 1) |
| | | { |
| | | // 跨服记录:显示跨服时间和跨服服务器 |
| | | txtCrossDate.text = FormatTime(arenaGameRec.Time); |
| | | txtServerName.text = ServerListCenter.Instance.GetServerName((int)arenaGameRec.ServerID); |
| | | } |
| | | else |
| | | { |
| | | // 本服记录:显示本服时间和本服服务器 |
| | | txtCrossDate.text = FormatTime(arenaGameRec.Time); |
| | | txtServerName.text = ServerListCenter.Instance.GetServerName(UIHelper.GetServerIDByAccount(PlayerDatas.Instance.baseData.AccID)); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | // 正常样式:txtDate显示,txtCrossDate和txtServerName隐藏 |
| | | txtDate.SetActive(true); |
| | | txtDate.text = FormatTime(arenaGameRec.Time); |
| | | txtCrossDate.SetActive(false); |
| | | txtServerName.SetActive(false); |
| | | } |
| | | |
| | | // true 已失效 false 未失效 |
| | | bool isTimeInvalid = ArenaManager.Instance.IsTimeInvalid(arenaGameRec.Time); |
| | | // 发起攻击,打赢有积分,打输没有 |
| | |
| | | avatarCell.InitUI(AvatarHelper.GetAvatarModel((int)arenaGameRec.Value3, (int)arenaGameRec.Value5, (int)arenaGameRec.Value6)); |
| | | avatarCell.SetListener(() => |
| | | { |
| | | AvatarHelper.TryViewOtherPlayerInfo((int)arenaGameRec.Value3, viewPlayerLineupType: (int)BattlePreSetType.Arena); |
| | | int serverID = (ArenaManager.Instance.IsOpenCrossServer() && arenaGameRec.Value3 != PlayerDatas.Instance.baseData.PlayerID) ? (int)arenaGameRec.ServerID : 0; |
| | | AvatarHelper.TryViewOtherPlayerInfo((int)arenaGameRec.Value3, serverID, viewPlayerLineupType: (int)BattlePreSetType.Arena); |
| | | }); |
| | | txtName.text = arenaGameRec.Name; |
| | | txtFightPoint.text = UIHelper.ReplaceLargeArtNum(arenaGameRec.FightPower); |
| | |
| | | using UnityEngine; |
| | | using UnityEngine.UI; |
| | | |
| | | public class ArenaWin : UIBase |
| | | public class ArenaWin : FunctionsBaseWin |
| | | { |
| | | [SerializeField] TextEx txtTip; |
| | | [SerializeField] TextEx txtCrossTip; |
| | | |
| | | [SerializeField] Transform transLocalRank; |
| | | [SerializeField] Transform transLocalButton; |
| | | [SerializeField] Transform transLocalCrossButton; |
| | | [SerializeField] ButtonEx btnCrossAward; |
| | | [SerializeField] Button btnFunPresetCross; |
| | | |
| | | [SerializeField] ButtonEx btnRecord; |
| | | [SerializeField] ButtonEx btnAward; |
| | | [SerializeField] ButtonEx btnChallage; |
| | |
| | | [SerializeField] ArenaPlayerRankCell myRankCell; |
| | | [SerializeField] ArenaChallengeVoucher voucher; |
| | | [SerializeField] Button funPresetBtn; |
| | | |
| | | |
| | | //跨服排行 |
| | | [SerializeField] Transform transCrossRank; |
| | | [SerializeField] ButtonEx btnRecordCross; |
| | | [SerializeField] ButtonEx btnAwardCross; |
| | | [SerializeField] ButtonEx btnChallageCross; |
| | | [SerializeField] RedpointBehaviour rpChallageCross; |
| | | [SerializeField] List<ArenaPlayerTop3Cell> playerTop3CellsCross; |
| | | [SerializeField] ScrollerController scrollerControllerCross; |
| | | [SerializeField] ArenaPlayerRankCell myRankCellCross; |
| | | [SerializeField] ArenaChallengeVoucher voucherCross; |
| | | [SerializeField] Button funPresetBtnCross; |
| | | [SerializeField] Button serversBtn; |
| | | |
| | | |
| | | [HideInInspector] public int groupValue1 = 0; //一般用于跨服 |
| | | [HideInInspector] public int groupValue2 = 0; //一般用于跨服 |
| | | [HideInInspector] public string valueFormat = "{0}"; |
| | |
| | | protected override void InitComponent() |
| | | { |
| | | base.InitComponent(); |
| | | btnAward.SetListener(() => UIManager.Instance.OpenWindow<ArenaAwardWin>()); |
| | | btnAward.SetListener(() => |
| | | { |
| | | if (ArenaManager.Instance.IsOpenCrossServer()) |
| | | UIManager.Instance.OpenWindow<ArenaCrossAwardWin>(); |
| | | else |
| | | UIManager.Instance.OpenWindow<ArenaAwardWin>(); |
| | | }); |
| | | btnRecord.SetListener(() => |
| | | { |
| | | ArenaManager.Instance.SendViewGameRecPack(); |
| | |
| | | ArenaManager.Instance.SendArenaMatch(); |
| | | UIManager.Instance.OpenWindow<ArenaChallengeWin>(); |
| | | }); |
| | | funPresetBtn.AddListener(()=> |
| | | funPresetBtn.AddListener(() => |
| | | { |
| | | FuncPresetManager.Instance.ClickBattlePreset((int)BattlePreSetType.Arena); |
| | | }); |
| | | btnCrossAward.SetListener(() => |
| | | { |
| | | if (ArenaManager.Instance.IsOpenCrossServer()) |
| | | UIManager.Instance.OpenWindow<ArenaCrossAwardWin>(); |
| | | else |
| | | UIManager.Instance.OpenWindow<ArenaAwardWin>(); |
| | | }); |
| | | btnFunPresetCross.AddListener(() => |
| | | { |
| | | FuncPresetManager.Instance.ClickBattlePreset((int)BattlePreSetType.Arena); |
| | | }); |
| | | |
| | | // 跨服按钮监听器 |
| | | btnAwardCross.SetListener(() => |
| | | { |
| | | UIManager.Instance.OpenWindow<ArenaCrossAwardWin>(); |
| | | }); |
| | | btnRecordCross.SetListener(() => |
| | | { |
| | | ArenaManager.Instance.SendViewGameRecPack(); |
| | | UIManager.Instance.OpenWindow<ArenaRecordWin>(); |
| | | }); |
| | | btnChallageCross.SetListener(() => |
| | | { |
| | | ArenaManager.Instance.SendArenaMatch(); |
| | | UIManager.Instance.OpenWindow<ArenaChallengeWin>(); |
| | | }); |
| | | funPresetBtnCross.AddListener(() => |
| | | { |
| | | FuncPresetManager.Instance.ClickBattlePreset((int)BattlePreSetType.Arena); |
| | | }); |
| | | serversBtn.SetListener(() => |
| | | { |
| | | UIHelper.ShowServersPanel(GuildManager.Instance.crossServerIDList); |
| | | }); |
| | | } |
| | | |
| | | protected override void OnPreOpen() |
| | | { |
| | | base.OnPreOpen(); |
| | | RankModel.Instance.ResetQueryParam(); |
| | | RankModel.Instance.QueryRankByPage(ArenaManager.Instance.rankType, watchID: (int)PlayerDatas.Instance.baseData.PlayerID); |
| | | rpChallage.redpointId = ArenaManager.Instance.GetRedPonitId(1); |
| | | |
| | | } |
| | | // 在base.OnPreOpen()之前设置functionOrder,避免被父类传入参数覆盖 |
| | | bool isOpenCrossServer = ArenaManager.Instance.IsOpenCrossServer(); |
| | | if (isOpenCrossServer) |
| | | { |
| | | functionOrder = 1; // 跨服排行 |
| | | } |
| | | else |
| | | { |
| | | functionOrder = 0; // 本服排行 |
| | | } |
| | | |
| | | protected override void NextFrameAfterOpen() |
| | | { |
| | | base.OnPreOpen(); |
| | | rpChallage.redpointId = ArenaManager.Instance.GetRedPonitId(1); |
| | | rpChallageCross.redpointId = ArenaManager.Instance.GetRedPonitId(1); |
| | | |
| | | RankModel.Instance.onRankRefresh += OnRankRefresh; |
| | | scrollerController.OnRefreshCell += OnRefreshCell; |
| | | scrollerControllerCross.OnRefreshCell += OnRefreshCellCross; |
| | | ArenaManager.Instance.OnArenaMatchListEvent += OnArenaMatchListEvent; |
| | | ArenaManager.Instance.OnUpdateArenaPlayerInfo += OnUpdateArenaPlayerInfo; |
| | | ArenaManager.Instance.OnUpdateGameRecInfo += OnUpdateGameRecInfo; |
| | | PlayerDatas.Instance.playerDataRefreshEvent += PlayerDataRefresh; |
| | | FuncOpen.Instance.OnFuncStateChangeEvent += OnFuncStateChange; |
| | | |
| | | ShowRankByFunctionOrder(); |
| | | |
| | | txtTip.SetActive(!isOpenCrossServer); |
| | | txtCrossTip.SetActive(isOpenCrossServer); |
| | | |
| | | for (int i = 0; i < tabButtons.Length; i++) |
| | | { |
| | | tabButtons[i].SetActive(isOpenCrossServer); |
| | | } |
| | | |
| | | RankModel.Instance.ResetQueryParam(); |
| | | if (isOpenCrossServer) |
| | | { |
| | | var crossZoneInfo = CrossServerBaseManager.Instance.GetCrossZoneInfo(ArenaManager.Instance.DataMapID); |
| | | if (crossZoneInfo != null) |
| | | { |
| | | RankModel.Instance.QueryRankByPage(ArenaManager.Instance.corssRankType, groupValue1: (int)crossZoneInfo.ZoneID, crossServerID: (int)crossZoneInfo.CrossServerID, watchID: (int)PlayerDatas.Instance.baseData.PlayerID); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | RankModel.Instance.QueryRankByPage(ArenaManager.Instance.rankType, watchID: (int)PlayerDatas.Instance.baseData.PlayerID); |
| | | } |
| | | |
| | | Display(); |
| | | } |
| | | |
| | | protected override void OpenSubUIByTabIndex() |
| | | { |
| | | ShowRankByFunctionOrder(); |
| | | RankModel.Instance.ResetQueryParam(); |
| | | |
| | | // 重新查询对应排行 |
| | | bool isOpenCrossServer = ArenaManager.Instance.IsOpenCrossServer(); |
| | | if (functionOrder == 0 && isOpenCrossServer) |
| | | { |
| | | // 本服排行 |
| | | RankModel.Instance.QueryRankByPage(ArenaManager.Instance.rankType, watchID: (int)PlayerDatas.Instance.baseData.PlayerID); |
| | | } |
| | | else if (functionOrder == 1 && isOpenCrossServer) |
| | | { |
| | | // 跨服排行 |
| | | var crossZoneInfo = CrossServerBaseManager.Instance.GetCrossZoneInfo(ArenaManager.Instance.DataMapID); |
| | | if (crossZoneInfo != null) |
| | | { |
| | | RankModel.Instance.QueryRankByPage(ArenaManager.Instance.corssRankType, groupValue1: (int)crossZoneInfo.ZoneID, crossServerID: (int)crossZoneInfo.CrossServerID, watchID: (int)PlayerDatas.Instance.baseData.PlayerID); |
| | | } |
| | | } |
| | | } |
| | | |
| | | void ShowRankByFunctionOrder() |
| | | { |
| | | if (functionOrder == 0) |
| | | { |
| | | // 本服排行 |
| | | transLocalRank.SetActive(true); |
| | | bool isOpenCrossServer = ArenaManager.Instance.IsOpenCrossServer(); |
| | | transLocalButton.SetActive(!isOpenCrossServer); |
| | | transLocalCrossButton.SetActive(isOpenCrossServer); |
| | | transCrossRank.SetActive(false); |
| | | } |
| | | else |
| | | { |
| | | // 跨服排行 |
| | | transLocalRank.SetActive(false); |
| | | transCrossRank.SetActive(true); |
| | | } |
| | | } |
| | | |
| | | protected override void OnPreClose() |
| | |
| | | base.OnPreClose(); |
| | | RankModel.Instance.onRankRefresh -= OnRankRefresh; |
| | | scrollerController.OnRefreshCell -= OnRefreshCell; |
| | | scrollerControllerCross.OnRefreshCell -= OnRefreshCellCross; |
| | | ArenaManager.Instance.OnArenaMatchListEvent -= OnArenaMatchListEvent; |
| | | ArenaManager.Instance.OnUpdateArenaPlayerInfo -= OnUpdateArenaPlayerInfo; |
| | | ArenaManager.Instance.OnUpdateGameRecInfo -= OnUpdateGameRecInfo; |
| | |
| | | RankModel.Instance.ListenRankPage(ArenaManager.Instance.rankType, cell.index, groupValue1, groupValue2); |
| | | } |
| | | |
| | | void OnRefreshCellCross(ScrollerDataType type, CellView cell) |
| | | { |
| | | |
| | | var crossZoneInfo = CrossServerBaseManager.Instance.GetCrossZoneInfo(ArenaManager.Instance.DataMapID); |
| | | int zoneID = crossZoneInfo != null ? (int)crossZoneInfo.ZoneID : 0; |
| | | int crossServerID = crossZoneInfo != null ? (int)crossZoneInfo.CrossServerID : 0; |
| | | |
| | | var _cell = cell.GetComponent<ArenaPlayerRankCell>(); |
| | | _cell.DisplayCross(ArenaManager.Instance.corssRankType, cell.index + 1, valueFormat); |
| | | RankModel.Instance.ListenRankPage(ArenaManager.Instance.corssRankType, cell.index, zoneID, 0, crossServerID); |
| | | } |
| | | |
| | | private void OnUpdateArenaPlayerInfo() |
| | | { |
| | | Display(); |
| | |
| | | DisplayDeployTroop(); |
| | | |
| | | funPresetBtn.SetActive(FuncPresetManager.Instance.IsPreShow()); |
| | | |
| | | // 跨服显示 |
| | | voucherCross.Display(); |
| | | CreateScrollerCross(); |
| | | DisplayMyRankCross(); |
| | | DisplayTop3Cross(); |
| | | funPresetBtnCross.SetActive(FuncPresetManager.Instance.IsPreShow()); |
| | | } |
| | | |
| | | void CreateScroller() |
| | |
| | | scrollerController.Restart(); |
| | | } |
| | | |
| | | void CreateScrollerCross() |
| | | { |
| | | scrollerControllerCross.Refresh(); |
| | | var cnt = RankModel.Instance.GetRankShowMaxCnt(ArenaManager.Instance.corssRankType); |
| | | for (int i = 3; i < cnt; i++) |
| | | { |
| | | scrollerControllerCross.AddCell(ScrollerDataType.Header, i); |
| | | } |
| | | scrollerControllerCross.Restart(); |
| | | } |
| | | |
| | | void DisplayMyRank() |
| | | { |
| | | myRankCell.Display(ArenaManager.Instance.rankType, 0, ArenaManager.Instance.score.ToString()); |
| | | } |
| | | |
| | | void DisplayMyRankCross() |
| | | { |
| | | myRankCellCross.DisplayCross(ArenaManager.Instance.corssRankType, 0, ArenaManager.Instance.score.ToString()); |
| | | } |
| | | |
| | | void DisplayTop3() |
| | |
| | | } |
| | | } |
| | | |
| | | void DisplayTop3Cross() |
| | | { |
| | | for (int i = 0; i < playerTop3CellsCross.Count; i++) |
| | | { |
| | | playerTop3CellsCross[i].DisplayCross(ArenaManager.Instance.corssRankType, i + 1); |
| | | } |
| | | } |
| | | |
| | | void OnRankRefresh(int type) |
| | | { |
| | | if (type != ArenaManager.Instance.rankType) |
| | | return; |
| | | DisplayTop3(); |
| | | scrollerController.m_Scorller.RefreshActiveCellViews(); |
| | | DisplayMyRank(); |
| | | if (type == ArenaManager.Instance.rankType) |
| | | { |
| | | DisplayTop3(); |
| | | scrollerController.m_Scorller.RefreshActiveCellViews(); |
| | | DisplayMyRank(); |
| | | } |
| | | else if (type == ArenaManager.Instance.corssRankType) |
| | | { |
| | | DisplayTop3Cross(); |
| | | scrollerControllerCross.m_Scorller.RefreshActiveCellViews(); |
| | | DisplayMyRankCross(); |
| | | } |
| | | } |
| | | } |
| | |
| | | public class CrossServerBaseManager : GameSystemManager<CrossServerBaseManager> |
| | | { |
| | | public Dictionary<int, CrossZoneInfo> crossZoneInfoDict = new Dictionary<int, CrossZoneInfo>(); |
| | | |
| | | // 跨服状态更新事件,参数为mapID |
| | | public event Action<int> OnCrossZoneInfoUpdateEvent; |
| | | |
| | | public override void Init() |
| | | { |
| | | DTC0102_tagCDBPlayer.beforePlayerDataInitializeEventOnRelogin += OnBeforePlayerDataInitialize; |
| | |
| | | ServerIDList = netPack.ServerIDList, |
| | | CrossServerID = netPack.CrossServerID |
| | | }; |
| | | |
| | | |
| | | OnCrossZoneInfoUpdateEvent?.Invoke((int)netPack.MapID); |
| | | } |
| | | |
| | | // 没有数据代表不在跨服中,群英有个特殊约定zoneid等于0代表结算中 |