From 388823edfe6308cba6f76ca6dc4f20022c5cb2be Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期一, 30 六月 2025 19:03:50 +0800
Subject: [PATCH] 10431 【英文】看广告获得限时代金券

---
 ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossBillboard.py |   49 ++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 46 insertions(+), 3 deletions(-)

diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossBillboard.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossBillboard.py
index 93bbf87..9fac72d 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossBillboard.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossBillboard.py
@@ -19,6 +19,7 @@
 import ShareDefine
 import IpyGameDataPY
 import CrossRealmMsg
+import PlayerViewCache
 import PyGameDataStruct
 import ChPyNetSendPack
 import DataRecordPack
@@ -29,6 +30,7 @@
 
 import operator
 import time
+import json
 
 class CrossBillboardManager(object):
     ## 跨服排行榜管理,注意该类只处理数据逻辑,功能相关逻辑不要写在该类,不然重读脚本不会生效
@@ -66,6 +68,27 @@
         for key in self.__billboardDict.keys():
             if key[0] == billboardType:
                 self.__billboardDict.pop(key)
+        return
+    
+    def ClearBillboard(self, billboardType, groupValue1=None, groupValue2=None):
+        '''清除某个类型的榜单所有数据,可指定过滤groupValue,有流向记录
+        @param groupValue1: 不为None时验证 groupValue1 是否相同
+        @param groupValue2: 不为None时验证 groupValue2 是否相同
+        如果groupValue1 groupValue2 都传入None,相当于清空 billboardType 类型的所有榜单数据
+        '''
+        clearList = []
+        for bType, gValue1, gValue2 in self.__billboardDict.keys():
+            if bType != billboardType:
+                continue
+            if groupValue1 != None and groupValue1 != gValue1:
+                continue
+            if groupValue2 != None and groupValue2 != gValue2:
+                continue
+            key = (bType, gValue1, gValue2)
+            clearList.append(key)
+            
+        for bType, gValue1, gValue2 in clearList:
+            self.GetCrossBillboard(bType, gValue1, gValue2).ClearData()
         return
     
     # 保存数据 存数据库和realtimebackup
@@ -450,8 +473,8 @@
 #{
 #    tagHead        Head;
 #    BYTE        Type;        //榜单类型
-#    BYTE        GroupValue1;    // 分组值1
-#    BYTE        GroupValue2;    // 分组值2,与分组值1组合归为同组榜单数据
+#    DWORD        GroupValue1;    // 分组值1
+#    DWORD        GroupValue2;    // 分组值2,与分组值1组合归为同组榜单数据
 #    DWORD        StartIndex;    //查看的起始名次索引, 默认0
 #    BYTE        WatchCnt;    //查看条数,默认20,最大不超过100
 #    DWORD        WatchID;        //查看指定ID名次前后,如玩家ID、家族ID等
@@ -771,6 +794,21 @@
                       id2=id2, autoSort=autoSort, value3=value3, value4=value4, value5=value5)
     return
 
+def UpdCrossBillboardPlayer(bType, playerID, groupValue1, cmpValue, cmpValue2=0, value1=0, value2=0, groupValue2=0, autoSort=True, **kwargs):
+    ## 通用的更新跨服玩家榜,GameServer直接调用
+    playerInfo = PlayerViewCache.GetShotCacheDict(playerID, "AccID", "ServerID", "Face", "FacePic")
+    name1 = playerInfo.get("Name", "")
+    name2 = playerInfo.get("AccID", "")
+    type2 = playerInfo.get("Job", 1)
+    if not value1:
+        value1 = playerInfo.get("RealmLV", 1)
+    value3 = playerInfo.get("Face", 0)
+    value4 = playerInfo.get("FacePic", 0)
+    value5 = playerInfo.get("ServerID", 0)
+    UpdCrossBillboard(bType, groupValue1, playerID, name1, name2, type2, value1, value2, cmpValue, cmpValue2, 
+                      autoSort=autoSort, value3=value3, value4=value4, value5=value5)
+    return
+
 def UpdCrossBillboard(billboardType, groupValue1, dataID, name1, name2, type2, value1, value2, cmpValue,
                       cmpValue2=0, cmpValue3=0, groupValue2=0, id2=0, autoSort=True, noSortAndSync=False,
                       **kwargs):
@@ -843,7 +881,12 @@
     billboardData.Value6 = kwargs.get("value6", 0)
     billboardData.Value7 = kwargs.get("value7", 0)
     billboardData.Value8 = kwargs.get("value8", 0)
-    billboardData.UserData = kwargs.get("userData", "")    
+    userData = kwargs.get("userData", "")
+    if userData and not isinstance(userData, str):
+        if isinstance(userData, dict) or isinstance(userData, list):
+            userData = json.dumps(userData, ensure_ascii=False)
+        userData = userData.replace(" ", "")
+    billboardData.UserData = userData   
     billboardData.DataLen = len(billboardData.UserData)    
     billboardData.CmpValue = cmpValue
     billboardData.CmpValue2 = cmpValue2

--
Gitblit v1.8.0