From 4e5820f0f8aab02b990a4edfd2477749a9f07eba Mon Sep 17 00:00:00 2001
From: lcy <1459594991@qq.com>
Date: 星期五, 12 六月 2026 16:33:25 +0800
Subject: [PATCH] 588 公会攻防战 战场滚动条记录上次挑战者的位置

---
 Main/System/GuildAtkDefBat/GuildAtkDefBatBattlePanelItem.cs |    1 
 Main/System/GuildAtkDefBat/GuildAtkDefBatBattlePanelWin.cs  |   69 ++++++++++++++++++++++++++--------
 Main/System/GuildAtkDefBat/GuildAtkDefBatChallengeWin.cs    |    1 
 3 files changed, 54 insertions(+), 17 deletions(-)

diff --git a/Main/System/GuildAtkDefBat/GuildAtkDefBatBattlePanelItem.cs b/Main/System/GuildAtkDefBat/GuildAtkDefBatBattlePanelItem.cs
index 0abad8b..5466ce4 100644
--- a/Main/System/GuildAtkDefBat/GuildAtkDefBatBattlePanelItem.cs
+++ b/Main/System/GuildAtkDefBat/GuildAtkDefBatBattlePanelItem.cs
@@ -144,6 +144,7 @@
     private void SendSweepFight(uint playerID)
     {
         // 鎵崱灏佸寘锛氫笌鎸戞垬涓�鑷达紝浠� ValueList 绗簩浣嶄负 1锛岀涓�浣嶅睘鎬х櫨鍒嗘瘮鍙换鎰忓��
+        UIManager.Instance.GetUI<GuildAtkDefBatBattlePanelWin>()?.SaveScrollPositionForNextOpen();
         BattleManager.Instance.SendTurnFight((uint)GuildAtkDefBatManager.DataMapID, 0, 1, playerID, new[] { 100u, 1u }, showLoading: false);
     }
 
diff --git a/Main/System/GuildAtkDefBat/GuildAtkDefBatBattlePanelWin.cs b/Main/System/GuildAtkDefBat/GuildAtkDefBatBattlePanelWin.cs
index 17b5ac2..3a72a4c 100644
--- a/Main/System/GuildAtkDefBat/GuildAtkDefBatBattlePanelWin.cs
+++ b/Main/System/GuildAtkDefBat/GuildAtkDefBatBattlePanelWin.cs
@@ -40,6 +40,8 @@
     private List<HA525_tagSCFamilyAtkDefBatInfo.tagSCFamilyAtkDefBatMem> m_SortedDefenders;
     private List<HA525_tagSCFamilyAtkDefBatInfo.tagSCFamilyAtkDefBatMem> m_RemainingDefenders;
     private bool m_DeferBattleScrollerRefresh;
+    private static bool s_HasPendingScrollPosition;
+    private static float s_PendingScrollPosition;
 
     protected override void InitComponent()
     {
@@ -133,7 +135,7 @@
     {
         OnDayRefresh();
         Display();
-        RefreshBattleScroller();
+        RefreshBattleScroller(true);
     }
 
     private void OnDayRefresh()
@@ -257,10 +259,56 @@
         RefreshBattleScroller();
     }
 
+    public void SaveScrollPositionForNextOpen()
+    {
+        if (scroller == null || scroller.m_Scorller == null)
+            return;
+
+        s_PendingScrollPosition = scroller.m_Scorller.ScrollPosition;
+        s_HasPendingScrollPosition = true;
+    }
+
     /// <summary>
     /// 鍒锋柊鎴樺満Scroller鏁版嵁
     /// </summary>
-    private void RefreshBattleScroller()
+    private void RefreshBattleScroller(bool keepScrollPosition = false)
+    {
+        int oldCellCount = scroller.GetNumberOfCells(scroller.m_Scorller);
+        int newCellCount = RefreshBattleScrollerData();
+
+        if (keepScrollPosition && oldCellCount == newCellCount)
+        {
+            scroller.m_Scorller.RefreshActiveCellViews();
+            return;
+        }
+
+        // 閲嶆柊鏋勫缓Scroller
+        scroller.Refresh();
+
+        // 娣诲姞HeaderCell锛堢涓�鏉★級
+        scroller.AddCell(ScrollerDataType.Header, 0);
+
+        // 鍓╀綑鎴愬憳姣�2涓竴缁勬坊鍔燦ormalCell
+        int normalCellCount = newCellCount - 1;
+        for (int i = 0; i < normalCellCount; i++)
+        {
+            scroller.AddCell(ScrollerDataType.Normal, i + 1);
+        }
+
+        scroller.Restart();
+        TryRestorePendingScrollPosition();
+    }
+
+    private void TryRestorePendingScrollPosition()
+    {
+        if (!s_HasPendingScrollPosition || scroller == null || scroller.m_Scorller == null)
+            return;
+
+        scroller.m_Scorller.ScrollPosition = s_PendingScrollPosition;
+        s_HasPendingScrollPosition = false;
+    }
+
+    private int RefreshBattleScrollerData()
     {
         // 鏍规嵁褰撳墠Tab璁剧疆宸辨柟/鏁屾柟
         switch (functionOrder)
@@ -291,21 +339,8 @@
             m_RemainingDefenders.Add(m_SortedDefenders[i]);
         }
 
-        // 閲嶆柊鏋勫缓Scroller
-        scroller.Refresh();
-
-        // 娣诲姞HeaderCell锛堢涓�鏉★級
-        scroller.AddCell(ScrollerDataType.Header, 0);
-
-        // 鍓╀綑鎴愬憳姣�2涓竴缁勬坊鍔燦ormalCell
-        int remainingCount = m_RemainingDefenders.Count;
-        int normalCellCount = Mathf.CeilToInt((float)remainingCount / 2);
-        for (int i = 0; i < normalCellCount; i++)
-        {
-            scroller.AddCell(ScrollerDataType.Normal, i + 1);
-        }
-
-        scroller.Restart();
+        int normalCellCount = Mathf.CeilToInt((float)m_RemainingDefenders.Count / 2);
+        return normalCellCount + 1;
     }
 
     /// <summary>
diff --git a/Main/System/GuildAtkDefBat/GuildAtkDefBatChallengeWin.cs b/Main/System/GuildAtkDefBat/GuildAtkDefBatChallengeWin.cs
index 07795a7..59c5126 100644
--- a/Main/System/GuildAtkDefBat/GuildAtkDefBatChallengeWin.cs
+++ b/Main/System/GuildAtkDefBat/GuildAtkDefBatChallengeWin.cs
@@ -145,6 +145,7 @@
         }
 
         GuildAtkDefBatManager.Instance.CurrentChallengeTargetPlayerID = targetMem.PlayerID;
+        UIManager.Instance.GetUI<GuildAtkDefBatBattlePanelWin>()?.SaveScrollPositionForNextOpen();
         BattleManager.Instance.SendTurnFight(
             (uint)GuildAtkDefBatManager.DataMapID,
             0,

--
Gitblit v1.8.0