From d8fac1acbf1659c5d2ff67d95f98520d557fd9cf Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期一, 02 十二月 2024 11:34:54 +0800
Subject: [PATCH] 5416 【工具】兑换码优化(兑换码邮件内容文件json支持不同的appID独立文件配置;)

---
 ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossChampionship.py |  111 +++++++++++++++++++++++++++++++++++++++++++++----------
 1 files changed, 91 insertions(+), 20 deletions(-)

diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossChampionship.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossChampionship.py
index d105313..1dc3178 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossChampionship.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossChampionship.py
@@ -29,6 +29,8 @@
 import PlayerControl
 import PyDataManager
 import NetPackCommon
+import GameXiangong
+import GameWorship
 import PyGameData
 import ChConfig
 import PlayerFB
@@ -69,10 +71,11 @@
 跨服排位争霸赛最终排名官职信息
 ShareDefine.Def_UniversalGameRecType_CrossChampionshipOfficial
 time:time                上一次辞退下级仙官时间
-value1:zoneID官职ID      官职ID*10 + 分区ID
+value1:官职ID            官职ID
 value2:playerID          玩家ID,可能为0
 value3:worshipValue      被膜拜次数*10 + 是否双倍
 value4:rank              排名
+value5:zoneID            分区ID
 StrValue3:               [申请该官职玩家ID,...]
 '''
 
@@ -80,7 +83,8 @@
 '''
 跨服排位争霸赛官职挑战信息
 ShareDefine.Def_UniversalGameRecType_CrossChampionshipOffChallenge
-value1:zoneID官职ID      官职ID*10 + 分区ID
+value1:官职ID             官职ID
+value2:zoneID            分区ID
 StrValue3:               {挑战玩家信息key:value, ...}
 '''
 
@@ -110,6 +114,8 @@
         self.lv = 0
         self.fightPower = 0
         self.realmLV = 0
+        self.face = 0
+        self.facePic = 0
         return
     
     def GetString(self):
@@ -124,9 +130,11 @@
                 playerShortInfo["LV"] = cacheDict.get("LV", 1)
                 playerShortInfo["FightPower"] = cacheDict.get("FightPower", 0)
                 playerShortInfo["RealmLV"] = cacheDict.get("RealmLV", 0)
+                playerShortInfo["Face"] = cacheDict.get("Face", 0)
+                playerShortInfo["FacePic"] = cacheDict.get("FacePic", 0)
                 self.applyPlayerInfo[applyPlayerID] = playerShortInfo
         return {"zoneID":self.zoneID, "officialID":self.officialID, "lastDismissJuniorTime":self.lastDismissJuniorTime,
-                "accID":self.accID, "playerID":self.playerID, "playerName":self.playerName,
+                "accID":self.accID, "playerID":self.playerID, "playerName":self.playerName, "face":self.face, "facePic":self.facePic,
                 "job":self.job, "lv":self.lv, "fightPower":self.fightPower, "realmLV":self.realmLV, "rank":self.rank,
                 "worshipCount":self.worshipCount, "applyPlayerInfo":self.applyPlayerInfo, "challengeList":self.challengeList,
                 "worshipDouble":self.worshipDouble
@@ -206,11 +214,13 @@
         self.lv = 0
         self.fightPower = 0
         self.realmLV = 0
+        self.face = 0
+        self.facePic = 0
         return
     
     def GetString(self):
         return {"zoneID":self.zoneID, "accID":self.accID, "playerID":self.playerID, "playerName":self.playerName,
-                "job":self.job, "lv":self.lv, "fightPower":self.fightPower, "realmLV":self.realmLV}
+                "job":self.job, "lv":self.lv, "fightPower":self.fightPower, "realmLV":self.realmLV, "face":self.face, "facePic":self.facePic}
     
     def SetAttr(self, attrDict):
         for k, v in attrDict.items():
@@ -342,6 +352,8 @@
         obj.lv = cacheDict.get("LV", obj.lv)
         obj.fightPower = cacheDict.get("FightPower", obj.fightPower)
         obj.realmLV = cacheDict.get("RealmLV", obj.realmLV)
+        obj.face = cacheDict.get("Face", obj.face)
+        obj.facePic = cacheDict.get("FacePic", obj.facePic)
         
     return
 
@@ -504,9 +516,8 @@
     for index in xrange(officialRecDataList.Count()):
         recData = officialRecDataList.At(index)
         lastDismissJuniorTime = recData.GetTime()
-        value1 = recData.GetValue1()
-        officialID = value1 / 10
-        zoneID = value1 % 10
+        officialID = recData.GetValue1()
+        zoneID = recData.GetValue5()
         playerID = recData.GetValue2()
         worshipValue = recData.GetValue3()
         worshipCount = worshipValue / 10
@@ -537,9 +548,8 @@
     GameWorld.Log("加载跨服排位官职挑战记录信息! %s" % challengeRecDataList.Count())
     for index in xrange(challengeRecDataList.Count()):
         recData = challengeRecDataList.At(index)
-        value1 = recData.GetValue1()
-        officialID = value1 / 10
-        zoneID = value1 % 10
+        officialID = recData.GetValue1()
+        zoneID = recData.GetValue2()
         strValue3 = recData.GetStrValue3()
         if not strValue3:
             continue
@@ -631,22 +641,23 @@
             offObj = offZoneMgr.GetOfficialObj(officialID)
             if not offObj:
                 continue
-            value1 = offObj.officialID * 10 + zoneID
             recData = officialRecDataList.AddRec()
             recData.SetTime(offObj.lastDismissJuniorTime)
-            recData.SetValue1(value1)
+            recData.SetValue1(officialID)
             recData.SetValue2(offObj.playerID)
             recData.SetValue3(offObj.worshipCount * 10 + offObj.worshipDouble)
             recData.SetValue4(offObj.rank)
+            recData.SetValue5(zoneID)
             strValue3 = "%s" % offObj.applyPlayerInfo.keys()
             strValue3 = strValue3.replace(" ", "")
             recData.SetStrValue3(strValue3)
             
-            #GameWorld.Log("        zoneID=%s,officialID=%s,playerID=%s,rank=%s,challengeCount=%s" 
-            #              % (zoneID, officialID, offObj.playerID, offObj.rank, len(offObj.challengeList)))
+            GameWorld.Log("        zoneID=%s,officialID=%s,playerID=%s,rank=%s,challengeCount=%s" 
+                          % (zoneID, officialID, offObj.playerID, offObj.rank, len(offObj.challengeList)))
             for challengeDict in offObj.challengeList:
                 challRecData = challengeRecDataList.AddRec()
-                challRecData.SetValue1(value1)
+                challRecData.SetValue1(officialID)
+                challRecData.SetValue2(zoneID)
                 strValue3 = str(challengeDict)
                 strValue3 = strValue3.replace(" ", "")
                 challRecData.SetStrValue3(strValue3)
@@ -758,11 +769,22 @@
         
     return
 
+def DoChampionshipOpen(curPlayer):
+    NotifyPlayerChampionshipInfo(curPlayer, GameWorld.GetGameWorld().GetTick())
+    return
+
 def OnPlayerLogin(curPlayer, tick):
     
     if GameWorld.IsCrossServer():
         return
     
+    if not PlayerControl.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_Championship):
+        return
+    
+    NotifyPlayerChampionshipInfo(curPlayer, tick)
+    return
+
+def NotifyPlayerChampionshipInfo(curPlayer, tick):
     playerID = curPlayer.GetPlayerID()
     champMgr = GetChampionshipMgr()
     pkZoneIDList = champMgr.GetChampPKZoneIDList()
@@ -1382,7 +1404,7 @@
             
             # 添加开启分线数据
             realMapID = mapID
-            copyMapObj = PlayerFB.CrossCopyMapInfo(zoneID, 0)
+            copyMapObj = PlayerFB.CrossCopyMapInfo(zoneID, ChConfig.Def_FBMapID_CrossChampionship, 0)
             copyMapObj.realMapID = realMapID
             copyMapObj.copyMapID = copyMapID
             key = (realMapID, copyMapID)
@@ -1934,11 +1956,21 @@
     champMgr = GetChampionshipMgr()
     champMgr.ClearOfficialZone() # 最终结算重置仙官信息,替换最新仙官
     
+    # 膜拜重置
+    worshipType = ShareDefine.Def_WorshipType_CrossChampionship
+    GameWorship.DelWorshipPlayer(worshipType)
+    
     pkZoneIDList = champMgr.GetChampPKZoneIDList()
     GameWorld.Log("pkZoneIDList=%s" % pkZoneIDList)
     
+    syncNewWorshipList = []
+    syncNewXiangongDict = {}
+    crossZoneName = GameWorld.GetCrossZoneName()
     for zoneID in pkZoneIDList:
         GameWorld.Log("=== 结算排位分区: zoneID=%s ===" % zoneID, zoneID)
+        zoneIpyData = IpyGameDataPY.GetIpyGameData("CrossZonePK", crossZoneName, zoneID)
+        serverIDRangeList = zoneIpyData.GetServerGroupIDList() if zoneIpyData else []
+        
         finalPlayerIDList = []
         pkZoneMgr = champMgr.GetChampPKZoneMgr(zoneID)
         if not pkZoneMgr:
@@ -1968,8 +2000,9 @@
             rankIpyData = IpyGameDataPY.GetIpyGameData("ChampionshipRank", rank)
             officialID = rankIpyData.GetMainOfficialID() if rankIpyData else 0
             rankAwardItemList = rankIpyData.GetRankAwardItemList() if rankIpyData else []
-            GameWorld.Log("    最终排名: zoneID=%s,rank=%s,playerID=%s,officialID=%s,rankAwardItemList=%s,accID=%s,fightPower=%s" 
-                          % (zoneID, rank, playerID, officialID, rankAwardItemList, accID, fightPower), zoneID)
+            xiangongID = rankIpyData.GetXiangongID() if rankIpyData else 0
+            GameWorld.Log("    最终排名: zoneID=%s,rank=%s,playerID=%s,officialID=%s,xiangongID=%s,rankAwardItemList=%s,accID=%s,fightPower=%s" 
+                          % (zoneID, rank, playerID, officialID, xiangongID, rankAwardItemList, accID, fightPower), zoneID)
             
             if officialID:
                 offObj = ChampionshipOfficial()
@@ -1980,9 +2013,13 @@
                 
                 offZoneMgr.officialInfo[officialID] = offObj
                 
+                
             # 名次奖励
             paramList = [rank]
             PlayerCompensation.SendMailByKey("CrossChampionshipPKRank", [playerID], rankAwardItemList, paramList, crossMail=True)
+            
+            GameXiangong.AddXiangongPlayer(xiangongID, playerID, serverIDRangeList, rank, syncNewXiangongDict)
+            GameWorship.AddWorshipPlayer(worshipType, rank, playerID, serverIDRangeList, syncNewWorshipList)
             
         # 处理4强竞猜发奖励
         guessType = 4
@@ -2022,6 +2059,10 @@
     
     serverGroupIDList = [] # 全服统一逻辑
     PlayerControl.WorldNotifyCross(serverGroupIDList, 0, "ChampionshipOver")
+    
+    # 通知新添加的膜拜
+    GameWorship.SendNewWorshipPlayer(syncNewWorshipList)
+    GameXiangong.SendNewXiangongPlayerToClientServer(syncNewXiangongDict)
     GameWorld.Log("===================================================================")
     return
 
@@ -2633,6 +2674,7 @@
         GameWorld.Log("挑战目标仙官玩家ID结果! zoneID=%s,mainOfficialID=%s,officialID=%s,fightPower=%s,tagFightPower=%s,tagPlayerID=%s,Ret=%s" 
                       % (zoneID, mainOfficialID, officialID, fightPower, tagFightPower, tagPlayerID, Ret), playerID)
         
+    syncOfficialIDList = [officialID]
     playerName = PropData.get("Name", str(playerID))
     # 暂时只记录挑战胜利的
     if Ret == 1:
@@ -2651,13 +2693,22 @@
         officialObj.ResetPlayer()
         officialObj.playerID = playerID
         
+        # 移除该玩家的其他仙官申请
+        for offID in offZoneMgr.officialInfo.keys():
+            offObj = offZoneMgr.GetOfficialObj(offID)
+            if not offObj:
+                continue
+            if playerID in offObj.applyPlayerInfo:
+                offObj.applyPlayerInfo.pop(playerID)
+                syncOfficialIDList.append(offID)
+                
         # 邮件通知对方,官职被挑战了
         if offPlayerID:
             PlayerCompensation.SendMailByKey("CrossChampionshipOfficialBeChallenge", [offPlayerID], [], [playerName, officialID], crossMail=True)
             
     exData = {"exDataType":"OfficialChallenge", "playerID":playerID, "tagPlayerName":officialObj.playerName,
               "mainOfficialID":mainOfficialID, "officialID":officialID, "Ret":Ret}
-    Send_CrossServerMsg_ChampionshipOfficial(zoneID, [officialID], exData=exData)
+    Send_CrossServerMsg_ChampionshipOfficial(zoneID, syncOfficialIDList, exData=exData)
     return
 
 #// C0 23 跨服排位仙官挑战记录查询 #tagCGChampionshipOfficialChallengeQuery
@@ -2853,11 +2904,13 @@
 def Sync_ChampionshipPKZoneGroupInfo(zoneID, groupMarkDict=None, curPlayer=None):
     ## 同步排位分区分组信息
     # @param groupMarkDict: {groupMark:[battleNum, ...], ...}
-        
+    
     champMgr = GetChampionshipMgr()
     if curPlayer:
         playerZoneID = champMgr.GetPlayerPKZoneID(curPlayer.GetPlayerID())
         if playerZoneID != zoneID:
+            return
+        if not PlayerControl.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_Championship):
             return
         
     pkZoneMgr = champMgr.GetChampPKZoneMgr(zoneID)
@@ -2918,6 +2971,8 @@
         playerPack.FightPower = batPlayer.fightPower % ShareDefine.Def_PerPointValue
         playerPack.FightPowerEx = batPlayer.fightPower / ShareDefine.Def_PerPointValue
         playerPack.RealmLV = batPlayer.realmLV
+        playerPack.Face = batPlayer.face
+        playerPack.FacePic = batPlayer.facePic
         clientPack.PlayerList.append(playerPack)
     clientPack.PlayerCount = len(clientPack.PlayerList)
     
@@ -2932,6 +2987,8 @@
             playerZoneID = champMgr.GetPlayerPKZoneID(curPlayer.GetPlayerID())
             if playerZoneID != zoneID:
                 continue
+            if not PlayerControl.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_Championship):
+                continue
             NetPackCommon.SendFakePack(curPlayer, clientPack)
             
     return
@@ -2944,6 +3001,8 @@
     champMgr = GetChampionshipMgr()
     playerZoneID = champMgr.GetPlayerPKZoneID(playerID)
     if not playerZoneID:
+        return
+    if not PlayerControl.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_Championship):
         return
     
     pkZoneMgr = champMgr.GetChampPKZoneMgr(playerZoneID)
@@ -2990,6 +3049,8 @@
         playerZoneID = champMgr.GetPlayerPKZoneID(curPlayer.GetPlayerID())
         if playerZoneID != zoneID:
             return
+        if not PlayerControl.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_Championship):
+            return
         
     pkZoneMgr = champMgr.GetChampPKZoneMgr(zoneID)
     if not pkZoneMgr:
@@ -3033,6 +3094,8 @@
             playerZoneID = champMgr.GetPlayerPKZoneID(curPlayer.GetPlayerID())
             if playerZoneID != zoneID:
                 continue
+            if not PlayerControl.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_Championship):
+                continue
             NetPackCommon.SendFakePack(curPlayer, clientPack)
     return
 
@@ -3044,6 +3107,8 @@
     if curPlayer:
         playerZoneID = champMgr.GetPlayerOfficialZoneID(curPlayer.GetPlayerID())
         if playerZoneID != zoneID:
+            return
+        if not PlayerControl.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_Championship):
             return
         
     clientPack = ChPyNetSendPack.tagGCChampionshipOfficialInfo()
@@ -3067,6 +3132,8 @@
         offPlayer.FightPower = offObj.fightPower % ShareDefine.Def_PerPointValue
         offPlayer.FightPowerEx = offObj.fightPower / ShareDefine.Def_PerPointValue
         offPlayer.RealmLV = offObj.realmLV
+        offPlayer.Face = offObj.face
+        offPlayer.FacePic = offObj.facePic
         
         offPack = ChPyNetSendPack.tagGCChampionshipOfficial()
         offPack.OfficialID = officialID
@@ -3086,6 +3153,8 @@
             applyPlayer.FightPower = fightPower % ShareDefine.Def_PerPointValue
             applyPlayer.FightPowerEx = fightPower / ShareDefine.Def_PerPointValue
             applyPlayer.RealmLV = playerInfo.get("RealmLV", 1)
+            applyPlayer.Face = playerInfo.get("Face", 0)
+            applyPlayer.FacePic = playerInfo.get("FacePic", 0)
             
             offPack.ApplyPlayerList.append(applyPlayer)
         offPack.ApplyPlayerCount = len(offPack.ApplyPlayerList)
@@ -3104,6 +3173,8 @@
             playerZoneID = champMgr.GetPlayerOfficialZoneID(curPlayer.GetPlayerID())
             if playerZoneID != zoneID:
                 continue
+            if not PlayerControl.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_Championship):
+                continue
             NetPackCommon.SendFakePack(curPlayer, clientPack)
             
     return

--
Gitblit v1.8.0