ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameRecData.py
@@ -21,7 +21,6 @@
import CommFunc
import time
import json
class GameRecData():
    
@@ -59,7 +58,7 @@
    def SetValue7(self, value7): self.dbRecData.Value7 = value7
    def GetValue8(self): return self.dbRecData.Value8
    def SetValue8(self, value8): self.dbRecData.Value8 = value8
    def __GetUserDataDict(self):
    def GetUserDataDict(self):
        if self.__userDataDict == None:
            try:
                self.__userDataDict = eval(self.dbRecData.UserData)
@@ -67,22 +66,31 @@
                self.__userDataDict = {}
        return self.__userDataDict
    def GetUserDataByKey(self, key, defaultValue=None):
        userDataDict = self.__GetUserDataDict()
        return userDataDict.get(str(key), defaultValue)
        userDataDict = self.GetUserDataDict()
        if key in userDataDict:
            return userDataDict[key]
        return defaultValue
    def SetUserDataByKey(self, key, value):
        userDataDict = self.__GetUserDataDict()
        userDataDict[str(key)] = value
        userDataDict = self.GetUserDataDict()
        userDataDict[key] = value
        self.__userDataChange = True
        return
    def GetUserData(self):
        if self.__userDataChange:
            self.SaveUserData()
        return self.dbRecData.UserData
    def SaveUserData(self):
        userDataDict = self.__GetUserDataDict()
        self.dbRecData.UserData = json.dumps(userDataDict, ensure_ascii=False).replace(" ", "")
    def SetUserData(self, userData):
        ## 支持直接保存任意格式数据,或者按字典方式读取kv值
        if type(userData) != str:
            userData = str(userData)
        self.dbRecData.UserData = userData.replace(" ", "")
        self.dbRecData.UserDataLen = len(self.dbRecData.UserData)
        self.__userDataDict = None
        self.__userDataChange = False
        return
    def SaveUserData(self):
        if self.__userDataChange:
            self.SetUserData(self.__userDataDict)
        return
    
    def IsMatchValue(self, valueList):
@@ -104,7 +112,7 @@
        return {"RecID":self.GetRecID(), "RecType":self.GetRecType(), "Time":self.GetTime(), 
                "Value1":self.GetValue1(), "Value2":self.GetValue2(), "Value3":self.GetValue3(), "Value4":self.GetValue4(),
                "Value5":self.GetValue5(), "Value6":self.GetValue6(), "Value7":self.GetValue7(), "Value8":self.GetValue8(), 
                "UserDataDict":self.__GetUserDataDict()
                "UserDataDict":self.GetUserDataDict()
                }
    def SetAttr(self, attrDict, isClear=False):
        if isClear:
@@ -316,6 +324,33 @@
            matchRecDataList.append(recData)
        return matchRecDataList
    
    def GetGameRecDataMatchEx(self, recType, valueList, findone=False):
        '''获取记录类型对应的匹配value值记录
        @param recType: 记录类型
        @param valueList: [value1, value2, ...] value为None时不判断该值
        @param findone: 是否只匹配一条满足的记录
        @return: recData or [recData, ...] or None
        '''
        if recType not in self.recTypeDict:
            return
        recDataDict = self.recTypeDict[recType]
        for recID in recDataDict.keys():
            matchRet = self.GetGameRecDataMatch(recType, recID, valueList, findone)
            if matchRet:
                return matchRet
        return
    def GetGameRecDataFirst(self, recType, recID, isAddNew):
        ## 获取记录类型对应的第一条记录,适用于仅需一条的记录类型
        # @param isAddNew: 没有记录时是否添加一条新记录,一般获取后需要更新数据的可以设置为True,仅判断用的建议设置为False,减少产生多余空数据
        recData = None
        recDataList = self.GetGameRecDataList(recType, recID)
        if recDataList:
            recData = recDataList[0]
        elif isAddNew:
            recData = self.AddGameRecData(recType, recID)
        return recData
    def GetGameRecDataList(self, recType, recID):
        ## 获取记录类型对应记录列表 [recData, ...]
        if recType not in self.recTypeDict: