From 9e6207bd55a334561f1640ec109aa3481bcaa0f8 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期三, 18 三月 2026 19:17:31 +0800
Subject: [PATCH] 526 【挑战】PVP群英榜-后端(功能开启时补充挑战令到满,溢出不补;优化自身名次与上次匹配时的名次不同时强制重刷匹配;)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_Qunying.py |   18 ++++++++++++------
 1 files changed, 12 insertions(+), 6 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_Qunying.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_Qunying.py
index 3b30453..fe41587 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_Qunying.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_Qunying.py
@@ -134,7 +134,11 @@
 
 def DoQunyingOpen(curPlayer):
     storeMax = IpyGameDataPY.GetFuncCfg("QunyingChallenge", 1)
-    PlayerControl.GiveMoney(curPlayer, ShareDefine.TYPE_Price_QunyingTicket, storeMax, "QunyingOpen")
+    curMoney = PlayerControl.GetMoney(curPlayer, ShareDefine.TYPE_Price_QunyingTicket)
+    if curMoney >= storeMax:
+        return
+    giveMoney = storeMax - curMoney
+    PlayerControl.GiveMoney(curPlayer, ShareDefine.TYPE_Price_QunyingTicket, giveMoney, "QunyingOpen")
     Sync_QunyingInfo(curPlayer) # 开启功能
     return
 
@@ -167,7 +171,7 @@
     if not tagID or playerID == tagID:
         return
     
-    matchRankList = PyGameData.g_qunyingPlayerMatchDict.get(playerID, [])
+    _, matchRankList = PyGameData.g_qunyingPlayerMatchDict.get(playerID, [0, []])
     if tagRank not in matchRankList:
         GameWorld.DebugLog("群英榜不可攻击不在匹配列表里的目标名次! tagID=%s not in matchRankList=%s" % (tagID, matchRankList), playerID)
         return
@@ -450,9 +454,11 @@
     
     # 匹配对象缓存
     if playerID not in PyGameData.g_qunyingPlayerMatchDict:
-        PyGameData.g_qunyingPlayerMatchDict[playerID] = []
-    matchRankList = PyGameData.g_qunyingPlayerMatchDict[playerID]
-    if not isRefresh and matchRankList and (playerRank <= layerIDCnt and playerRank in matchRankList):
+        PyGameData.g_qunyingPlayerMatchDict[playerID] = [0, []]
+    matchRank, matchRankList = PyGameData.g_qunyingPlayerMatchDict[playerID]
+    # 确保上榜时自己一定在匹配列表里
+    # 当前名次与匹配时的名次不同时强制重刷
+    if not isRefresh and matchRankList and playerRank == matchRank and playerRank in matchRankList:
         # 非刷新的并且已经有记录的直接同步
         GameWorld.DebugLog("    非刷新且有数据,直接同步! playerRank=%s,matchRankList=%s" % (playerRank, matchRankList), playerID)
         __SyncQunyingMatchList(curPlayer, matchRankList, layerIDList)
@@ -554,7 +560,7 @@
         
     matchRankList.sort()
     GameWorld.DebugLog("    匹配名次结果: matchRankList=%s" % (matchRankList), playerID)
-    PyGameData.g_qunyingPlayerMatchDict[playerID] = matchRankList
+    PyGameData.g_qunyingPlayerMatchDict[playerID] = [playerRank, matchRankList]
     __SyncQunyingMatchList(curPlayer, matchRankList, layerIDList)
     return
 

--
Gitblit v1.8.0