| Main/Config/Configs/ActSpecialSaleConfig.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Main/Config/Configs/ActTaskConfig.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Main/System/FestivalActivity/FestivalActivityManager.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Main/System/FestivalActivity/FestivalActivityMissionManager.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Main/System/FestivalActivity/FestivalActivityShopCell.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Main/System/FestivalActivity/FestivalActivityShopLineCell.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Main/System/FestivalActivity/FestivalActivityShopWin.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
Main/Config/Configs/ActSpecialSaleConfig.cs
@@ -1,6 +1,6 @@ //-------------------------------------------------------- // [Author]: YYL // [ Date ]: Tuesday, April 28, 2026 // [ Date ]: 2026年4月29日 //-------------------------------------------------------- using System.Collections.Generic; @@ -20,8 +20,6 @@ public int[] CTGIDList; public int ActShopType; public int ADID; public int ShopType; public int ShopItemID; public int[][] PopItems; public override int LoadKey(string _key) @@ -54,11 +52,7 @@ int.TryParse(tables[3],out ADID); int.TryParse(tables[4],out ShopType); int.TryParse(tables[5],out ShopItemID); PopItems = JsonMapper.ToObject<int[][]>(tables[6].Replace("(", "[").Replace(")", "]")); PopItems = JsonMapper.ToObject<int[][]>(tables[4].Replace("(", "[").Replace(")", "]")); } catch (Exception exception) { Main/Config/Configs/ActTaskConfig.cs
@@ -1,6 +1,6 @@ //-------------------------------------------------------- // [Author]: YYL // [ Date ]: Tuesday, April 28, 2026 // [ Date ]: Wednesday, April 29, 2026 //-------------------------------------------------------- using System.Collections.Generic; @@ -20,6 +20,8 @@ public int IsDayReset; public int TemplateID; public int ActScoreItemID; public int ActShopTypeEx; public int ActShopItemID; public string ActScoreAwardInfo; public override int LoadKey(string _key) @@ -40,7 +42,11 @@ int.TryParse(tables[3],out ActScoreItemID); ActScoreAwardInfo = tables[4]; int.TryParse(tables[4],out ActShopTypeEx); int.TryParse(tables[5],out ActShopItemID); ActScoreAwardInfo = tables[6]; } catch (Exception exception) { Main/System/FestivalActivity/FestivalActivityManager.cs
@@ -153,7 +153,6 @@ public Redpoint rechargeRedpoint; public void InitRedPointId() { shopRedpoint ??= new Redpoint(MainRedDot.FestivalActivityRepoint, GetRedPointId(FestivalActivityRepointType.Shop)); giftRedpoint ??= new Redpoint(MainRedDot.FestivalActivityRepoint, GetRedPointId(FestivalActivityRepointType.Gift)); rechargeRedpoint ??= new Redpoint(MainRedDot.FestivalActivityRepoint, GetRedPointId(FestivalActivityRepointType.Recharge)); } @@ -161,11 +160,7 @@ public void UpdateRedpoint() { redPoint.state = RedPointState.None; shopRedpoint.state = RedPointState.None; giftRedpoint.state = RedPointState.None; if (ShowShopRedpoint())//商店 shopRedpoint.state = RedPointState.Simple; if (HasGiftCanHave())//礼包 giftRedpoint.state = RedPointState.Simple; @@ -239,52 +234,6 @@ if (!FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.FestivalActivity)) return false; return true; } #region 兑换商店 private string ShopVisitTimeDataKey { get { return $"FestivalActivityManager_ShopVisitTime_{PlayerDatas.Instance.PlayerId}"; } } private int LoadShopVisitTimeData() { return LocalSave.GetInt(ShopVisitTimeDataKey); } public void SaveShopVisitTimeData() { LocalSave.SetInt(ShopVisitTimeDataKey, TimeUtility.AllSeconds); } public bool IsShopVisitedToday { get { int lastVisitTime = LoadShopVisitTimeData(); int todayStartTime = TimeUtility.GetTodayStartTick(); return lastVisitTime >= todayStartTime; } } public bool ShowShopRedpoint() { var act = GetActInfo(); if (act == null) return false; var config = ActSpecialSaleConfig.Get(act.CfgID); if (config == null) return false; if (!StoreModel.Instance.storeTypeDict.TryGetValue(config.ShopType, out var list) || list.IsNullOrEmpty()) return false; for (int i = 0; i < list.Count; i++) { var item = list[i]; bool isFree = IsFreeShop(item.shopId); bool isCanBuy = IsNoSellOutShopID(item.shopId); if (isFree && isCanBuy) return true; } return !IsShopVisitedToday; } #endregion #region 限时礼包 public bool IsCanBuy(int ctgID, out bool isNoLimitBuy, out int nowBuyCnt, out int maxBuyCnt) Main/System/FestivalActivity/FestivalActivityMissionManager.cs
@@ -23,6 +23,7 @@ OperationTimeHepler.Instance.operationAdvanceEvent += OperationAdvanceEvent; FuncOpen.Instance.OnFuncStateChangeEvent += OnFuncStateChangeEvent; StoreModel.Instance.RefreshBuyShopLimitEvent += OnRefreshBuyShopLimitEvent; InitShopRedPointId(); } public override void Release() @@ -65,7 +66,7 @@ public Redpoint redPoint = new Redpoint(MainRedDot.FestivalActivityRepoint, FestivalActivityManager.Instance.GetRedPointId(FestivalActivityRepointType.Mission)); // 实时获取当前活动配置 private ActTaskConfig GetCurrentConfig() public ActTaskConfig GetCurrentConfig() { if (!OperationTimeHepler.Instance.TryGetOperation(operaType, out OperationMissionActivityInfo operation)) return null; @@ -154,6 +155,9 @@ public void UpdateRedPoint() { redPoint.state = RedPointState.None; if (shopRedpoint != null) shopRedpoint.state = RedPointState.None; if (!FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.FestivalActivity)) return; if (!IsOpen) @@ -173,7 +177,7 @@ if (GetTaskState(taskList[i].TasklD) == 1) { redPoint.state = RedPointState.Simple; return; break; } } @@ -184,9 +188,13 @@ if (GetTotalScoreState(i) == 1) { redPoint.state = RedPointState.Simple; return; break; } } // 兑换商店红点 if (shopRedpoint != null && ShowShopRedpoint()) shopRedpoint.state = RedPointState.Simple; } // 获取任务列表(排序:1可领取 > 0不可领取 > 2已领取) @@ -382,4 +390,76 @@ } return Language.Get("TotalRecharge08", TimeUtility.SecondsToShortDHMS(operation.GetResetSurplusTime())); } public void GetActTimeStr(TextEx timeText, string key = "TimeRush05") { timeText.text = GetActTimeStr(); } #region 兑换商店 private string ShopVisitTimeDataKey { get { return $"FestivalActivityMissionManager_ShopVisitTime_{PlayerDatas.Instance.PlayerId}"; } } private int LoadShopVisitTimeData() { return LocalSave.GetInt(ShopVisitTimeDataKey); } public void SaveShopVisitTimeData() { LocalSave.SetInt(ShopVisitTimeDataKey, TimeUtility.AllSeconds); } public bool IsShopVisitedToday { get { int lastVisitTime = LoadShopVisitTimeData(); int todayStartTime = TimeUtility.GetTodayStartTick(); return lastVisitTime >= todayStartTime; } } public Redpoint shopRedpoint; public void InitShopRedPointId() { shopRedpoint ??= new Redpoint(MainRedDot.FestivalActivityRepoint, FestivalActivityManager.Instance.GetRedPointId(FestivalActivityRepointType.Shop)); } public bool ShowShopRedpoint() { ActTaskConfig config = GetCurrentConfig(); if (config == null) return false; if (!StoreModel.Instance.storeTypeDict.TryGetValue(config.ActShopTypeEx, out var list) || list.IsNullOrEmpty()) return false; for (int i = 0; i < list.Count; i++) { var item = list[i]; bool isFree = IsFreeShop(item.shopId); bool isCanBuy = IsNoSellOutShopID(item.shopId); if (isFree && isCanBuy) return true; } return !IsShopVisitedToday; } public bool IsFreeShop(int shopID) { StoreConfig config = StoreConfig.Get(shopID); if (config == null) return false; return config.MoneyNum == 0; } public bool IsNoSellOutShopID(int shopID) { StoreConfig config = StoreConfig.Get(shopID); if (config == null) return false; StoreModel.Instance.TryGetIsSellOut(config, out int remainNum); return remainNum > 0; } #endregion } Main/System/FestivalActivity/FestivalActivityShopCell.cs
@@ -25,16 +25,13 @@ [SerializeField] Text freeText; [SerializeField] Image exclusiveImage;//专属 [SerializeField] Image sellOutImage;//售罄 FestivalActivityManager manager => FestivalActivityManager.Instance; FestivalActivityMissionManager manager => FestivalActivityMissionManager.Instance; public void Display(int index) { var act = manager.GetActInfo(); if (act == null) return; var config = ActSpecialSaleConfig.Get(act.CfgID); ActTaskConfig config = manager.GetCurrentConfig(); if (config == null) return; if (!StoreModel.Instance.storeTypeDict.TryGetValue(config.ShopType, out var list)) if (!StoreModel.Instance.storeTypeDict.TryGetValue(config.ActShopTypeEx, out var list)) return; var storeData = list[index]; Main/System/FestivalActivity/FestivalActivityShopLineCell.cs
@@ -3,16 +3,13 @@ public class FestivalActivityShopLineCell : CellView { [SerializeField] FestivalActivityShopCell[] storeCells; FestivalActivityManager manager => FestivalActivityManager.Instance; FestivalActivityMissionManager manager => FestivalActivityMissionManager.Instance; public void Display(int index) { var act = manager.GetActInfo(); if (act == null) return; var config = ActSpecialSaleConfig.Get(act.CfgID); ActTaskConfig config = manager.GetCurrentConfig(); if (config == null) return; if (!StoreModel.Instance.storeTypeDict.TryGetValue(config.ShopType, out var list)) if (!StoreModel.Instance.storeTypeDict.TryGetValue(config.ActShopTypeEx, out var list)) return; for (int i = 0; i < storeCells.Length; i++) Main/System/FestivalActivity/FestivalActivityShopWin.cs
@@ -6,7 +6,7 @@ [SerializeField] ButtonEx closeButton; [SerializeField] TextEx timeText; [SerializeField] ScrollerController scroller; FestivalActivityManager manager => FestivalActivityManager.Instance; FestivalActivityMissionManager manager => FestivalActivityMissionManager.Instance; protected override void InitComponent() { closeButton.SetListener(CloseWindow); @@ -21,17 +21,14 @@ if (!manager.IsShopVisitedToday) { manager.SaveShopVisitTimeData(); manager.UpdateRedpoint(); manager.UpdateRedPoint(); } var act = manager.GetActInfo(); if (act == null) return; var config = ActSpecialSaleConfig.Get(act.CfgID); ActTaskConfig config = manager.GetCurrentConfig(); if (config == null) return; ownItemCell.itemID = config.ShopItemID; ownItemCell.itemID = config.ActShopItemID; CreateScroller(); OnSecondEvent(); @@ -54,18 +51,20 @@ private void OnSecondEvent() { manager.GetActTimeStr(timeText); if (!OperationTimeHepler.Instance.TryGetOperation(OperationType.FestivalActivity_Mission, out OperationMissionActivityInfo operation)) { timeText.text = Language.Get("OSActivity6"); return; } timeText.text = Language.Get("TimeRush05", TimeUtility.SecondsToShortDHMS(operation.GetResetSurplusTime())); } void CreateScroller() { var act = manager.GetActInfo(); if (act == null) return; var config = ActSpecialSaleConfig.Get(act.CfgID); ActTaskConfig config = manager.GetCurrentConfig(); if (config == null) return; if (!StoreModel.Instance.storeTypeDict.TryGetValue(config.ShopType, out var list)) if (!StoreModel.Instance.storeTypeDict.TryGetValue(config.ActShopTypeEx, out var list)) return; scroller.Refresh();