From a7cda2ada3349bce6a6f9261752c0a2fe5e6927b Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期三, 15 十月 2025 19:26:45 +0800
Subject: [PATCH] 263 【主界面】头像系统(内政-幻境阁系统)-服务端(玩家改名)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBillboard.py | 109 +++++++++++++++++++++++++++++++++++++++++-------------
1 files changed, 82 insertions(+), 27 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..f674bed 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,39 +166,83 @@
##境界榜
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)
+
+ # 没设置值默认为时间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.SetCmpValue(cmpValue)
+ billboardData.SetCmpValue2(cmpValue2)
+ billboardData.SetCmpValue3(cmpValue3)
+
+ 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):
''' 更新排行榜
--
Gitblit v1.8.0