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/ArenaWin.cs |  223 +++++++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 206 insertions(+), 17 deletions(-)

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();
+        }
     }
 }

--
Gitblit v1.8.0