From b1e0ad47775be0a4eb065824d4cd1855f1a51b48 Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期四, 15 五月 2025 22:23:22 +0800
Subject: [PATCH] 0312 同步遗漏更新导致的问题,暂未同步以下内容

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/LogicProcess/UserCtrlDB.py |  182 ++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 177 insertions(+), 5 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/LogicProcess/UserCtrlDB.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/LogicProcess/UserCtrlDB.py
index a5b0d62..34d0053 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/LogicProcess/UserCtrlDB.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/LogicProcess/UserCtrlDB.py
@@ -44,6 +44,8 @@
 import DataRecordPack
 import GameWorld
 import CtrlDB
+import base64
+
 
 #-------------------------------------------------------------------------------
 
@@ -76,9 +78,11 @@
     port = DBConfig.IDDispatchServerPort
     addr = (host, port)
     BUF_SIZE = 1024
+    curVersion = ""
+    centerVersion = ""
     try:
         cfGameVer = ConfigParser.ConfigParser()
-        cfGameVer.read("GameVersion.ini")
+        cfGameVer.read(os.path.join(GlobalFunctions.getAppPath(), 'GameVersion.ini'))
         
         gameID = cfGameVer.get("config", "GameID")
         curVersion = cfGameVer.get("config", "Version")
@@ -109,7 +113,7 @@
     except:
         mylog.error("IDDispatch  CheckGameVersion Connect unknown Exception")
         
-    return
+    return curVersion, centerVersion
 
 import thread
 lockPlayerID = thread.allocate_lock()
@@ -390,6 +394,7 @@
         if not PyGameData.g_UserCtrlDBFirstInit:
             PyGameData.g_UserCtrlDBFirstInit = True
             self.__PlayerBackupSave()
+            CheckGameVersion()
 
             #后续也要增加公共数据保存如家族等,考虑保存失败可以直接关闭地图
 
@@ -413,9 +418,16 @@
             oFuncGrade.End()
         
         if requestType == CommonDefine.gstGeneralDBOper:
-            oFuncGrade = self.GetFuncGrade('gstMergeGeneralReturn')
+            oFuncGrade = self.GetFuncGrade('gstGeneralDBOper')
             oFuncGrade.Start()
             self.OnGeneralDBOper(db, pack)
+            oFuncGrade.End()
+            return True
+        
+        if requestType == CommonDefine.gstDBLogic:
+            oFuncGrade = self.GetFuncGrade('gstDBLogic')
+            oFuncGrade.Start()
+            self.OnGameServerToDBLogic(db, pack)
             oFuncGrade.End()
             return True
         
@@ -1021,7 +1033,131 @@
                 self.sendGameServerDBOperResult(pack.getSessionID(), result, resultSet, errorMsg)
             return
         mylog.warning('oper %s not support!'%oper)
+
+
+    def OnGameServerToDBLogic(self, db, pack):
+        buf = pack.getBuffer()
+        recvPack = RecvPackProtocol.tagGDGameServerToDBLogic()
+        pos = 0
+        recvPack.ReadData(buf, pos)
+        queryType = recvPack.QueryType
+        mylog.debug('pack = %s'%(recvPack.OutputString()))
         
+        if queryType == CommonDefine.gstDBLogic_PlayerPackDataReq:
+            #请求玩家打包数据
+            playerID = recvPack.ID
+            packData = self.getPlayerPackData(playerID) # 有直接取,没有的话再从db整合数据
+            if packData:
+                result = 1
+                mylog.debug("packData get from cache. playerID=%s" % playerID)
+            else:
+                result, playerData = self.GetPlayerDataByPlayerID(db, playerID)
+                mylog.debug("packData get from db. playerID=%s,result=%s" % (playerID, result))
+                if result:
+                    packData = base64.b64encode(playerData)
+                    self.updPlayerPackData(playerID, packData)
+            self.SendGameServerToDBLogicResult(pack.getSessionID(), result, recvPack, packData)
+            return
+        
+        if queryType == CommonDefine.gstDBLogic_PlayerPackDataUpd:
+            #更新玩家打包数据,仅子服用,不需要回复GameServer
+            playerID = recvPack.ID
+            packData = recvPack.Data
+            self.updPlayerPackData(playerID, packData)
+            return
+            
+        if queryType == CommonDefine.gstDBLogic_GMCmd:
+            dbAnswerList = GMShell.DBGMCommand(recvPack.Data)
+            self.SendGameServerToDBLogicResult(pack.getSessionID(), 1, recvPack, str(dbAnswerList))
+            return
+        
+        return
+    
+    def SendGameServerToDBLogicResult(self, sessionID, result, recvPack, resultSet):
+        '''回复GameServer发送的SendDBLogic,可以不回复,由具体类型决定
+        @param result: 结果:1成功,0失败
+        @param recvPack: GameServer发来的数据包,Data可原值返回,也可修改后返回,由具体类型决定
+        @param resultSet: 回复数据
+        '''
+        sendPack = SendPackProtocol.tagDGGameServerToDBLogicResult()
+        sendPack.Type = CommonDefine.dgDBGameServerToDBLogicResult
+        sendPack.Result = result
+        sendPack.ID = recvPack.ID
+        sendPack.QueryType = recvPack.QueryType
+        sendPack.Data = recvPack.Data
+        sendPack.DataLen = len(sendPack.Data)
+        sendPack.ResultSet = resultSet
+        sendPack.ResultSetLen = len(sendPack.ResultSet)
+        self.packSend(sessionID, 0, 0, CommonDefine.atInner, MMORPGPack.stGame,
+                      MMORPGPack.stData, sendPack.GetBuffer())
+        
+        mylog.debug("回复 SendGameServerToDBLogicResult")
+        return
+    
+    def GetPlayerDataByPlayerID(self, db, playerID):
+        dbPlayer = DataServerPlayerData.tagDBPlayer()
+        dbPlayer.PlayerID = playerID
+        collection = db[UCN_DBPlayer]
+        loadOK = dbPlayer.adoLoadCEx(collection, {'PlayerID':playerID})
+        if not loadOK:
+            mylog.warning('GetPlayerDataByPlayerID  Exception playerID = %s'%(dbPlayer.PlayerID))
+            return 0, ''
+        
+        #测试
+        mylog.info("accid = %s"%(dbPlayer.AccID))
+        
+        #读取物品等其他数据
+        queryDict = {'PlayerID':dbPlayer.PlayerID}
+        collection = db[UCN_RoleItem]
+        itemData = self.readPlayerPackSaveData(collection, queryDict, DataServerPlayerData.tagRoleItem, True)
+   
+        collection = db[UCN_RoleMission]
+        missionData = self.readPlayerPackSaveData(collection, queryDict, DataServerPlayerData.tagRoleMission)
+
+        collection = db[UCN_RoleMissionDict]
+        roleMissionDictData = self.readPlayerPackSaveData(collection, queryDict, DataServerPlayerData.tagRoleMissionDict)
+
+        collection = db[UCN_RoleSkill]
+        roleSkillData = self.readPlayerPackSaveData(collection, queryDict, DataServerPlayerData.tagRoleSkill)
+            
+        collection = db[UCN_RoleBuff]
+        roleBuffData = self.readPlayerPackSaveData(collection, queryDict, DataServerPlayerData.tagRoleBuff)
+           
+        collection = db[UCN_RoleRepeatTime]
+        roleRepeatTimeData = self.readPlayerPackSaveData(collection, queryDict, DataServerPlayerData.tagRoleRepeatTime)
+         
+        collection = db[UCN_PlayerHorseTable]
+        roleHorseData = self.readPlayerPackSaveData(collection, queryDict, DataServerPlayerData.tagPlayerHorseTable)
+            
+        collection = db[UCN_GMOper]
+        gmOperData = self.readPlayerPackSaveData(collection, queryDict, DataServerPlayerData.tagGMOper)
+         
+        collection = db[UCN_RolePet]
+        rolePetData = self.readPlayerPackSaveData(collection, queryDict, DataServerPlayerData.tagRolePet)
+            
+        collection = db[UCN_PetSkill]
+        petSkillData = self.readPlayerPackSaveData(collection, queryDict, DataServerPlayerData.tagPetSkill)
+            
+        collection = db[UCN_RoleNomalDict]
+        roleNormalDictData = self.readPlayerPackSaveData(collection, queryDict, DataServerPlayerData.tagRoleNomalDict)
+          
+        collection = db[UCN_PlayerDienstgrad]
+        roleDienstgradData = self.readPlayerPackSaveData(collection, queryDict, DataServerPlayerData.tagPlayerDienstgrad)
+        
+        collection = db[UCN_BattleFormation]
+        battleFormationData = self.readPlayerPackSaveData(collection, queryDict, DataServerPlayerData.tagBattleFormation)
+        
+        #读取禁止IP数据
+        gmIP = DataServerPlayerData.tagDBGMIP()
+        gmIP.AccID = dbPlayer.AccID.lower()
+        collection = db[UCN_DBGMIP]
+        gmIPData = gmIP.adoQueryIndex(collection)
+        
+        return 1, dbPlayer.getBuffer() + itemData + missionData + roleMissionDictData + roleSkillData + roleBuffData + roleRepeatTimeData + roleHorseData + gmOperData\
+                     + gmIPData + rolePetData + petSkillData + roleNormalDictData + roleDienstgradData+battleFormationData
+        
+
+
     # 查询返回0/1 代表是否成功
     def OnMergeQueryRegisterResult(self, db, pack): 
         g_mergeRegisterPlayerDict = PyGameData.g_mergeRegisterPlayerDict
@@ -1737,7 +1873,7 @@
             return (False, playerRec.PlayerID, '')
         oFuncGrade.End()
         #记录下线日志流向
-        if playerRec.FacePic == 0:  # 约定为下线标识
+        if playerRec.CountryLastWeekHornor == 0:  # 约定为下线标识
             self.recPlayerLogoff(playerRec)
         #保存物品等其他数据
         #不再支持单表模式
@@ -3176,7 +3312,7 @@
             if len(infoList) > 3:
                 accountRec.DeviceFlag = md5.md5(infoList[1]).hexdigest()
                 # 倒数第二个元素为客户端版本号 仙宝奇缘新定义
-                accountRec.ClientVersion = infoList[-2]
+                accountRec.SetClientVersion(infoList[-2])
                 
         PegasusCollectorProxy.EventReport(9001, "OperatorID=%s&Step=%s&AccountID=%s&Flag=1000&DeviceFlag=%s"%(
                               accountRec.AppID, 1, CommFunc.GetPlatformAccID(authAccID), accountRec.DeviceFlag))
@@ -3286,6 +3422,32 @@
     def onGetGameServerPlayerData(self, db, pack):
         data = ''
         
+        #玩家打包数据表较大,不同步GameServer,由db自己管理
+        #collection = db[UCN_DBPlayerPackData]
+        #DBPlayerPackData = DataServerPlayerData.tagDBPlayerPackData()
+        #data += DBPlayerPackData.adoQueryAll(collection)
+        #mylog.debug("tagDBPlayerPackData ok")
+        
+        collection = db[UCN_DBGameRec]
+        DBGameRec = DataServerPlayerData.tagDBGameRec()
+        data += DBGameRec.adoQueryAll(collection)
+        mylog.debug("tagDBGameRec ok")
+        
+        collection = db[UCN_DBPyFuncTeam]
+        DBPyFuncTeam = DataServerPlayerData.tagDBPyFuncTeam()
+        data += DBPyFuncTeam.adoQueryAll(collection)
+        mylog.debug("tagDBPyFuncTeam ok")
+        
+        collection = db[UCN_DBPyFuncTeamMem]
+        DBPyFuncTeamMem = DataServerPlayerData.tagDBPyFuncTeamMem()
+        data += DBPyFuncTeamMem.adoQueryAll(collection)
+        mylog.debug("tagDBPyFuncTeamMem ok")
+        
+        collection = db[UCN_DBPlayerRecData]
+        DBPlayerRecData = DataServerPlayerData.tagDBPlayerRecData()
+        data += DBPlayerRecData.adoQueryAll(collection)
+        mylog.debug("tagDBPlayerRecData ok")
+
         collection = db[UCN_DBPyMineAreaAward]
         DBPyMineAreaAward = DataServerPlayerData.tagDBPyMineAreaAward()
         data += DBPyMineAreaAward.adoQueryAll(collection)
@@ -3696,6 +3858,11 @@
                     #mylog.debug("GameData = %s"%b2a_hex(decompressGameData))
                     gameDataReadPos = 0
                     try:
+                        #gameDataReadPos = self.savegameServerWorldData(decompressGameData, gameDataReadPos, UCN_DBPlayerPackData, DataServerPlayerData.tagDBPlayerPackData, db)
+                        gameDataReadPos = self.savegameServerWorldData(decompressGameData, gameDataReadPos, UCN_DBGameRec, DataServerPlayerData.tagDBGameRec, db)
+                        gameDataReadPos = self.savegameServerWorldData(decompressGameData, gameDataReadPos, UCN_DBPyFuncTeam, DataServerPlayerData.tagDBPyFuncTeam, db)
+                        gameDataReadPos = self.savegameServerWorldData(decompressGameData, gameDataReadPos, UCN_DBPyFuncTeamMem, DataServerPlayerData.tagDBPyFuncTeamMem, db)
+                        gameDataReadPos = self.savegameServerWorldData(decompressGameData, gameDataReadPos, UCN_DBPlayerRecData, DataServerPlayerData.tagDBPlayerRecData, db)
                         gameDataReadPos = self.savegameServerWorldData(decompressGameData, gameDataReadPos, UCN_DBPyMineAreaAward, DataServerPlayerData.tagDBPyMineAreaAward, db)
                         gameDataReadPos = self.savegameServerWorldData(decompressGameData, gameDataReadPos, UCN_DBPyMineAreaRecord, DataServerPlayerData.tagDBPyMineAreaRecord, db)
                         gameDataReadPos = self.savegameServerWorldData(decompressGameData, gameDataReadPos, UCN_DBPyMineAreaItem, DataServerPlayerData.tagDBPyMineAreaItem, db)
@@ -3827,6 +3994,11 @@
                     #mylog.debug("GameData = %s"%b2a_hex(decompressGameData))
                     gameDataReadPos = 0
                     try:
+                        #gameDataReadPos = self.savegameServerWorldData(decompressGameData, gameDataReadPos, UCN_DBPlayerPackData, DataServerPlayerData.tagDBPlayerPackData, db)
+                        gameDataReadPos = self.savegameServerWorldData(decompressGameData, gameDataReadPos, UCN_DBGameRec, DataServerPlayerData.tagDBGameRec, db)
+                        gameDataReadPos = self.savegameServerWorldData(decompressGameData, gameDataReadPos, UCN_DBPyFuncTeam, DataServerPlayerData.tagDBPyFuncTeam, db)
+                        gameDataReadPos = self.savegameServerWorldData(decompressGameData, gameDataReadPos, UCN_DBPyFuncTeamMem, DataServerPlayerData.tagDBPyFuncTeamMem, db)
+                        gameDataReadPos = self.savegameServerWorldData(decompressGameData, gameDataReadPos, UCN_DBPlayerRecData, DataServerPlayerData.tagDBPlayerRecData, db)
                         gameDataReadPos = self.savegameServerWorldData(decompressGameData, gameDataReadPos, UCN_DBPyMineAreaAward, DataServerPlayerData.tagDBPyMineAreaAward, db)
                         gameDataReadPos = self.savegameServerWorldData(decompressGameData, gameDataReadPos, UCN_DBPyMineAreaRecord, DataServerPlayerData.tagDBPyMineAreaRecord, db)
                         gameDataReadPos = self.savegameServerWorldData(decompressGameData, gameDataReadPos, UCN_DBPyMineAreaItem, DataServerPlayerData.tagDBPyMineAreaItem, db)

--
Gitblit v1.8.0