From 336a7828ba80bfd74fc8d5629badbaac115b5011 Mon Sep 17 00:00:00 2001 From: hch <305670599@qq.com> Date: 星期四, 03 七月 2025 20:29:35 +0800 Subject: [PATCH] 69 【常规】排行榜 --- Main/System/BillboardRank/RankModel.cs | 113 +++++++++++++++++++++++++++++++++++++++++++++++++------- 1 files changed, 98 insertions(+), 15 deletions(-) diff --git a/Main/System/BillboardRank/RankModel.cs b/Main/System/BillboardRank/RankModel.cs index 146071a..7710e25 100644 --- a/Main/System/BillboardRank/RankModel.cs +++ b/Main/System/BillboardRank/RankModel.cs @@ -1,5 +1,4 @@ 锘縰sing System; -using System.Collections; using System.Collections.Generic; using UnityEngine; @@ -8,10 +7,33 @@ { public event Action<int> onRankRefresh; public event Action<int> onMyRankRefresh; + + //鎺掕姒滄粴鍔ㄦ樉绀虹殑鏈�澶ф暟閲� 绫诲瀷 + Dictionary<int, int> ranksShowMaxCnt = new Dictionary<int, int>(); + + //鍒嗛〉鏌ヨ + Dictionary<int, int> queryRankCD = new Dictionary<int, int>(); //棣栨鏌ヨCD锛屼笉褰卞搷鍚庣画鐨勫垎椤垫煡璇� + //鍒嗛〉鏌ヨ 鎺掑悕绱㈠紩鎸夊瓧娈靛瓨鍌� 1浠h〃绗竴鍚� + Dictionary<int, Dictionary<int, RankData>> m_RankPageDatas = new Dictionary<int, Dictionary<int, RankData>>(); + //绫诲瀷锛欼D -鎺掑悕绱㈠紩锛岄�氳繃ID杩涜鎺掗噸鍒犻櫎 涓嶅悓鍚嶆 鍚孖D鐨勬暟鎹� + Dictionary<int, Dictionary<int, int>> m_RankIDToIndex = new Dictionary<int, Dictionary<int, int>>(); + + Action completeEvent = null; //鏌ヨ瀹屾垚浜嬩欢 + + //鐩戝惉鎺掕姒滄樉绀哄悕娆★紝鐢ㄤ簬鍒嗛〉鏌ヨ锛岀涓�椤垫煡璇㈢敱澶栭儴瑙﹀彂 + //浣跨敤鍦烘櫙 濡傜晫闈㈡帓琛屾婊氬姩鐨勬椂鍊欐瘡娆℃煡璇�30涓帓鍚嶅悕棰濓紝鍦ㄦ樉绀哄ぇ浜巑*30 +20鍚嶆椂锛岀洃鍚笅涓�椤碉紝鏌ヨm+1椤� + int pageCnt = 20; //姣忛〉鏌ヨ鏉℃暟 + int queryPointNum = 12; //鏌ヨ鐐� + int queryPageCD = 60; //鍐呴儴鏌ヨ鐐笴D 閬垮厤涓嶆柇涓婁笅婊戝姩鐨勬椂鍊欒繃浜庨绻佹煡璇紝澶栭儴浣跨敤閲嶆柊鎵撳紑鐨勬椂鍊欏彲浠ラ噸缃瓹D + Dictionary<int, float> queryPageTimes = new Dictionary<int, float>(); //鏌ヨ椤礐D + Dictionary<int, int> ranksServerMaxCnt = new Dictionary<int, int>(); //鏈嶅姟鍣ㄦ帓琛屾褰撳墠鎬绘暟閲忥紙鍔ㄦ�佸彉鍖栵級锛屽垎椤垫煡璇㈢殑鏃跺�欒繃婊ょ敤 + + public override void Init() { DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent += OnBeforePlayerDataInitialize; + ParseConfig(); } public void OnBeforePlayerDataInitialize() @@ -19,6 +41,21 @@ m_RankPageDatas.Clear(); m_RankIDToIndex.Clear(); queryRankCD.Clear(); + } + + void ParseConfig() + { + var config = FuncConfigConfig.Get("BillboardSet"); + ranksShowMaxCnt = ConfigParse.ParseIntDict(config.Numerical3); + } + + public int GetRankShowMaxCnt(int type) + { + if (ranksShowMaxCnt.ContainsKey(type)) + { + return ranksShowMaxCnt[type]; + } + return 100; } public override void Release() @@ -53,11 +90,6 @@ #region 鍒嗛〉鏌ヨ - Dictionary<int, int> queryRankCD = new Dictionary<int, int>(); //棣栨鏌ヨCD锛屼笉褰卞搷鍚庣画鐨勫垎椤垫煡璇� - //鍒嗛〉鏌ヨ 鎺掑悕绱㈠紩鎸夊瓧娈靛瓨鍌� 1浠h〃绗竴鍚� - Dictionary<int, Dictionary<int, RankData>> m_RankPageDatas = new Dictionary<int, Dictionary<int, RankData>>(); - //绫诲瀷锛欼D -鎺掑悕绱㈠紩锛岄�氳繃ID杩涜鎺掗噸鍒犻櫎 涓嶅悓鍚嶆 鍚孖D鐨勬暟鎹� - Dictionary<int, Dictionary<int, int>> m_RankIDToIndex = new Dictionary<int, Dictionary<int, int>>(); //锛侊紒锛佹湰鏈嶅垎椤垫煡璇娇鐢ㄨ鏄� @@ -66,12 +98,15 @@ // // startIndex 鍜� count 閰嶅锛屼笌watchID鏃犲叧鑱� // watchID; //鏌ョ湅鎸囧畾ID鍚嶆鍓嶅悗锛屾煡璇㈣寖鍥存湇鍔$宸插浐瀹氾紝濡傛灉鍙鏌ユ寚瀹氱洰鏍囷紝count鍙互璁剧疆1鍑忓皯闄勫姞淇℃伅 - public void QueryRankByPage(int type, int startIndex = 0, int count = 20, int watchID = 0, bool forceQuery = false, int groupValue1 = 0, int groupValue2 = 0) + public void QueryRankByPage(int type, int startIndex = 0, int count = 20, int watchID = 0, bool forceQuery = false, int groupValue1 = 0, int groupValue2 = 0, Action complete = null) { + completeEvent = complete; if (queryRankCD.ContainsKey(type) && !forceQuery) { if (Time.time - queryRankCD[type] < 2f) { + completeEvent?.Invoke(); + completeEvent = null; return; } } @@ -88,12 +123,7 @@ queryRankCD[type] = (int)Time.time; } - //鐩戝惉鎺掕姒滄樉绀哄悕娆★紝鐢ㄤ簬鍒嗛〉鏌ヨ锛岀涓�椤垫煡璇㈢敱澶栭儴瑙﹀彂 - //浣跨敤鍦烘櫙 濡傜晫闈㈡帓琛屾婊氬姩鐨勬椂鍊欐瘡娆℃煡璇�30涓帓鍚嶅悕棰濓紝鍦ㄦ樉绀哄ぇ浜巑*30 +20鍚嶆椂锛岀洃鍚笅涓�椤碉紝鏌ヨm+1椤� - int pageCnt = 20; //姣忛〉鏌ヨ鏉℃暟 - int queryPointNum = 12; //鏌ヨ鐐� - int queryPageCD = 60; //鍐呴儴鏌ヨ鐐笴D 閬垮厤涓嶆柇涓婁笅婊戝姩鐨勬椂鍊欒繃浜庨绻佹煡璇紝澶栭儴浣跨敤閲嶆柊鎵撳紑鐨勬椂鍊欏彲浠ラ噸缃瓹D - Dictionary<int, float> queryPageTimes = new Dictionary<int, float>(); //鏌ヨ椤礐D + public void ListenRankPage(int type, int index, int groupValue1 = 0, int groupValue2 = 0) { int page = index / pageCnt; @@ -101,6 +131,14 @@ { if (queryPageTimes.ContainsKey(page) && Time.realtimeSinceStartup - queryPageTimes[page] < queryPageCD) return; + if (ranksServerMaxCnt.ContainsKey(type)) + { + if(index >= ranksServerMaxCnt[type]) + { + //瓒呰繃鏈嶅姟鍣ㄥ凡涓婃鐨勬�绘暟閲忥紝姣斿鎬绘鍗曟槸100鍚嶏紝褰撳墠鍙湁8鍚嶇帺瀹朵笂姒滐紝寰�涓嬫粴鍔ㄥ氨涓嶅啀鏌ヨ + return; + } + } Debug.LogFormat("鍒嗛〉鏌ヨ锛歿0} - {1}", index, page); QueryRankByPage(type, pageCnt * (page + 1), pageCnt, 0, true, groupValue1, groupValue2); queryPageTimes[page] = Time.realtimeSinceStartup; @@ -171,6 +209,12 @@ m_RankIDToIndex.Add(rankType, new Dictionary<int, int>()); } + if (!ranksServerMaxCnt.ContainsKey(rankType)) + { + ranksServerMaxCnt.Add(rankType, package.DataTotal); + } + ranksServerMaxCnt[rankType] = package.DataTotal; + for (int i = 0; i < package.PageDataCnt; i++) { int id = (int)package.PageDataList[i].ID; @@ -232,9 +276,12 @@ { onRankRefresh?.Invoke(package.Type); } + + completeEvent?.Invoke(); + completeEvent = null; } - //鎺掑悕浠�0 寮�濮� + //鎺掑悕浠�1 寮�濮� //濡傛灉鏄法鏈嶆帓琛屾 绫诲瀷鍙兘鍥犺法鏈嶅姛鑳戒笉鍚� 鐢卞垎缁勫垎璧涘绛夋儏鍐电粍鍚� public Dictionary<int, RankData> GetRankPageDatas(int type) { @@ -244,6 +291,18 @@ return datas; } return null; + } + + //鏌ヨ鎸囧畾鐩爣鎺掑悕鐨勬暟鎹� + public RankData GetRankDataByRank(int type, int rank) + { + Dictionary<int, RankData> rankDatas = null; + RankData rankData = null; + if (m_RankPageDatas.TryGetValue(type, out rankDatas)) + { + rankDatas.TryGetValue(rank, out rankData); + } + return rankData; } @@ -265,7 +324,7 @@ return null; } - public RankData GetMyRankByID(int type, int queryID) + public RankData GetRankByID(int type, int queryID) { Dictionary<int, RankData> rankDatas = null; if (m_RankPageDatas.TryGetValue(type, out rankDatas)) @@ -283,6 +342,30 @@ #endregion } +// 榛樿鎯呭喌锛屽悇涓鍙兘鏈夋墍鍙樺寲 +// 鐜╁涓汉姒� +// ID - 鐜╁ID +// Name1 - 鐜╁鍚� +// Name2 - 娓告垙璐﹀彿 +// Type2 - 鑱屼笟 +// Value1 - 瀹樿亴 +// Value2 - 绉板彿ID +// Value3 - 澶村儚 +// Value4 - 澶村儚妗� +// Value5 - 涓昏褰㈣薄 +// --------------------------------------- +// 浠欑洘姒� +// ID - 浠欑洘ID +// ID2 - 鐩熶富ID +// Name1 - 浠欑洘鍚� +// Name2 - 鐩熶富鍚� +// Value1 - 鎬绘垬鍔涳紝鏁撮櫎浜块儴鍒� +// Value2 - 鎬绘垬鍔涳紝姹備綑浜块儴鍒� +// Value3 - 寰界珷 +// Value4 - 浠欑洘绛夌骇 +// Value5 - 浠欑洘ServerID + + public class RankData { public int type; //鎺掕姒滅被鍨� -- Gitblit v1.8.0