From ba67d86ccc7dde96a4fe2bb2ae3abfbd0aacc561 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期一, 03 十一月 2025 12:00:10 +0800
Subject: [PATCH] 237 【福利内容】每日任务/每周任务/章节奖励-服务端(增加每日任务类型 6 ~ 10)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBillboard.py |  115 +++++++++++++++++++++++++++++++++++++++------------------
 1 files changed, 78 insertions(+), 37 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBillboard.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBillboard.py
index 4054605..dfb9762 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBillboard.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBillboard.py
@@ -17,6 +17,7 @@
 
 import GameWorld
 import ShareDefine
+import PlayerControl
 import ChPyNetSendPack
 import NetPackCommon
 import IpyGameDataPY
@@ -43,12 +44,6 @@
             
     return
 
-def DoBillboardOpen(curPlayer):
-    ## 排行榜开启时需要处理的
-    #UpdatePlayerBillboardOnLeaveServer(curPlayer, True) # 主动同步一次榜单
-    #OpenServerCampaign.DoBillboardOpen(curPlayer) # 同步开服活动榜单
-    return
-
 def BillboardOnLogin(curPlayer):
     # 上线默认同步排行榜
     UpdatePlayerBillboardOnLeaveServer(curPlayer) #排行榜已实时更新,故上线不再同步
@@ -67,10 +62,26 @@
         # 跨服服务器不用更新本服榜
         return
     
-    UpdatePlayerFPTotalBillboard(curPlayer, True) # 战斗力榜
-    UpdateHorseBillboard(curPlayer, True, False) # 坐骑榜
-    UpdatePyPetBillboard(curPlayer, True, False) # 灵宠榜
-    UpdateRealmBillboard(curPlayer) # 境界榜
+    return
+
+def UpdatePlayerBillboardName(curPlayer):
+    ## 更新排行榜中的玩家名字记录
+    
+    playerID = curPlayer.GetPlayerID()
+    updName = curPlayer.GetPlayerName()
+    billboardMgr = DBDataMgr.GetBillboardMgr()
+    for billboardType in ShareDefine.BillboardTypeList:
+        if billboardType in ShareDefine.FamilyBillboardList:
+            continue
+        groupList = billboardMgr.GetBillboardGroupList(billboardType)
+        for billboardType, groupValue1, groupValue2 in groupList:
+            billboardObj = billboardMgr.GetBillboard(billboardType, groupValue1, groupValue2)
+            billData = billboardObj.FindByID(playerID)
+            if not billData:
+                continue
+            billData.SetName1(updName)
+            
+    # 跨服榜更新, 待处理
     return
 
 def UpdatePlayerFPTotalBillboard(curPlayer, isForceUpdate=False, isCheckRule=True):
@@ -155,38 +166,75 @@
     ##境界榜
     return
 
-def __CanPlayerBillboardComm(curPlayer):
-    ## 玩家可否上榜通用检查
-    if not GameWorld.IsNormalPlayer(curPlayer):
-        return False
-    #if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_Billboard):
-    #    GameWorld.DebugLog("排行榜未开启,无法上榜!curLV=%s" % (curPlayer.GetLV()), curPlayer.GetPlayerID())
-    #    return False
-    
-    return True
+#def __CanPlayerBillboardComm(curPlayer):
+#    ## 玩家可否上榜通用检查
+#    if not GameWorld.IsNormalPlayer(curPlayer):
+#        return False
+#    #if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_Billboard):
+#    #    GameWorld.DebugLog("排行榜未开启,无法上榜!curLV=%s" % (curPlayer.GetLV()), curPlayer.GetPlayerID())
+#    #    return False
+#    
+#    return True
 
-def UpdatePlayerBillboard(curPlayer, bType, cmpValue, cmpValue2=0, cmpValue3=0, value1=0, value2=0, autoSort=False, **kwargs):
+def UpdatePlayerBillboard(curPlayer, bType, cmpValue, cmpValue2=0, cmpValue3=0, autoSort=False, **kwargs):
     ## 更新玩家排行榜
     
     #if not cmpValue and not cmpValue2 and not cmpValue3:
     #    return
     
-    if not __CanPlayerBillboardComm(curPlayer):
-        return
-    
     playerJob = GetBillboardJob(curPlayer)
     playerID = curPlayer.GetID()
-    playerName = curPlayer.GetName()
+    playerName = curPlayer.GetPlayerName()
     playerOpInfo = GetBillboardOperateInfo(curPlayer)
+    value1 = curPlayer.GetOfficialRank()
+    value2 = PlayerControl.GetTitleID(curPlayer)
     kwargs["value3"] = curPlayer.GetFace()
     kwargs["value4"] = curPlayer.GetFacePic()
-    if bType in ShareDefine.BTValue1_OfficialRankList:
-        value1 = curPlayer.GetOfficialRank()
-        
+    kwargs["value5"] = curPlayer.GetModelMark()
+    
     groupValue1 = 0
     UpdateBillboard(bType, groupValue1, playerID, playerName, playerOpInfo, playerJob, value1, value2, 
                     cmpValue, cmpValue2, cmpValue3, autoSort=autoSort, **kwargs)
     return
+
+def UpdateBillboardByID(dataID, billboardType, cmpValue, cmpValue2=0, cmpValue3=0, autoSort=False):
+    ## 直接根据榜单ID修改榜单排行相关值,其他值不修改
+    if GameWorld.IsCrossServer():
+        if billboardType not in ShareDefine.CrossBillboardTypeList:
+            return
+    else:
+        if billboardType not in ShareDefine.BillboardTypeList:
+            return
+        
+    if not dataID:
+        return
+    
+    groupValue1, groupValue2 = 0, 0
+    billboardMgr = DBDataMgr.GetBillboardMgr()
+    billboardObj = billboardMgr.GetBillboard(billboardType, groupValue1, groupValue2)
+    billboardData = billboardObj.FindByID(dataID)
+    if not billboardData:
+        return
+    
+    isNewData = False
+    cmpValueChange = isNewData or billboardData.GetCmpValue() != cmpValue or billboardData.GetCmpValue2() != cmpValue2 \
+        or (cmpValue3 and billboardData.GetCmpValue3() != cmpValue3)
+        
+    billboardData.SetCmpValue(cmpValue)
+    billboardData.SetCmpValue2(cmpValue2)
+    billboardData.SetCmpValue3(cmpValue3)
+    if cmpValueChange or not billboardData.GetTime():
+        billboardData.SetTime(int(time.time()))
+        
+    GameWorld.DebugLog("更新排行榜值: billboardType=%s,groupValue1=%s,groupValue2=%s,dataID=%s,cmpValueChange=%s,cmpValue=%s,cmpValue2=%s,cmpValue3=%s" 
+                       % (billboardType, groupValue1, groupValue2, dataID, cmpValueChange,
+                          cmpValue, cmpValue2, cmpValue3), dataID)
+    if not autoSort:
+        if isNewData or cmpValueChange:
+            billboardObj.SetSortDelay()
+    else:
+        billboardObj.SortData()
+    return True
 
 def UpdateBillboard(billboardType, groupValue1, dataID, name1, name2, type2, value1, value2, cmpValue,
                     cmpValue2=0, cmpValue3=0, groupValue2=0, id2=0, autoSort=True, **kwargs):
@@ -239,15 +287,6 @@
     cmpValueChange = isNewData or billboardData.GetCmpValue() != cmpValue or billboardData.GetCmpValue2() != cmpValue2 \
         or (cmpValue3 and billboardData.GetCmpValue3() != cmpValue3)
         
-    # 没设置值默认为时间time,先上榜的排前面
-    if cmpValue3 == 0:
-        # 时间权值仅在比较值变更的情况下才更新, 防止其他附属值更新时导致比较值相同的玩家名次间会变动的问题
-        if cmpValueChange:
-            calcTime = GameWorld.ChangeTimeStrToNum("2090-01-01 00:00:00")
-            cmpValue3 = max(0, calcTime - int(time.time())) # 比较值3如果没指定值则默认存当前更新的time
-        else:
-            cmpValue3 = billboardData.GetCmpValue3()
-            
     # 更新所有值
     billboardData.SetType(billboardType)
     billboardData.SetGroupValue1(groupValue1)
@@ -269,7 +308,9 @@
     billboardData.SetCmpValue(cmpValue)
     billboardData.SetCmpValue2(cmpValue2)
     billboardData.SetCmpValue3(cmpValue3)
-    
+    if cmpValueChange or not billboardData.GetTime():
+        billboardData.SetTime(int(time.time()))
+        
     GameWorld.DebugLog("更新排行榜值: billboardType=%s,groupValue1=%s,groupValue2=%s,dataID=%s,isNewData=%s,cmpValueChange=%s,type2=%s,value1=%s,value2=%s,cmpValue=%s,cmpValue2=%s,cmpValue3=%s,%s" 
                        % (billboardType, groupValue1, groupValue2, dataID, isNewData, cmpValueChange,
                           type2, value1, value2, cmpValue, cmpValue2, cmpValue3, kwargs), dataID)

--
Gitblit v1.8.0