| #!/usr/bin/python  | 
| # -*- coding: GBK -*-  | 
| #  | 
| ##@package E:/GameSVN/U3DGame/ProjectSServer/ServerPython/CoreServerGroup/GameServer/Script/PyDataManager.py  | 
| # @todo:   | 
| #  | 
| # @author: Alee  | 
| # @date 2017-8-21 ÏÂÎç02:06:00  | 
| # @version 1.0  | 
| #  | 
| # @note: pyÊý¾Ý±£´æuser¿â£¬ÏÈÔÚRegistPySaveDataÖÐ×¢²á£¬±£´æÊ±µ÷ÓöÔÓ¦º¯Êý£¬mongo½ÓÊÕ´¦Àí  | 
| #  | 
| #---------------------------------------------------------------------  | 
|   | 
| import GameWorld  | 
| import PlayerSocial  | 
| import CrossBillboard  | 
| import PlayerFamilyStore  | 
| import PlayerCompensation  | 
| import PlayerBourse  | 
| import GameWorldBoss  | 
| import PlayerSealDemon  | 
| import PlayerXMZZ  | 
| import binascii  | 
| import PyGameData  | 
| import CrossRealmPK  | 
| import AuctionHouse  | 
| import PlayerAssist  | 
| import PyGameDataStruct  | 
| import IpyGameDataPY  | 
| import PlayerCharm  | 
| import PlayerLove  | 
| import CommFunc  | 
| import time  | 
|   | 
| def GetSavePyData():  | 
|     pyGameDataMgr = GetPyGameDataManager()  | 
|     result = pyGameDataMgr.GetSaveData()  | 
|     GameWorld.Log("GetSavePyData!! id = %s-%s"%(id(pyGameDataMgr), len(result)))  | 
|     result = binascii.b2a_hex(result)  | 
|     #GameWorld.DebugLog("GetSavePyData!! result = %s-%s"%(result, len(result)))  | 
|     # ×Ö½ÚÂëÔÚC++ת»¯»á·¢Éú´íÎómust be string without null bytes, not str£¬µ«ÊÇ¿ÉÒÔÕý³£±£´æ£¬´íÎó»áÔÚÏ´ε÷ÓñãÒ˽ӿڲŻᴥ·¢  | 
|     # ÔÝʱ¸Ä³É×Ö·û´®·µ»Ø£¬ÔÝÎÞ½â¾ö·½°¸  | 
|     return str(len(result)) + "|" + result  | 
|   | 
|   | 
| def LoadPyGameData(gameBuffer, pos):  | 
|     pyGameDataMgr = GetPyGameDataManager()  | 
|     GameWorld.Log("LoadPyGameData!!id = %s %s"%(id(pyGameDataMgr), len(gameBuffer)))  | 
|     return pyGameDataMgr.LoadGameData(gameBuffer, pos)  | 
|   | 
| #ÐÖú¸Ðл±í  | 
| class PlayerAssistThanksPyManager(object):  | 
|       | 
|     def __init__(self):  | 
|         self.allAssistThanksList = [] # ËùÓиÐл [tagDBAssistThanks, ...]  | 
|         self.playerThanksDict = {} # Íæ¼Òδ¸ÐлµÄ {playerID:[tagDBAssistThanks, ...], ...}  | 
|         self.assistPlayerThanksDict = {} # ÐÖúÍæ¼Òδ½ÓÊܸÐлµÄÐÖú {assistPlayerID:[tagDBAssistThanks, ...], ...}  | 
|         return  | 
|       | 
|     # ±£´æÊý¾Ý ´æÊý¾Ý¿âºÍrealtimebackup  | 
|     def GetSaveData(self):  | 
|         PlayerAssist.RemoveOutofdateAssistThanks()  | 
|         savaData = ""  | 
|         cntData = ""  | 
|         cnt = 0  | 
|           | 
|         for dbData in self.allAssistThanksList:  | 
|             cnt += 1  | 
|             PlayerAssist.OnSaveAssistThanksData(dbData)  | 
|             savaData += dbData.getBuffer()  | 
|               | 
|         GameWorld.Log("Save DBAssistThanks count :%s len=%s" % (cnt, len(savaData)))  | 
|         return CommFunc.WriteDWORD(cntData, cnt) + savaData  | 
|       | 
|     # ´ÓÊý¾Ý¿âÔØÈëÊý¾Ý  | 
|     def LoadPyGameData(self, datas, pos, dataslen):  | 
|         cnt, pos = CommFunc.ReadDWORD(datas, pos)  | 
|         GameWorld.Log("Load DBAssistThanks count :%s" % cnt)  | 
|           | 
|         for _ in xrange(cnt):  | 
|             dbData = PyGameDataStruct.tagDBAssistThanks()  | 
|             dbData.clear()  | 
|             pos += dbData.readData(datas, pos, dataslen)  | 
|             PlayerAssist.OnInitAssistThanksData(self, dbData)  | 
|               | 
|         return pos  | 
|       | 
| #ÐÖú±í  | 
| class PlayerAssistPyManager(object):  | 
|       | 
|     def __init__(self):  | 
|         self.allAssistDict = {} # ËùÓÐÐÖú {GUID:tagDBAssist, ...}  | 
|           | 
|         self.playerAssistDict = {} # Íæ¼Ò·¢²¼µÄÐÖú {playerID:[tagDBAssist, ...], ...}  | 
|         self.playerAssistingDict = {} # Íæ¼ÒÕýÔÚÐÖúÖеÄÐÖú£¬Ö»ÄÜ´æÔÚÒ»Ìõ {playerID:tagDBAssist, ...}  | 
|         return  | 
|       | 
|     # ±£´æÊý¾Ý ´æÊý¾Ý¿âºÍrealtimebackup  | 
|     def GetSaveData(self):  | 
|         savaData = ""  | 
|         cntData = ""  | 
|         cnt = 0  | 
|           | 
|         for dbData in self.allAssistDict.values():  | 
|             if not dbData.IsSaveDB:  | 
|                 continue  | 
|             cnt += 1  | 
|             savaData += dbData.getBuffer()  | 
|               | 
|         GameWorld.Log("Save DBAssist count :%s len=%s" % (cnt, len(savaData)))  | 
|         return CommFunc.WriteDWORD(cntData, cnt) + savaData  | 
|       | 
|     # ´ÓÊý¾Ý¿âÔØÈëÊý¾Ý  | 
|     def LoadPyGameData(self, datas, pos, dataslen):  | 
|         cnt, pos = CommFunc.ReadDWORD(datas, pos)  | 
|         GameWorld.Log("Load DBAssist count :%s" % cnt)  | 
|           | 
|         for _ in xrange(cnt):  | 
|             dbData = PyGameDataStruct.tagDBAssist()  | 
|             dbData.clear()  | 
|             pos += dbData.readData(datas, pos, dataslen)  | 
|               | 
|             PlayerAssist.OnInitAssistData(dbData, 1)  | 
|               | 
|             self.allAssistDict[dbData.GUID] = dbData  | 
|             PlayerID = dbData.PlayerID  | 
|             if PlayerID not in self.playerAssistDict:  | 
|                 self.playerAssistDict[PlayerID] = []  | 
|             playerAssistList = self.playerAssistDict[PlayerID]  | 
|             playerAssistList.append(dbData)  | 
|               | 
|         return pos  | 
|       | 
| #Íæ¼Ò»º´æ¹ÜÀí£¬¸ÃÀàÖ»×öÊý¾Ý»º´æ´æÈ¡£¬²»Ð´¹¦ÄÜÂß¼£¬·ÀÖ¹ÖØ¶Á½Å±¾Ê±¹¦ÄÜÂß¼½Å±¾²»ÉúЧ  | 
| class PlayerViewCachePyManager(object):  | 
|       | 
|     def __init__(self):  | 
|         self.playerViewCachePyDict = {} # Íæ¼Ò»º´æ {playerID:tagPlayerViewCachePy, ...}  | 
|         return  | 
|       | 
|     # ±£´æÊý¾Ý ´æÊý¾Ý¿âºÍrealtimebackup  | 
|     def GetSaveData(self):  | 
|         savaData = ""  | 
|         cntData = ""  | 
|         cnt = 0  | 
|           | 
|         for dbData in self.playerViewCachePyDict.values():  | 
|             cnt += 1  | 
|             savaData += dbData.getBuffer()  | 
|               | 
|         GameWorld.Log("Save PlayerViewCachePy count :%s len=%s" % (cnt, len(savaData)))  | 
|         return CommFunc.WriteDWORD(cntData, cnt) + savaData  | 
|       | 
|     # ´ÓÊý¾Ý¿âÔØÈëÊý¾Ý  | 
|     def LoadPyGameData(self, datas, pos, dataslen):  | 
|         cnt, pos = CommFunc.ReadDWORD(datas, pos)  | 
|         GameWorld.Log("Load PlayerViewCachePy count :%s" % cnt)  | 
|           | 
|         for _ in xrange(cnt):  | 
|             dbData = PyGameDataStruct.tagPlayerViewCachePy()  | 
|             dbData.clear()  | 
|             pos += dbData.readData(datas, pos, dataslen)  | 
|               | 
|             self.playerViewCachePyDict[dbData.PlayerID] = dbData  | 
|               | 
|         return pos  | 
|       | 
| #ÅÄÂô¼Ç¼¹ÜÀí£¬¸ÃÀàÖ»×öÊý¾Ý»º´æ´æÈ¡£¬²»Ð´¹¦ÄÜÂß¼£¬·ÀÖ¹ÖØ¶Á½Å±¾Ê±¹¦ÄÜÂß¼½Å±¾²»ÉúЧ  | 
| class AuctionRecordManager(object):  | 
|       | 
|     def __init__(self):  | 
|         self.myAuctionItemRecordDict = {} # ÎÒµÄÅÄÆ·¼Ç¼ {playerID:[tagDBAuctionRecord, ...], ...}  | 
|         self.myBidItemRecordDict = {} # ÎҵľºÅļǼ {playerID:[tagDBAuctionRecord, ...], ...}  | 
|         self.familyAuctionItemRecordDict = {} # ÏÉÃËÅÄÆ·¼Ç¼ {familyID:[tagDBAuctionRecord, ...], ...}  | 
|         return  | 
|       | 
|     # ±£´æÊý¾Ý ´æÊý¾Ý¿âºÍrealtimebackup  | 
|     def GetSaveData(self):  | 
|         savaData = ""  | 
|         cntData = ""  | 
|         cnt = 0  | 
|           | 
|         unSaveCnt = 0  | 
|         curTime = int(time.time())  | 
|         vaildSeconds = IpyGameDataPY.GetFuncCfg("AuctionHouse", 1) * 3600 * 24  | 
|         for recordDict in [self.myAuctionItemRecordDict, self.myBidItemRecordDict, self.familyAuctionItemRecordDict]:  | 
|             for recordList in recordDict.values():  | 
|                 for dbData in recordList:  | 
|                     if vaildSeconds:  | 
|                         recordTime = GameWorld.ChangeTimeStrToNum(dbData.RecordTime)  | 
|                         if curTime - recordTime > vaildSeconds:  | 
|                             unSaveCnt += 1  | 
|                             continue  | 
|                     cnt += 1  | 
|                     savaData += dbData.getBuffer()  | 
|                       | 
|         GameWorld.Log("Save AuctionRecord count :%s len=%s unSaveCnt=%s" % (cnt, len(savaData), unSaveCnt))  | 
|         return CommFunc.WriteDWORD(cntData, cnt) + savaData  | 
|       | 
|     # ´ÓÊý¾Ý¿âÔØÈëÊý¾Ý  | 
|     def LoadPyGameData(self, datas, pos, dataslen):  | 
|         cnt, pos = CommFunc.ReadDWORD(datas, pos)  | 
|         GameWorld.Log("Load AuctionRecord count :%s" % cnt)  | 
|           | 
|         for _ in xrange(cnt):  | 
|             dbData = PyGameDataStruct.tagDBAuctionRecord()  | 
|             dbData.clear()  | 
|             pos += dbData.readData(datas, pos, dataslen)  | 
|               | 
|             AuctionHouse.AddNewAuctionRecord(dbData)  | 
|               | 
|         return pos  | 
|       | 
| #ÅÄÂô¹Ø×¢¹ÜÀí£¬¸ÃÀàÖ»×öÊý¾Ý»º´æ´æÈ¡£¬²»Ð´¹¦ÄÜÂß¼£¬·ÀÖ¹ÖØ¶Á½Å±¾Ê±¹¦ÄÜÂß¼½Å±¾²»ÉúЧ  | 
| class AuctionAttentionManager(object):  | 
|       | 
|     def __init__(self):  | 
|         self.playerAttentionDict = {} # Íæ¼Ò¹Ø×¢ÅÄÂôÆ·ID {playerID:tagDBAuctionAttention, ...}  | 
|         return  | 
|       | 
|     # ±£´æÊý¾Ý ´æÊý¾Ý¿âºÍrealtimebackup  | 
|     def GetSaveData(self):  | 
|         savaData = ""  | 
|         cntData = ""  | 
|         cnt = 0  | 
|           | 
|         for dbData in self.playerAttentionDict.values():  | 
|             cnt += 1  | 
|             savaData += dbData.getBuffer()  | 
|               | 
|         GameWorld.Log("Save AuctionAttention count :%s len=%s" % (cnt, len(savaData)))  | 
|         return CommFunc.WriteDWORD(cntData, cnt) + savaData  | 
|       | 
|     # ´ÓÊý¾Ý¿âÔØÈëÊý¾Ý  | 
|     def LoadPyGameData(self, datas, pos, dataslen):  | 
|         cnt, pos = CommFunc.ReadDWORD(datas, pos)  | 
|         GameWorld.Log("Load AuctionAttention count :%s" % cnt)  | 
|           | 
|         for _ in xrange(cnt):  | 
|             dbData = PyGameDataStruct.tagDBAuctionAttention()  | 
|             dbData.clear()  | 
|             pos += dbData.readData(datas, pos, dataslen)  | 
|               | 
|             self.playerAttentionDict[dbData.PlayerID] = dbData  | 
|             AuctionHouse.OnLoadAuctionAttentionDataEx(dbData)  | 
|               | 
|         return pos  | 
|       | 
|     def __InitAuctionAttentionAttrEx(self, attentionData):  | 
|         ## ³õʼ»¯ÅÄÂô¹Ø×¢ÊµÀý¸½¼ÓÊôÐÔ  | 
|         setattr(attentionData, "AttentionItemIDList", [])  | 
|         if attentionData.AttentionInfo.startswith("[") and attentionData.AttentionInfo.endswith("]"):  | 
|             attentionData.AttentionItemIDList = eval(attentionData.AttentionInfo)  | 
|         return  | 
|       | 
| #ÅÄÂôÎïÆ·Êý¾Ý»º´æ£¬¸ÃÀàÖ»×öÊý¾Ý»º´æ´æÈ¡£¬²»Ð´¹¦ÄÜÂß¼£¬·ÀÖ¹ÖØ¶Á½Å±¾Ê±¹¦ÄÜÂß¼½Å±¾²»ÉúЧ  | 
| class AuctionItemManager():  | 
|       | 
|     def __init__(self):  | 
|         self.allAuctionItemDict = {} # ËùÓÐÅÄÆ·×ֵ仺´æ {ItemGUID:tagDBAuctionItem, ...}  | 
|         self.allAuctionItemByEndTimeList = [] # ¸ù¾Ý½áÊøÊ±¼äÅÅÐòµÄËùÓÐÅÄÆ·»º´æ [tagDBAuctionItem, ...]  | 
|         self.worldAuctionItemList = [] # È«·þÅÄÆ·ÁÐ±í»º´æ [tagDBAuctionItem, ...]  | 
|         self.worldAuctionItemQueryDict = {} # È«·þÅÄÆ·¹ýÂ˲éѯ»º´æ£¬Ìí¼ÓÅÄÆ·Ê±ÖØÖà{(job, (itemType, ...), itemClassLV, (itemID, ...)):[tagDBAuctionItem, ...], ...}  | 
|         self.familyAuctionItemDict = {} # ÏÉÃËÅÄÆ·ÁÐ±í»º´æ£¬°üº¬×ªÒƵ½È«·þµÄÏÉÃËÅÄÆ· {familyID:[tagDBAuctionItem, ...], ...}  | 
|         self.sysBuyoutItemByTimeList = [] # ÏµÍ³Ò»¿Ú¼ÛÅÄÆ·°´Ê±¼äÅÅÐò»º´æ [tagDBAuctionItem, ...]  | 
|           | 
|         self.nowBiddingAuctionItemDict = {} # Íæ¼Òµ±Ç°ÊÇ×î¸ß¾º¼ÛµÄÅÄÆ·£¬º¬ËùÓÐÅÄÆ· {playerID:[tagDBAuctionItem, ...], ...}  | 
|         self.hisBiddingAuctionItemDict = {} # Íæ¼ÒÔø¾²ÎÓë¹ý¾º¼ÛµÄÅÄÆ·£¬º¬ËùÓÐÅÄÆ· {playerID:[tagDBAuctionItem, ...], ...}  | 
|         self.myAuctionItemDict = {} # Íæ¼ÒÅÄÂôÖеÄÎïÆ· £¬²»°üº¬ÏÉÃËÅÄÆ·£¬ÓÉǰ¶Ë½çÃæ×ÔÐÐÕûºÏÊý¾Ý {playerID:[tagDBAuctionItem, ...], ...}  | 
|         self.myAttentionItemDict = {} # Íæ¼Ò¹Ø×¢ÖеÄÎïÆ· £¬²»°üº¬ÏÉÃËÅÄÆ·£¬ÓÉǰ¶Ë½çÃæ×ÔÐÐÕûºÏÊý¾Ý£¬Ö»±£´æÔÚÏßµÄÍæ¼Ò£¬ÀëÏßÇå³ý£¬ÉÏÏß²»Í¬²½£¬ÓÉǰ¶Ë²éѯ {playerID:[tagDBAuctionItem, ...], ...}  | 
|           | 
|         self.worldAuctionItemCountDict = {} # È«·þÅÄÆ·ÎïÆ·ID¶ÔÓ¦¼þÊýͳ¼Æ {itemID:¼þÊý, ...}  | 
|         self.worldAuctionJobEquipCountDict = {} # È«·þÅÄÆ·Ö°Òµ×°±¸¶ÔÓ¦¼þÊýͳ¼Æ {(Ö°Òµ,½×,ÑÕÉ«,ÊÇ·ñÌ××°):¼þÊý, ...}  | 
|         self.worldAuctionReplenishTimeDict = {} # È«·þÅÄÆ·¶¯Ì¬ÉϼÜÀúÊ·´¦Àíʱ¼ä {cfgID:time, ...}  | 
|         return  | 
|       | 
|     # ±£´æÊý¾Ý ´æÊý¾Ý¿âºÍrealtimebackup  | 
|     def GetSaveData(self):  | 
|         savaData = ""  | 
|         cntData = ""  | 
|         cnt = 0  | 
|           | 
|         for dbData in self.allAuctionItemDict.values():  | 
|             cnt += 1  | 
|             savaData += dbData.getBuffer()  | 
|               | 
|         GameWorld.Log("Save AuctionItem count :%s len=%s" % (cnt, len(savaData)))  | 
|         return CommFunc.WriteDWORD(cntData, cnt) + savaData  | 
|       | 
|     # ´ÓÊý¾Ý¿âÔØÈëÊý¾Ý  | 
|     def LoadPyGameData(self, datas, pos, dataslen):  | 
|         cnt, pos = CommFunc.ReadDWORD(datas, pos)  | 
|         GameWorld.Log("Load AuctionItem count :%s" % cnt)  | 
|           | 
|         for _ in xrange(cnt):  | 
|             dbData = PyGameDataStruct.tagDBAuctionItem()  | 
|             dbData.clear()  | 
|             pos += dbData.readData(datas, pos, dataslen)  | 
|               | 
|             self.allAuctionItemDict[dbData.ItemGUID] = dbData  | 
|             AuctionHouse.OnLoadAuctionItemDataEx(dbData)  | 
|               | 
|         AuctionHouse.OnLoadAuctionItemDataOK()  | 
|         return pos  | 
|       | 
| # ¸öÈËÉç½»Ïà¹Ø±í  | 
| # ºÃÓÑ±í£¬³ðÈË±í£¬×î½üÁªÏµÈË£¬ºÚÃûµ¥£¬ËÄÕÅ±í¹«ÓõÄÉç½»ÐÅÏ¢±í  | 
|   | 
| class PyGameDataManager(object):  | 
|     def __init__(self):  | 
|         self.DBPyCoupleManager = PlayerLove.DBPyCoupleManager()  | 
|         self.DBPyUnNotifyLoveGiftRecManager = PlayerLove.DBPyUnNotifyLoveGiftRecManager()  | 
|         self.DBPyCharmValueRecManager = PlayerCharm.DBPyCharmValueRecManager()  | 
|         self.IntimacyManager = PlayerSocial.IntimacyManager()  | 
|         self.CrossPersonalCompensationManager = PlayerCompensation.CrossPersonalCompensationManager()  | 
|         self.CrossBillboardManager = CrossBillboard.CrossBillboardManager()  | 
|         self.PlayerAssistThanksPyManager = PlayerAssistThanksPyManager()  | 
|         self.PlayerAssistPyManager = PlayerAssistPyManager()  | 
|         self.PlayerViewCachePyManager = PlayerViewCachePyManager()  | 
|         self.AuctionAttentionManager = AuctionAttentionManager()  | 
|         self.AuctionRecordManager = AuctionRecordManager()  | 
|         self.AuctionItemManager = AuctionItemManager()  | 
|         self.crossPKUnNotifyOverInfo = CrossRealmPK.CrossPKUnNotifyOverInfoManager()  | 
|         self.crossPKBillboard = CrossRealmPK.CrossPKBillboardManager()  | 
|         self.XMZZManager = PlayerXMZZ.XMZZManager()  | 
|         self.sealDemonManager = PlayerSealDemon.SealDemonManager()  | 
|         self.bossAttentionManager = GameWorldBoss.BossAttentionManager()  | 
|         self.bourseItemLastPriceManager = PlayerBourse.BourseItemLastPriceManager()  | 
|         self.bourseRecordManager = PlayerBourse.BourseRecordManager()  | 
|         self.familyStoreItemManager = PlayerFamilyStore.FamilyStoreItemManager()  | 
|         self.friendManager = PlayerSocial.FriendManager()  | 
|         self.enemyManager = PlayerSocial.EnemyManager()  | 
|         self.contactsManager = PlayerSocial.ContactsManager()  | 
|         self.blacklistManager = PlayerSocial.BlacklistManager()  | 
|         self.socialInfoManager = PlayerSocial.SocialInfoManager()  | 
|         return  | 
|   | 
|     def GetSaveData(self):  | 
|         buff = ""  | 
|         buff += self.DBPyCoupleManager.GetSaveData()  | 
|         buff += self.DBPyUnNotifyLoveGiftRecManager.GetSaveData()  | 
|         buff += self.DBPyCharmValueRecManager.GetSaveData()  | 
|         buff += self.IntimacyManager.GetSaveData()  | 
|         buff += self.CrossPersonalCompensationManager.GetSaveData()  | 
|         buff += self.CrossBillboardManager.GetSaveData()  | 
|         buff += self.PlayerAssistThanksPyManager.GetSaveData()  | 
|         buff += self.PlayerAssistPyManager.GetSaveData()  | 
|         buff += self.PlayerViewCachePyManager.GetSaveData()  | 
|         buff += self.AuctionAttentionManager.GetSaveData()  | 
|         buff += self.AuctionRecordManager.GetSaveData()  | 
|         buff += self.AuctionItemManager.GetSaveData()  | 
|         buff += self.crossPKUnNotifyOverInfo.GetSaveData()  | 
|         buff += self.crossPKBillboard.GetSaveData()  | 
|         buff += self.XMZZManager.GetSaveData()  | 
|         buff += self.sealDemonManager.GetSaveData()  | 
|         buff += self.bossAttentionManager.GetSaveData()  | 
|         buff += self.bourseItemLastPriceManager.GetSaveData()  | 
|         buff += self.bourseRecordManager.GetSaveData()  | 
|         buff += self.familyStoreItemManager.GetSaveData()  | 
|         buff += self.friendManager.GetSaveData()  | 
|         buff += self.enemyManager.GetSaveData()  | 
|         buff += self.contactsManager.GetSaveData()  | 
|         buff += self.blacklistManager.GetSaveData()  | 
|         buff += self.socialInfoManager.GetSaveData()  | 
|         return buff  | 
|       | 
|     def LoadGameData(self, gameBuffer, pos):  | 
|         pos = self.DBPyCoupleManager.LoadPyGameData(gameBuffer, pos, len(gameBuffer))  | 
|         pos = self.DBPyUnNotifyLoveGiftRecManager.LoadPyGameData(gameBuffer, pos, len(gameBuffer))  | 
|         pos = self.DBPyCharmValueRecManager.LoadPyGameData(gameBuffer, pos, len(gameBuffer))  | 
|         pos = self.IntimacyManager.LoadPyGameData(gameBuffer, pos, len(gameBuffer))  | 
|         pos = self.CrossPersonalCompensationManager.LoadPyGameData(gameBuffer, pos, len(gameBuffer))  | 
|         pos = self.CrossBillboardManager.LoadPyGameData(gameBuffer, pos, len(gameBuffer))  | 
|         pos = self.PlayerAssistThanksPyManager.LoadPyGameData(gameBuffer, pos, len(gameBuffer))  | 
|         pos = self.PlayerAssistPyManager.LoadPyGameData(gameBuffer, pos, len(gameBuffer))  | 
|         pos = self.PlayerViewCachePyManager.LoadPyGameData(gameBuffer, pos, len(gameBuffer))  | 
|         pos = self.AuctionAttentionManager.LoadPyGameData(gameBuffer, pos, len(gameBuffer))  | 
|         pos = self.AuctionRecordManager.LoadPyGameData(gameBuffer, pos, len(gameBuffer))  | 
|         pos = self.AuctionItemManager.LoadPyGameData(gameBuffer, pos, len(gameBuffer))  | 
|         pos = self.crossPKUnNotifyOverInfo.LoadPyGameData(gameBuffer, pos, len(gameBuffer))  | 
|         pos = self.crossPKBillboard.LoadPyGameData(gameBuffer, pos, len(gameBuffer))  | 
|         pos = self.XMZZManager.LoadPyGameData(gameBuffer, pos, len(gameBuffer))  | 
|         pos = self.sealDemonManager.LoadPyGameData(gameBuffer, pos, len(gameBuffer))  | 
|         pos = self.bossAttentionManager.LoadPyGameData(gameBuffer, pos, len(gameBuffer))  | 
|         pos = self.bourseItemLastPriceManager.LoadPyGameData(gameBuffer, pos, len(gameBuffer))  | 
|         pos = self.bourseRecordManager.LoadPyGameData(gameBuffer, pos, len(gameBuffer))  | 
|         pos = self.familyStoreItemManager.LoadPyGameData(gameBuffer, pos, len(gameBuffer))  | 
|         pos = self.friendManager.LoadPyGameData(gameBuffer, pos, len(gameBuffer))  | 
|         pos = self.enemyManager.LoadPyGameData(gameBuffer, pos, len(gameBuffer))  | 
|         pos = self.contactsManager.LoadPyGameData(gameBuffer, pos, len(gameBuffer))  | 
|         pos = self.blacklistManager.LoadPyGameData(gameBuffer, pos, len(gameBuffer))  | 
|         pos = self.socialInfoManager.LoadPyGameData(gameBuffer, pos, len(gameBuffer))  | 
|         return pos  | 
|       | 
| def GetPyGameDataManager():  | 
|     ## pyÊý¾Ý¿â±íÊý¾Ý¹ÜÀíÆ÷  | 
|     pyGameDataMgr = PyGameData.g_pyGameDataManager  | 
|     if not pyGameDataMgr:  | 
|         pyGameDataMgr = PyGameDataManager()  | 
|         PyGameData.g_pyGameDataManager = pyGameDataMgr  | 
|     return pyGameDataMgr  | 
|   | 
| def GetCrossPersonalCompensationManager():  | 
|     # ¿ç·þ¸öÈ˲¹³¥Óʼþ¹ÜÀí  | 
|     pyGameDataMgr = GetPyGameDataManager()  | 
|     return pyGameDataMgr.CrossPersonalCompensationManager  | 
|   | 
| def GetCrossBillboardManager():  | 
|     # ¿ç·þÅÅÐаñ¹ÜÀí  | 
|     pyGameDataMgr = GetPyGameDataManager()  | 
|     return pyGameDataMgr.CrossBillboardManager  | 
|   | 
| def GetPlayerAssistThanksPyManager():  | 
|     # ÐÖú¸Ðл±í  | 
|     pyGameDataMgr = GetPyGameDataManager()  | 
|     return pyGameDataMgr.PlayerAssistThanksPyManager  | 
|   | 
| def GetPlayerAssistPyManager():  | 
|     # ÐÖú±í  | 
|     pyGameDataMgr = GetPyGameDataManager()  | 
|     return pyGameDataMgr.PlayerAssistPyManager  | 
|   | 
| def GetPlayerViewCachePyManager():  | 
|     # ÅÄÂô¼Ç¼±í  | 
|     pyGameDataMgr = GetPyGameDataManager()  | 
|     return pyGameDataMgr.PlayerViewCachePyManager  | 
|   | 
| def GetAuctionItemManager():  | 
|     ## ÅÄÂôÎïÆ·»º´æÊý¾Ý¹ÜÀí  | 
|     pyGameDataMgr = GetPyGameDataManager()  | 
|     return pyGameDataMgr.AuctionItemManager  | 
|   | 
| def GetAuctionAttentionManager():  | 
|     # ÅÄÂô¼Ç¼±í  | 
|     pyGameDataMgr = GetPyGameDataManager()  | 
|     return pyGameDataMgr.AuctionAttentionManager  | 
|   | 
| def GetAuctionRecordManager():  | 
|     # ÅÄÂô¼Ç¼±í  | 
|     pyGameDataMgr = GetPyGameDataManager()  | 
|     return pyGameDataMgr.AuctionRecordManager  | 
|   | 
| # ¿ç·þ¾º¼¼³¡Î´Í¨ÖªÍæ¼ÒµÄ±ÈÈü½á¹û  | 
| def GetCrossPKUnNotifyOverInfoManager():  | 
|     pyGameDataMgr = GetPyGameDataManager()  | 
|     return pyGameDataMgr.crossPKUnNotifyOverInfo  | 
|   | 
| # ¿ç·þ¾º¼¼³¡ÅÅÐаñ¹ÜÀí  | 
| def GetCrossPKBillboardManager():  | 
|     pyGameDataMgr = GetPyGameDataManager()  | 
|     return pyGameDataMgr.crossPKBillboard  | 
|   | 
| # ÏÉħ֮Õù¹ÜÀí  | 
| def GetXMZZManager():  | 
|     pyGameDataMgr = GetPyGameDataManager()  | 
|     return pyGameDataMgr.XMZZManager  | 
|   | 
| # ·âħ̳½á¹û¹ÜÀí  | 
| def GetSealDemonRecordManager():  | 
|     pyGameDataMgr = GetPyGameDataManager()  | 
|     return pyGameDataMgr.sealDemonManager  | 
|   | 
| # Boss¹Ø×¢¼Ç¼¹ÜÀí  | 
| def GetBossAttentionManager():  | 
|     pyGameDataMgr = GetPyGameDataManager()  | 
|     return pyGameDataMgr.bossAttentionManager  | 
|   | 
| # ½»Ò×ËùÎïÆ·×î½ü³É½»µ¥¼Û¹ÜÀí  | 
| def GetBourseItemLastPriceManager():  | 
|     pyGameDataMgr = GetPyGameDataManager()  | 
|     return pyGameDataMgr.bourseItemLastPriceManager  | 
|   | 
| # ½»Ò×Ëù¼Ç¼¹ÜÀí  | 
| def GetBourseRecordManager():  | 
|     pyGameDataMgr = GetPyGameDataManager()  | 
|     return pyGameDataMgr.bourseRecordManager  | 
|   | 
| # Õ½Ã˲ֿâÎïÆ·¹ÜÀí  | 
| def GetFamilyStoreItemManager():  | 
|     pyGameDataMgr = GetPyGameDataManager()  | 
|     return pyGameDataMgr.familyStoreItemManager  | 
|   | 
| def GetDBPyCoupleManager():  | 
|     # °é¹ÜÀí  | 
|     pyGameDataMgr = GetPyGameDataManager()  | 
|     return pyGameDataMgr.DBPyCoupleManager  | 
|   | 
| def GetDBPyUnNotifyLoveGiftRecManager():  | 
|     # Î´Í¨ÖªµÄÔùËÍÀñÎï¼Ç¼  | 
|     pyGameDataMgr = GetPyGameDataManager()  | 
|     return pyGameDataMgr.DBPyUnNotifyLoveGiftRecManager  | 
|   | 
| def GetDBPyCharmValueRecManager():  | 
|     # ÷ÈÁ¦¹ÜÀí  | 
|     pyGameDataMgr = GetPyGameDataManager()  | 
|     return pyGameDataMgr.DBPyCharmValueRecManager  | 
|   | 
| def GetIntimacyManager():  | 
|     # Ç×ÃܹÜÀí  | 
|     pyGameDataMgr = GetPyGameDataManager()  | 
|     return pyGameDataMgr.IntimacyManager  | 
|   | 
| # ºÃÓÑϵͳ  | 
| def GetFriendManager():  | 
|     pyGameDataMgr = GetPyGameDataManager()  | 
|     return pyGameDataMgr.friendManager  | 
|   | 
| # Éç½»ÐÅÏ¢¹ÜÀí  | 
| def GetPersonalSocialManager():  | 
|     pyGameDataMgr = GetPyGameDataManager()  | 
|     return pyGameDataMgr.socialInfoManager  | 
|   | 
| # ³ðÈËϵͳ  | 
| def GetEnemyManager():  | 
|     pyGameDataMgr = GetPyGameDataManager()  | 
|     return pyGameDataMgr.enemyManager  | 
|   | 
| # ×î½üÁªÏµÈËϵͳ  | 
| def GetContactsManager():  | 
|     pyGameDataMgr = GetPyGameDataManager()  | 
|     return pyGameDataMgr.contactsManager  | 
|   | 
| # ºÚÃûµ¥ÏµÍ³  | 
| def GetBlacklistManager():  | 
|     pyGameDataMgr = GetPyGameDataManager()  | 
|     return pyGameDataMgr.blacklistManager  |