From 8e58003832de0edacda49f3c088ba95d77f56d52 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期六, 11 十月 2025 14:48:38 +0800
Subject: [PATCH] 129 【战斗】战斗系统-服务端(B427使用技能增加同步关联的技能;)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerMail.py | 41 +++++++++++++++++++++++++++++++++--------
1 files changed, 33 insertions(+), 8 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 0d938da..c0eddf8 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerMail.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerMail.py
@@ -56,13 +56,15 @@
#GameWorld.DebugLog("全服邮件未超时,不删除! %s,createTime=%s,limitTime=%s" % (guid, mailObj.GetCreateTime(), GameWorld.ChangeTimeNumToStr(limitTime)))
continue
- DelServerMail(guid)
+ DelServerMail(guid, "Timeout")
return
-def DelServerMail(guid):
+def DelServerMail(guid, delEvent=""):
+ GameWorld.Log("删除全服邮件: %s" % (guid))
mailMgr = DBDataMgr.GetMailMgr()
playerStateDict = mailMgr.DelServerMail(guid)
+ DataRecordPack.DR_ServerMail(guid, "Delete" + delEvent)
if not playerStateDict:
return
playerMgr = GameWorld.GetPlayerManager()
@@ -108,18 +110,21 @@
def SendMailByKey(mailTypeKey, playerID, itemList, paramList=[], limitDays=7):
## 发送个人邮件魔板
+ # @param itemList: 元素支持字典{itemID:itemCount, ...} 或列表 [itemID, itemCount, 可选是否拍品, 物品UserData]
if not mailTypeKey:
mailTypeKey = ShareDefine.DefaultLackSpaceMailType
title = "<T>%s</T>" % mailTypeKey
- text = "%s" % json.dumps(paramList, ensure_ascii=False)
+ text = "%s" % json.dumps([str(p) for p in paramList], ensure_ascii=False) #参数全部转为字符串
SendMail(playerID, title, text, itemList, 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)
@@ -171,18 +176,32 @@
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:
+ return mailObj
+ GUID = mailObj.GetGUID()
mailObj.SetLimitLV(limitLV)
mailObj.SetLimitLVType(limitLVType)
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}
+ DataRecordPack.DR_ServerMail(GUID, eventName, addDict)
if not checkState:
Sync_ServerMail(mailObj.GetGUID())
- return
+ return mailObj
def CheckServerMailResult(guid, isOK):
## 审核全服邮件结果
@@ -192,8 +211,12 @@
if not mailObj:
return
if not isOK:
+ # 审核不通过的直接删除
+ DelServerMail(guid, "GMDel")
return
+ GameWorld.Log("全服邮件审核通过: %s" % guid)
mailObj.SetCheckState(0) # 设置为0,不需要审核了,即通过
+ DataRecordPack.DR_ServerMail(guid, "CheckOK")
Sync_ServerMail(guid)
return
@@ -324,11 +347,12 @@
Sync_PlayerMailState(curPlayer, notifyGUIDState)
return
-def doMailDel(curPlayer, guid, isGM=False):
+def doMailDel(curPlayer, guid, isGM=False, playerID=0):
## 执行邮件删除
# @param isGM: 是否GM删除,无视物品是否已领取,强制删除
- playerID = curPlayer.GetPlayerID()
+ if curPlayer:
+ playerID = curPlayer.GetPlayerID()
mailMgr = DBDataMgr.GetMailMgr()
# 批量处理,仅针对个人邮件
@@ -356,7 +380,8 @@
DataRecordPack.DR_MailDel(playerID, guid, "GMDel")
# 这里玩家主动删除的可不记录流向,因为未读未领取不允许主动删除,已领取的已有领取记录,所以可不记录
- Sync_PlayerMailState(curPlayer, notifyGUIDState)
+ if curPlayer:
+ Sync_PlayerMailState(curPlayer, notifyGUIDState)
return
def Sync_ServerMail(guid):
--
Gitblit v1.8.0