From 4087d18ce7cbd1578a6e287962bd902386984048 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期一, 14 七月 2025 10:55:57 +0800
Subject: [PATCH] Merge branch 'master' of http://192.168.1.20:10010/r/Project_SG_ServerCode

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/DB/StructData/DBMail.py |   38 +++++++++++++++++++++++++++++---------
 1 files changed, 29 insertions(+), 9 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/DB/StructData/DBMail.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/DB/StructData/DBMail.py
index 5a65c35..f86f89c 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/DB/StructData/DBMail.py
+++ b/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)

--
Gitblit v1.8.0