From 9c92cdf70f8883d45193da683b52dc59eed2c438 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期一, 17 九月 2018 14:38:53 +0800
Subject: [PATCH] 3443 【后端】Boss复活活动,时间段支持日期跨天或日期支持重置时间点设置(如0点或5点) 2303 【后端】限时特惠提前通知前端开启 2302 【后端】限时礼包开启提前通知前端 3305 【后端】运营类活动优化

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py               |    1 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py           |   21 +++++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFlashGiftbag.py |   29 ++++++---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerSpringSale.py   |   31 ++++++----
 ServerPython/CoreServerGroup/GameServer/Script/Player/ChPlayer.py                                |    4 
 ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py                                |   21 +++++++
 ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldProcess.py                |    2 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py             |   23 ++++++-
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py           |   14 ++++
 PySysDB/PySysDBPY.h                                                                              |    5 +
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBossReborn.py   |   16 +++--
 ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py                                    |    1 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py                  |    2 
 13 files changed, 135 insertions(+), 35 deletions(-)

diff --git a/PySysDB/PySysDBPY.h b/PySysDB/PySysDBPY.h
index a10171c..ae1d90e 100644
--- a/PySysDB/PySysDBPY.h
+++ b/PySysDB/PySysDBPY.h
@@ -768,6 +768,8 @@
 	WORD		LVLimit;	//限制等级
 	BYTE		IsDayReset;	//是否每天重置
 	list		ShopTypeList;	//商店类型列表
+	char		MailKey;		//活动更新时发送邮件key
+	list		MailItemPrize;		//活动更新时发送邮件奖励物品
 };
 
 //日常任务表
@@ -1139,6 +1141,8 @@
 	WORD		LVLimit;	//限制等级
 	BYTE		IsDayReset;	//是否每天重置
 	list		GiftbagTypeList;	//礼包类型列表
+	char		MailKey;		//活动更新时发送邮件key
+	list		MailItemPrize;		//活动更新时发送邮件奖励物品
 };
 
 //限时礼包模板表
@@ -1193,6 +1197,7 @@
 	DWORD		_CfgID;	//配置ID
 	char		StartDate;	//开启日期
 	char		EndDate;	//结束日期
+	BYTE		ResetType;	//重置类型,0-0点重置;1-5点重置
 	WORD		LVLimit;	//限制等级
 	BYTE		TemplateID;	//模板编号
 };
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
index 79008bf..a8171fe 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
@@ -19858,6 +19858,7 @@
     Head = tagHead()
     StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
     EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
+    AdvanceMinutes = 0    #(WORD AdvanceMinutes)// 提前显示分钟
     ActivityTimeCount = 0    #(BYTE ActivityTimeCount)
     ActivityTime = list()    #(vector<tagMCFlashGiftbagTime> ActivityTime)//活动时间
     IsDayReset = 0    #(BYTE IsDayReset)//是否每天重置
@@ -19877,6 +19878,7 @@
         _pos = self.Head.ReadData(_lpData, _pos)
         self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
         self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.AdvanceMinutes,_pos = CommFunc.ReadWORD(_lpData, _pos)
         self.ActivityTimeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         for i in range(self.ActivityTimeCount):
             temActivityTime = tagMCFlashGiftbagTime()
@@ -19898,6 +19900,7 @@
         self.Head.SubCmd = 0x12
         self.StartDate = ""
         self.EndtDate = ""
+        self.AdvanceMinutes = 0
         self.ActivityTimeCount = 0
         self.ActivityTime = list()
         self.IsDayReset = 0
@@ -19911,6 +19914,7 @@
         length += self.Head.GetLength()
         length += 10
         length += 10
+        length += 2
         length += 1
         for i in range(self.ActivityTimeCount):
             length += self.ActivityTime[i].GetLength()
@@ -19927,6 +19931,7 @@
         data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
         data = CommFunc.WriteString(data, 10, self.StartDate)
         data = CommFunc.WriteString(data, 10, self.EndtDate)
+        data = CommFunc.WriteWORD(data, self.AdvanceMinutes)
         data = CommFunc.WriteBYTE(data, self.ActivityTimeCount)
         for i in range(self.ActivityTimeCount):
             data = CommFunc.WriteString(data, self.ActivityTime[i].GetLength(), self.ActivityTime[i].GetBuffer())
@@ -19942,6 +19947,7 @@
                                 Head:%s,
                                 StartDate:%s,
                                 EndtDate:%s,
+                                AdvanceMinutes:%d,
                                 ActivityTimeCount:%d,
                                 ActivityTime:%s,
                                 IsDayReset:%d,
@@ -19953,6 +19959,7 @@
                                 self.Head.OutputString(),
                                 self.StartDate,
                                 self.EndtDate,
+                                self.AdvanceMinutes,
                                 self.ActivityTimeCount,
                                 "...",
                                 self.IsDayReset,
@@ -20501,6 +20508,7 @@
     Head = tagHead()
     StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
     EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
+    AdvanceMinutes = 0    #(WORD AdvanceMinutes)// 提前显示分钟
     ActivityTimeCount = 0    #(BYTE ActivityTimeCount)
     ActivityTime = list()    #(vector<tagMCSpringSaleTime> ActivityTime)//活动时间
     IsDayReset = 0    #(BYTE IsDayReset)//是否每天重置
@@ -20520,6 +20528,7 @@
         _pos = self.Head.ReadData(_lpData, _pos)
         self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
         self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.AdvanceMinutes,_pos = CommFunc.ReadWORD(_lpData, _pos)
         self.ActivityTimeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         for i in range(self.ActivityTimeCount):
             temActivityTime = tagMCSpringSaleTime()
@@ -20541,6 +20550,7 @@
         self.Head.SubCmd = 0x11
         self.StartDate = ""
         self.EndtDate = ""
+        self.AdvanceMinutes = 0
         self.ActivityTimeCount = 0
         self.ActivityTime = list()
         self.IsDayReset = 0
@@ -20554,6 +20564,7 @@
         length += self.Head.GetLength()
         length += 10
         length += 10
+        length += 2
         length += 1
         for i in range(self.ActivityTimeCount):
             length += self.ActivityTime[i].GetLength()
@@ -20570,6 +20581,7 @@
         data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
         data = CommFunc.WriteString(data, 10, self.StartDate)
         data = CommFunc.WriteString(data, 10, self.EndtDate)
+        data = CommFunc.WriteWORD(data, self.AdvanceMinutes)
         data = CommFunc.WriteBYTE(data, self.ActivityTimeCount)
         for i in range(self.ActivityTimeCount):
             data = CommFunc.WriteString(data, self.ActivityTime[i].GetLength(), self.ActivityTime[i].GetBuffer())
@@ -20585,6 +20597,7 @@
                                 Head:%s,
                                 StartDate:%s,
                                 EndtDate:%s,
+                                AdvanceMinutes:%d,
                                 ActivityTimeCount:%d,
                                 ActivityTime:%s,
                                 IsDayReset:%d,
@@ -20596,6 +20609,7 @@
                                 self.Head.OutputString(),
                                 self.StartDate,
                                 self.EndtDate,
+                                self.AdvanceMinutes,
                                 self.ActivityTimeCount,
                                 "...",
                                 self.IsDayReset,
@@ -21319,6 +21333,7 @@
     Head = tagHead()
     StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
     EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
+    ResetType = 0    #(BYTE ResetType)// 重置类型,0-0点重置;1-5点重置
     LimitLV = 0    #(WORD LimitLV)// 限制等级
     TaskCnt = 0    #(BYTE TaskCnt)
     TaskInfo = list()    #(vector<tagMCBossRebornTaskInfo> TaskInfo)
@@ -21335,6 +21350,7 @@
         _pos = self.Head.ReadData(_lpData, _pos)
         self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
         self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.ResetType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
         self.TaskCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         for i in range(self.TaskCnt):
@@ -21350,6 +21366,7 @@
         self.Head.SubCmd = 0x04
         self.StartDate = ""
         self.EndtDate = ""
+        self.ResetType = 0
         self.LimitLV = 0
         self.TaskCnt = 0
         self.TaskInfo = list()
@@ -21360,6 +21377,7 @@
         length += self.Head.GetLength()
         length += 10
         length += 10
+        length += 1
         length += 2
         length += 1
         for i in range(self.TaskCnt):
@@ -21372,6 +21390,7 @@
         data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
         data = CommFunc.WriteString(data, 10, self.StartDate)
         data = CommFunc.WriteString(data, 10, self.EndtDate)
+        data = CommFunc.WriteBYTE(data, self.ResetType)
         data = CommFunc.WriteWORD(data, self.LimitLV)
         data = CommFunc.WriteBYTE(data, self.TaskCnt)
         for i in range(self.TaskCnt):
@@ -21383,6 +21402,7 @@
                                 Head:%s,
                                 StartDate:%s,
                                 EndtDate:%s,
+                                ResetType:%d,
                                 LimitLV:%d,
                                 TaskCnt:%d,
                                 TaskInfo:%s
@@ -21391,6 +21411,7 @@
                                 self.Head.OutputString(),
                                 self.StartDate,
                                 self.EndtDate,
+                                self.ResetType,
                                 self.LimitLV,
                                 self.TaskCnt,
                                 "..."
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldProcess.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldProcess.py
index 2a47ecf..7f6f5b1 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldProcess.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldProcess.py
@@ -1371,6 +1371,8 @@
     # 通知开服天数
     openServerDay = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_ServerDay)
     GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_ServerDay, openServerDay)
+    openServerTime = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_InitOpenServerTime)
+    GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_InitOpenServerTime, openServerTime)
     # 合服状态
     isMixServer = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_IsMixServer)
     GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_IsMixServer, isMixServer)
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/ChPlayer.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/ChPlayer.py
index 3e2f353..3222e6e 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/ChPlayer.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/ChPlayer.py
@@ -109,8 +109,8 @@
         #通知玩家登陆信息,来自运营方
         #DoLogic_LoginUserData(curPlayer)
     
-        #通知开服天数
-        PlayerEventCounter.Sync_OpenServerDay(curPlayer)
+        #通知开服天数, 登录时改为地图通知,因为GameServer的PlayerLogin在地图之后,前端有些功能处理需要提前得到开服天
+        #PlayerEventCounter.Sync_OpenServerDay(curPlayer)
         # 通知广播信息
         GMCommon.SendBroadCastToClient(curPlayer)
     
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
index ed961fe..c73e566 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
@@ -127,6 +127,7 @@
 Def_Notify_Separator = '+'
 
 #通知地图服务器并设置该字典值
+Def_Notify_WorldKey_InitOpenServerTime = 'InitOpenServerTime'   # 开服时间
 Def_Notify_WorldKey_ServerDay = 'ServerDay'               # 开服天数
 Def_Notify_WorldKey_IsMixServer = 'IsMixServer'           # 是否合服服务器
 Def_Notify_WorldKey_MixServerDay = 'MixServerDay'         # 合服天数
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index 12fda6f..67440f3 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -3579,10 +3579,12 @@
 
 #限时特惠活动
 Def_PDict_SpringSaleID = "SpringSaleID"  # 玩家身上的限时特惠活动ID,唯一标识,取活动开始日期time
+Def_PDict_SpringSaleMailState = "SpringSaleMailState"  # 玩家身上的活动更新提醒邮件状态
 
 #限时礼包活动
 Def_PDict_FlashGiftbagID = "FlashGiftbagID"  # 玩家身上的限时礼包活动ID,唯一标识,取活动开始日期time
 Def_PDict_FlashGiftbagBuyCount = "FlashGiftbagBuyCount_%s"  # 限时礼包已购买次数,参数(礼包ID)
+Def_PDict_FlashGiftbagMailState = "FlashGiftbagMailState"  # 玩家身上的活动更新提醒邮件状态
 
 #BOSS复活
 Def_PDict_BossRebornID = "BossRebornID"  # 玩家身上的BOSS复活活动ID,唯一标识,取活动开始日期time值
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
index 79008bf..a8171fe 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -19858,6 +19858,7 @@
     Head = tagHead()
     StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
     EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
+    AdvanceMinutes = 0    #(WORD AdvanceMinutes)// 提前显示分钟
     ActivityTimeCount = 0    #(BYTE ActivityTimeCount)
     ActivityTime = list()    #(vector<tagMCFlashGiftbagTime> ActivityTime)//活动时间
     IsDayReset = 0    #(BYTE IsDayReset)//是否每天重置
@@ -19877,6 +19878,7 @@
         _pos = self.Head.ReadData(_lpData, _pos)
         self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
         self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.AdvanceMinutes,_pos = CommFunc.ReadWORD(_lpData, _pos)
         self.ActivityTimeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         for i in range(self.ActivityTimeCount):
             temActivityTime = tagMCFlashGiftbagTime()
@@ -19898,6 +19900,7 @@
         self.Head.SubCmd = 0x12
         self.StartDate = ""
         self.EndtDate = ""
+        self.AdvanceMinutes = 0
         self.ActivityTimeCount = 0
         self.ActivityTime = list()
         self.IsDayReset = 0
@@ -19911,6 +19914,7 @@
         length += self.Head.GetLength()
         length += 10
         length += 10
+        length += 2
         length += 1
         for i in range(self.ActivityTimeCount):
             length += self.ActivityTime[i].GetLength()
@@ -19927,6 +19931,7 @@
         data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
         data = CommFunc.WriteString(data, 10, self.StartDate)
         data = CommFunc.WriteString(data, 10, self.EndtDate)
+        data = CommFunc.WriteWORD(data, self.AdvanceMinutes)
         data = CommFunc.WriteBYTE(data, self.ActivityTimeCount)
         for i in range(self.ActivityTimeCount):
             data = CommFunc.WriteString(data, self.ActivityTime[i].GetLength(), self.ActivityTime[i].GetBuffer())
@@ -19942,6 +19947,7 @@
                                 Head:%s,
                                 StartDate:%s,
                                 EndtDate:%s,
+                                AdvanceMinutes:%d,
                                 ActivityTimeCount:%d,
                                 ActivityTime:%s,
                                 IsDayReset:%d,
@@ -19953,6 +19959,7 @@
                                 self.Head.OutputString(),
                                 self.StartDate,
                                 self.EndtDate,
+                                self.AdvanceMinutes,
                                 self.ActivityTimeCount,
                                 "...",
                                 self.IsDayReset,
@@ -20501,6 +20508,7 @@
     Head = tagHead()
     StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
     EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
+    AdvanceMinutes = 0    #(WORD AdvanceMinutes)// 提前显示分钟
     ActivityTimeCount = 0    #(BYTE ActivityTimeCount)
     ActivityTime = list()    #(vector<tagMCSpringSaleTime> ActivityTime)//活动时间
     IsDayReset = 0    #(BYTE IsDayReset)//是否每天重置
@@ -20520,6 +20528,7 @@
         _pos = self.Head.ReadData(_lpData, _pos)
         self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
         self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.AdvanceMinutes,_pos = CommFunc.ReadWORD(_lpData, _pos)
         self.ActivityTimeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         for i in range(self.ActivityTimeCount):
             temActivityTime = tagMCSpringSaleTime()
@@ -20541,6 +20550,7 @@
         self.Head.SubCmd = 0x11
         self.StartDate = ""
         self.EndtDate = ""
+        self.AdvanceMinutes = 0
         self.ActivityTimeCount = 0
         self.ActivityTime = list()
         self.IsDayReset = 0
@@ -20554,6 +20564,7 @@
         length += self.Head.GetLength()
         length += 10
         length += 10
+        length += 2
         length += 1
         for i in range(self.ActivityTimeCount):
             length += self.ActivityTime[i].GetLength()
@@ -20570,6 +20581,7 @@
         data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
         data = CommFunc.WriteString(data, 10, self.StartDate)
         data = CommFunc.WriteString(data, 10, self.EndtDate)
+        data = CommFunc.WriteWORD(data, self.AdvanceMinutes)
         data = CommFunc.WriteBYTE(data, self.ActivityTimeCount)
         for i in range(self.ActivityTimeCount):
             data = CommFunc.WriteString(data, self.ActivityTime[i].GetLength(), self.ActivityTime[i].GetBuffer())
@@ -20585,6 +20597,7 @@
                                 Head:%s,
                                 StartDate:%s,
                                 EndtDate:%s,
+                                AdvanceMinutes:%d,
                                 ActivityTimeCount:%d,
                                 ActivityTime:%s,
                                 IsDayReset:%d,
@@ -20596,6 +20609,7 @@
                                 self.Head.OutputString(),
                                 self.StartDate,
                                 self.EndtDate,
+                                self.AdvanceMinutes,
                                 self.ActivityTimeCount,
                                 "...",
                                 self.IsDayReset,
@@ -21319,6 +21333,7 @@
     Head = tagHead()
     StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
     EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
+    ResetType = 0    #(BYTE ResetType)// 重置类型,0-0点重置;1-5点重置
     LimitLV = 0    #(WORD LimitLV)// 限制等级
     TaskCnt = 0    #(BYTE TaskCnt)
     TaskInfo = list()    #(vector<tagMCBossRebornTaskInfo> TaskInfo)
@@ -21335,6 +21350,7 @@
         _pos = self.Head.ReadData(_lpData, _pos)
         self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
         self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.ResetType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
         self.TaskCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         for i in range(self.TaskCnt):
@@ -21350,6 +21366,7 @@
         self.Head.SubCmd = 0x04
         self.StartDate = ""
         self.EndtDate = ""
+        self.ResetType = 0
         self.LimitLV = 0
         self.TaskCnt = 0
         self.TaskInfo = list()
@@ -21360,6 +21377,7 @@
         length += self.Head.GetLength()
         length += 10
         length += 10
+        length += 1
         length += 2
         length += 1
         for i in range(self.TaskCnt):
@@ -21372,6 +21390,7 @@
         data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
         data = CommFunc.WriteString(data, 10, self.StartDate)
         data = CommFunc.WriteString(data, 10, self.EndtDate)
+        data = CommFunc.WriteBYTE(data, self.ResetType)
         data = CommFunc.WriteWORD(data, self.LimitLV)
         data = CommFunc.WriteBYTE(data, self.TaskCnt)
         for i in range(self.TaskCnt):
@@ -21383,6 +21402,7 @@
                                 Head:%s,
                                 StartDate:%s,
                                 EndtDate:%s,
+                                ResetType:%d,
                                 LimitLV:%d,
                                 TaskCnt:%d,
                                 TaskInfo:%s
@@ -21391,6 +21411,7 @@
                                 self.Head.OutputString(),
                                 self.StartDate,
                                 self.EndtDate,
+                                self.ResetType,
                                 self.LimitLV,
                                 self.TaskCnt,
                                 "..."
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
index e18b371..3ba43fe 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -638,6 +638,8 @@
                         ("WORD", "LVLimit", 0),
                         ("BYTE", "IsDayReset", 0),
                         ("list", "ShopTypeList", 0),
+                        ("char", "MailKey", 0),
+                        ("list", "MailItemPrize", 0),
                         ),
 
                 "DailyQuest":(
@@ -910,6 +912,8 @@
                         ("WORD", "LVLimit", 0),
                         ("BYTE", "IsDayReset", 0),
                         ("list", "GiftbagTypeList", 0),
+                        ("char", "MailKey", 0),
+                        ("list", "MailItemPrize", 0),
                         ),
 
                 "FlashGiftbag":(
@@ -949,6 +953,7 @@
                         ("DWORD", "CfgID", 1),
                         ("char", "StartDate", 0),
                         ("char", "EndDate", 0),
+                        ("BYTE", "ResetType", 0),
                         ("WORD", "LVLimit", 0),
                         ("BYTE", "TemplateID", 0),
                         ),
@@ -2252,7 +2257,9 @@
         self.AdvanceMinutes = 0
         self.LVLimit = 0
         self.IsDayReset = 0
-        self.ShopTypeList = []
+        self.ShopTypeList = []
+        self.MailKey = ""
+        self.MailItemPrize = []
         return
         
     def GetCfgID(self): return self.CfgID # 配置ID
@@ -2263,7 +2270,9 @@
     def GetAdvanceMinutes(self): return self.AdvanceMinutes # 前端提前X分钟展示活动
     def GetLVLimit(self): return self.LVLimit # 限制等级
     def GetIsDayReset(self): return self.IsDayReset # 是否每天重置
-    def GetShopTypeList(self): return self.ShopTypeList # 商店类型列表
+    def GetShopTypeList(self): return self.ShopTypeList # 商店类型列表
+    def GetMailKey(self): return self.MailKey # 活动更新时发送邮件key
+    def GetMailItemPrize(self): return self.MailItemPrize # 活动更新时发送邮件奖励物品
 
 # 日常任务表
 class IPY_DailyQuest():
@@ -2828,7 +2837,9 @@
         self.AdvanceMinutes = 0
         self.LVLimit = 0
         self.IsDayReset = 0
-        self.GiftbagTypeList = []
+        self.GiftbagTypeList = []
+        self.MailKey = ""
+        self.MailItemPrize = []
         return
         
     def GetCfgID(self): return self.CfgID # 配置ID
@@ -2839,7 +2850,9 @@
     def GetAdvanceMinutes(self): return self.AdvanceMinutes # 前端提前X分钟展示活动
     def GetLVLimit(self): return self.LVLimit # 限制等级
     def GetIsDayReset(self): return self.IsDayReset # 是否每天重置
-    def GetGiftbagTypeList(self): return self.GiftbagTypeList # 礼包类型列表
+    def GetGiftbagTypeList(self): return self.GiftbagTypeList # 礼包类型列表
+    def GetMailKey(self): return self.MailKey # 活动更新时发送邮件key
+    def GetMailItemPrize(self): return self.MailItemPrize # 活动更新时发送邮件奖励物品
 
 # 限时礼包模板表
 class IPY_FlashGiftbag():
@@ -2918,6 +2931,7 @@
         self.CfgID = 0
         self.StartDate = ""
         self.EndDate = ""
+        self.ResetType = 0
         self.LVLimit = 0
         self.TemplateID = 0
         return
@@ -2925,6 +2939,7 @@
     def GetCfgID(self): return self.CfgID # 配置ID
     def GetStartDate(self): return self.StartDate # 开启日期
     def GetEndDate(self): return self.EndDate # 结束日期
+    def GetResetType(self): return self.ResetType # 重置类型,0-0点重置;1-5点重置
     def GetLVLimit(self): return self.LVLimit # 限制等级
     def GetTemplateID(self): return self.TemplateID # 模板编号
 
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
index d7caf38..b295e14 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
@@ -238,6 +238,7 @@
     curPlayer.SetDict(ChConfig.Def_PlayerKey_LoadMapIsLogin, 1)
     #通知时间
     Sync_PyServerDataTimeToClient(curPlayer)
+    Sync_OpenServerDay(curPlayer)
     #通知玩家基本信息
     curPlayer.Sync_ClientPlayerLogin()
     
@@ -5326,6 +5327,19 @@
     NetPackCommon.SendFakePack(curPlayer, serverDateTime)
     return
 
+## 通知开服天数
+#  @param curPlayer: 玩家实例
+#  @return: None
+def Sync_OpenServerDay(curPlayer):
+    gw = GameWorld.GetGameWorld()
+    packData = ChPyNetSendPack.tagOpenServerDay()
+    packData.Clear()
+    packData.Day = gw.GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ServerDay)
+    packData.IsMixServer = gw.GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_IsMixServer)
+    packData.MixDay = gw.GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_MixServerDay)
+    packData.OpenServerTime = GameWorld.ChangeTimeNumToStr(gw.GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_InitOpenServerTime))
+    NetPackCommon.SendFakePack(curPlayer, packData)
+    return
 
 #===============================================================================
 # //B4 09 玩家移动 # tagCMPyMove
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 5e300bb..fb1100f 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBossReborn.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBossReborn.py
@@ -59,6 +59,7 @@
     actBossRebornInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_BossReborn, {})
     bossRebornID = actBossRebornInfo.get(ShareDefine.ActKey_ID, 0)
     state = actBossRebornInfo.get(ShareDefine.ActKey_State, 0)
+    cfgID = actBossRebornInfo.get(ShareDefine.ActKey_CfgID, 0)
     
     playerBossRebornID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BossRebornID)  # 玩家身上的活动ID
     
@@ -66,10 +67,11 @@
     if bossRebornID == playerBossRebornID:
         #GameWorld.DebugLog("BOSS复活活动ID不变,不处理!", curPlayer.GetPlayerID())
         return
-    actBossIpyData = IpyGameDataPY.GetIpyGameData("ActBossReborn", actBossRebornInfo.get(ShareDefine.ActKey_CfgID, 0))
-    if not actBossIpyData:
-        return
-    templateID = actBossIpyData.GetTemplateID()
+    
+    templateID = 0
+    if cfgID:
+        actBossIpyData = IpyGameDataPY.GetIpyGameData("ActBossReborn", cfgID)
+        templateID = 0 if not actBossIpyData else actBossIpyData.GetTemplateID()
     playerTemplateID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BossRebornTemplateID)
     
     GameWorld.DebugLog("BOSS复活重置! costRebateID=%s,playerCostRebateID=%s,state=%s,templateID=%s,playerTemplateID=%s" 
@@ -210,9 +212,10 @@
 def SyncBossRebornInfo(curPlayer):
     actBossRebornInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_BossReborn, {})
     state = actBossRebornInfo.get(ShareDefine.ActKey_State, 0)
-    if not state:
+    cfgID = actBossRebornInfo.get(ShareDefine.ActKey_CfgID, 0)
+    if not state or not cfgID:
         return
-    actBossIpyData = IpyGameDataPY.GetIpyGameData("ActBossReborn", actBossRebornInfo.get(ShareDefine.ActKey_CfgID, 0))
+    actBossIpyData = IpyGameDataPY.GetIpyGameData("ActBossReborn", cfgID)
     if not actBossIpyData:
         return
     templateID = actBossIpyData.GetTemplateID()
@@ -225,6 +228,7 @@
     actInfo.Clear()
     actInfo.StartDate = actBossIpyData.GetStartDate()
     actInfo.EndtDate = actBossIpyData.GetEndDate()
+    actInfo.ResetType = actBossIpyData.GetResetType()
     actInfo.LimitLV = actBossIpyData.GetLVLimit()
     actInfo.TaskInfo = []
     for ipyData in ipyDataList:
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFlashGiftbag.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFlashGiftbag.py
index dd67884..43396b0 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFlashGiftbag.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFlashGiftbag.py
@@ -68,21 +68,27 @@
     actInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_FlashGiftbag, {})
     actID = actInfo.get(ShareDefine.ActKey_ID, 0)
     state = actInfo.get(ShareDefine.ActKey_State, 0)
+    cfgID = actInfo.get(ShareDefine.ActKey_CfgID, 0)
     
     playerActID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FlashGiftbagID) # 玩家身上的活动ID
     
-    # 活动ID 相同的话不处理
-    if actID == playerActID:
+    if actID != playerActID:
+        giftbagTypeList = GetGiftbagTypeList(cfgID, actInfo.get(ShareDefine.ActKey_DayIndex, 0))
+        ResetGiftbagItemBuyCount(curPlayer, giftbagTypeList)
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FlashGiftbagID, actID)
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FlashGiftbagMailState, 0)
+        GameWorld.DebugLog("限时礼包重置! actID=%s,playerActID=%s,state=%s,giftbagTypeList=%s" % (actID, playerActID, state, giftbagTypeList), playerID)
+        Sync_FlashGiftbagActionInfo(curPlayer)
+    else:
         GameWorld.DebugLog("限时礼包活动ID不变,不处理!", curPlayer.GetPlayerID())
-        return
-    
-    giftbagTypeList = GetGiftbagTypeList(actInfo.get(ShareDefine.ActKey_CfgID, 0), actInfo.get(ShareDefine.ActKey_DayIndex, 0))
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FlashGiftbagID, actID)
-    ResetGiftbagItemBuyCount(curPlayer, giftbagTypeList)
-    
-    GameWorld.DebugLog("限时礼包重置! actID=%s,playerActID=%s,state=%s,giftbagTypeList=%s" % (actID, playerActID, state, giftbagTypeList), playerID)
-    
-    Sync_FlashGiftbagActionInfo(curPlayer)
+        
+    playerMailState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FlashGiftbagMailState) # 玩家身上的活动提醒邮件状态
+    if actID and state and state != playerMailState:
+        flashGiftbagIpyData = IpyGameDataPY.GetIpyGameData("ActFlashGiftbag", cfgID)
+        if flashGiftbagIpyData and flashGiftbagIpyData.GetMailKey() and curPlayer.GetLV() >= flashGiftbagIpyData.GetLVLimit():
+            PlayerControl.SendMailByKey(flashGiftbagIpyData.GetMailKey(), [playerID], flashGiftbagIpyData.GetMailItemPrize())
+            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FlashGiftbagMailState, state)
+            GameWorld.DebugLog("    发送新限时礼包邮件提醒! state=%s,playerMailState=%s" % (state, playerMailState), playerID)
     return True
 
 def ResetGiftbagItemBuyCount(curPlayer, giftbagTypeList):
@@ -232,6 +238,7 @@
     packInfo = ChPyNetSendPack.tagMCFlashGiftbagInfo()
     packInfo.StartDate = flashGiftbagIpyData.GetStartDate()
     packInfo.EndtDate = flashGiftbagIpyData.GetEndDate()
+    packInfo.AdvanceMinutes = flashGiftbagIpyData.GetAdvanceMinutes()
     packInfo.ActivityTime = []
     for i, startTime in enumerate(startTimeList):
         timeInfo = ChPyNetSendPack.tagMCFlashGiftbagTime()
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerSpringSale.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerSpringSale.py
index 3526621..68735b3 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerSpringSale.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerSpringSale.py
@@ -62,21 +62,27 @@
     actInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_SpringSale, {})
     actID = actInfo.get(ShareDefine.ActKey_ID, 0)
     state = actInfo.get(ShareDefine.ActKey_State, 0)
+    cfgID = actInfo.get(ShareDefine.ActKey_CfgID, 0)
     
     playerActID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_SpringSaleID) # 玩家身上的活动ID
     
-    # 活动ID 相同的话不处理
-    if actID == playerActID:
-        GameWorld.DebugLog("限时特惠活动ID不变,不处理!", curPlayer.GetPlayerID())
-        return
-    
-    shopTypeList = GetShopTypeList(actInfo.get(ShareDefine.ActKey_CfgID, 0), actInfo.get(ShareDefine.ActKey_DayIndex, 0))
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_SpringSaleID, actID)
-    FunctionNPCCommon.ResetShopItemBuyCountByShopType(curPlayer, shopTypeList)
-    
-    GameWorld.DebugLog("限时特惠重置! actID=%s,playerActID=%s,state=%s,shopTypeList=%s" % (actID, playerActID, state, shopTypeList), playerID)
-    
-    Sync_SpringSaleActionInfo(curPlayer)
+    if actID != playerActID:
+        shopTypeList = GetShopTypeList(cfgID, actInfo.get(ShareDefine.ActKey_DayIndex, 0))
+        FunctionNPCCommon.ResetShopItemBuyCountByShopType(curPlayer, shopTypeList)
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_SpringSaleID, actID)
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_SpringSaleMailState, 0)
+        Sync_SpringSaleActionInfo(curPlayer)
+        GameWorld.DebugLog("限时特惠重置! actID=%s,playerActID=%s,state=%s,shopTypeList=%s" % (actID, playerActID, state, shopTypeList), playerID)
+    else:
+        GameWorld.DebugLog("限时特惠活动ID不变,不处理!", playerID)
+        
+    playerMailState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_SpringSaleMailState) # 玩家身上的活动提醒邮件状态
+    if actID and state and state != playerMailState:
+        springSaleIpyData = IpyGameDataPY.GetIpyGameData("ActSpringSale", cfgID)
+        if springSaleIpyData and springSaleIpyData.GetMailKey() and curPlayer.GetLV() >= springSaleIpyData.GetLVLimit():
+            PlayerControl.SendMailByKey(springSaleIpyData.GetMailKey(), [playerID], springSaleIpyData.GetMailItemPrize())
+            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_SpringSaleMailState, state)
+            GameWorld.DebugLog("    发送新限时特惠邮件提醒! state=%s,playerMailState=%s" % (state, playerMailState), playerID)
     return True
 
 def Sync_SpringSaleActionInfo(curPlayer):
@@ -107,6 +113,7 @@
     packInfo = ChPyNetSendPack.tagMCSpringSaleInfo()
     packInfo.StartDate = springSaleIpyData.GetStartDate()
     packInfo.EndtDate = springSaleIpyData.GetEndDate()
+    packInfo.AdvanceMinutes = springSaleIpyData.GetAdvanceMinutes()
     packInfo.ActivityTime = []
     for i, startTime in enumerate(startTimeList):
         timeInfo = ChPyNetSendPack.tagMCSpringSaleTime()
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
index ed961fe..c73e566 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
@@ -127,6 +127,7 @@
 Def_Notify_Separator = '+'
 
 #通知地图服务器并设置该字典值
+Def_Notify_WorldKey_InitOpenServerTime = 'InitOpenServerTime'   # 开服时间
 Def_Notify_WorldKey_ServerDay = 'ServerDay'               # 开服天数
 Def_Notify_WorldKey_IsMixServer = 'IsMixServer'           # 是否合服服务器
 Def_Notify_WorldKey_MixServerDay = 'MixServerDay'         # 合服天数

--
Gitblit v1.8.0