lcy
2026-06-12 4e5820f0f8aab02b990a4edfd2477749a9f07eba
588 公会攻防战 战场滚动条记录上次挑战者的位置
3个文件已修改
71 ■■■■ 已修改文件
Main/System/GuildAtkDefBat/GuildAtkDefBatBattlePanelItem.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/GuildAtkDefBat/GuildAtkDefBatBattlePanelWin.cs 69 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/GuildAtkDefBat/GuildAtkDefBatChallengeWin.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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);
    }
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个一组添加NormalCell
        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个一组添加NormalCell
        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>
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,