From 2dd1841d03a730d3d369092c2a3ad656cee4bf64 Mon Sep 17 00:00:00 2001
From: lcy <1459594991@qq.com>
Date: 星期四, 07 五月 2026 15:11:38 +0800
Subject: [PATCH] 512 跨服演武场
---
Main/System/Arena/ArenaPlayerTop3Cell.cs | 20 +
Main/System/Arena/ArenaCrossAwardCell.cs.meta | 11
Main/System/CrossServer/CrossServerBaseManager.cs | 7
Main/System/Arena/ArenaCrossAwardWin.cs.meta | 11
Main/System/Arena/ArenaCrossAwardCell.cs | 69 ++++
Main/System/Arena/ArenaRecordCell.cs | 37 ++
Main/System/Arena/ArenaBattleVictoryWin.cs | 3
Main/System/Arena/ArenaChallengeCell.cs | 25 +
Main/System/Arena/ArenaPlayerRankCell.cs | 26 +
Main/Core/NetworkPackage/ServerPack/HA9_Function/HA922_tagSCArenaMatchList.cs | 2
Main/System/Arena/ArenaBattleFailWin.cs | 3
Main/System/Arena/ArenaManager.cs | 197 +++++++++++++
Main/System/Arena/ArenaWin.cs | 223 ++++++++++++++-
Main/System/Arena/ArenaCrossAwardWin.cs | 192 +++++++++++++
14 files changed, 797 insertions(+), 29 deletions(-)
diff --git a/Main/Core/NetworkPackage/ServerPack/HA9_Function/HA922_tagSCArenaMatchList.cs b/Main/Core/NetworkPackage/ServerPack/HA9_Function/HA922_tagSCArenaMatchList.cs
index 2b09559..4a64ebd 100644
--- a/Main/Core/NetworkPackage/ServerPack/HA9_Function/HA922_tagSCArenaMatchList.cs
+++ b/Main/Core/NetworkPackage/ServerPack/HA9_Function/HA922_tagSCArenaMatchList.cs
@@ -25,6 +25,7 @@
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);
}
}
@@ -38,6 +39,7 @@
public uint Face; //鍩烘湰鑴稿瀷
public uint FacePic; //澶村儚妗�
public uint TitleID; //绉板彿
+ public uint ServerID;
}
}
diff --git a/Main/System/Arena/ArenaBattleFailWin.cs b/Main/System/Arena/ArenaBattleFailWin.cs
index 1ddaa6a..c521db5 100644
--- a/Main/System/Arena/ArenaBattleFailWin.cs
+++ b/Main/System/Arena/ArenaBattleFailWin.cs
@@ -73,7 +73,8 @@
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;
diff --git a/Main/System/Arena/ArenaBattleVictoryWin.cs b/Main/System/Arena/ArenaBattleVictoryWin.cs
index 50311df..1b1a4e0 100644
--- a/Main/System/Arena/ArenaBattleVictoryWin.cs
+++ b/Main/System/Arena/ArenaBattleVictoryWin.cs
@@ -67,7 +67,8 @@
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;
diff --git a/Main/System/Arena/ArenaChallengeCell.cs b/Main/System/Arena/ArenaChallengeCell.cs
index 97fc548..da67da5 100644
--- a/Main/System/Arena/ArenaChallengeCell.cs
+++ b/Main/System/Arena/ArenaChallengeCell.cs
@@ -6,6 +6,8 @@
[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;
@@ -35,13 +37,30 @@
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;
diff --git a/Main/System/Arena/ArenaCrossAwardCell.cs b/Main/System/Arena/ArenaCrossAwardCell.cs
new file mode 100644
index 0000000..e79fa7e
--- /dev/null
+++ b/Main/System/Arena/ArenaCrossAwardCell.cs
@@ -0,0 +1,69 @@
+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));
+ }
+ }
+ }
+}
diff --git a/Main/System/Arena/ArenaCrossAwardCell.cs.meta b/Main/System/Arena/ArenaCrossAwardCell.cs.meta
new file mode 100644
index 0000000..45cac21
--- /dev/null
+++ b/Main/System/Arena/ArenaCrossAwardCell.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: db50e766c48693241827170a23113478
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Main/System/Arena/ArenaCrossAwardWin.cs b/Main/System/Arena/ArenaCrossAwardWin.cs
new file mode 100644
index 0000000..68cc462
--- /dev/null
+++ b/Main/System/Arena/ArenaCrossAwardWin.cs
@@ -0,0 +1,192 @@
+using System;
+using System.Linq;
+using UnityEngine;
+
+/// <summary>
+/// 绔炴妧鍦哄鍔辩獥鍙o細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);
+ }
+}
diff --git a/Main/System/Arena/ArenaCrossAwardWin.cs.meta b/Main/System/Arena/ArenaCrossAwardWin.cs.meta
new file mode 100644
index 0000000..51535a4
--- /dev/null
+++ b/Main/System/Arena/ArenaCrossAwardWin.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: f638d0723d6fc9347ac43f23a5a2f944
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Main/System/Arena/ArenaManager.cs b/Main/System/Arena/ArenaManager.cs
index cd9cdaa..d82cdd9 100644
--- a/Main/System/Arena/ArenaManager.cs
+++ b/Main/System/Arena/ArenaManager.cs
@@ -1,4 +1,5 @@
using System.Collections.Generic;
+using System.Linq;
using UnityEngine;
using LitJson;
using System;
@@ -6,6 +7,7 @@
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; // 鎴樻枟鑳藉垏鎹㈤〉绛惧姛鑳絀D
@@ -26,6 +28,8 @@
public Dictionary<int, int[][]> dailyRankRewards; // 姣忔棩鎺掕濂栧姳 {"鍚嶆":[[鐗╁搧ID, 涓暟,鏄惁鎷嶅搧], ...], ...} 閰嶇疆鐨勫悕娆ey锛岃嚜鍔ㄦ寜灏忎簬绛変簬瀵瑰簲鍚嶆缁欏鍔�
public Dictionary<int, int[][]> seasonRankRewards; // 璧涘鎺掕濂栧姳 {"鍚嶆":[[鐗╁搧ID, 涓暟,鏄惁鎷嶅搧], ...], ...}
+ public Dictionary<int, int> crossRewardTemps;//鏁板��2锛氳法鏈嶈禌瀛f帓琛屽鍔辨ā鐗� {"浜掗�氭湇鍔″櫒鏁�";瀵瑰簲娲诲姩鎺掕濂栧姳琛ㄦā鐗堢紪鍙�, ...} 鎸夊皬浜庣瓑浜庡垽鏂紝澶т簬鏈�澶ч厤缃殑鏈嶅姟鍣ㄦ暟鏃堕粯璁ゅ彇閰嶇疆涓渶澶ф湇鍔″櫒鏁板搴斿鍔�
+ public Dictionary<int, int[][]> crossWeekRewards;
public uint score; // 褰撳墠绉垎
public int totalWinCnt; //绱鑳滃埄娆℃暟
@@ -40,18 +44,97 @@
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()
@@ -86,6 +169,9 @@
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()
{
@@ -141,7 +227,9 @@
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;
@@ -175,6 +263,16 @@
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
{
@@ -189,7 +287,9 @@
Value8 = rec.Value8,
Name = name,
AddScore = addScore,
- FightPower = fightPower
+ FightPower = fightPower,
+ ServerID = serverID,
+ Cross = cross
};
gameRecDict[recID].Add(arenaGameRec);
@@ -289,6 +389,8 @@
seasonEndDate = new DateTime(sunday.Year, sunday.Month, sunday.Day, 23, 59, 59);
}
+
+
/// <summary>
/// 鏍规嵁recID鑾峰彇鎸夋椂闂翠粠澶у埌灏忔帓搴忕殑List<ArenaGameRec>
/// </summary>
@@ -313,6 +415,94 @@
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];
+ }
+ }
+
+ // 濡傛灉娌℃湁鍖归厤鐨刱ey锛坰erverCount灏忎簬鎵�鏈夐厤缃殑key锛夛紝鍙栨渶灏弅ey瀵瑰簲鐨勫鍔�
+ 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>
+ /// 鑾峰緱褰撳墠璧涘鐨勮捣姝㈡棩鏈燂紙璺ㄦ湇鐗堟湰锛夈�傝禌瀛d粠鍛ㄤ竴 00:00:00 寮�濮嬶紝鍒板懆鏃� 23:59:59 缁撴潫銆�
+ /// 鏈嶅姟绔畾涔夊懆涓�涓烘瘡鍛ㄧ殑绗竴澶┿��
+ /// </summary>
+ /// <param name="zoneID">璺ㄦ湇zoneID锛�0琛ㄧず鏈湇鏃堕棿锛岄潪0琛ㄧず璺ㄦ湇鏃堕棿</param>
+ /// <param name="seasonStartDate">杈撳嚭鍙傛暟锛氳禌瀛g殑璧峰鏃ユ湡锛堟湰鍛ㄤ竴 00:00:00锛�</param>
+ /// <param name="seasonEndDate">杈撳嚭鍙傛暟锛氳禌瀛g殑缁撴潫鏃ユ湡锛堟湰鍛ㄦ棩 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);
+ }
}
@@ -327,6 +517,7 @@
public ulong FightPower; //鎴樺姏
public uint Face; //鍩烘湰鑴稿瀷
public uint FacePic; //澶村儚妗�
+ public uint ServerID;
}
@@ -345,5 +536,7 @@
public int AddScore; //鏈鑷繁鍙樻洿鐨勭Н鍒嗭紝鏈夋璐�
public ulong FightPower; //鐩爣鎴樺姏
public int TitileId; //鏈潵鎺ュ叆
+ public uint ServerID; //瀵规墜鍖烘湇ID
+ public uint Cross; //鏄惁璺ㄦ湇璁板綍
}
\ No newline at end of file
diff --git a/Main/System/Arena/ArenaPlayerRankCell.cs b/Main/System/Arena/ArenaPlayerRankCell.cs
index d4f1d64..760ec17 100644
--- a/Main/System/Arena/ArenaPlayerRankCell.cs
+++ b/Main/System/Arena/ArenaPlayerRankCell.cs
@@ -7,12 +7,23 @@
[SerializeField] Text rankText;
[SerializeField] Text rankValueText; //鎺掑悕姣旇緝鍐呭
[SerializeField] Text nameText;
+ [SerializeField] Text serverText;
[SerializeField] OfficialTitleCell officialTitleCell;
[SerializeField] Button queryPlayerBtn; //鍚庣画娣诲姞鐐瑰嚮鏌ョ湅鐜╁璇︽儏
// rank 涓�0 浠h〃鐜╁鑷繁
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;
@@ -43,6 +54,8 @@
avatarCell.SetActive(false);
nameText.text = Language.Get("L1124");
rankValueText.text = "0";//Language.Get("L1125");
+ if (serverText != null)
+ serverText.text = "";
}
else
{
@@ -51,9 +64,17 @@
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));
@@ -64,7 +85,8 @@
{
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);
});
}
}
diff --git a/Main/System/Arena/ArenaPlayerTop3Cell.cs b/Main/System/Arena/ArenaPlayerTop3Cell.cs
index 3df9027..5296485 100644
--- a/Main/System/Arena/ArenaPlayerTop3Cell.cs
+++ b/Main/System/Arena/ArenaPlayerTop3Cell.cs
@@ -1,16 +1,28 @@
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)
@@ -18,6 +30,8 @@
rankValueText.text = "0";//Language.Get("L1125");
nameText.text = Language.Get("L1124");
officialTitleCell.SetActive(false);
+ if (serverText != null)
+ serverText.text = "";
return;
}
officialTitleCell.SetActive(true);
@@ -25,6 +39,12 @@
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);
diff --git a/Main/System/Arena/ArenaRecordCell.cs b/Main/System/Arena/ArenaRecordCell.cs
index 44eecf6..419044a 100644
--- a/Main/System/Arena/ArenaRecordCell.cs
+++ b/Main/System/Arena/ArenaRecordCell.cs
@@ -7,6 +7,8 @@
[SerializeField] AvatarCell avatarCell;
[SerializeField] TextEx txtName;
[SerializeField] TextEx txtDate;
+ [SerializeField] TextEx txtCrossDate;
+ [SerializeField] TextEx txtServerName;
[SerializeField] TextEx txtFightPoint;
[SerializeField] TextEx txtState;
[SerializeField] TextEx txtAdd;
@@ -37,7 +39,37 @@
return;
arenaGameRec = sortedList[index];
imgType.SetSprite(arenaGameRec.Value2 == 1 ? "ArenaRecordTypeAtk" : "ArenaRecordTypeDef");
- txtDate.text = FormatTime(arenaGameRec.Time);
+
+ // 璺ㄦ湇璁板綍鏍峰紡鏄剧ず閫昏緫
+ if (ArenaManager.Instance.IsOpenCrossServer())
+ {
+ // 璺ㄦ湇鏍峰紡锛歵xtDate闅愯棌锛宼xtCrossDate鍜宼xtServerName鏄剧ず
+ 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
+ {
+ // 姝e父鏍峰紡锛歵xtDate鏄剧ず锛宼xtCrossDate鍜宼xtServerName闅愯棌
+ txtDate.SetActive(true);
+ txtDate.text = FormatTime(arenaGameRec.Time);
+ txtCrossDate.SetActive(false);
+ txtServerName.SetActive(false);
+ }
+
// true 宸插け鏁� false 鏈け鏁�
bool isTimeInvalid = ArenaManager.Instance.IsTimeInvalid(arenaGameRec.Time);
// 鍙戣捣鏀诲嚮,鎵撹耽鏈夌Н鍒�,鎵撹緭娌℃湁
@@ -67,7 +99,8 @@
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);
diff --git a/Main/System/Arena/ArenaWin.cs b/Main/System/Arena/ArenaWin.cs
index c5da720..9a437fa 100644
--- a/Main/System/Arena/ArenaWin.cs
+++ b/Main/System/Arena/ArenaWin.cs
@@ -3,8 +3,17 @@
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;
@@ -15,7 +24,21 @@
[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}";
@@ -23,7 +46,13 @@
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();
@@ -34,31 +63,140 @@
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);
-
- }
+ // 鍦╞ase.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()
@@ -66,6 +204,7 @@
base.OnPreClose();
RankModel.Instance.onRankRefresh -= OnRankRefresh;
scrollerController.OnRefreshCell -= OnRefreshCell;
+ scrollerControllerCross.OnRefreshCell -= OnRefreshCellCross;
ArenaManager.Instance.OnArenaMatchListEvent -= OnArenaMatchListEvent;
ArenaManager.Instance.OnUpdateArenaPlayerInfo -= OnUpdateArenaPlayerInfo;
ArenaManager.Instance.OnUpdateGameRecInfo -= OnUpdateGameRecInfo;
@@ -102,6 +241,18 @@
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();
@@ -126,6 +277,13 @@
DisplayDeployTroop();
funPresetBtn.SetActive(FuncPresetManager.Instance.IsPreShow());
+
+ // 璺ㄦ湇鏄剧ず
+ voucherCross.Display();
+ CreateScrollerCross();
+ DisplayMyRankCross();
+ DisplayTop3Cross();
+ funPresetBtnCross.SetActive(FuncPresetManager.Instance.IsPreShow());
}
void CreateScroller()
@@ -139,9 +297,25 @@
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()
@@ -152,12 +326,27 @@
}
}
+ 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();
+ }
}
}
diff --git a/Main/System/CrossServer/CrossServerBaseManager.cs b/Main/System/CrossServer/CrossServerBaseManager.cs
index d08c743..147016c 100644
--- a/Main/System/CrossServer/CrossServerBaseManager.cs
+++ b/Main/System/CrossServer/CrossServerBaseManager.cs
@@ -8,6 +8,10 @@
public class CrossServerBaseManager : GameSystemManager<CrossServerBaseManager>
{
public Dictionary<int, CrossZoneInfo> crossZoneInfoDict = new Dictionary<int, CrossZoneInfo>();
+
+ // 璺ㄦ湇鐘舵�佹洿鏂颁簨浠讹紝鍙傛暟涓簃apID
+ public event Action<int> OnCrossZoneInfoUpdateEvent;
+
public override void Init()
{
DTC0102_tagCDBPlayer.beforePlayerDataInitializeEventOnRelogin += OnBeforePlayerDataInitialize;
@@ -32,7 +36,8 @@
ServerIDList = netPack.ServerIDList,
CrossServerID = netPack.CrossServerID
};
-
+
+ OnCrossZoneInfoUpdateEvent?.Invoke((int)netPack.MapID);
}
// 娌℃湁鏁版嵁浠h〃涓嶅湪璺ㄦ湇涓紝缇よ嫳鏈変釜鐗规畩绾﹀畾zoneid绛変簬0浠h〃缁撶畻涓�
--
Gitblit v1.8.0