From 88a9eda1278acaa0b0f66b35e2319d59a3e38eca Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期五, 29 八月 2025 16:03:35 +0800
Subject: [PATCH] 129 【战斗】战斗系统-服务端(修复主线战斗中重登时会自动重新开始战斗bug;)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/DB/StructData/DBMail.py | 45 ++++++++++++++++++++++++++++++++++++---------
1 files changed, 36 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 bd9a051..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
@@ -329,6 +349,13 @@
playerStateDict = self.__serverMailPlayerStateDict.pop(guid, {})
return playerStateDict
+ def DelAllMail(self):
+ self.__personalMailDict = {}
+ self.__mailItemDict = {}
+ self.__serverMailDict = {}
+ self.__serverMailPlayerStateDict = {}
+ return
+
# 保存数据 存数据库和realtimebackup
def GetSaveData(self):
saveData = ""
@@ -395,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