| Main/Config/PartialConfigs/HeroSkinAttrConfig.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Main/System/HeroDebut/HeroDebutSkinWin.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Main/System/HeroUI/HeroUIManager.Collect.cs | ●●●●● 补丁 | 查看 | 原始文档 | 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 < arr.Length; i++) for (int i = 0; i < this.arr.Length; 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();