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