lcy
3 天以前 7926eac37f1b8252e8f83bf2350492ee23f80bbe
492 武将登场-客户端 时装商店不显示皮肤激活物品
3个文件已修改
54 ■■■■ 已修改文件
Main/Config/PartialConfigs/HeroSkinAttrConfig.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/HeroDebut/HeroDebutSkinWin.cs 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/HeroUI/HeroUIManager.Collect.cs 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Config/PartialConfigs/HeroSkinAttrConfig.cs
@@ -1,5 +1,6 @@
using System.Collections.Generic;
using System.Linq;
public partial class HeroSkinAttrConfig : ConfigBase<int, HeroSkinAttrConfig>
{
@@ -15,5 +16,10 @@
    {
        return itemIdToSkinIDDict.TryGetValue(itemID, out skinID);
    }
    public static List<int> GetItemList()
    {
        return itemIdToSkinIDDict.Keys.ToList();
    }
}
Main/System/HeroDebut/HeroDebutSkinWin.cs
@@ -99,16 +99,23 @@
        _cell.Display(cell.index, arr);
    }
    void CreateAwardScroller(int[][] arr)
    void CreateAwardScroller(int[][] sourceArr)
    {
        this.arr = arr;
        if (sourceArr == null) return;
        // 1. 获取已拥有的 ID 集合 (使用 LINQ 简洁明了)
        var ownedItems = HeroSkinAttrConfig.GetItemList();
        var itemIds = ownedItems != null ? new HashSet<int>(ownedItems) : new HashSet<int>();
        // 2. 过滤掉 items 中已有的项,并直接赋值给成员变量
        // arr[i][0] 假设为判断是否存在于 items 中的 ID
        this.arr = System.Array.FindAll(sourceArr, row => !itemIds.Contains(row[0]));
        // 3. 刷新 UI
        awardScroller.Refresh();
        if (arr != null)
        for (int i = 0; i < this.arr.Length; i++)
        {
            for (int i = 0; i < arr.Length; i++)
            {
                awardScroller.AddCell(ScrollerDataType.Header, i);
            }
            awardScroller.AddCell(ScrollerDataType.Header, i);
        }
        awardScroller.Restart();
    }
Main/System/HeroUI/HeroUIManager.Collect.cs
@@ -22,13 +22,36 @@
    // public int allHeroBookPer; //全体武将的图鉴激活百分比
    public event Action OnHeroCollectEvent;
    public event Action<int, int, int> OnHeroSkinStateChanged;// 皮肤状态变化事件 (参数: HeroID, SkinID, 新的State)
    public void UpdateHeroCollectInfo(HB122_tagSCHeroInfo netPack)
    {
        for (int i = 0; i < netPack.HeroCnt; i++)
        {
            heroCollectInfoDic[(int)netPack.HeroInfoList[i].HeroID] = netPack.HeroInfoList[i];
            var newHeroData = netPack.HeroInfoList[i];
            int heroID = (int)newHeroData.HeroID;
            // ---- 新增:对比旧数据,检测皮肤状态变化 ----
            if (heroCollectInfoDic.TryGetValue(heroID, out var oldHeroData))
            {
                if (newHeroData.SkinList != null)
                {
                    foreach (var newSkin in newHeroData.SkinList)
                    {
                        // 在旧数据中寻找对应的皮肤
                        var oldSkin = oldHeroData.SkinList?.FirstOrDefault(s => s.SkinID == newSkin.SkinID);
                        // 如果旧数据中没有这个皮肤(首次获得),或者状态发生了变化
                        if (oldSkin == null || oldSkin.State != newSkin.State)
                        {
                            OnHeroSkinStateChanged?.Invoke(heroID, (int)newSkin.SkinID, newSkin.State);
                        }
                    }
                }
            }
            heroCollectInfoDic[heroID] = newHeroData;
        }
        // allHeroBookPer = GetHeroCollectBookPer();
        UpdateHeroBookRedpoint();
        RefreshAllSkinAttr();