ServerPython/CoreServerGroup/GameServer/Script/PyDataManager.py
@@ -14,7 +14,10 @@
import GameWorld
import PlayerSocial
import CrossBillboard
import CrossFamilyGCZ
import PlayerFamilyStore
import PlayerCompensation
import PlayerBourse
import GameWorldBoss
import PlayerSealDemon
@@ -24,13 +27,27 @@
import CrossRealmPK
import AuctionHouse
import PlayerAssist
import GameRecData
import PlayerRecData
import PlayerViewCache
import GameWorldMineArea
import PyGameDataStruct
import PlayerPackData
import PlayerFuncTeam
import IpyGameDataPY
import PlayerCharm
import PlayerLove
import CommFunc
import time
def GetSavePyData():
    #存储数据前,一些功能业务数据先转化为存档数据
    CrossFamilyGCZ.OnSavePyData()
    pyGameDataMgr = GetPyGameDataManager()
    result = pyGameDataMgr.GetSaveData()
    GameWorld.DebugLog("GetSavePyData!! id = %s-%s"%(id(pyGameDataMgr), len(result)))
    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,但是可以正常保存,错误会在下次调用便宜接口才会触发
@@ -41,7 +58,12 @@
def LoadPyGameData(gameBuffer, pos):
    pyGameDataMgr = GetPyGameDataManager()
    GameWorld.Log("LoadPyGameData!!id = %s %s"%(id(pyGameDataMgr), len(gameBuffer)))
    return pyGameDataMgr.LoadGameData(gameBuffer, pos)
    pos = pyGameDataMgr.LoadGameData(gameBuffer, pos)
    #加载数据后,一些功能转化为功能业务数据
    CrossFamilyGCZ.OnLoadPyData()
    return pos
#协助感谢表
class PlayerAssistThanksPyManager(object):
@@ -54,6 +76,7 @@
    
    # 保存数据 存数据库和realtimebackup
    def GetSaveData(self):
        PlayerAssist.RemoveOutofdateAssistThanks()
        savaData = ""
        cntData = ""
        cnt = 0
@@ -63,7 +86,7 @@
            PlayerAssist.OnSaveAssistThanksData(dbData)
            savaData += dbData.getBuffer()
            
        GameWorld.Log("Save DBAssistThanks count :%s" % cnt)
        GameWorld.Log("Save DBAssistThanks count :%s len=%s" % (cnt, len(savaData)))
        return CommFunc.WriteDWORD(cntData, cnt) + savaData
    
    # 从数据库载入数据
@@ -84,9 +107,8 @@
    
    def __init__(self):
        self.allAssistDict = {} # 所有协助 {GUID:tagDBAssist, ...}
        self.familyAssistDict = {} # 仙盟协助缓存 {familyID:[tagDBAssist, ...], ...}
        
        self.playerNoSaveDBAssistDict = {} # 玩家发布的不存库协助 {playerID:[tagDBAssist, ...], ...}
        self.playerAssistDict = {} # 玩家发布的协助 {playerID:[tagDBAssist, ...], ...}
        self.playerAssistingDict = {} # 玩家正在协助中的协助,只能存在一条 {playerID:tagDBAssist, ...}
        return
    
@@ -102,7 +124,7 @@
            cnt += 1
            savaData += dbData.getBuffer()
            
        GameWorld.Log("Save DBAssist count :%s" % cnt)
        GameWorld.Log("Save DBAssist count :%s len=%s" % (cnt, len(savaData)))
        return CommFunc.WriteDWORD(cntData, cnt) + savaData
    
    # 从数据库载入数据
@@ -118,45 +140,11 @@
            PlayerAssist.OnInitAssistData(dbData, 1)
            
            self.allAssistDict[dbData.GUID] = dbData
            familyID = dbData.FamilyID
            if familyID not in self.familyAssistDict:
                self.familyAssistDict[familyID] = []
            familyAssistList = self.familyAssistDict[familyID]
            familyAssistList.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" % cnt)
        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
            PlayerID = dbData.PlayerID
            if PlayerID not in self.playerAssistDict:
                self.playerAssistDict[PlayerID] = []
            playerAssistList = self.playerAssistDict[PlayerID]
            playerAssistList.append(dbData)
            
        return pos
    
@@ -175,13 +163,21 @@
        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" % cnt)
        GameWorld.Log("Save AuctionRecord count :%s len=%s unSaveCnt=%s" % (cnt, len(savaData), unSaveCnt))
        return CommFunc.WriteDWORD(cntData, cnt) + savaData
    
    # 从数据库载入数据
@@ -215,7 +211,7 @@
            cnt += 1
            savaData += dbData.getBuffer()
            
        GameWorld.Log("Save AuctionAttention count :%s" % cnt)
        GameWorld.Log("Save AuctionAttention count :%s len=%s" % (cnt, len(savaData)))
        return CommFunc.WriteDWORD(cntData, cnt) + savaData
    
    # 从数据库载入数据
@@ -271,7 +267,7 @@
            cnt += 1
            savaData += dbData.getBuffer()
            
        GameWorld.Log("Save AuctionItem count :%s" % cnt)
        GameWorld.Log("Save AuctionItem count :%s len=%s" % (cnt, len(savaData)))
        return CommFunc.WriteDWORD(cntData, cnt) + savaData
    
    # 从数据库载入数据
@@ -295,9 +291,23 @@
class PyGameDataManager(object):
    def __init__(self):
        self.DBPlayerPackDataManager = PlayerPackData.DBPlayerPackDataManager() # 该表GameServer只做内存处理,不从db取,也不发db入库,由db自行处理
        self.DBGameRecDataManager = GameRecData.DBGameRecDataManager()
        self.DBPyFuncTeamManager = PlayerFuncTeam.DBPyFuncTeamManager()
        self.DBPyFuncTeamMemManager = PlayerFuncTeam.DBPyFuncTeamMemManager()
        self.DBPlayerRecDataManager = PlayerRecData.DBPlayerRecDataManager()
        self.DBPyMineAreaAwardManager = GameWorldMineArea.DBPyMineAreaAwardManager()
        self.DBPyMineAreaRecordManager = GameWorldMineArea.DBPyMineAreaRecordManager()
        self.DBPyMineAreaItemManager = GameWorldMineArea.DBPyMineAreaItemManager()
        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.PlayerViewCachePyManager = PlayerViewCache.PlayerViewCachePyManager()
        self.AuctionAttentionManager = AuctionAttentionManager()
        self.AuctionRecordManager = AuctionRecordManager()
        self.AuctionItemManager = AuctionItemManager()
@@ -318,6 +328,19 @@
    def GetSaveData(self):
        buff = ""
        buff += self.DBGameRecDataManager.GetSaveData()
        buff += self.DBPyFuncTeamManager.GetSaveData()
        buff += self.DBPyFuncTeamMemManager.GetSaveData()
        buff += self.DBPlayerRecDataManager.GetSaveData()
        buff += self.DBPyMineAreaAwardManager.GetSaveData()
        buff += self.DBPyMineAreaRecordManager.GetSaveData()
        buff += self.DBPyMineAreaItemManager.GetSaveData()
        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()
@@ -340,6 +363,19 @@
        return buff
    
    def LoadGameData(self, gameBuffer, pos):
        pos = self.DBGameRecDataManager.LoadPyGameData(gameBuffer, pos, len(gameBuffer))
        pos = self.DBPyFuncTeamManager.LoadPyGameData(gameBuffer, pos, len(gameBuffer))
        pos = self.DBPyFuncTeamMemManager.LoadPyGameData(gameBuffer, pos, len(gameBuffer))
        pos = self.DBPlayerRecDataManager.LoadPyGameData(gameBuffer, pos, len(gameBuffer))
        pos = self.DBPyMineAreaAwardManager.LoadPyGameData(gameBuffer, pos, len(gameBuffer))
        pos = self.DBPyMineAreaRecordManager.LoadPyGameData(gameBuffer, pos, len(gameBuffer))
        pos = self.DBPyMineAreaItemManager.LoadPyGameData(gameBuffer, pos, len(gameBuffer))
        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))
@@ -368,6 +404,16 @@
        pyGameDataMgr = PyGameDataManager()
        PyGameData.g_pyGameDataManager = pyGameDataMgr
    return pyGameDataMgr
def GetCrossPersonalCompensationManager():
    # 跨服个人补偿邮件管理
    pyGameDataMgr = GetPyGameDataManager()
    return pyGameDataMgr.CrossPersonalCompensationManager
def GetCrossBillboardManager():
    # 跨服排行榜管理
    pyGameDataMgr = GetPyGameDataManager()
    return pyGameDataMgr.CrossBillboardManager
def GetPlayerAssistThanksPyManager():
    # 协助感谢表
@@ -439,6 +485,66 @@
    pyGameDataMgr = GetPyGameDataManager()
    return pyGameDataMgr.familyStoreItemManager
def GetDBGameRecDataManager():
    # 通用记录表新管理
    pyGameDataMgr = GetPyGameDataManager()
    return pyGameDataMgr.DBGameRecDataManager
def GetDBPlayerPackDataManager():
    # 玩家打包数据管理
    pyGameDataMgr = GetPyGameDataManager()
    return pyGameDataMgr.DBPlayerPackDataManager
def GetDBPyFuncTeamManager():
    # 功能队伍管理
    pyGameDataMgr = GetPyGameDataManager()
    return pyGameDataMgr.DBPyFuncTeamManager
#def GetDBPyFuncTeamMemManager():
#    # 功能队伍成员管理
#    pyGameDataMgr = GetPyGameDataManager()
#    return pyGameDataMgr.DBPyFuncTeamMemManager
def GetDBPlayerRecDataManager():
    # 玩家记录管理
    pyGameDataMgr = GetPyGameDataManager()
    return pyGameDataMgr.DBPlayerRecDataManager
def GetDBPyMineAreaAwardManager():
    # 福地奖励结算管理
    pyGameDataMgr = GetPyGameDataManager()
    return pyGameDataMgr.DBPyMineAreaAwardManager
def GetDBPyMineAreaRecordManager():
    # 福地矿物记录管理
    pyGameDataMgr = GetPyGameDataManager()
    return pyGameDataMgr.DBPyMineAreaRecordManager
def GetDBPyMineAreaItemManager():
    # 福地矿物管理
    pyGameDataMgr = GetPyGameDataManager()
    return pyGameDataMgr.DBPyMineAreaItemManager
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()