From b746c6a7da1ade34085c20e2512dd67683564359 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期五, 30 五月 2025 12:08:30 +0800
Subject: [PATCH] 16 卡牌服务端(旧版由地图直接发送的邮件兼容到新版发送邮件;)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/BossHurtMng.py | 2
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerVip.py | 10 --
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBossReborn.py | 2
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py | 1
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerMail.py | 1
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/GameServerRefresh.py | 2
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/GameWorldProcess.py | 2
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py | 184 +--------------------------------------------
8 files changed, 11 insertions(+), 193 deletions(-)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/BossHurtMng.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/BossHurtMng.py
index 1b427db..70b3220 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/BossHurtMng.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/BossHurtMng.py
@@ -306,7 +306,7 @@
order = prizeIndex + 1
mailContent = content % (bossID, order)
giveItemList = awardDict[prizeOrder]
- PlayerControl.SendMail(title, mailContent, getDays, [playerID], giveItemList)
+ #删除旧版发送邮件,如果功能还有需要,可使用新版本发送邮件 PlayerMail
GameWorld.Log(" SendMail order=%s,playerID=%s,giveItemList=%s,isFB=%s"
% (order, playerID, str(giveItemList), isFB))
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/GameWorldProcess.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/GameWorldProcess.py
index ef70556..43a085b 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/GameWorldProcess.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/GameWorldProcess.py
@@ -160,7 +160,7 @@
GameWorld.Log("发送未拾取的物品给玩家: %s" % mailItemList, ownerID)
if isCrossServer:
serverGroupID = playerServerGroupIDDict.get(ownerID, 0)
- PlayerControl.SendCrossMail(serverGroupID, "ItemNoPickUp", [ownerID], mailItemList, [gameWorld.GetMapID()])
+ # 删除旧版发送邮件,如果功能还有需要,可使用新版本发送邮件 PlayerMail
else:
PlayerControl.SendMailByKey("ItemNoPickUp", [ownerID], mailItemList, [gameWorld.GetMapID()])
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/GameServerRefresh.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/GameServerRefresh.py
index 38d6d55..9834fa0 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/GameServerRefresh.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/GameServerRefresh.py
@@ -110,8 +110,6 @@
PlayerEventCounter.PlayerOnYear(curPlayer)
Set_PlayerGameServerInitOK_OnYear(curPlayer, 0)
- #邮件
- PlayerControl.SendUnLoginOKPlayerMailCache(curPlayer)
#刷新排行榜称号
#PlayerDienstgrad.RefreshBillBoardDienstgrad(curPlayer)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBossReborn.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBossReborn.py
index 0bef5fa..ab42ae1 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBossReborn.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBossReborn.py
@@ -282,7 +282,7 @@
if entireMailItemList:
getDays, limitLV, limitLVType = IpyGameDataPY.GetFuncEvalCfg("BossRebornServerBoss", 4)
paramList = [npcID]
- PlayerControl.SendEntireMail("BossRebornActionBossAll", getDays, limitLV, limitLVType, entireMailItemList, paramList)
+ #删除旧版发送邮件,如果功能还有需要,可使用新版本发送邮件 PlayerMail
return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
index e1bc3fc..997db21 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
@@ -99,6 +99,7 @@
import PlayerCharm
import PlayerTask
import PlayerFace
+import PlayerMail
import ChPlayer
import GMShell
import GameObj
@@ -338,189 +339,16 @@
#---------------------------------------------------------------------
def SendMailBatch(mailTypeKey, batchPlayerIDList, batchAddItemList=[], batchParamList=[], batchGold=[], batchGoldPaper=[], batchSilver=[], batchDetail=[], moneySource=ChConfig.Def_GiveMoney_Mail, crossMail=False):
- '''批量发送邮件, 用于瞬间需要发送多封(大量)邮件的,比如一些公共副本活动等结算时
- @param mailTypeKey: 邮件模板key
- @param batchPlayerIDList: [playerIDList, playerIDList, ...]
- @param batchAddItemList: [addItemList, addItemList, ...]
- @param batchParamList: [paramList, paramList, ...]
- @param batchGold: [batchGold, batchGold, ...]
- @param batchGoldPaper: [batchGoldPaper, batchGoldPaper, ...]
- @param batchSilver: [batchSilver, batchSilver, ...]
- @param batchDetail: [记录邮件流向用, ...]
- @param moneySource: 货币来源
- '''
-
- copyMapPlayerManager = GameWorld.GetMapCopyPlayerManager()
- for i, playerIDList in enumerate(batchPlayerIDList):
- for playerID in playerIDList[::-1]:
- curPlayer = copyMapPlayerManager.FindPlayerByID(playerID)
- if curPlayer and not curPlayer.GetGameServerInitOK():
- bAddItemList = [batchAddItemList[i]] if len(batchAddItemList) > i else []
- bParamList = [batchParamList[i]] if len(batchParamList) > i else []
- bGold = [batchGold[i]] if len(batchGold) > i else []
- bGoldPaper = [batchGoldPaper[i]] if len(batchGoldPaper) > i else []
- bSilver = [batchSilver[i]] if len(batchSilver) > i else []
- bDetail = [batchDetail[i]] if len(batchDetail) > i else []
- AddUnLoginOKPlayerMailCache(playerID, "ByMailTemplate", [mailTypeKey, bAddItemList, bParamList, bGold, bGoldPaper, bSilver, bDetail, moneySource, crossMail])
- playerIDList.pop(playerIDList.index(playerID))
- continue
-
- msgInfo = str([mailTypeKey, batchPlayerIDList, batchAddItemList, batchParamList, batchGold, batchGoldPaper, batchSilver, batchDetail, moneySource, crossMail])
- GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(0, 0, 0, "SendMailBatch", msgInfo, len(msgInfo))
- GameWorld.Log("SendMailBatch %s, batchPlayerIDList=%s, batchAddItemList=%s, batchParamList=%s, batchGold=%s, batchGoldPaper=%s, batchSilver=%s"
- % (mailTypeKey, batchPlayerIDList, batchAddItemList, batchParamList, batchGold, batchGoldPaper, batchSilver))
+ ## 删除旧版发送邮件,如果功能还有需要,可使用新版本发送邮件 PlayerMail
+ ## 批量发送邮件的一般是活动类型功能,一般都需要用到GameServer
+ ## 所以暂时不兼容使用新版本发送邮件,等相应功能有需要时再同步修改
return
def SendMailByKey(mailTypeKey, playerIDList, addItemList, paramList=[], gold=0, goldPaper=0, silver=0, detail="", moneySource=ChConfig.Def_GiveMoney_Mail, crossMail=False):
- '''
- @param detail: 记录邮件流向用
- '''
- if not mailTypeKey:
- mailTypeKey = ShareDefine.DefaultLackSpaceMailType
-
- content = "<MailTemplate>%s</MailTemplate>%s" % (mailTypeKey, json.dumps(paramList, ensure_ascii=False))
- SendMail("", content, 30, playerIDList, addItemList, gold, goldPaper, silver, detail, moneySource, crossMail)
- return
-
-def SendCrossMail(serverGroupID, mailTypeKey, playerIDList, addItemList, paramList=[]):
- ## 发送跨服邮件
- if not serverGroupID:
- return
- dataMsg = {"MailTypeKey":mailTypeKey, "Player":playerIDList}
- if addItemList:
- dataMsg["Item"] = CombineMailItem(addItemList)
- if paramList:
- dataMsg["Param"] = paramList
- GameWorld.SendMsgToClientServer(ShareDefine.CrossServerMsg_SendMail, dataMsg, [serverGroupID])
- return
-
-def SendEntireMail(mailTypeKey, getDays, limitLV, limitLVType, addItemList=[], paramList=[], \
- gold=0, goldPaper=0, silver=0, detail="", moneySource=ChConfig.Def_GiveMoney_Mail):
- ''' 发送全服邮件
- @param mailTypeKey: 邮件模板key
- @param getDays: 有效天数
- @param limitLV: 领取最低等级限制
- @param limitLVType: 等级不足的升级后是否可领 0-不可,1-可以
- '''
-
- # 有效天数限制
- if not mailTypeKey or getDays <= 0:
- return
-
- # 跨服服务器不允许发送邮件
- if GameWorld.IsCrossServer():
- return
-
- combineItemList = CombineMailItem(addItemList)
- cmdList = [mailTypeKey, getDays, limitLV, limitLVType, combineItemList, paramList, gold, goldPaper, silver, detail, moneySource]
- GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(0, 0, 0, "SendEntireMail", '%s' % (cmdList), len(str(cmdList)))
- GameWorld.Log("发送全服邮件: %s,getDays=%s,limitLV=%s,limitLVType=%s,combineItemList=%s,paramList=%s,gold=%s,goldPaper=%s,silver=%s,detail=%s,moneySource=%s" %
- (mailTypeKey, getDays, limitLV, limitLVType, combineItemList, paramList, gold, goldPaper, silver, detail, moneySource))
- return
-
-## 功能发放物品补偿/奖励邮件
-# @param addItemList [(itemID, itemCnt, 是否拍品), {或物品信息字典}, ...]
-# @return
-def SendMail(title, content, getDays, playerIDList, addItemList, gold=0, goldPaper=0, silver=0, detail="", moneySource=ChConfig.Def_GiveMoney_Mail, crossMail=False):
- if not playerIDList:
- return
-
-# if not addItemList:
-# return
-
- # 有效天数限制
- if getDays <= 0:
- return
-
- # 跨服服务器不允许发送邮件
- if GameWorld.IsCrossServer() and not crossMail:
- return
-
- sendPlayerIDList = []
- copyMapPlayerManager = GameWorld.GetMapCopyPlayerManager()
+ ## 函数先保留,之后功能直接使用 PlayerMail.SendMailByKey
for playerID in playerIDList:
- curPlayer = copyMapPlayerManager.FindPlayerByID(playerID)
- if curPlayer and not curPlayer.GetGameServerInitOK():
- AddUnLoginOKPlayerMailCache(playerID, "ByMailContent", [title, content, getDays, addItemList, gold, goldPaper, silver, detail, moneySource])
- continue
- sendPlayerIDList.append(playerID)
-
- combineItemList = CombineMailItem(addItemList)
- cmdList = [title, content, getDays, sendPlayerIDList, combineItemList, gold, goldPaper, silver, detail, moneySource, crossMail]
- GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(0, 0, 0, "SendMail", '%s' % (cmdList), len(str(cmdList)))
- return True
-
-def AddUnLoginOKPlayerMailCache(playerID, cacheType, mailInfo):
- ''' 添加未登录成功的玩家个人邮件发送缓存
- '''
- if playerID not in PyGameData.g_unLoginOKPlayerMailInfo:
- PyGameData.g_unLoginOKPlayerMailInfo[playerID] = []
- mailList = PyGameData.g_unLoginOKPlayerMailInfo[playerID]
- if [cacheType, mailInfo] in mailList:
- GameWorld.Log("###重复添加GetGameServerInitOK未登录成功的玩家个人邮件发送缓存! 不添加! mailCount=%s, mailInfo=%s"
- % (len(mailList), str(mailInfo)), playerID)
- return
- if len(mailList) >= 30: # 做个限制,防止出问题刷邮件
- GameWorld.Log("###限制添加GetGameServerInitOK未登录成功的玩家个人邮件发送缓存! 超出最大可添加数,不添加! mailCount=%s, mailInfo=%s"
- % (len(mailList), str(mailInfo)), playerID)
- return
- mailList.append([cacheType, mailInfo])
- # curPlayer.GetGameServerInitOK()
- GameWorld.Log("添加GetGameServerInitOK未登录成功的玩家个人邮件发送缓存! 等待发送! mailCount=%s, mailInfo=%s"
- % (len(mailList), str(mailInfo)), playerID)
+ PlayerMail.SendMailByKey(mailTypeKey, playerID, addItemList, paramList)
return
-
-def SendUnLoginOKPlayerMailCache(curPlayer):
- ## 未登录成功的玩家个人邮件发送缓存 - 登录成功后处理
- if not curPlayer.GetGameServerInitOK():
- return
- playerID = curPlayer.GetPlayerID()
- if playerID not in PyGameData.g_unLoginOKPlayerMailInfo:
- return
- mailList = PyGameData.g_unLoginOKPlayerMailInfo.pop(playerID)
- for cacheType, mailInfo in mailList:
- playerIDList = [playerID]
- GameWorld.Log("发送未登录成功时缓存的待发送邮件! cacheType=%s, mailInfo=%s" % (cacheType, str(mailInfo)), playerID)
- if cacheType == "ByMailContent":
- title, content, getDays, addItemList, gold, goldPaper, silver, detail, moneySource = mailInfo
- SendMail(title, content, getDays, playerIDList, addItemList, gold, goldPaper, silver, detail, moneySource)
- elif cacheType == "ByMailTemplate":
- mailTypeKey, bAddItemList, bParamList, bGold, bGoldPaper, bSilver, bDetail, moneySource, crossMail = mailInfo
- SendMailBatch(mailTypeKey, [playerIDList], bAddItemList, bParamList, bGold, bGoldPaper, bSilver, bDetail, moneySource, crossMail)
- return
-
-def CombineMailItem(addItemList):
- ## 合并邮件物品
- itemCountDict = {}
- combineItemList = [] # 合并后的物品列表
- for mailItem in addItemList:
- if isinstance(mailItem, dict):
- combineItemList.append(mailItem)
- continue
-
- if len(mailItem) != 3:
- continue
-
- itemID, itemCnt, isAuctionItem = mailItem
-
- if ItemControler.GetAppointItemRealID(itemID):
- # 定制物品转化为物品信息字典
- appointItemObj = ItemControler.GetItemByData(ItemControler.GetAppointItemDictData(itemID, isAuctionItem))
- if not appointItemObj:
- GameWorld.ErrLog("邮件定制物品转化失败!itemID, itemCnt, isAuctionItem" % (itemID, itemCnt, isAuctionItem))
- continue
- combineItemList.append(ItemCommon.GetMailItemDict(appointItemObj))
- appointItemObj.Clear()
- elif isAuctionItem:
- combineItemList.append((itemID, itemCnt, isAuctionItem))
- else:
- key = (itemID, isAuctionItem)
- itemCountDict[key] = itemCountDict.get(key, 0) + itemCnt
-
- for key, itemCnt in itemCountDict.items():
- itemID, isAuctionItem = key
- combineItemList.append((itemID, itemCnt, isAuctionItem))
- return combineItemList
## 构建系统提示参数列表
# @param msgParamList 信息参数列表
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 0d938da..c6118c8 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerMail.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerMail.py
@@ -171,6 +171,7 @@
def SendSeverMail(guid, title, text, itemList=None, limitDays=7, mailType=0, limitLV=0, limitLVType=0, checkState=0):
'''发送全服邮件
+ @param guid: 可传入空,则系统自动生成guid
@param limitLV: 限制可领的最低等级
@param limitLVType: 等级达到后是否可领,默认不可
@param checkState: 是否需要审核,默认不需要
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerVip.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerVip.py
index 330aaad..c0cfcad 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerVip.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerVip.py
@@ -195,20 +195,12 @@
for itemid, cnt, isBind in itemList:
ItemControler.GivePlayerItem(curPlayer, int(itemid), int(cnt), 0, [IPY_GameWorld.rptItem, IPY_GameWorld.rptAnyWhere],
event=["BuyVIPGift", False, {"VIPLV":vipLV}])
-# else:
-# __AwardToPlayerByMail(curPlayer, itemList)
+
ItemControler.NotifyGiveAwardInfo(curPlayer, itemList, "BuyVIPGift")
openuiid = IpyGameDataPY.GetFuncEvalCfg('VIPPanel', 1, {}).get(vipLV, 0)
PlayerControl.WorldNotify(0, 'BuyVIPGift', [curPlayer.GetName(), vipLV, itemList[0][0], openuiid])
Sycn_VIPAwardRecord(curPlayer)
return
-
-#发邮件
-def __AwardToPlayerByMail(curPlayer, mailItemInfoList):
- MailMessage = GetMailMessage()
- content = ShareDefine.Def_MailFormat % (MailMessage[0], '')
- getDays = MailMessage[1]
- PlayerControl.SendMail('', content, getDays, [curPlayer.GetPlayerID()], mailItemInfoList)
##VIP登录处理
# @param curPlayer
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py
index 3682eb3..a4e7f38 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py
@@ -57,7 +57,6 @@
g_teamPlayerDict = {} # 地图队伍对应玩家ID列表,含离线玩家 {teamID:[playerID, ...], ...}
g_teamPlayerInfoDict = {} # 地图队伍对应玩家ID信息 {teamID:{playerID:{k:v, ...}, ...}
-g_unLoginOKPlayerMailInfo = {} # GameServer 未登录成功前需要发送的邮件缓存,防止登录失败不存db导致重复发送邮件 {playerID:[[待发送邮件内容信息], ...], ...}
g_disconnectPlayer = {} # 在本地图离线的玩家信息 {playerID:[tick, posX, posY], ...}
g_lastExitFBType = {} # 最后一个离开副本信息 {fbIndex:[exitType, tick], ...} exitType: 1-掉线,2-主动退出
--
Gitblit v1.8.0