hch
12 小时以前 1cf37b4b51fc287ca3e443afb72604ec88f72cc4
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/DB/StructData/DBMail.py
@@ -156,7 +156,7 @@
                    itemRankList.append(key)
                itemDict[key] = itemDict[key] + itemCount
                
        mailItemCount = 0
        giveItemList = []
        for itemInfo in itemRankList:
            if len(itemInfo) == 4:
                itemID, itemCount, isBind, userData = itemInfo
@@ -164,7 +164,14 @@
                userData = ""
                itemID, isBind = itemInfo
                itemCount = itemDict.get(itemInfo, 0)
            giveItemList.append([itemID, itemCount, isBind, userData])
        Max_MailItem = 20
        if len(giveItemList) > Max_MailItem:
            GameWorld.SendGameErrorEx("MailItemMultiError", "%s|%s|%s|%s" % (guid, len(giveItemList), itemList, giveItemList))
            #giveItemList = giveItemList[:Max_MailItem] 暂时还是让发,先做下后台邮件警告即可
        for itemID, itemCount, isBind, userData in giveItemList:
            dbData = DBStruct.tagDBMailItem()
            dbData.GUID = guid
            dbData.ItemID = itemID
@@ -173,12 +180,6 @@
            dbData.UserData = userData
            dbData.UserDataLen = len(dbData.UserData)
            self.__InitMailItemInstance(dbData)
            mailItemCount += 1
            if mailItemCount >= 20:
                #防范某些异常情况,内置单封邮件物品上限,做下限制,并做后台邮件警告
                GameWorld.SendGameErrorEx("MailItemMultiError", "%s|%s" % (guid, itemList))
                break
            
        return
    
@@ -253,13 +254,32 @@
            itemObj = MailItem()
        return itemObj
    
    def GetMailItemList(self, guid):
        if guid not in self.__mailItemDict:
            return []
        itemList = []
        for mailItem in self.__mailItemDict[guid]:
            itemID = mailItem.GetItemID()
            itemCount = mailItem.GetCount()
            isBind = mailItem.GetIsBind()
            userData = mailItem.GetUserData()
            itemInfo = [itemID, itemCount, isBind]
            if userData:
                itemInfo.append(userData)
            itemList.append(itemInfo)
        return itemList
    def AddServerMail(self, guid, title, text, itemList, limitDays=7, mailType=0):
        '''添加个人邮件
        @param guid: 指定的邮件guid,为空时自动生成新guid
        @param itemList: 元素支持字典{k:v, ...} 或列表 [itemID, itemCount, 可选是否拍品, 物品UserData]
        '''
        mailObj = None
        if not guid:
            guid = GameWorld.GetGUID()
        if guid in self.__serverMailDict:
            # 已经存在的guid不允许重复插入全服邮件,防止多领取,后台发送全服邮件时如果重复推送到某个服务器就可能存在重复情况
            return mailObj
        dbData = DBStruct.tagDBMailServer()
        dbData.GUID = guid
        dbData.Type = mailType
@@ -402,7 +422,7 @@
        for _ in xrange(cnt):
            dbData.clear()
            pos += dbData.readData(datas, pos, dataslen)
            self.SetServerMailPlayerState(dbData.GUID, dbData.PlayerID, dbData.MailState)
            self.SetPlayerMailState(dbData.GUID, dbData.PlayerID, dbData.MailState)
            
        # 个人邮件
        cnt, pos = CommFunc.ReadDWORD(datas, pos)