Main/System/BillboardRank/RankModel.cs
@@ -356,6 +356,11 @@ return Language.Get("Arena15", config.ChapterID, config.LevelNum); case 4: return cmpValue.ToString(); case 7: case 9: return Language.Get("OSActivity19", cmpValue.ToString()); case 8: return Language.Get("L1113", cmpValue.ToString()); } return string.Empty; } @@ -370,6 +375,12 @@ return Language.Get("RankTypeName_1"); case 4: return Language.Get("OSActivity5"); case 7: return Language.Get("OSActivity16"); case 8: return Language.Get("OSActivity15"); case 9: return Language.Get("OSActivity17"); } return string.Empty; } Main/System/GeneralConfig/DayRemind.cs
@@ -37,6 +37,11 @@ public const string OSMainLevel = "OSMainLevel"; // 开服主线关卡活动提示红点 public const string OSGalaChange = "OSGalaChange"; // 开服庆典兑换提示红点 public const string OSHeroTrain = "OSHeroTrain"; public const string OSBeautyMM = "OSBeautyMM"; public const string OSMingge = "OSMingge"; public Dictionary<string, int[]> dayRemindDic = new Dictionary<string, int[]>(); public bool GetDayRemind(string _remindKey) @@ -79,6 +84,9 @@ SetDayRemind(DJQTip); SetDayRemind(OSMainLevel); SetDayRemind(OSGalaChange); SetDayRemind(OSHeroTrain); SetDayRemind(OSBeautyMM); SetDayRemind(OSMingge); } public void SetDayRemind(string _key) Main/System/Main/HomeWin.cs
@@ -67,7 +67,10 @@ [SerializeField] Button osMainLevelBtn; [SerializeField] Button osHeroCallBtn; [SerializeField] Button osGalaBtn; [SerializeField] Button osHeroTrainBtn; [SerializeField] Button osBeautyMMBtn; [SerializeField] TimingGiftCell timingGiftCell; [SerializeField] Button osMinggeBtn; [SerializeField] TimeRushCell timeRushCell; [SerializeField] HeroDebutCell heroDebutCell; @@ -212,7 +215,18 @@ { UIManager.Instance.OpenWindow<OSGalaBaseWin>(); }); osBeautyMMBtn.AddListener(() => { UIManager.Instance.OpenWindow<OSBeautyMMBaseWin>(); }); osHeroTrainBtn.AddListener(() => { UIManager.Instance.OpenWindow<OSHeroTrainBaseWin>(); }); osMinggeBtn.AddListener(() => { UIManager.Instance.OpenWindow<OSMinggeBaseWin>(); }); DailySpecialsBtns.AddListener(() => { UIManager.Instance.OpenWindow<DailySpecialsBaseWin>(); @@ -874,6 +888,9 @@ { osMainLevelBtn.SetActive(OSActivityManager.Instance.IsOpened(3)); osHeroCallBtn.SetActive(OSActivityManager.Instance.IsOpened(4)); osHeroTrainBtn.SetActive(OSActivityManager.Instance.IsOpened(7)); osBeautyMMBtn.SetActive(OSActivityManager.Instance.IsOpened(8)); osMinggeBtn.SetActive(OSActivityManager.Instance.IsOpened(9)); osGalaBtn.SetActive(OSActivityManager.Instance.IsOpenedOSGala()); } Main/System/OSActivity/OSActivityBaseWin.cs
New file @@ -0,0 +1,43 @@ using UnityEngine; using UnityEngine.UI; public abstract class OSActivityBaseWin : FunctionsBaseWin { [SerializeField] protected Button closBtn; protected override void InitComponent() { base.InitComponent(); if (closBtn != null) { closBtn.AddListener(CloseWindow); } } // 由子类实现:当前活动的 RankType protected abstract int GetRankType(); // 由子类实现:实例化对应的三个子窗口 protected abstract UIBase GetRankWin(); protected abstract UIBase GetAwardWin(); protected abstract UIBase GetGiftWin(); protected override void OpenSubUIByTabIndex() { switch (functionOrder) { case 0: RankModel.Instance.ResetQueryParam(); RankModel.Instance.QueryRankByPage(GetRankType(), watchID: (int)PlayerDatas.Instance.baseData.PlayerID); currentSubUI = GetRankWin(); break; case 1: currentSubUI = GetAwardWin(); break; case 2: // 如果后续有活动没有礼包页签,只需在子类里返回 null 或不调用即可 currentSubUI = GetGiftWin(); break; } } } Main/System/OSActivity/OSActivityBaseWin.cs.meta
New file @@ -0,0 +1,11 @@ fileFormatVersion: 2 guid: 39e79ce497558694689712020f566c86 MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: Main/System/OSActivity/OSActivityManager.cs
@@ -10,14 +10,23 @@ Dictionary<int, int[]> rankOpenDays = new Dictionary<int, int[]>(); //排行榜类型:【开始开服天, 结束开服天】 public Dictionary<int, int[][]> mainLevelRankAwards = new Dictionary<int, int[][]>(); //主线关卡名次:奖励 public Dictionary<int, int[][]> heroCallRankAwards = new Dictionary<int, int[][]>(); //武将招募名次:奖励 public Dictionary<int, int[][]> beautyMMRankAwards = new Dictionary<int, int[][]>(); //红颜冲榜名次:奖励 public Dictionary<int, int[][]> heroTrainRankAwards = new Dictionary<int, int[][]>(); //武将冲榜名次:奖励 public Dictionary<int, int[][]> minggeRankAwards = new Dictionary<int, int[][]>(); //命格冲榜:奖励 public List<int> osHeroCallGiftSortList = new List<int>(); //开服招募礼包 充值ID + 100000000 public List<int> osBeautyMMGiftSortList = new List<int>(); //红颜冲榜礼包 充值ID + 100000000 public List<int> osHeroTrainGiftSortList = new List<int>(); //武将冲榜礼包 充值ID + 100000000 public List<int> osMinggeGiftSortList = new List<int>(); //命格冲榜礼包 充值ID + 100000000 //开服榜对应的功能ID Dictionary<int, int> rankTypeToFuncID = new Dictionary<int, int>() { {3, 45}, {4, 46}, {7, 59}, {8, 60}, {9, 61}, }; @@ -51,6 +60,11 @@ rankOpenDays = ConfigParse.ParseIntArrayDict(config.Numerical1); mainLevelRankAwards = ConfigParse.ParseIntArray2Dict(config.Numerical2); heroCallRankAwards = ConfigParse.ParseIntArray2Dict(config.Numerical3); beautyMMRankAwards = ConfigParse.ParseIntArray2Dict(config.Numerical4); config = FuncConfigConfig.Get("OSABillboardTrain"); heroTrainRankAwards = ConfigParse.ParseIntArray2Dict(config.Numerical3); minggeRankAwards = ConfigParse.ParseIntArray2Dict(config.Numerical5); var list = StoreModel.Instance.storeTypeDict[(int)StoreFunc.OSHeroCall]; var _list = RechargeManager.Instance.GetCTGIDListByType(18); @@ -63,6 +77,45 @@ for (int i = 0; i < _list.Count; i++) { osHeroCallGiftSortList.Add(_list[i] + 100000000); } list = StoreModel.Instance.storeTypeDict[(int)StoreFunc.OSBeautyMM]; _list = RechargeManager.Instance.GetCTGIDListByType(22); for (int i = 0; i < list.Count; i++) { var item = list[i]; osBeautyMMGiftSortList.Add(item.shopId); } for (int i = 0; i < _list.Count; i++) { osBeautyMMGiftSortList.Add(_list[i] + 100000000); } list = StoreModel.Instance.storeTypeDict[(int)StoreFunc.OSHeroTrain]; _list = RechargeManager.Instance.GetCTGIDListByType(23); for (int i = 0; i < list.Count; i++) { var item = list[i]; osHeroTrainGiftSortList.Add(item.shopId); } for (int i = 0; i < _list.Count; i++) { osHeroTrainGiftSortList.Add(_list[i] + 100000000); } list = StoreModel.Instance.storeTypeDict[(int)StoreFunc.OSMingge]; _list = RechargeManager.Instance.GetCTGIDListByType(24); for (int i = 0; i < list.Count; i++) { var item = list[i]; osMinggeGiftSortList.Add(item.shopId); } for (int i = 0; i < _list.Count; i++) { osMinggeGiftSortList.Add(_list[i] + 100000000); } ParseOSGalaConfig(); @@ -159,6 +212,9 @@ public void RefreshGiftSortList() { osHeroCallGiftSortList.Sort(CmpGift); osBeautyMMGiftSortList.Sort(CmpGift); osHeroTrainGiftSortList.Sort(CmpGift); osMinggeGiftSortList.Sort(CmpGift); } void RefreshStore() @@ -169,14 +225,23 @@ Redpoint osMainLevelRedpoint = new Redpoint(MainRedDot.RedPoint_OSMainLevel); Redpoint osHeroCallRedpoint = new Redpoint(MainRedDot.RedPoint_OSHeroCard); Redpoint osHeroTrainRedpoint = new Redpoint(MainRedDot.RedPoint_OSHeroTrain); Redpoint osBeautyMMRedpoint = new Redpoint(MainRedDot.RedPoint_OSBeautyMM); Redpoint osMinggeRedpoint = new Redpoint(MainRedDot.RedPoint_OSMingge); public void UpdateRedpoint() { osMainLevelRedpoint.state = !DayRemind.Instance.GetDayRemind(DayRemind.OSMainLevel) ? RedPointState.Simple : RedPointState.None; osGalaRedpoint2.state = !DayRemind.Instance.GetDayRemind(DayRemind.OSGalaChange) ? RedPointState.Simple : RedPointState.None; osHeroTrainRedpoint.state = !DayRemind.Instance.GetDayRemind(DayRemind.OSMainLevel) ? RedPointState.Simple : RedPointState.None; osBeautyMMRedpoint.state = !DayRemind.Instance.GetDayRemind(DayRemind.OSMainLevel) ? RedPointState.Simple : RedPointState.None; osMinggeRedpoint.state = !DayRemind.Instance.GetDayRemind(DayRemind.OSMainLevel) ? RedPointState.Simple : RedPointState.None; osHeroCallRedpoint.state = RedPointState.None; osGalaRedpoint3.state = RedPointState.None; osHeroTrainRedpoint.state = RedPointState.None; osBeautyMMRedpoint.state = RedPointState.None; osMinggeRedpoint.state = RedPointState.None; if (StoreModel.Instance.freeShopDict.Count == 0) return; @@ -211,6 +276,52 @@ } } } if (StoreModel.Instance.freeShopDict.ContainsKey((int)StoreFunc.OSHeroTrain) && IsOpened(7, false)) { var shopList = StoreModel.Instance.freeShopDict[(int)StoreFunc.OSHeroTrain]; for (int i = 0; i < shopList.Count; i++) { var shopID = shopList[i]; var config = StoreConfig.Get(shopID); if (StoreModel.Instance.GetShopLimitBuyCount(shopID) < config.LimitCnt) { osHeroTrainRedpoint.state = RedPointState.Simple; break; } } } if (StoreModel.Instance.freeShopDict.ContainsKey((int)StoreFunc.OSBeautyMM) && IsOpened(8, false)) { var shopList = StoreModel.Instance.freeShopDict[(int)StoreFunc.OSBeautyMM]; for (int i = 0; i < shopList.Count; i++) { var shopID = shopList[i]; var config = StoreConfig.Get(shopID); if (StoreModel.Instance.GetShopLimitBuyCount(shopID) < config.LimitCnt) { osBeautyMMRedpoint.state = RedPointState.Simple; break; } } } if (StoreModel.Instance.freeShopDict.ContainsKey((int)StoreFunc.OSMingge) && IsOpened(9, false)) { var shopList = StoreModel.Instance.freeShopDict[(int)StoreFunc.OSMingge]; for (int i = 0; i < shopList.Count; i++) { var shopID = shopList[i]; var config = StoreConfig.Get(shopID); if (StoreModel.Instance.GetShopLimitBuyCount(shopID) < config.LimitCnt) { osMinggeRedpoint.state = RedPointState.Simple; break; } } } } private void FuncStateChange(int funcId) @@ -219,6 +330,9 @@ { case FuncOpenEnum.OSMainLevl: case FuncOpenEnum.OSHeroCall: case FuncOpenEnum.OSHeroTrain: case FuncOpenEnum.OSBeautyMM: case FuncOpenEnum.OSMingge: UpdateRedpoint(); break; } Main/System/OSActivity/OSBeautyMMBaseWin.cs
New file @@ -0,0 +1,15 @@ using UnityEngine; using UnityEngine.UI; // 开服活动-红颜冲刺活动 public class OSBeautyMMBaseWin : OSActivityBaseWin { // 红颜冲榜对应的 RankType 为 8 protected override int GetRankType() => 8; protected override UIBase GetRankWin() => UIManager.Instance.OpenWindow<OSRankBeautyMMWin>(8); protected override UIBase GetAwardWin() => UIManager.Instance.OpenWindow<OSRankBeautyMMAwardWin>(); protected override UIBase GetGiftWin() => UIManager.Instance.OpenWindow<OSRankBeautyMMGiftWin>(); } Main/System/OSActivity/OSBeautyMMBaseWin.cs.meta
New file @@ -0,0 +1,11 @@ fileFormatVersion: 2 guid: 5a76a8ddc6f4ac048970693981c9e681 MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: Main/System/OSActivity/OSHeroTrainBaseWin.cs
New file @@ -0,0 +1,14 @@ using UnityEngine; using UnityEngine.UI; // 开服活动-武将冲榜主界面 public class OSHeroTrainBaseWin : OSActivityBaseWin { protected override int GetRankType() => 7; protected override UIBase GetRankWin() => UIManager.Instance.OpenWindow<OSRankHeroTrainWin>(7); protected override UIBase GetAwardWin() => UIManager.Instance.OpenWindow<OSRankHeroTrainAwardWin>(); protected override UIBase GetGiftWin() => UIManager.Instance.OpenWindow<OSRankHeroTrainGiftWin>(); } Main/System/OSActivity/OSHeroTrainBaseWin.cs.meta
New file @@ -0,0 +1,11 @@ fileFormatVersion: 2 guid: 62c2161f6d4221e48aa134a1916f92e4 MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: Main/System/OSActivity/OSMinggeBaseWin.cs
New file @@ -0,0 +1,14 @@ using UnityEngine; using UnityEngine.UI; // 开服活动-命格冲榜主界面 public class OSMinggeBaseWin : OSActivityBaseWin { protected override int GetRankType() => 9; protected override UIBase GetRankWin() => UIManager.Instance.OpenWindow<OSRankMinggeWin>(9); protected override UIBase GetAwardWin() => UIManager.Instance.OpenWindow<OSRankMinggeAwardWin>(); protected override UIBase GetGiftWin() => UIManager.Instance.OpenWindow<OSRankMinggeGiftWin>(); } Main/System/OSActivity/OSMinggeBaseWin.cs.meta
New file @@ -0,0 +1,11 @@ fileFormatVersion: 2 guid: d9768976d78a97e41b67c00ea082085c MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: Main/System/OSActivity/OSRankAwardBaseCell.cs
New file @@ -0,0 +1,63 @@ using System.Collections.Generic; using System.Linq; using UnityEngine; using UnityEngine.UI; public abstract class OSRankAwardBaseCell : CellView { [SerializeField] protected Text rankText; [SerializeField] protected Image rankImg; [SerializeField] protected ItemCell[] itemCells; // 由子类提供当前界面对应的奖励字典数据 protected abstract Dictionary<int, int[][]> GetRankAwards(); public void Display(int index) { var rankAwards = GetRankAwards(); var rank = index + 1; if (index < 3) { rankImg.SetActive(true); rankText.SetActive(false); rankImg.SetSprite($"Rank{index + 1}"); } else { rankImg.SetActive(false); rankText.SetActive(true); var keys = rankAwards.Keys.ToList(); keys.Sort(); var startRank = keys[index - 1] + 1; var endRank = keys[index]; rank = endRank; if (startRank == endRank) { rankText.text = startRank.ToString(); } else { rankText.text = startRank + "-" + endRank; } } var award = rankAwards[rank]; for (int i = 0; i < itemCells.Length; i++) { var itemCell = itemCells[i]; if (i < award.Length) { itemCell.SetActive(true); int itemID = award[i][0]; itemCell.Init(new ItemCellModel(itemID, true, award[i][1])); itemCell.button.SetListener(() => ItemTipUtility.Show(itemID)); } else { itemCell.SetActive(false); } } } } Main/System/OSActivity/OSRankAwardBaseCell.cs.meta
New file @@ -0,0 +1,11 @@ fileFormatVersion: 2 guid: 5c40df973d5ace349ade9c111bb96722 MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: Main/System/OSActivity/OSRankAwardBaseWin.cs
New file @@ -0,0 +1,56 @@ using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public abstract class OSRankAwardBaseWin : UIBase { [SerializeField] protected ScrollerController scrollerController; [SerializeField] protected Text myRankText; [SerializeField] protected Text myRankValueText; protected override void OnPreOpen() { scrollerController.OnRefreshCell += OnRefreshCell; CreateScroller(); DisplayMyRank(GetRankType()); } protected override void OnPreClose() { scrollerController.OnRefreshCell -= OnRefreshCell; } // 由子类实现:当前界面的排名类型 (例如 4 是招募榜, 8 是红颜榜) protected abstract int GetRankType(); // 由子类实现:当前界面的奖励 Keys 集合 protected abstract ICollection<int> GetAwardKeys(); // 由子类实现:绑定对应的 Cell protected abstract void OnRefreshCell(ScrollerDataType type, CellView cell); protected void CreateScroller() { var keys = GetAwardKeys(); scrollerController.Refresh(); int count = keys == null ? 0 : keys.Count; for (int i = 0; i < count; i++) { scrollerController.AddCell(ScrollerDataType.Header, i); } scrollerController.Restart(); } public void DisplayMyRank(int rankType) { RankData rankData = RankModel.Instance.GetMyRank(rankType); if (rankData == null) { myRankText.text = Language.Get("L1045"); myRankValueText.text = ""; return; } int rank = rankData.rank; myRankValueText.text = RankModel.Instance.GetCmpValueStr(rankType, rankData.cmpValue); myRankText.text = Language.Get("L1126") + Language.Get("L1096") + rank.ToString(); } } Main/System/OSActivity/OSRankAwardBaseWin.cs.meta
New file @@ -0,0 +1,11 @@ fileFormatVersion: 2 guid: 01d872416a4fa8b45a660c56ed4c759f MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: Main/System/OSActivity/OSRankBaseWin.cs
New file @@ -0,0 +1,42 @@ using UnityEngine; using UnityEngine.UI; public abstract class OSRankBaseWin : PlayerRankWin { [SerializeField] protected Text timeText; [SerializeField] protected Text overTimeText; protected override void OnPreOpen() { base.OnPreOpen(); GlobalTimeEvent.Instance.secondEvent += OnSecond; ShowTime(); } protected void ShowTime() { var seconds = OSActivityManager.Instance.GetEndTime(rankType); if (seconds > 0) { timeText.SetActive(true); overTimeText.SetActive(false); timeText.text = TimeUtility.SecondsToShortDHMS(seconds); } else { timeText.SetActive(false); overTimeText.SetActive(true); } } protected override void OnPreClose() { base.OnPreClose(); GlobalTimeEvent.Instance.secondEvent -= OnSecond; } protected void OnSecond() { ShowTime(); } } Main/System/OSActivity/OSRankBaseWin.cs.meta
New file @@ -0,0 +1,11 @@ fileFormatVersion: 2 guid: 3c869a53bb8b01141823913926a5b2b9 MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: Main/System/OSActivity/OSRankBeautyMMAwardCell.cs
New file @@ -0,0 +1,12 @@ using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class OSRankBeautyMMAwardCell : OSRankAwardBaseCell { // 返回红颜冲榜专属的奖励字典,供基类渲染 protected override Dictionary<int, int[][]> GetRankAwards() { return OSActivityManager.Instance.beautyMMRankAwards; } } Main/System/OSActivity/OSRankBeautyMMAwardCell.cs.meta
New file @@ -0,0 +1,11 @@ fileFormatVersion: 2 guid: 647885ec6817f1342867bca550f5f5dc MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: Main/System/OSActivity/OSRankBeautyMMAwardWin.cs
New file @@ -0,0 +1,18 @@ using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; // 开服活动-红颜冲榜排行奖励 public class OSRankBeautyMMAwardWin : OSRankAwardBaseWin { protected override int GetRankType() => 8; // 8对应红颜冲榜 // 提供红颜榜的奖励字典 Key protected override ICollection<int> GetAwardKeys() => OSActivityManager.Instance.beautyMMRankAwards.Keys; protected override void OnRefreshCell(ScrollerDataType type, CellView cell) { var _cell = cell.GetComponent<OSRankBeautyMMAwardCell>(); _cell.Display(cell.index); } } Main/System/OSActivity/OSRankBeautyMMAwardWin.cs.meta
New file @@ -0,0 +1,11 @@ fileFormatVersion: 2 guid: e232ad2734808eb408390dd9059e49c9 MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: Main/System/OSActivity/OSRankBeautyMMGiftCell.cs
New file @@ -0,0 +1,11 @@ using UnityEngine; using UnityEngine.UI; public class OSRankBeautyMMGiftCell : OSRankGiftBaseCell { // 从 Manager 获取当前 Index 对应的红颜礼包 ID protected override int GetGiftId(int index) => OSActivityManager.Instance.osBeautyMMGiftSortList[index]; // 供基类验证活动是否过期时使用,红颜冲榜对应的 RankType 为 8 protected override int GetActivityFuncId() => 8; } Main/System/OSActivity/OSRankBeautyMMGiftCell.cs.meta
New file @@ -0,0 +1,11 @@ fileFormatVersion: 2 guid: f90bbd7114f1139429d631eed6cab562 MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: Main/System/OSActivity/OSRankBeautyMMGiftWin.cs
New file @@ -0,0 +1,19 @@ using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; // 开服活动-红颜冲刺礼包 public class OSRankBeautyMMGiftWin : OSRankGiftBaseWin { // 调用 Manager 刷新礼包排序 protected override void RefreshManagerSortList() => OSActivityManager.Instance.RefreshGiftSortList(); // 提供红颜冲刺专用的礼包列表 protected override IList<int> GetGiftSortList() => OSActivityManager.Instance.osBeautyMMGiftSortList; protected override void OnRefreshCell(ScrollerDataType type, CellView cell) { var _cell = cell as OSRankBeautyMMGiftCell; _cell.Display(cell.index); } } Main/System/OSActivity/OSRankBeautyMMGiftWin.cs.meta
New file @@ -0,0 +1,11 @@ fileFormatVersion: 2 guid: d22a6513bbd196d41bffe0cfce5efd6c MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: Main/System/OSActivity/OSRankBeautyMMWin.cs
New file @@ -0,0 +1,8 @@ using UnityEngine; using UnityEngine.UI; // 开服活动-红颜冲刺排行榜 public class OSRankBeautyMMWin : OSRankBaseWin { } Main/System/OSActivity/OSRankBeautyMMWin.cs.meta
New file @@ -0,0 +1,11 @@ fileFormatVersion: 2 guid: 482be961781f5cc44959db7fa28e59cf MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: Main/System/OSActivity/OSRankGiftBaseCell.cs
New file @@ -0,0 +1,138 @@ using UnityEngine; using UnityEngine.UI; public abstract class OSRankGiftBaseCell : CellView { [SerializeField] protected Text nameText; [SerializeField] protected ItemCell[] itemCells; [SerializeField] protected Button buyBtn; [SerializeField] protected Text moneyText; [SerializeField] protected Image moneyIcon; [SerializeField] protected Transform saleOutRect; [SerializeField] protected Image redImg; [SerializeField] protected Text buyLimitText; [SerializeField] protected Image maskImg; // 由子类实现:获取礼包ID protected abstract int GetGiftId(int index); // 由子类实现:获取验证活动是否结束所需的活动FuncID protected abstract int GetActivityFuncId(); public void Display(int index) { var id = GetGiftId(index); if (id > 100000000) { // 充值礼包 id -= 100000000; var ctgConfig = CTGConfig.Get(id); nameText.text = ctgConfig.Title; for (int i = 0; i < itemCells.Length; i++) { var itemCell = itemCells[i]; if (i < ctgConfig.GainItemList.Length) { itemCell.SetActive(true); int itemID = ctgConfig.GainItemList[i][0]; itemCell.Init(new ItemCellModel(itemID, true, ctgConfig.GainItemList[i][1])); itemCell.button.SetListener(() => ItemTipUtility.Show(itemID)); } else { itemCell.SetActive(false); } } RechargeManager.Instance.TryGetRechargeCount(id, out var rechargeCount); var limitCnt = ctgConfig.DailyBuyCount; if (rechargeCount.todayCount < limitCnt) { saleOutRect.SetActive(false); maskImg.SetActive(false); buyBtn.SetActive(true); buyBtn.SetListener(() => { if (!OSActivityManager.Instance.IsOpened(GetActivityFuncId(), false)) { SysNotifyMgr.Instance.ShowTip("ActivityOver"); return; } RechargeManager.Instance.CTG(id); }); RechargeManager.Instance.TryGetOrderInfo(id, out var orderInfo); moneyText.text = Language.Get("PayMoneyNum", UIHelper.GetMoneyFormat(orderInfo.PayRMBNumOnSale)); moneyIcon.SetActive(false); } else { saleOutRect.SetActive(true); maskImg.SetActive(true); buyBtn.SetActive(false); } buyLimitText.text = Language.Get("storename6", limitCnt - rechargeCount.todayCount, limitCnt); redImg.SetActive(false); } else { // 商店物品 var storeConfig = StoreConfig.Get(id); nameText.text = storeConfig.Name; var awards = StoreModel.Instance.GetShopItemlistEx(storeConfig); for (int i = 0; i < itemCells.Length; i++) { var itemCell = itemCells[i]; if (i < awards.Count) { itemCell.SetActive(true); int itemID = awards[i][0]; itemCell.Init(new ItemCellModel(itemID, true, awards[i][1])); itemCell.button.SetListener(() => ItemTipUtility.Show(itemID)); } else { itemCell.SetActive(false); } } var state = StoreModel.Instance.GetShopIDState(id); if (state == 1) { saleOutRect.SetActive(true); maskImg.SetActive(true); buyBtn.SetActive(false); redImg.SetActive(false); } else { saleOutRect.SetActive(false); maskImg.SetActive(false); buyBtn.SetActive(true); buyBtn.SetListener(() => { if (!OSActivityManager.Instance.IsOpened(GetActivityFuncId(), false)) { SysNotifyMgr.Instance.ShowTip("ActivityOver"); return; } StoreModel.Instance.SendBuyShopItemWithPopCheck(storeConfig, 1); }); moneyText.text = storeConfig.MoneyNum == 0 ? Language.Get("L1127") : storeConfig.MoneyNum.ToString(); moneyIcon.SetActive(storeConfig.MoneyNum != 0); if (storeConfig.MoneyType <= 0) { moneyIcon.SetItemSprite(storeConfig.CostItemID); } else { moneyIcon.SetIconWithMoneyType(storeConfig.MoneyType); } redImg.SetActive(storeConfig.MoneyNum == 0); } var buyCnt = StoreModel.Instance.GetShopLimitBuyCount(id); buyLimitText.text = Language.Get("storename6", storeConfig.LimitCnt - buyCnt, storeConfig.LimitCnt); } } } Main/System/OSActivity/OSRankGiftBaseCell.cs.meta
New file @@ -0,0 +1,11 @@ fileFormatVersion: 2 guid: 8fbb7021663b5294594aac0a985165da MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: Main/System/OSActivity/OSRankGiftBaseWin.cs
New file @@ -0,0 +1,48 @@ using System.Collections.Generic; using UnityEngine; public abstract class OSRankGiftBaseWin : UIBase { [SerializeField] protected ScrollerController scrollerController; protected override void OnPreOpen() { scrollerController.OnRefreshCell += OnRefreshCell; StoreModel.Instance.RefreshBuyShopLimitEvent += RefreshStore; RechargeManager.Instance.rechargeCountEvent += OnRechargeCountEvent; RefreshManagerSortList(); Display(); } protected override void OnPreClose() { scrollerController.OnRefreshCell -= OnRefreshCell; StoreModel.Instance.RefreshBuyShopLimitEvent -= RefreshStore; RechargeManager.Instance.rechargeCountEvent -= OnRechargeCountEvent; } protected abstract void RefreshManagerSortList(); protected abstract IList<int> GetGiftSortList(); protected abstract void OnRefreshCell(ScrollerDataType type, CellView cell); protected void Display() { scrollerController.Refresh(); var list = GetGiftSortList(); for (int i = 0; i < list.Count; i++) { scrollerController.AddCell(ScrollerDataType.Header, i); } scrollerController.Restart(); } protected void RefreshStore() { scrollerController.m_Scorller.RefreshActiveCellViews(); } protected void OnRechargeCountEvent(int id) { scrollerController.m_Scorller.RefreshActiveCellViews(); } } Main/System/OSActivity/OSRankGiftBaseWin.cs.meta
New file @@ -0,0 +1,11 @@ fileFormatVersion: 2 guid: 86879ba6d3ff65a41b612365b69eae6e MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: Main/System/OSActivity/OSRankHeroTrainAwardCell.cs
New file @@ -0,0 +1,10 @@ using System.Collections.Generic; using UnityEngine; public class OSRankHeroTrainAwardCell : OSRankAwardBaseCell { protected override Dictionary<int, int[][]> GetRankAwards() { return OSActivityManager.Instance.heroTrainRankAwards; } } Main/System/OSActivity/OSRankHeroTrainAwardCell.cs.meta
New file @@ -0,0 +1,11 @@ fileFormatVersion: 2 guid: 5cc407297dbf0a049bc7572140a7fc37 MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: Main/System/OSActivity/OSRankHeroTrainAwardWin.cs
New file @@ -0,0 +1,16 @@ using System.Collections.Generic; using UnityEngine; // 开服活动-武将冲榜 排行奖励 public class OSRankHeroTrainAwardWin : OSRankAwardBaseWin { protected override int GetRankType() => 7; protected override ICollection<int> GetAwardKeys() => OSActivityManager.Instance.heroTrainRankAwards.Keys; protected override void OnRefreshCell(ScrollerDataType type, CellView cell) { var _cell = cell.GetComponent<OSRankHeroTrainAwardCell>(); _cell.Display(cell.index); } } Main/System/OSActivity/OSRankHeroTrainAwardWin.cs.meta
New file @@ -0,0 +1,11 @@ fileFormatVersion: 2 guid: 5d0f7383e172ba1479bd29fa004f952f MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: Main/System/OSActivity/OSRankHeroTrainGiftCell.cs
New file @@ -0,0 +1,8 @@ using UnityEngine; public class OSRankHeroTrainGiftCell : OSRankGiftBaseCell { protected override int GetGiftId(int index) => OSActivityManager.Instance.osHeroTrainGiftSortList[index]; protected override int GetActivityFuncId() => 7; } Main/System/OSActivity/OSRankHeroTrainGiftCell.cs.meta
New file @@ -0,0 +1,11 @@ fileFormatVersion: 2 guid: 38e95d017835dd648afc115072b85c31 MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: Main/System/OSActivity/OSRankHeroTrainGiftWin.cs
New file @@ -0,0 +1,16 @@ using System.Collections.Generic; using UnityEngine; // 开服活动-武将冲榜 礼包界面 public class OSRankHeroTrainGiftWin : OSRankGiftBaseWin { protected override void RefreshManagerSortList() => OSActivityManager.Instance.RefreshGiftSortList(); protected override IList<int> GetGiftSortList() => OSActivityManager.Instance.osHeroTrainGiftSortList; protected override void OnRefreshCell(ScrollerDataType type, CellView cell) { var _cell = cell as OSRankHeroTrainGiftCell; _cell.Display(cell.index); } } Main/System/OSActivity/OSRankHeroTrainGiftWin.cs.meta
New file @@ -0,0 +1,11 @@ fileFormatVersion: 2 guid: 21d442383c4ea6846bca35096f7d38b5 MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: Main/System/OSActivity/OSRankHeroTrainWin.cs
New file @@ -0,0 +1,20 @@ using UnityEngine; // 开服活动-武将冲榜 排行榜界面 public class OSRankHeroTrainWin : OSRankBaseWin { [SerializeField] ButtonEx rule; [SerializeField] TextEx title; protected override void InitComponent() { base.InitComponent(); rule.AddListener(() => { OSRankTipWin.infoTextKey = "OSActivityHeroTrainRankTip"; OSRankTipWin.isDownShow = true; OSRankTipWin.worldPos = title.transform.position; UIManager.Instance.OpenWindow<OSRankTipWin>(); }); } } Main/System/OSActivity/OSRankHeroTrainWin.cs.meta
New file @@ -0,0 +1,11 @@ fileFormatVersion: 2 guid: f45bd7a3a06d7984db7e8be475988387 MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: Main/System/OSActivity/OSRankMinggeAwardCell.cs
New file @@ -0,0 +1,10 @@ using System.Collections.Generic; using UnityEngine; public class OSRankMinggeAwardCell : OSRankAwardBaseCell { protected override Dictionary<int, int[][]> GetRankAwards() { return OSActivityManager.Instance.minggeRankAwards; } } Main/System/OSActivity/OSRankMinggeAwardCell.cs.meta
New file @@ -0,0 +1,11 @@ fileFormatVersion: 2 guid: 71ff4f534dbed074f8cb364e370af500 MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: Main/System/OSActivity/OSRankMinggeAwardWin.cs
New file @@ -0,0 +1,16 @@ using System.Collections.Generic; using UnityEngine; // 开服活动-命格冲榜 排行奖励 public class OSRankMinggeAwardWin : OSRankAwardBaseWin { protected override int GetRankType() => 9; protected override ICollection<int> GetAwardKeys() => OSActivityManager.Instance.minggeRankAwards.Keys; protected override void OnRefreshCell(ScrollerDataType type, CellView cell) { var _cell = cell.GetComponent<OSRankMinggeAwardCell>(); _cell.Display(cell.index); } } Main/System/OSActivity/OSRankMinggeAwardWin.cs.meta
New file @@ -0,0 +1,11 @@ fileFormatVersion: 2 guid: a231c309850cec941ae052a5b63759aa MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: Main/System/OSActivity/OSRankMinggeGiftCell.cs
New file @@ -0,0 +1,8 @@ using UnityEngine; public class OSRankMinggeGiftCell : OSRankGiftBaseCell { protected override int GetGiftId(int index) => OSActivityManager.Instance.osMinggeGiftSortList[index]; protected override int GetActivityFuncId() => 9; } Main/System/OSActivity/OSRankMinggeGiftCell.cs.meta
New file @@ -0,0 +1,11 @@ fileFormatVersion: 2 guid: b76c8d10a8833af4283ec5019d7eb1a8 MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: Main/System/OSActivity/OSRankMinggeGiftWin.cs
New file @@ -0,0 +1,16 @@ using System.Collections.Generic; using UnityEngine; // 开服活动-命格冲榜 礼包界面 public class OSRankMinggeGiftWin : OSRankGiftBaseWin { protected override void RefreshManagerSortList() => OSActivityManager.Instance.RefreshGiftSortList(); protected override IList<int> GetGiftSortList() => OSActivityManager.Instance.osMinggeGiftSortList; protected override void OnRefreshCell(ScrollerDataType type, CellView cell) { var _cell = cell as OSRankMinggeGiftCell; _cell.Display(cell.index); } } Main/System/OSActivity/OSRankMinggeGiftWin.cs.meta
New file @@ -0,0 +1,11 @@ fileFormatVersion: 2 guid: fef31dcb5d0ae29429d43002f1fc9127 MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: Main/System/OSActivity/OSRankMinggeWin.cs
New file @@ -0,0 +1,20 @@ using UnityEngine; // 开服活动-命格冲榜 排行榜界面 public class OSRankMinggeWin : OSRankBaseWin { [SerializeField] ButtonEx rule; [SerializeField] TextEx title; protected override void InitComponent() { base.InitComponent(); rule.AddListener(() => { OSRankTipWin.infoTextKey = "OSActivityMinggeRankTip"; OSRankTipWin.isDownShow = true; OSRankTipWin.worldPos = title.transform.position; UIManager.Instance.OpenWindow<OSRankTipWin>(); }); } } Main/System/OSActivity/OSRankMinggeWin.cs.meta
New file @@ -0,0 +1,11 @@ fileFormatVersion: 2 guid: aff3625b0c94913478e9bfffcedf3e86 MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: Main/System/OSActivity/OSRankTipWin.cs
New file @@ -0,0 +1,98 @@ using System.Collections.Generic; using Cysharp.Threading.Tasks; using UnityEngine; public class OSRankTipWin : UIBase { [SerializeField] RectTransform rectTransform; [SerializeField] RectTransform arrowImage; [SerializeField] RectTransform arrowUpImage; [SerializeField] RichText txtInfo; public static Vector3 worldPos; //世界坐标系位置 public static bool isDownShow = false; // 是否向下显示 public static string infoTextKey; public const int rowCountMax = 4; protected override void OnPreOpen() { rectTransform.position = new Vector3(100, 100, 100); //初始化时,屏幕范围外 arrowImage.SetActive(!isDownShow); arrowUpImage.SetActive(isDownShow); txtInfo.text = Language.Get(infoTextKey); } protected override void OnPreClose() { isDownShow = false; } protected override void OnOpen() { UpdatePos().Forget(); } async UniTask UpdatePos() { await UniTask.DelayFrame(3); // 限制在屏幕范围内 Vector3[] corners = new Vector3[4]; rectTransform.GetWorldCorners(corners); float minY = corners[0].y; float maxY = corners[0].y; for (int i = 1; i < corners.Length; i++) { if (corners[i].y < minY) minY = corners[i].y; if (corners[i].y > maxY) maxY = corners[i].y; } float screenHeight = maxY - minY; Vector2 adjustedPos = new Vector2(worldPos.x, worldPos.y + (!isDownShow ? screenHeight * 0.5f : -screenHeight * 0.5f)); Vector2 screenAdjustedPos = CameraManager.uiCamera.WorldToScreenPoint(adjustedPos); var rectWidth = rectTransform.rect.width * Screen.width / canvasScaler.referenceResolution.x; screenAdjustedPos.x = Mathf.Clamp(screenAdjustedPos.x, rectWidth * 0.5f, Screen.width - rectWidth * 0.5f); screenAdjustedPos.y = Mathf.Clamp(screenAdjustedPos.y, rectTransform.rect.height * 0.5f, Screen.height - rectTransform.rect.height * 0.5f - 15); adjustedPos = CameraManager.uiCamera.ScreenToWorldPoint(screenAdjustedPos); rectTransform.position = adjustedPos; if (!isDownShow) { rectTransform.localPosition = new Vector3(rectTransform.localPosition.x, rectTransform.localPosition.y + 15, rectTransform.localPosition.z); } else { rectTransform.localPosition = new Vector3(rectTransform.localPosition.x, rectTransform.localPosition.y - 15, rectTransform.localPosition.z); } rectTransform.GetWorldCorners(corners); float minX = corners[0].x; float maxX = corners[0].x; for (int i = 1; i < corners.Length; i++) { if (corners[i].x < minX) minX = corners[i].x; if (corners[i].x > maxX) maxX = corners[i].x; } //显示arrowImage 的x轴上的位置,和worldPos同步,但不超过minX 和 maxX范围 if (!isDownShow) { Vector3 arrowImagePosition = arrowImage.position; arrowImagePosition.x = Mathf.Clamp(worldPos.x, minX, maxX); arrowImage.position = arrowImagePosition; } else { Vector3 arrowUpImagePosition = arrowUpImage.position; arrowUpImagePosition.x = Mathf.Clamp(worldPos.x, minX, maxX); arrowUpImage.position = arrowUpImagePosition; } } } Main/System/OSActivity/OSRankTipWin.cs.meta
New file @@ -0,0 +1,11 @@ fileFormatVersion: 2 guid: d1b835694fcab6a4d886be2ee0b640d2 MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: Main/System/Redpoint/MainRedDot.cs
@@ -152,6 +152,9 @@ public const int TimeRushRepoint = 478; //轮回殿 public const int HeroDebutRepoint = 479; //武将登场 public const int Qunying = 480; //群英榜 public const int RedPoint_OSHeroTrain = 481; public const int RedPoint_OSBeautyMM = 482; public const int RedPoint_OSMingge = 483; public void Register() { Main/System/Store/StoreModel.cs
@@ -597,6 +597,9 @@ DailySpecialsFree = 8, //8: 每日特惠-每日特惠免费 DailyGiftFree = 9, //9: 每日特惠-每日礼包免费 WeeklyGiftFree = 10, //10: 每日特惠-每周礼包免费 OSBeautyMM = 17, //17: 红颜冲榜礼包 OSHeroTrain = 18, //18: 武将冲榜礼包 OSMingge = 19, //19: 命格冲榜礼包 } Main/Utility/EnumHelper.cs
@@ -855,6 +855,9 @@ TimeRush = 58, //限时冲刺 Qunying = 62, //群英榜 HeroDebut = 63,//武将登场 OSHeroTrain = 64, //开服武将培养榜活动 OSBeautyMM = 65, //开服红颜榜活动 OSMingge = 66, //开服命格培养榜活动 }