From 540eced2499bf2814f3264c0d41eb0e9c52b9957 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期日, 08 二月 2026 15:33:04 +0800
Subject: [PATCH] 462 【付费活动】限时冲刺-服务端(轮回殿)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerMail.py | 68 ++++++++++++++++++++++++++--------
1 files changed, 52 insertions(+), 16 deletions(-)
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 22c0cb1..b773156 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerMail.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerMail.py
@@ -15,6 +15,7 @@
#"""Version = 2025-05-14 12:00"""
#-------------------------------------------------------------------------------
+import CrossMsg
import GameWorld
import ItemCommon
import PlayerControl
@@ -51,9 +52,10 @@
if not mailObj:
continue
createTime = GameWorld.ChangeTimeStrToNum(mailObj.GetCreateTime())
- limitTime = createTime + (mailObj.GetLimitDays() + 7) * 3600 * 24
- if curTime < limitTime:
- #GameWorld.DebugLog("全服邮件未超时,不删除! %s,createTime=%s,limitTime=%s" % (guid, mailObj.GetCreateTime(), GameWorld.ChangeTimeNumToStr(limitTime)))
+ passDays = GameWorld.GetDiff_Day(curTime, createTime) + 1 # 过期判断按0点算天数
+ limitDays = mailObj.GetLimitDays()
+ if passDays <= limitDays:
+ #GameWorld.DebugLog("全服邮件未超时,不删除! %s,createTime=%s,passDays=%s <= limitDays=%s" % (guid, mailObj.GetCreateTime(), passDays, limitDays))
continue
DelServerMail(guid, "Timeout")
@@ -85,16 +87,17 @@
notifyGUIDState = {}
for guid, mailObj in mailDict.items():
createTime = GameWorld.ChangeTimeStrToNum(mailObj.GetCreateTime())
- limitTime = createTime + (mailObj.GetLimitDays() + 0) * 3600 * 24
- if curTime < limitTime:
- #GameWorld.DebugLog("个人邮件未超时,不删除! %s,createTime=%s,limitTime=%s" % (guid, mailObj.GetCreateTime(), GameWorld.ChangeTimeNumToStr(limitTime)), playerID)
+ passDays = GameWorld.GetDiff_Day(curTime, createTime) + 1 # 过期判断按0点算天数
+ limitDays = mailObj.GetLimitDays()
+ if passDays <= limitDays:
+ #GameWorld.DebugLog("个人邮件未超时,不删除! %s,createTime=%s,passDays=%s <= limitDays=%s" % (guid, mailObj.GetCreateTime(), passDays, limitDays), playerID)
continue
- mailState = mailObj.GetMailState()
- mailItemCount = mailMgr.GetMailItemCount(guid)
- if mailItemCount and mailState != ShareDefine.MailState_Got:
- #GameWorld.DebugLog("个人邮件有物品未领取不删除! %s" % guid, playerID)
- continue
+ #mailState = mailObj.GetMailState()
+ #mailItemCount = mailMgr.GetMailItemCount(guid)
+ #if mailItemCount and mailState != ShareDefine.MailState_Got:
+ # #GameWorld.DebugLog("个人邮件有物品未领取不删除! %s" % guid, playerID)
+ # continue
mailMgr.DelPersonalMail(playerID, guid)
DataRecordPack.DR_MailDel(playerID, guid, "Timeout")
@@ -108,8 +111,19 @@
Sync_PlayerMailState(curPlayer, notifyGUIDState)
return
-def SendMailByKey(mailTypeKey, playerID, itemList, paramList=[], limitDays=7):
+def SendMailByKey(mailTypeKey, playerID, itemList, paramList=[], limitDays=7, toServerID=0):
## 发送个人邮件魔板
+ # @param itemList: 元素支持字典{itemID:itemCount, ...} 或列表 [itemID, itemCount, 可选是否拍品, 物品UserData]
+ # @param toServerID: 向其他服玩家发送邮件时需指定玩家所在服务器
+ if toServerID > 0:
+ if not GameWorld.IsCrossServer():
+ GameWorld.ErrLog("非跨服服务器不能向其他服务器发送个人邮件! %s,playerID=%s" % (mailTypeKey, playerID))
+ return
+ dataMsg = {"mailTypeKey":mailTypeKey, "itemList":itemList, "paramList":paramList, "limitDays":limitDays}
+ mainServerID = GameWorld.GetMainServerID(toServerID)
+ CrossMsg.SendToClientServer(ShareDefine.C2S_SendPlayerMail, dataMsg, [mainServerID], playerID)
+ return
+
if not mailTypeKey:
mailTypeKey = ShareDefine.DefaultLackSpaceMailType
title = "<T>%s</T>" % mailTypeKey
@@ -117,11 +131,23 @@
SendMail(playerID, title, text, itemList, limitDays)
return
+def C2S_SendPlayerMail(dataMsg, playerID):
+ mailTypeKey = dataMsg["mailTypeKey"]
+ itemList = dataMsg["itemList"]
+ paramList = dataMsg["paramList"]
+ limitDays = dataMsg["limitDays"]
+ if not GameWorld.GetDBPlayerAccIDByID(playerID):
+ return
+ SendMailByKey(mailTypeKey, playerID, itemList, paramList, limitDays)
+ return
+
def SendMail(playerID, title, text, itemList=None, limitDays=7, mailType=0):
## 发送个人邮件
+ # @param itemList: 元素支持字典{itemID:itemCount, ...} 或列表 [itemID, itemCount, 可选是否拍品, 物品UserData]
if itemList == None:
itemList = []
-
+ if isinstance(itemList, dict):
+ itemList = [[itemID, itemCount] for itemID, itemCount in itemList.items()]
mailMgr = DBDataMgr.GetMailMgr()
mailMax = IpyGameDataPY.GetFuncCfg("PersonalMail", 1)
mailCnt = mailMgr.GetPersonalMailCount(playerID)
@@ -174,11 +200,16 @@
def SendSeverMail(guid, title, text, itemList=None, limitDays=7, mailType=0, limitLV=0, limitLVType=0, checkState=0):
'''发送全服邮件
@param guid: 可传入空,则系统自动生成guid
+ @param itemList: 元素支持字典{itemID:itemCount, ...} 或列表 [itemID, itemCount, 可选是否拍品, 物品UserData]
@param limitLV: 限制可领的最低等级
@param limitLVType: 等级达到后是否可领,默认不可
@param checkState: 是否需要审核,默认不需要
@return: None - 发送失败; mailObj - 成功发送的邮件实例
'''
+ if itemList == None:
+ itemList = []
+ if isinstance(itemList, dict):
+ itemList = [[itemID, itemCount] for itemID, itemCount in itemList.items()]
mailMgr = DBDataMgr.GetMailMgr()
mailObj = mailMgr.AddServerMail(guid, title, text, itemList, limitDays, mailType)
if not mailObj:
@@ -189,7 +220,7 @@
mailObj.SetCheckState(checkState)
eventName = "Add" if not checkState else "AddToCheck"
addDict = {"LimitDays":limitDays, "LimitLV":limitLV, "LimitLVType":limitLVType, "CheckState":checkState,
- "title":title, "Text":text, "ItemList":itemList}
+ "Title":title, "Text":text, "ItemList":itemList}
DataRecordPack.DR_ServerMail(GUID, eventName, addDict)
if not checkState:
Sync_ServerMail(mailObj.GetGUID())
@@ -318,9 +349,14 @@
itemCount = mailItem.GetCount()
isBind = mailItem.GetIsBind()
userData = mailItem.GetUserData()
- #setAttrDict = {} if not userData else eval(userData) 之后扩展有指定属性的,可参考砍树版本
+ setAttrDict = None
+ if userData:
+ try:
+ setAttrDict = eval(userData)
+ except:
+ setAttrDict = None
if not ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, isBind, [IPY_GameWorld.rptItem],
- event=[ChConfig.ItemGive_Mail, False, {"MailGUID":guid}]):
+ event=[ChConfig.ItemGive_Mail, False, {"MailGUID":guid}], setAttrDict=setAttrDict):
continue
DataRecordPack.DR_MailGiveSuccess(playerID, guid)
--
Gitblit v1.8.0