| | |
| | | itemRankList.append(key)
|
| | | itemDict[key] = itemDict[key] + itemCount
|
| | |
|
| | | mailItemCount = 0
|
| | | giveItemList = []
|
| | | for itemInfo in itemRankList:
|
| | | if len(itemInfo) == 4:
|
| | | itemID, itemCount, isBind, userData = itemInfo
|
| | |
| | | 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
|
| | |
| | | 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
|
| | |
|
| | |
| | | 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
|
| | |
| | | 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)
|