From 1bc4623d268c4ef18a437c71f8be663a9d044a12 Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期二, 20 五月 2025 11:16:59 +0800 Subject: [PATCH] 16 卡牌服务端(优化邮件物品,Mail命令支持发送全服邮件;) --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorld.py | 4 +- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerMail.py | 1 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/DB/StructData/DBMail.py | 19 +++++---- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Mail.py | 68 +++++++++++++++++++++++----------- 4 files changed, 59 insertions(+), 33 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..561d085 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 @@ -402,7 +403,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) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Mail.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Mail.py index ab5ab3f..78412de 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Mail.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Mail.py @@ -32,6 +32,7 @@ GameWorld.DebugAnswer(curPlayer, "清空邮件: Mail 0") GameWorld.DebugAnswer(curPlayer, "发送邮件: Mail 几封 物品数 [模板key 参数1 ...]") GameWorld.DebugAnswer(curPlayer, "输出邮件: Mail p") + GameWorld.DebugAnswer(curPlayer, "发送全服: Mail s 物品数 [天数]") return value = gmList[0] @@ -42,6 +43,10 @@ if value == "p": PrintPlayerMail(curPlayer) + return + + if value == "s": + SendServerMail(curPlayer, gmList) return if value > 0: @@ -57,37 +62,56 @@ mailTypeKey = gmList[2] if len(gmList) > 2 else "" paramList = gmList[3:] - itemIDList = range(3501, 3530 + 1) - moneyIDList = [20, 30] - mailMgr = DBDataMgr.GetMailMgr() mailCntBef = mailMgr.GetPersonalMailCount(playerID) - - isBind = 0 for _ in range(sendCnt): - - itemList = [] - if mailItemCnt: - for moneyID in moneyIDList: - itemCount = random.choice([100, 1000, 10000, 20000, 50000, 100000, 200000, 300000, 500000]) - itemList.append([moneyID, itemCount, isBind]) - if len(itemList) >= mailItemCnt: - break - - random.shuffle(itemIDList) - for i in range(mailItemCnt): - itemID = itemIDList[i] - itemCount = random.randint(1, 100000) - itemList.append([itemID, itemCount, isBind]) - if len(itemList) >= mailItemCnt: - break - + itemList = __randMailItem(mailItemCnt) PlayerMail.SendMailByKey(mailTypeKey, playerID, itemList, paramList) mailCntAft = mailMgr.GetPersonalMailCount(playerID) GameWorld.DebugAnswer(curPlayer, "发送个人邮件OK:%s, %s~%s" % (sendCnt, mailCntBef, mailCntAft)) return +def SendServerMail(curPlayer, gmList): + mailItemCnt = gmList[1] if len(gmList) > 1 else 5 + limitDays = gmList[2] if len(gmList) > 2 else 7 + + randValue = random.randint(1, 1000) + title = GameWorld.GbkToCode("全服邮件标题%s" % randValue) + text = GameWorld.GbkToCode( + '''全服邮件内容全服邮件内容全服邮件内容全服邮件内容全服邮件内容 + 全服邮件内容全服邮件内容全服邮件内容全服邮件内容全服邮件内容%s + ''' % randValue + ) + itemList = __randMailItem(mailItemCnt) + + PlayerMail.SendSeverMail("", title, text, itemList, limitDays) + GameWorld.DebugAnswer(curPlayer, "发送全服邮件OK!") + return + +def __randMailItem(mailItemCnt): + itemIDList = range(3501, 3530 + 1) + moneyIDList = [20, 30] + + isBind = 0 + itemList = [] + if mailItemCnt: + for moneyID in moneyIDList: + itemCount = random.choice([100, 1000, 10000, 20000, 50000, 100000, 200000, 300000, 500000]) + itemList.append([moneyID, itemCount, isBind]) + if len(itemList) >= mailItemCnt: + break + + random.shuffle(itemIDList) + for i in range(mailItemCnt): + itemID = itemIDList[i%len(itemIDList)] + itemCount = random.randint(1, 100000) + itemList.append([itemID, itemCount, isBind]) + if len(itemList) >= mailItemCnt: + break + + return itemList + def ClearMail(curPlayer): notifyGUIDState = {} playerID = curPlayer.GetPlayerID() diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorld.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorld.py index 090cf01..19d0ca4 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorld.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorld.py @@ -2391,8 +2391,8 @@ def SendGameErrorEx(errType, msgInfo="", playerID=0): ErrLog("SendGameErrorEx: %s -> %s" % (errType, msgInfo), playerID) SendGameError(errType, msgInfo) - if GetGameWorld().GetDebugLevel(): - raise Exception("%s -> %s" % (errType, msgInfo)) + #if GetGameWorld().GetDebugLevel(): + # raise Exception("%s -> %s" % (errType, msgInfo)) return def SendGameError(errType, msgInfo=""): diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerMail.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerMail.py index eb1cf85..0d938da 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerMail.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerMail.py @@ -412,6 +412,7 @@ return clientPack = ChPyNetSendPack.tagMCMailList() + clientPack.IsServerMail = 1 clientPack.MailList = mailList clientPack.Count = len(clientPack.MailList) NetPackCommon.SendFakePack(curPlayer, clientPack) -- Gitblit v1.8.0