Main/Core/NetworkPackage/DTCFile/ServerPack/HA0_Sys/DTCA009_tagSCGameRecInfo.cs
@@ -9,5 +9,6 @@ HA009_tagSCGameRecInfo vNetData = vNetPack as HA009_tagSCGameRecInfo; ArenaManager.Instance.UpdateGameRecInfo(vNetData); HeroDebutManager.Instance.UpdateGameRecInfo(vNetData); QunyingManager.Instance.UpdateGameRecInfo(vNetData); } } Main/System/BillboardRank/PlayerTop3Cell.cs
@@ -26,7 +26,22 @@ } officialTitleCell.SetActive(true); //rankValueText.text = string.Format(valueFormat, UIHelper.ReplaceLargeNum(rankData.cmpValue2 + rankData.cmpValue * Constants.ExpPointValue)); if (rankType == QunyingManager.rankType) { //区服 if (GeneralDefine.IsRobot((int)rankData.id)) { rankValueText.text = Language.Get("Qunying15"); } else { rankValueText.text = ServerListCenter.Instance.GetServerName(UIHelper.GetServerIDByAccount(rankData.name2)); } } else { rankValueText.text = RankModel.Instance.GetCmpValueStr(rankType, rankData.cmpValue); } nameText.text = rankData.name1; officialTitleCell.InitUI((int)rankData.value1, (int)rankData.value2); model.Create(HorseManager.Instance.GetOtherPlayerHorseSkinID((int)rankData.value6), (int)rankData.value5, rank == 1 ? 1f : 0.8f); Main/System/GeneralConfig/GeneralDefine.cs
@@ -316,5 +316,11 @@ public static long GetFactValue(uint value, uint valueEx) { return (long)valueEx * (long)Constants.ExpPointValue +(long)value; } //约定:playerID<1000000为机器人 实际请参考机器人表 public static bool IsRobot(int playerID) { return playerID < 1000000; } } Main/System/Qunying/QYAchievementCell.cs
New file @@ -0,0 +1,76 @@ using System.Collections.Generic; using System.Linq; using UnityEngine; using UnityEngine.UI; public class QYAchievementCell : CellView { [SerializeField] Text rankText; [SerializeField] Image rankImg; [SerializeField] ItemCell[] itemCells; [SerializeField] Transform notActiveText; [SerializeField] Button getBtn; [SerializeField] Transform finishImg; public void Display(int rank) { var rankAwards = QunyingManager.Instance.achievementAwards[rank]; if (rank <= 3) { rankImg.SetActive(true); rankText.SetActive(false); rankImg.SetSprite($"Rank{rank}"); } else { rankImg.SetActive(false); rankText.SetActive(true); rankText.text = rank.ToString(); } for (int i = 0; i < itemCells.Length; i++) { var itemCell = itemCells[i]; if (i < rankAwards.Length) { itemCell.SetActive(true); int itemID = rankAwards[i][0]; itemCell.Init(new ItemCellModel(itemID, true, rankAwards[i][1])); itemCell.button.SetListener(() => ItemTipUtility.Show(itemID)); } else { itemCell.SetActive(false); } } var state = QunyingManager.Instance.GetAchievementState(rank); if (state == 1) { notActiveText.SetActive(false); getBtn.SetActive(true); finishImg.SetActive(false); } else if (state == 2) { notActiveText.SetActive(false); getBtn.SetActive(false); finishImg.SetActive(true); } else { notActiveText.SetActive(true); getBtn.SetActive(false); finishImg.SetActive(false); } getBtn.AddListener(() => { var pack = new CA504_tagCMPlayerGetReward(); pack.RewardType = 7; GameNetSystem.Instance.SendInfo(pack); }); } } Main/System/Qunying/QYAchievementCell.cs.meta
New file @@ -0,0 +1,11 @@ fileFormatVersion: 2 guid: 367255ddd03841c48b32d105723c0c29 MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: Main/System/Qunying/QYAchievementWin.cs
New file @@ -0,0 +1,62 @@ using System.Collections.Generic; using System.Linq; using Cysharp.Threading.Tasks; using LitJson; using UnityEngine; using UnityEngine.UI; public class QYAchievementWin : UIBase { [SerializeField] ScrollerController scroller; [SerializeField] Button closeBtn; protected override void InitComponent() { closeBtn.AddListener(() => { CloseWindow(); }); } protected override void OnPreOpen() { scroller.OnRefreshCell += OnRefreshCell; QunyingManager.Instance.OnUpdateQunyingInfoEvent += OnUpdateQunyingInfo; scroller.Refresh(); var keys = QunyingManager.Instance.achievementAwards.Keys.ToList(); keys.Sort(); int jumpIndex = 0; for (int i = 0; i < keys.Count; i++) { scroller.AddCell(ScrollerDataType.Header, keys[i]); if (QunyingManager.Instance.GetAchievementState(keys[i]) == 1) { jumpIndex = i; } } scroller.Restart(); scroller.JumpIndex(jumpIndex - 5); } protected override void OnPreClose() { scroller.OnRefreshCell -= OnRefreshCell; QunyingManager.Instance.OnUpdateQunyingInfoEvent -= OnUpdateQunyingInfo; } private void OnRefreshCell(ScrollerDataType type, CellView cellView) { var cell = cellView as QYAchievementCell; cell.Display(cell.index); } void OnUpdateQunyingInfo() { scroller.m_Scorller.RefreshActiveCellViews(); } } Main/System/Qunying/QYAchievementWin.cs.meta
New file @@ -0,0 +1,11 @@ fileFormatVersion: 2 guid: 5a46d946f42d0ae40929cfb07cc095a4 MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: Main/System/Qunying/QYBattleFailWin.cs
@@ -70,9 +70,9 @@ // itemInfo:奖励物品列表,可能为空 void Display() { if (!jsonData.ContainsKey("tagID")) if (!jsonData.ContainsKey("tagPlayerID")) return; uint tagPlayerID = (uint)jsonData["tagID"]; uint tagPlayerID = (uint)jsonData["tagPlayerID"]; if (!QunyingManager.Instance.TryGetPlayerInfo(tagPlayerID, out QunyingMatchInfo info)) return; Main/System/Qunying/QYFighterCell.cs
@@ -42,7 +42,7 @@ queryPlayerBtn.AddListener(() => { if (matchInfo.PlayerID < 1000000) return; if (GeneralDefine.IsRobot((int)matchInfo.PlayerID)) return; AvatarHelper.TryViewOtherPlayerInfo((int)matchInfo.PlayerID, viewPlayerLineupType: (int)BattlePreSetType.Qunying); }); @@ -122,7 +122,7 @@ nameText.text = UIHelper.ServerStringTrim(matchInfo.PlayerName); if (matchInfo.ServerID == 0) if (GeneralDefine.IsRobot((int)matchInfo.PlayerID)) { serverText.text = Language.Get("Qunying15"); } Main/System/Qunying/QYNoteCell.cs
New file @@ -0,0 +1,74 @@ using System.Collections.Generic; using UnityEngine; using System; using UnityEngine.UI; public class QYNoteCell : CellView { [SerializeField] ImageEx atkTypeImg; [SerializeField] Text atkTypeTxt; [SerializeField] AvatarCell avatarCell; [SerializeField] TextEx lvTxt; [SerializeField] TextEx nameTxt; [SerializeField] TextEx rankTxt; [SerializeField] TextEx serverTxt; [SerializeField] Image stateImg; //胜负 [SerializeField] AvatarCell tagAvatarCell; [SerializeField] TextEx tagLVTxt; [SerializeField] TextEx tagNameTxt; [SerializeField] TextEx tagRankTxt; [SerializeField] TextEx tagServerTxt; [SerializeField] Image tagStateImg; // [SerializeField] ButtonEx replayBtn; //需要GUID QunyingGameRec arenaGameRec; public void Display(int index) { uint playerID = PlayerDatas.Instance.baseData.PlayerID; QunyingManager.Instance.TryGetSortedGameRecList(playerID, out List<QunyingGameRec> sortedList); if (sortedList.IsNullOrEmpty() || index < 0 || index >= sortedList.Count) return; arenaGameRec = sortedList[index]; atkTypeImg.SetSprite("QYAtkType" + arenaGameRec.Value2); atkTypeTxt.text = arenaGameRec.Value2 == 1 ? Language.Get("mainui2") : Language.Get("herocard28"); //取玩家自己的数据 avatarCell.InitUI(AvatarHelper.GetAvatarModel((int)PlayerDatas.Instance.baseData.PlayerID, PlayerDatas.Instance.baseData.face, PlayerDatas.Instance.baseData.facePic)); lvTxt.text = PlayerDatas.Instance.baseData.LV.ToString(); nameTxt.text = PlayerDatas.Instance.baseData.PlayerName; serverTxt.text = ServerListCenter.Instance.GetServerName(UIHelper.GetServerIDByAccount(PlayerDatas.Instance.baseData.AccID)); stateImg.SetSprite("QYResult" + (arenaGameRec.Value4 == 1 ? 1 : 2)); rankTxt.text = Language.Get("Qunying20") + arenaGameRec.CurRank; tagAvatarCell.InitUI(AvatarHelper.GetAvatarModel((int)arenaGameRec.Value3, (int)arenaGameRec.Value5, (int)arenaGameRec.Value6)); tagAvatarCell.SetListener(() => { if (GeneralDefine.IsRobot((int)arenaGameRec.Value3)) return; AvatarHelper.TryViewOtherPlayerInfo((int)arenaGameRec.Value3, viewPlayerLineupType: (int)BattlePreSetType.Arena); }); tagLVTxt.text = arenaGameRec.Value8.ToString(); tagNameTxt.text = arenaGameRec.Name; if (GeneralDefine.IsRobot((int)arenaGameRec.Value3)) { tagServerTxt.text = Language.Get("Qunying15"); } else { tagServerTxt.text = ServerListCenter.Instance.GetServerName((int)arenaGameRec.Value1); } tagRankTxt.text = Language.Get("Qunying20") + arenaGameRec.TagRank; tagStateImg.SetSprite("QYResult" + (arenaGameRec.Value4 == 1 ? 2 : 1)); } } Main/System/Qunying/QYNoteCell.cs.meta
New file @@ -0,0 +1,11 @@ fileFormatVersion: 2 guid: fd46d4292beb1db4589734bcafc14387 MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: Main/System/Qunying/QYNoteWin.cs
New file @@ -0,0 +1,63 @@ using System.Collections.Generic; using UnityEngine; public class QYNoteWin : UIBase { [SerializeField] ScrollerController scrollerController; protected override void OnPreOpen() { SendRec(); scrollerController.OnRefreshCell += OnRefreshCell; QunyingManager.Instance.OnUpdateGameRecInfo += OnUpdateGameRecInfo; Display(); } protected override void OnPreClose() { scrollerController.OnRefreshCell -= OnRefreshCell; QunyingManager.Instance.OnUpdateGameRecInfo -= OnUpdateGameRecInfo; } private void OnUpdateGameRecInfo() { Display(); } void OnRefreshCell(ScrollerDataType type, CellView cell) { var _cell = cell.GetComponent<QYNoteCell>(); _cell?.Display(cell.index); } private void CreateScroller() { scrollerController.Refresh(); uint playerID = PlayerDatas.Instance.baseData.PlayerID; QunyingManager.Instance.TryGetSortedGameRecList(playerID, out List<QunyingGameRec> sortedList); if (!sortedList.IsNullOrEmpty()) { for (int i = 0; i < sortedList.Count; i++) { scrollerController.AddCell(ScrollerDataType.Header, i); } } scrollerController.Restart(); } void Display() { CreateScroller(); } void SendRec() { CA008_tagCSViewGameRec pack = new CA008_tagCSViewGameRec(); pack.RecType = 312; pack.RecID = PlayerDatas.Instance.baseData.PlayerID; GameNetSystem.Instance.SendInfo(pack); } } Main/System/Qunying/QYNoteWin.cs.meta
New file @@ -0,0 +1,11 @@ fileFormatVersion: 2 guid: b8031772edc07284dac0925efb26aaf7 MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: Main/System/Qunying/QYPlayerTop3Cell.cs
@@ -24,8 +24,7 @@ return; } officialTitleCell.SetActive(true); var sid = UIHelper.GetServerIDByAccount(rankData.name2); if (sid == 0) if (GeneralDefine.IsRobot((int)rankData.id)) { serverText.text = Language.Get("Qunying15"); } @@ -39,7 +38,7 @@ model.Create(HorseManager.Instance.GetOtherPlayerHorseSkinID((int)rankData.value6), (int)rankData.value5, 0.9f); queryPlayerBtn.SetListener(() => { if (rankData.id < 1000000) return; if (GeneralDefine.IsRobot((int)rankData.id)) return; AvatarHelper.TryViewOtherPlayerInfo((int)rankData.id, viewPlayerLineupType: (int)BattlePreSetType.Qunying); }); fightPowerText.text = UIHelper.ReplaceLargeArtNum(rankData.fightPower); Main/System/Qunying/QYRankAwardCell.cs
New file @@ -0,0 +1,54 @@ using System.Collections.Generic; using System.Linq; using UnityEngine; public class QYRankAwardCell : CellView { [SerializeField] ImageEx imgRank; [SerializeField] TextEx txtRank; [SerializeField] ItemCell[] itemCells; public void Display(int index, int order) { Dictionary<int, int[][]> rewardDict = QunyingManager.Instance.GetRankAwardDict(order); if (rewardDict.IsNullOrEmpty()) return; var list = rewardDict.Keys.ToList(); list.Sort(); int rank = list[index]; if (rank <= 3) { imgRank.SetActive(true); txtRank.SetActive(false); imgRank.SetSprite($"Rank{rank}"); txtRank.text = rank.ToString(); } else { imgRank.SetActive(false); txtRank.SetActive(true); int lastIndex = index - 1; txtRank.text = lastIndex > 0 && lastIndex < list.Count ? Language.Get("Arena15", list[lastIndex] + 1, rank) : string.Empty; } int key = list[index]; int[][] rewardArr = rewardDict[key]; for (int i = 0; i < itemCells.Length; i++) { var itemCell = itemCells[i]; if (!rewardArr.IsNullOrEmpty() && i < rewardArr.Length) { int itemCellIndex = i; itemCell.SetActive(true); itemCell.Init(new ItemCellModel(rewardArr[i][0], true, rewardArr[i][1])); itemCell.button.SetListener(() => ItemTipUtility.Show(rewardArr[itemCellIndex][0])); } else { itemCell.SetActive(false); } } } } Main/System/Qunying/QYRankAwardCell.cs.meta
New file @@ -0,0 +1,11 @@ fileFormatVersion: 2 guid: 2b2a9b63aec1f704190eeccbb5a7228b MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: Main/System/Qunying/QYRankAwardWin.cs
New file @@ -0,0 +1,140 @@ using System.Linq; using UnityEngine; using UnityEngine.UI; public class QYRankAwardWin : UIBase { [SerializeField] Text titleText; [SerializeField] ScrollerController scroller; [SerializeField] Text myRankText; [SerializeField] ItemCell[] itemCells; [SerializeField] Transform unRankText; [SerializeField] Text noAwardText; [SerializeField] Text timeText; [SerializeField] GroupButtonEx weekBtn; [SerializeField] GroupButtonEx dayBtn; protected override void InitComponent() { weekBtn.AddListener(()=> { functionOrder = 0; Display(); }); dayBtn.AddListener(()=> { functionOrder = 1; Display(); }); } protected override void OnPreOpen() { if (functionOrder == 0) { weekBtn.SelectBtn(); } else { dayBtn.SelectBtn(); } scroller.OnRefreshCell += OnRefreshCell; GlobalTimeEvent.Instance.secondEvent += OnSecondEvent; Display(); } protected override void OnPreClose() { scroller.OnRefreshCell -= OnRefreshCell; GlobalTimeEvent.Instance.secondEvent -= OnSecondEvent; } private void OnRefreshCell(ScrollerDataType type, CellView cellView) { var cell = cellView as QYRankAwardCell; cell.Display(cell.index, functionOrder); } private void OnSecondEvent() { if (functionOrder == 0) { timeText.text = Language.Get("Arena14", QunyingManager.Instance.GetEndSecondStr()); } else { timeText.text = Language.Get("Arena14", TimeUtility.SecondsToDHMS((int)(TimeUtility.GetCommTodayEndTime(0) - TimeUtility.GetCommServerNow(GuildManager.Instance.zoneID)).TotalSeconds)); } } void Display() { scroller.Refresh(); if (functionOrder == 1) { titleText.text = Language.Get("Qunying18"); } else { titleText.text = Language.Get("Qunying19"); } var keys = QunyingManager.Instance.GetRankAwardDict(functionOrder).Keys.ToList(); keys.Sort(); for (int i = 0; i < keys.Count; i++) { scroller.AddCell(ScrollerDataType.Header, i); } scroller.Restart(); OnSecondEvent(); var myMatch = QunyingManager.Instance.GetMyMatchInfo(out var index); if (myMatch != null) { myRankText.SetActive(true); unRankText.SetActive(false); myRankText.text = myMatch.Rank.ToString(); var awards = QunyingManager.Instance.GetMyRankAwards(functionOrder, myMatch.Rank); if (awards.IsNullOrEmpty()) { noAwardText.SetActive(true); for (int i = 0; i < itemCells.Length; i++) { itemCells[i].SetActive(false); } } else { noAwardText.SetActive(false); for (int i = 0; i < itemCells.Length; i++) { if (i < awards.Length) { itemCells[i].SetActive(true); int itemID = awards[i][0]; itemCells[i].Init(new ItemCellModel(itemID, false, awards[i][1])); itemCells[i].button.SetListener(() => ItemTipUtility.Show(itemID)); } else { itemCells[i].SetActive(false); } } } } else { myRankText.SetActive(false); unRankText.SetActive(true); noAwardText.SetActive(true); } } } Main/System/Qunying/QYRankAwardWin.cs.meta
New file @@ -0,0 +1,11 @@ fileFormatVersion: 2 guid: 40adbfa987c6b18468007c00c7d14d4e MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: Main/System/Qunying/QYStoreWin.cs
New file @@ -0,0 +1,73 @@ using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class QYStoreWin : UIBase { [SerializeField] ScrollerController scroller; protected override void OnPreOpen() { StoreModel.Instance.selectStoreFuncType = StoreFunc.Qunying; scroller.OnRefreshCell += OnRefreshCell; StoreModel.Instance.RefreshShopEvent += Display; StoreModel.Instance.RefreshBuyShopLimitEvent += Display; Display(); } protected override void OnPreClose() { scroller.OnRefreshCell -= OnRefreshCell; StoreModel.Instance.RefreshShopEvent -= Display; StoreModel.Instance.RefreshBuyShopLimitEvent -= Display; } void Display() { CreateScroller(); } void CreateScroller() { if (!StoreModel.Instance.storeTypeDict.ContainsKey((int)StoreModel.Instance.selectStoreFuncType)) { return; } scroller.Refresh(); int jumpIndex = -1; var list = StoreModel.Instance.storeTypeDict[(int)StoreModel.Instance.selectStoreFuncType]; for (int i = 0; i < list.Count; i++) { if (i % 3 == 0) { scroller.AddCell(ScrollerDataType.Header, i); } if (jumpIndex == -1 && list[i].shopId == StoreModel.Instance.jumpShopID) { jumpIndex = i / 3; } } scroller.Restart(); scroller.lockType = EnhanceLockType.KeepVertical; if (StoreModel.Instance.jumpShopID != 0) { scroller.JumpIndex(jumpIndex); StoreModel.Instance.jumpShopID = 0; } } void OnRefreshCell(ScrollerDataType type, CellView cell) { var _cell = cell as StoreLineCell; _cell.Display(cell.index); } } Main/System/Qunying/QYStoreWin.cs.meta
New file @@ -0,0 +1,11 @@ fileFormatVersion: 2 guid: 47a5fdf362707eb469b6cab4d016a64b MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: Main/System/Qunying/QYWin.cs
@@ -13,9 +13,68 @@ [SerializeField] ScrollRect battleScrollRect; [SerializeField] Button closeBtn; [SerializeField] Text gameTimeText; [SerializeField] Button buyTicketBtn; [SerializeField] Text ticketCountText; [SerializeField] Text ticketTimeText; [SerializeField] Button achievementBtn; [SerializeField] Text achievementTargetText; [SerializeField] Text rankText; [SerializeField] Button defentPosBtn; [SerializeField] Button attackPosBtn; [SerializeField] Button refreshBtn; [SerializeField] Text refreshMoneyText; [SerializeField] Image refreshMoneyImg; [SerializeField] Text refreshCntText; [SerializeField] Button storeBtn; [SerializeField] Button rankBtn; [SerializeField] Button awardBtn; [SerializeField] Button noteBtn; protected override void InitComponent() { closeBtn.AddListener(CloseWindow); buyTicketBtn.AddListener(() => { StoreModel.Instance.ShowBuyItem(QunyingManager.challengeShopID); }); achievementBtn.AddListener(() => { UIManager.Instance.OpenWindow<QYAchievementWin>(); }); defentPosBtn.AddListener(() => { FuncPresetManager.Instance.ClickBattlePreset((int)BattlePreSetType.Qunying); }); attackPosBtn.AddListener(() => { FuncPresetManager.Instance.ClickBattlePreset((int)BattlePreSetType.Story); }); refreshBtn.AddListener(() => { RefreshFighters(); }); storeBtn.AddListener(() => { UIManager.Instance.OpenWindow<QYStoreWin>(); }); rankBtn.AddListener(() => { RankModel.Instance.ResetQueryParam(); RankModel.Instance.QueryRankByPage(QunyingManager.rankType); UIManager.Instance.OpenWindow<PlayerRankWin>(QunyingManager.rankType); }); awardBtn.AddListener(() => { UIManager.Instance.OpenWindow<QYRankAwardWin>(1); }); noteBtn.AddListener(() => { UIManager.Instance.OpenWindow<QYNoteWin>(); }); } protected override void OnPreOpen() @@ -35,6 +94,9 @@ RankModel.Instance.onRankRefresh += OnRankRefresh; QunyingManager.Instance.OnMatchListEvent += OnMatchListEvent; PlayerDatas.Instance.playerDataRefreshEvent += OnPlayerDataRefresh; GlobalTimeEvent.Instance.secondEvent += OnSecondEvent; QunyingManager.Instance.OnUpdateQunyingInfoEvent += OnUpdateQunyingInfoEvent; Display(); } @@ -64,14 +126,45 @@ { RankModel.Instance.onRankRefresh -= OnRankRefresh; QunyingManager.Instance.OnMatchListEvent -= OnMatchListEvent; PlayerDatas.Instance.playerDataRefreshEvent -= OnPlayerDataRefresh; GlobalTimeEvent.Instance.secondEvent -= OnSecondEvent; QunyingManager.Instance.OnUpdateQunyingInfoEvent -= OnUpdateQunyingInfoEvent; QunyingManager.Instance.openQYWinNeedRoll = true; } void OnSecondEvent() { ShowGameTime(); } void Display() { DisplayFighers(); DisplayPlayerTop3(); ShowGameTime(); ShowTicketCnt(); OnUpdateQunyingInfoEvent(); } //活动时间 void ShowGameTime() { gameTimeText.text = QunyingManager.Instance.GetEndSecondStr(); if (QunyingManager.Instance.m_LastRecoverTime == 0) { ticketTimeText.text = ""; } else { ticketTimeText.text = Language.Get("Qunying6", TimeUtility.SecondsToDHMS(QunyingManager.Instance.restoreTicketMinute * 60 - (TimeUtility.GetCommServerTick() - (int)QunyingManager.Instance.m_LastRecoverTime))); } } void ShowTicketCnt() { ticketCountText.text = UIHelper.GetMoneyCnt(QunyingManager.challengeMoneyType) + "/" + QunyingManager.Instance.challengeMaxCnt; } @@ -83,11 +176,37 @@ } } void OnPlayerDataRefresh(PlayerDataType type) { if (type == PlayerDataType.QunyingWDL) { DisplayFighers(); ShowTicketCnt(); } } void OnRankRefresh(int type) { if (type != QunyingManager.rankType) return; DisplayPlayerTop3(); } void OnUpdateQunyingInfoEvent() { var nextRank = QunyingManager.Instance.GetNextAchievementRank(); if (nextRank == 0) { achievementTargetText.text = Language.Get("Qunying17"); } else { achievementTargetText.text = Language.Get("Qunying4", nextRank); } refreshMoneyText.text = UIHelper.ShowUseMoney(QunyingManager.Instance.refreshMoneyType, QunyingManager.Instance.refreshMoneyValue); refreshMoneyImg.SetIconWithMoneyType(QunyingManager.Instance.refreshMoneyType); refreshCntText.text = QunyingManager.Instance.m_RefreshCnt + "/" + QunyingManager.Instance.refreshMaxCnt; } void DisplayFighers() @@ -101,14 +220,40 @@ void OnMatchListEvent() { //滚动到自己的位置 var myMatch = QunyingManager.Instance.GetMyMatchInfo(out int index); if (QunyingManager.Instance.openQYWinNeedRoll) { var myMatch = QunyingManager.Instance.GetMyMatchInfo(out int index); SmoothScrollToBottom(myMatch == null ? 0.1f : (4 - index) * 0.15f + 0f).Forget(); } if (myMatch != null) { rankText.text = Language.Get("Qunying5", myMatch.Rank); } else { rankText.text = Language.Get("L1045"); } DisplayFighers(); } void RefreshFighters() { //验证钱和次数 if (!UIHelper.CheckMoneyCount(QunyingManager.Instance.refreshMoneyType, QunyingManager.Instance.refreshMoneyValue, 1)) { return; } if (QunyingManager.Instance.m_RefreshCnt >= QunyingManager.Instance.refreshMaxCnt) { SysNotifyMgr.Instance.ShowTip("Qunying1"); return; } QunyingManager.Instance.RequestRefreshFighters(1); } } Main/System/Qunying/QunyingManager.cs
@@ -2,10 +2,11 @@ using UnityEngine; using LitJson; using System; using System.Linq; public class QunyingManager : GameSystemManager<QunyingManager> { public const int challengeMoneyType = 56; public const int challengeMoneyType = 56; //挑战 问鼎令 public const int challengeShopID = 16; public const int rankType = 10; public const int recType = 312; // 挑战记录类型 @@ -15,13 +16,19 @@ public List<QunyingMatchInfo> matchInfoList = new List<QunyingMatchInfo>(); //用于用来拿战斗胜利失败的头像信息 public Dictionary<uint, QunyingMatchInfo> allFaceInfoDict = new Dictionary<uint, QunyingMatchInfo>(); public Dictionary<uint, List<QunyingGameRec>> gameRecDict = new Dictionary<uint, List<QunyingGameRec>>(); // <RecID,QunyingGameRec> public Dictionary<uint, List<QunyingGameRec>> gameRecDict = new Dictionary<uint, List<QunyingGameRec>>(); // <玩家ID,QunyingGameRec> public uint atkPlayerId; public int tagRank; //挑战目标的排名 结果显示用 public event Action OnUpdateGameRecInfo; public bool openQYWinNeedRoll = true; //打开群英界面需要滚动的情况 public uint m_RefreshCnt; // 本周已刷新匹配次数 public uint m_LastRecoverTime; // 上次免费恢复挑战令时间戳,为0时可不用倒计时 public ushort m_RankHighest; // 历史最高名次,第1名为最高 public uint m_RankSuccAward; // 历史最高名次成就领奖记录,按奖励记录索引位运算记录是否已领取 public event Action OnUpdateQunyingInfoEvent; public override void Init() @@ -79,13 +86,12 @@ private void PlayerDataRefresh(PlayerDataType type) { if (type == PlayerDataType.QunyingWDL) { UpdateRedPonit(); } public void UpdateRedPonit() { } public void UpdateQunyingMatchInfo(HA924_tagSCQunyingMatchList vNetData) @@ -116,12 +122,20 @@ allFaceInfoDict[item.PlayerID] = matchInfo; } matchInfoList.Sort((a, b) => a.Rank.CompareTo(b.Rank)); UpdateRedPonit(); OnMatchListEvent?.Invoke(); } public void UpdateQunyingInfo(HA925_tagSCQunyingPlayerInfo vNetData) { m_RefreshCnt = vNetData.RefreshCnt; m_LastRecoverTime = vNetData.LastRecoverTime; m_RankHighest = vNetData.RankHighest; m_RankSuccAward = vNetData.RankSuccAward; UpdateRedPonit(); OnUpdateQunyingInfoEvent?.Invoke(); } public void UpdateGameRecInfo(HA009_tagSCGameRecInfo vNetData) @@ -274,6 +288,128 @@ return true; } public string GetEndSecondStr() { TryGetOpenWeek(out bool isThisWeek, out int openWeekDay); if (isThisWeek && resetOpenDay - FuncOpenLVConfig.Get((int)FuncOpenEnum.Qunying).OpenDay - 1 > 7 - openWeekDay) { //本周开启时间不足 则和下周的合并 return TimeUtility.SecondsToDHMS(TimeUtility.GetCommonWeekEndTime() + 7 * 24 * 60 * 60); } else { return TimeUtility.SecondsToDHMS(TimeUtility.GetCommonWeekEndTime()); } } //获取下一个成就的排名奖励 //0 没有下一个 最高 public int GetNextAchievementRank() { var keys = achievementAwards.Keys.ToList(); if (m_RankHighest == 0) return keys[keys.Count - 1]; keys.Sort(); for (int i = 0; i < keys.Count; i++) { if (m_RankHighest <= keys[i]) { if (i == 0) { return 0; } return keys[i - 1]; } } return keys[keys.Count - 1]; } //0 未达成 1 达成 2 已领取 public int GetAchievementState(int rank) { if (m_RankHighest == 0) return 0; if (m_RankHighest > rank) return 0; var awardIndex = achievementIndexs[rank]; bool isGot = (m_RankSuccAward & (1 << awardIndex)) != 0; return isGot ? 2 : 1; } public Dictionary<int, int[][]> GetRankAwardDict(int functionOrder) { return functionOrder == 0 ? weekRankAwards : dayRankAwards; } public int[][] GetMyRankAwards(int functionOrder, int rank) { if (rank == 0) { return null; } var awardDict = GetRankAwardDict(functionOrder); var keys = awardDict.Keys.ToList(); keys.Sort(); for (int i = 0; i < keys.Count; i++) { if (rank <= keys[i]) { return awardDict[keys[i]]; } } return null; } /// <summary> /// 根据recID获取按时间从大到小排序的List<QunyingGameRec> /// </summary> /// <param name="recID">记录ID</param> /// <param name="sortedList">输出参数:按时间从大到小排序的QunyingGameRec列表</param> /// <returns>如果recID存在且成功获取列表返回true,否则返回false</returns> public bool TryGetSortedGameRecList(uint recID, out List<QunyingGameRec> sortedList) { sortedList = null; if (!gameRecDict.ContainsKey(recID)) return false; sortedList = new List<QunyingGameRec>(gameRecDict[recID]); sortedList.Sort((a, b) => b.Time.CompareTo(a.Time)); // 按时间从大到小排序 return true; } #region 红点 public Redpoint parentRedpoint = new Redpoint(MainRedDot.Qunying); Redpoint awardRedpoint = new Redpoint(MainRedDot.Qunying, MainRedDot.Qunying * 10 + 1); Redpoint matchRedpoint = new Redpoint(MainRedDot.Qunying, MainRedDot.Qunying * 10 + 2); public void UpdateRedPonit() { awardRedpoint.state = RedPointState.None; matchRedpoint.state = RedPointState.None; if (!FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.Qunying)) { return; } var keys = achievementAwards.Keys.ToList(); for (int i = 0; i < keys.Count; i++) { if (GetAchievementState(keys[i]) == 1) { awardRedpoint.state = RedPointState.Simple; break; } } if (UIHelper.GetMoneyCnt(challengeMoneyType) >= challengeMaxCnt) { matchRedpoint.state = RedPointState.Simple; } } #endregion } public class QunyingMatchInfo @@ -297,7 +433,7 @@ public class QunyingGameRec { public uint Time; //战斗时间戳 public uint Value1; //无 public uint Value1; //sid public uint Value2; //攻击类型 1-发起攻击的,2-被攻击的 public uint Value3; //相对攻击类型的目标玩家ID public uint Value4; //是否获胜 1-获胜;2-失败 Main/System/Store/SkinStoreCell.cs
@@ -19,7 +19,7 @@ public void Display(int index) { var list = StoreModel.Instance.storeTypeDict[StoreModel.skinStoreType]; var list = StoreModel.Instance.storeTypeDict[(int)StoreFunc.HeroSkin]; var storeData = list[index]; int shopID = storeData.shopId; var itemID = storeData.storeConfig.ItemID; Main/System/Store/SkinStoreLineCell.cs
@@ -10,7 +10,7 @@ public void Display(int index) { var list = StoreModel.Instance.storeTypeDict[StoreModel.skinStoreType]; var list = StoreModel.Instance.storeTypeDict[(int)StoreFunc.HeroSkin]; for (int i = 0; i < storeCells.Length; i++) { Main/System/Store/SkinStoreWin.cs
@@ -48,14 +48,14 @@ void CreateScroller() { if (!StoreModel.Instance.storeTypeDict.ContainsKey(StoreModel.skinStoreType)) if (!StoreModel.Instance.storeTypeDict.ContainsKey((int)StoreFunc.HeroSkin)) { return; } int jumpIndex = -1; scroller.Refresh(); var list = StoreModel.Instance.storeTypeDict[StoreModel.skinStoreType]; var list = StoreModel.Instance.storeTypeDict[(int)StoreFunc.HeroSkin]; for (int i = 0; i < list.Count; i++) { if (i % 4 == 0) Main/System/Store/StoreModel.cs
@@ -41,7 +41,7 @@ public Dictionary<int, List<int>> freeShopDict = new Dictionary<int, List<int>>(); //免费商品 商店类型:商品列表 public Dictionary<int, int> shopMoneyTypeDict = new Dictionary<int, int>(); public const int skinStoreType = 16; public override void Init() { @@ -621,9 +621,11 @@ DailySpecialsFree = 8, //8: 每日特惠-每日特惠免费 DailyGiftFree = 9, //9: 每日特惠-每日礼包免费 WeeklyGiftFree = 10, //10: 每日特惠-每周礼包免费 HeroSkin = 16, //16: 时装商店 OSBeautyMM = 17, //17: 红颜冲榜礼包 OSHeroTrain = 18, //18: 武将冲榜礼包 OSMingge = 19, //19: 命格冲榜礼包 Qunying = 20, //20: 群英积分商店 } Main/Utility/TimeUtility.cs
@@ -587,6 +587,22 @@ { var now = GetCommServerNow(zoneID).AddDays(1); return new DateTime(now.Year, now.Month, now.Day); } //获取当前周几,1-7 public static int GetCommonWeekday(int zoneID = 0) { var day = GetCommServerNow(zoneID).DayOfWeek; return day == DayOfWeek.Sunday ? 7 : (int)day; } //本周结束时间 秒 public static int GetCommonWeekEndTime(int zoneID = 0) { var now = GetCommServerNow(zoneID); var weekDay = GetCommonWeekday(zoneID); var endDay = now.AddDays(7 - weekDay + 1); return (int)(new DateTime(endDay.Year, endDay.Month, endDay.Day) - now).TotalSeconds; } #endregion }