From 36dab69616d3be1f6f8880fc44da13e25c22d8f9 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期四, 09 一月 2025 18:17:23 +0800
Subject: [PATCH] 9936 【BT】【英文】【越南】【砍树】人族法宝(增加任务进度奖励领取事件通知CustomAward)
---
ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossBillboard.py | 101 +++++++++++++++++++++++++++++++-------------------
1 files changed, 62 insertions(+), 39 deletions(-)
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossBillboard.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossBillboard.py
index 71537ac..93bbf87 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossBillboard.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossBillboard.py
@@ -17,12 +17,14 @@
import CommFunc
import ShareDefine
+import IpyGameDataPY
import CrossRealmMsg
import PyGameDataStruct
import ChPyNetSendPack
import DataRecordPack
import NetPackCommon
import PyDataManager
+import CrossRealmPK
import GameWorld
import operator
@@ -110,7 +112,6 @@
self.__billboardType = billboardType
self.__groupValue1 = groupValue1
self.__groupValue2 = groupValue2
- self.__maxCount = ShareDefine.CrossBillboard_MaxDataCount.get(billboardType, 100)
self.__crossServerDataVer = 0 # 主服榜单数据版本
self.__clientServerDataVer = 0 # 子服榜单数据版本
self.__billboardList = [] # [tagDBCrossBillboard, ...]
@@ -268,10 +269,17 @@
return
def GetCount(self): return len(self.__billboardList)
- def GetMaxCount(self): return self.__maxCount
+ def GetMaxCount(self):
+ maxCountDict = IpyGameDataPY.GetFuncEvalCfg("CrossBillboardSet", 1, {})
+ return maxCountDict.get(self.__billboardType, 100)
- def At(self, i): return self.__billboardList[i]
- def IsFull(self): return len(self.__billboardList) >= self.__maxCount
+ def At(self, i):
+ billData = self.__billboardList[i]
+ if not billData and False:
+ billData = PyGameDataStruct.tagDBCrossBillboard() # 不会执行到,只为了.出代码提示
+ return billData
+
+ def IsFull(self): return len(self.__billboardList) >= self.GetMaxCount()
def UpdCrossServerDataVer(self, version=None):
## 更新跨服榜单数据版本号,用于跨服主服、子服验证数据版本,同步榜单数据用
@@ -344,7 +352,7 @@
def CopyBillboardOnDay():
billboardMgr = PyDataManager.GetCrossBillboardManager()
for billboardType in ShareDefine.CrossBillboardTypeList:
- if billboardType in [ShareDefine.Def_CBT_BossTrialSubmitBak, ShareDefine.Def_CBT_BossTrialSubmitFamilyBak]:
+ if billboardType in [ShareDefine.Def_CBT_BossTrialSubmitBak, ShareDefine.Def_CBT_BossTrialSubmitFamilyBak, ShareDefine.Def_CBT_CrossRealmPK]:
continue
groupList = billboardMgr.GetBillboardGroupList(billboardType)
for billboardType, groupValue1, groupValue2 in groupList:
@@ -466,8 +474,21 @@
GameWorld.DebugLog("玩家请求查看跨服排行榜: billboardType=%s,groupValue1=%s,groupValue2=%s" % (billboardType, groupValue1, groupValue2))
# 请求查询跨服服务器
- dataMsg = {"BillboardType":billboardType, "GroupValue1":groupValue1, "GroupValue2":groupValue2,
- "QueryData":{"EventName":"View", "PlayerID":playerID, "StartIndex":startIndex, "WatchCnt":watchCnt, "WatchID":watchID}}
+ dataMsg = {"BillboardType":billboardType, "GroupValue1":groupValue1, "GroupValue2":groupValue2, "PlayerID":playerID,
+ "QueryType":"View", "QueryData":{"StartIndex":startIndex, "WatchCnt":watchCnt, "WatchID":watchID}}
+ CrossRealmMsg.SendMsgToCrossServer(ShareDefine.ClientServerMsg_QueryBillboard, dataMsg)
+ return
+
+def OnQueryPlayerBillboardRank(playerID, funcName, funcData, billboardType, groupValue1, groupValue2=0, tagPlayerID=0):
+ ## 查询玩家ID排名
+ if GameWorld.IsCrossServer():
+ return
+ if billboardType not in ShareDefine.CrossBillboardTypeList:
+ return
+ if not tagPlayerID:
+ tagPlayerID = playerID # 默认查自己
+ dataMsg = {"BillboardType":billboardType, "GroupValue1":groupValue1, "GroupValue2":groupValue2, "PlayerID":playerID,
+ "QueryType":"Ranking", "QueryData":{"PlayerID":tagPlayerID, "funcName":funcName, "funcData":funcData}}
CrossRealmMsg.SendMsgToCrossServer(ShareDefine.ClientServerMsg_QueryBillboard, dataMsg)
return
@@ -476,11 +497,13 @@
billboardType = msgData["BillboardType"]
groupValue1 = msgData["GroupValue1"]
groupValue2 = msgData["GroupValue2"]
+ playerID = msgData.get("PlayerID", 0) # 发起的玩家ID
+ queryType = msgData.get("QueryType", "") # 原数据返回子服
queryData = msgData.get("QueryData", {}) # 原数据返回子服
- SyncCrossBillboardToClientServer(billboardType, groupValue1, groupValue2, [serverGroupID], queryData)
+ SyncCrossBillboardToClientServer(billboardType, groupValue1, groupValue2, [serverGroupID], playerID, queryType, queryData)
return
-def SyncCrossBillboardToClientServer(billboardType, groupValue1, groupValue2, serverGroupIDList=None, queryData=None):
+def SyncCrossBillboardToClientServer(billboardType, groupValue1, groupValue2, serverGroupIDList=None, playerID=0, queryType="", queryData=None):
## 同步跨服榜单到子服
if not GameWorld.IsCrossServer():
return
@@ -492,9 +515,17 @@
billboardObj = billboardMgr.GetCrossBillboard(billboardType, groupValue1, groupValue2)
billboardObj.DoDelaySort()
idOrderDict = billboardObj.GetIDOrderDict()
- crossServerDataVer = billboardObj.GetCrossServerDataVer()
- msgData = {"BillboardType":billboardType, "GroupValue1":groupValue1, "GroupValue2":groupValue2,
- "QueryData":queryData, "CrossServerDataVer":crossServerDataVer}
+ msgData = {"BillboardType":billboardType, "GroupValue1":groupValue1, "GroupValue2":groupValue2, "PlayerID":playerID,
+ "QueryType":queryType, "QueryData":queryData}
+
+ # 查询名次
+ if queryType == "Ranking":
+ tagPlayerID = queryData.get("PlayerID", 0)
+ if not tagPlayerID:
+ return
+ queryData["OrderIndex"] = idOrderDict.get(tagPlayerID, 0) - 1 # -1-未上榜,0-第一名
+ CrossRealmMsg.SendMsgToClientServer(ShareDefine.CrossServerMsg_SyncBillboard, msgData, serverGroupIDList)
+ return
# 有查询数据时才同步榜单数据列表,否则只同步数据版本号
if queryData:
@@ -560,38 +591,30 @@
billboardType = msgData["BillboardType"]
groupValue1 = msgData["GroupValue1"]
groupValue2 = msgData["GroupValue2"]
- crossServerDataVer = msgData["CrossServerDataVer"]
- syncBillboardList = msgData.get("BillboardDataList")
- GameWorld.DebugLog("收到跨服服务器同步的排行榜信息: billboardType=%s,groupValue1=%s,groupValue2=%s,crossServerDataVer=%s"
- % (billboardType, groupValue1, groupValue2, crossServerDataVer))
-
- #billboardMgr = PyDataManager.GetCrossBillboardManager()
- #billboardObj = billboardMgr.GetCrossBillboard(billboardType, groupValue1, groupValue2)
- #billboardObj.UpdClientServerBillboard(crossServerDataVer, syncBillboardList)
-
- queryData = msgData.get("QueryData")
- if not queryData:
+ playerID = msgData.get("PlayerID", 0) # 发起的玩家ID
+ queryType = msgData.get("QueryType", "")
+ queryData = msgData.get("QueryData", {})
+ GameWorld.DebugLog("收到跨服服务器同步的排行榜信息: billboardType=%s,groupValue1=%s,groupValue2=%s,queryType=%s"
+ % (billboardType, groupValue1, groupValue2, queryType), playerID)
+ if not queryType or not queryData:
return
- eventName = queryData.get("EventName")
- #eventData = queryData.get("EventData")
- queryPlayerID = queryData.get("PlayerID", 0)
- if not eventName or not queryPlayerID:
- return
-
- queryPlayer = GameWorld.GetPlayerManager().FindPlayerByID(queryPlayerID)
- if not queryPlayer:
- return
-
- if eventName == "View":
+ if queryType == "View":
+ queryPlayer = GameWorld.GetPlayerManager().FindPlayerByID(playerID)
+ if not queryPlayer:
+ return
watchID = queryData.get("WatchID", 0)
+ syncBillboardList = msgData.get("BillboardDataList")
SyncCrossBillboardToPlayer(queryPlayer, billboardType, groupValue1, groupValue2, syncBillboardList, watchID)
- #else:
- # idOrderDict = billboardObj.GetIDOrderDict()
- # order = idOrderDict.get(queryPlayerID, 0)
- # sysMsg = str([billboardType, groupValue1, groupValue2, eventName, eventData, order])
- # queryPlayer.MapServer_QueryPlayerResult(0, 0, "CrossBillboardOrder", sysMsg, len(sysMsg))
+ elif queryType == "Ranking":
+ funcName = queryData.get("funcName", "")
+ funcData = queryData.get("funcData", {})
+ #tagPlayerID = queryData.get("PlayerID", 0)
+ orderIndex = queryData.get("OrderIndex", 0)
+ if funcName == "QueryCrossPKSeasonOrder":
+ CrossRealmPK.OnQueryCrossPKSeasonOrderRet(playerID, funcData, orderIndex)
+
return
def SyncCrossBillboardToPlayer(curPlayer, billboardType, groupValue1, groupValue2, billboardList, watchID):
--
Gitblit v1.8.0