From e334d90099846d5eaf0ec42fb294b63db3932468 Mon Sep 17 00:00:00 2001
From: xdh <xiefantasy@qq.com>
Date: 星期五, 10 八月 2018 18:01:52 +0800
Subject: [PATCH] On master: boss复活

---
 ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py                                                      |    7 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py                               |  290 ++++++++++++----
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTreasure.py                         |    4 
 PyNetPack/ServerPack/MapServerPack/HAB_Activity/MCBossRebornInfo.h                                                   |   27 +
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_BossHome.py   |    7 
 ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py                                                    |  290 ++++++++++++----
 ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerDBGSEvent.py                                             |    2 
 PyNetPack/ServerPack/GameServerPack/HAC_Activity/BossRebornPoint.h                                                   |    1 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py                                 |   29 -
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_TrialTower.py |    3 
 PySysDB/PySysDBPY.h                                                                                                  |   11 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBossReborn.py                       |  112 ++++--
 ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py                                                        |    6 
 ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldActionControl.py                              |   28 
 PyNetPack/ServerPack/MapServerPack/HAB_Activity/MCBossRebornInfo                                                     |    0 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py                                   |    6 
 ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldBoss.py                                       |   61 +--
 ServerPython/CoreServerGroup/GameServer/Script/Player/ChPlayer.py                                                    |   56 +++
 /dev/null                                                                                                            |   10 
 ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldProcess.py                                    |    7 
 ServerPython/CoreServerGroup/GameServer/Script/PyGameData.py                                                         |    4 
 PyNetPack/ServerPack/MapServerPack/HAB_Activity/MCBossRebornInfo.des                                                 |    1 
 PySysDB/PySysDBG.h                                                                                                   |    1 
 ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerBourse.py                                                |    3 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py                                      |    8 
 25 files changed, 663 insertions(+), 311 deletions(-)

diff --git a/PyNetPack/ServerPack/GameServerPack/HAC_Activity/BossRebornInfo.des b/PyNetPack/ServerPack/GameServerPack/HAC_Activity/BossRebornInfo.des
deleted file mode 100644
index e5412ee..0000000
--- a/PyNetPack/ServerPack/GameServerPack/HAC_Activity/BossRebornInfo.des
+++ /dev/null
@@ -1 +0,0 @@
-AC 07 BOSS复活活动信息 #tagGCBossRebornInfo
diff --git a/PyNetPack/ServerPack/GameServerPack/HAC_Activity/BossRebornInfo.h b/PyNetPack/ServerPack/GameServerPack/HAC_Activity/BossRebornInfo.h
deleted file mode 100644
index 5d065a9..0000000
--- a/PyNetPack/ServerPack/GameServerPack/HAC_Activity/BossRebornInfo.h
+++ /dev/null
@@ -1,10 +0,0 @@
-// AC 07 BOSS复活活动信息 #tagGCBossRebornInfo
-
-struct    tagGCBossRebornInfo
-{
-	tagHead		Head;
-	char		StartDate[10];	// 开始日期 y-m-d
-	char		EndtDate[10];	// 结束日期 y-m-d
-	WORD		WorldLV;	// 世界等级
-	WORD		LimitLV;	// 限制等级
-};
diff --git a/PyNetPack/ServerPack/GameServerPack/HAC_Activity/BossRebornPoint.h b/PyNetPack/ServerPack/GameServerPack/HAC_Activity/BossRebornPoint.h
index fe20b4c..ab20773 100644
--- a/PyNetPack/ServerPack/GameServerPack/HAC_Activity/BossRebornPoint.h
+++ b/PyNetPack/ServerPack/GameServerPack/HAC_Activity/BossRebornPoint.h
@@ -4,4 +4,5 @@
 {
 	tagHead		Head;
 	DWORD		Point;	// 复活点数
+	DWORD		TotalPoint;	// 复活总点数
 };
diff --git a/PyNetPack/ServerPack/GameServerPack/HAC_Activity/BossRebornInfo b/PyNetPack/ServerPack/MapServerPack/HAB_Activity/MCBossRebornInfo
similarity index 100%
rename from PyNetPack/ServerPack/GameServerPack/HAC_Activity/BossRebornInfo
rename to PyNetPack/ServerPack/MapServerPack/HAB_Activity/MCBossRebornInfo
diff --git a/PyNetPack/ServerPack/MapServerPack/HAB_Activity/MCBossRebornInfo.des b/PyNetPack/ServerPack/MapServerPack/HAB_Activity/MCBossRebornInfo.des
new file mode 100644
index 0000000..cab6b20
--- /dev/null
+++ b/PyNetPack/ServerPack/MapServerPack/HAB_Activity/MCBossRebornInfo.des
@@ -0,0 +1 @@
+AB 04 Boss复活活动信息 #tagMCBossRebornInfo
diff --git a/PyNetPack/ServerPack/MapServerPack/HAB_Activity/MCBossRebornInfo.h b/PyNetPack/ServerPack/MapServerPack/HAB_Activity/MCBossRebornInfo.h
new file mode 100644
index 0000000..a5f85f1
--- /dev/null
+++ b/PyNetPack/ServerPack/MapServerPack/HAB_Activity/MCBossRebornInfo.h
@@ -0,0 +1,27 @@
+// AB 04 Boss复活活动信息 #tagMCBossRebornInfo
+
+struct    tagMCBossRebornAwardItem
+{
+	DWORD		ItemID;
+	WORD		ItemCount;
+	BYTE		IsBind;
+};
+
+struct    tagMCBossRebornTaskInfo
+{
+	BYTE		TaskID;	// id
+	BYTE		TotalTimes;	// 可完成总次数,0表示不限次数
+	BYTE		SingleTimes;	// 单次领奖需要次数
+	BYTE		AwardItemCount;	// 奖励物品数
+	tagMCBossRebornAwardItem		AwardItem[AwardItemCount];	// 奖励物品信息
+};
+
+struct    tagMCBossRebornInfo
+{
+	tagHead		Head;
+	char		StartDate[10];	// 开始日期 y-m-d
+	char		EndtDate[10];	// 结束日期 y-m-d
+	WORD		LimitLV;	// 限制等级
+	BYTE		TaskCnt;
+	tagMCBossRebornTaskInfo		TaskInfo[TaskCnt];	
+};
diff --git a/PySysDB/PySysDBG.h b/PySysDB/PySysDBG.h
index f76ad9b..60edbb5 100644
--- a/PySysDB/PySysDBG.h
+++ b/PySysDB/PySysDBG.h
@@ -253,6 +253,7 @@
 	dict		NotifyInfoStart;	//全服提示信息 - 相对开始时间
 	dict		NotifyInfoEnd;	//全服提示信息 - 相对结束时间
 	WORD		LVLimit;	//限制等级
+	BYTE		TemplateID;	//模板编号
 };
 
 //仙界盛典活动时间表
diff --git a/PySysDB/PySysDBPY.h b/PySysDB/PySysDBPY.h
index 2c817dd..5934a45 100644
--- a/PySysDB/PySysDBPY.h
+++ b/PySysDB/PySysDBPY.h
@@ -1132,16 +1132,11 @@
 
 struct tagBossReborn
 {
-	BYTE		_ID;	//ID
+	BYTE		_TemplateID;	//模板ID
+	BYTE		_ID;	//活动条目ID
 	DWORD		TotalTimes;	//可完成的总次数,0表示不限次数
 	WORD		SingleTimes;	//单次领奖需要的次数
-	list		RewardItemID1;	//奖励物品ID1
-	list		RewardItemCnt1;	//奖励物品数量1
-	list		RewardItemID2;	//奖励物品ID2
-	list		RewardItemCnt2;	//奖励物品数量2
-	list		RewardItemID3;	//奖励物品ID3
-	list		RewardItemCnt3;	//奖励物品数量3
-	list		WorldLVList;	//世界等级
+	list		Reward;	//奖励物品ID1
 };
 
 
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
index 35c9502..7046202 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
@@ -4129,84 +4129,6 @@
 
 
 #------------------------------------------------------
-# AC 07 BOSS复活活动信息 #tagGCBossRebornInfo
-
-class  tagGCBossRebornInfo(Structure):
-    Head = tagHead()
-    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
-    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
-    WorldLV = 0    #(WORD WorldLV)// 世界等级
-    LimitLV = 0    #(WORD LimitLV)// 限制等级
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xAC
-        self.Head.SubCmd = 0x07
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
-        self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
-        self.WorldLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xAC
-        self.Head.SubCmd = 0x07
-        self.StartDate = ""
-        self.EndtDate = ""
-        self.WorldLV = 0
-        self.LimitLV = 0
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 10
-        length += 10
-        length += 2
-        length += 2
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        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.WorldLV)
-        data = CommFunc.WriteWORD(data, self.LimitLV)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                StartDate:%s,
-                                EndtDate:%s,
-                                WorldLV:%d,
-                                LimitLV:%d
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.StartDate,
-                                self.EndtDate,
-                                self.WorldLV,
-                                self.LimitLV
-                                )
-        return DumpString
-
-
-m_NAtagGCBossRebornInfo=tagGCBossRebornInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCBossRebornInfo.Head.Cmd,m_NAtagGCBossRebornInfo.Head.SubCmd))] = m_NAtagGCBossRebornInfo
-
-
-#------------------------------------------------------
 # AC 08 boss复活点数通知 #tagGCBossRebornPoint
 
 class  tagGCBossRebornPoint(Structure):
@@ -4215,6 +4137,7 @@
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
                   ("Point", c_int),    # 复活点数
+                  ("TotalPoint", c_int),    # 复活总点数
                   ]
 
     def __init__(self):
@@ -4232,6 +4155,7 @@
         self.Cmd = 0xAC
         self.SubCmd = 0x08
         self.Point = 0
+        self.TotalPoint = 0
         return
 
     def GetLength(self):
@@ -4244,12 +4168,14 @@
         DumpString = '''// AC 08 boss复活点数通知 //tagGCBossRebornPoint:
                                 Cmd:%s,
                                 SubCmd:%s,
-                                Point:%d
+                                Point:%d,
+                                TotalPoint:%d
                                 '''\
                                 %(
                                 self.Cmd,
                                 self.SubCmd,
-                                self.Point
+                                self.Point,
+                                self.TotalPoint
                                 )
         return DumpString
 
@@ -20427,6 +20353,210 @@
 
 
 #------------------------------------------------------
+# AB 04 Boss复活活动信息 #tagMCBossRebornInfo
+
+class  tagMCBossRebornAwardItem(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("ItemID", c_int),    
+                  ("ItemCount", c_ushort),    
+                  ("IsBind", c_ubyte),    
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.ItemID = 0
+        self.ItemCount = 0
+        self.IsBind = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCBossRebornAwardItem)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AB 04 Boss复活活动信息 //tagMCBossRebornInfo:
+                                ItemID:%d,
+                                ItemCount:%d,
+                                IsBind:%d
+                                '''\
+                                %(
+                                self.ItemID,
+                                self.ItemCount,
+                                self.IsBind
+                                )
+        return DumpString
+
+
+class  tagMCBossRebornTaskInfo(Structure):
+    TaskID = 0    #(BYTE TaskID)// id
+    TotalTimes = 0    #(BYTE TotalTimes)// 可完成总次数,0表示不限次数
+    SingleTimes = 0    #(BYTE SingleTimes)// 单次领奖需要次数
+    AwardItemCount = 0    #(BYTE AwardItemCount)// 奖励物品数
+    AwardItem = list()    #(vector<tagMCBossRebornAwardItem> AwardItem)// 奖励物品信息
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.TaskID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.TotalTimes,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.SingleTimes,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.AwardItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.AwardItemCount):
+            temAwardItem = tagMCBossRebornAwardItem()
+            _pos = temAwardItem.ReadData(_lpData, _pos)
+            self.AwardItem.append(temAwardItem)
+        return _pos
+
+    def Clear(self):
+        self.TaskID = 0
+        self.TotalTimes = 0
+        self.SingleTimes = 0
+        self.AwardItemCount = 0
+        self.AwardItem = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 1
+        length += 1
+        length += 1
+        length += 1
+        for i in range(self.AwardItemCount):
+            length += self.AwardItem[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteBYTE(data, self.TaskID)
+        data = CommFunc.WriteBYTE(data, self.TotalTimes)
+        data = CommFunc.WriteBYTE(data, self.SingleTimes)
+        data = CommFunc.WriteBYTE(data, self.AwardItemCount)
+        for i in range(self.AwardItemCount):
+            data = CommFunc.WriteString(data, self.AwardItem[i].GetLength(), self.AwardItem[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                TaskID:%d,
+                                TotalTimes:%d,
+                                SingleTimes:%d,
+                                AwardItemCount:%d,
+                                AwardItem:%s
+                                '''\
+                                %(
+                                self.TaskID,
+                                self.TotalTimes,
+                                self.SingleTimes,
+                                self.AwardItemCount,
+                                "..."
+                                )
+        return DumpString
+
+
+class  tagMCBossRebornInfo(Structure):
+    Head = tagHead()
+    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
+    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
+    LimitLV = 0    #(WORD LimitLV)// 限制等级
+    TaskCnt = 0    #(BYTE TaskCnt)
+    TaskInfo = list()    #(vector<tagMCBossRebornTaskInfo> TaskInfo)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xAB
+        self.Head.SubCmd = 0x04
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.TaskCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.TaskCnt):
+            temTaskInfo = tagMCBossRebornTaskInfo()
+            _pos = temTaskInfo.ReadData(_lpData, _pos)
+            self.TaskInfo.append(temTaskInfo)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xAB
+        self.Head.SubCmd = 0x04
+        self.StartDate = ""
+        self.EndtDate = ""
+        self.LimitLV = 0
+        self.TaskCnt = 0
+        self.TaskInfo = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 10
+        length += 10
+        length += 2
+        length += 1
+        for i in range(self.TaskCnt):
+            length += self.TaskInfo[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        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.LimitLV)
+        data = CommFunc.WriteBYTE(data, self.TaskCnt)
+        for i in range(self.TaskCnt):
+            data = CommFunc.WriteString(data, self.TaskInfo[i].GetLength(), self.TaskInfo[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                StartDate:%s,
+                                EndtDate:%s,
+                                LimitLV:%d,
+                                TaskCnt:%d,
+                                TaskInfo:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.StartDate,
+                                self.EndtDate,
+                                self.LimitLV,
+                                self.TaskCnt,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCBossRebornInfo=tagMCBossRebornInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCBossRebornInfo.Head.Cmd,m_NAtagMCBossRebornInfo.Head.SubCmd))] = m_NAtagMCBossRebornInfo
+
+
+#------------------------------------------------------
 # AB 23 摇骰子奖励回包 #tagMCDiceAward
 
 class  tagMCDiceAward(Structure):
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldActionControl.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldActionControl.py
index b33131c..3662c3e 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldActionControl.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldActionControl.py
@@ -71,11 +71,7 @@
         ipyData = operationActionDict[ShareDefine.OperationActionName_ExpRate][0]
         if ipyData:
             Sync_OperationAction_ExpRate(ipyData, curPlayer)
-    # BOSS复活活动进行中
-    if ShareDefine.OperationActionName_BossReborn in operationActionDict:
-        ipyData = operationActionDict[ShareDefine.OperationActionName_BossReborn][0]
-        if ipyData:
-            GameWorldBoss.Sync_OperationAction_BossReborn(ipyData, curPlayer)
+
     # 仙界盛典活动进行中
     if ShareDefine.OperationActionName_FairyCeremony in operationActionDict:
         ipyData = operationActionDict[ShareDefine.OperationActionName_FairyCeremony][0]
@@ -327,7 +323,7 @@
                              ShareDefine.ActKey_ShopTypeList:todayShopType}
     # Boss复活活动
     elif actName == ShareDefine.OperationActionName_BossReborn:
-        mapServerInfoDict = {ShareDefine.ActKey_ID:actID}
+        mapServerInfoDict = {ShareDefine.ActKey_ID:actID,ShareDefine.ActKey_TemplateID:ipyData.GetTemplateID()}
     # 限时礼包活动
     elif actName == ShareDefine.OperationActionName_FlashGiftbag:
         isDayReset = ipyData.GetIsDayReset()
@@ -397,7 +393,8 @@
                 PlayerControl.WorldNotify(0, notifyKey, paramList)
                 
         dictName = ChConfig.Def_WorldKey_OperationActionState % actName
-        if not isReload and gameWorld.GetDictByKey(dictName) == state:
+        preState = gameWorld.GetDictByKey(dictName)
+        if not isReload and preState == state:
             #已经是这个状态了
             continue
         #更新字典值
@@ -408,6 +405,11 @@
         curActID = sendMapServerMsgDict.get(ShareDefine.ActKey_ID)
         if state >= 1 and curActID and PlayerDBGSEvent.GetDBGSTrig_ByKey(dbOperationActIDKey) != curActID:
             PlayerDBGSEvent.SetDBGSTrig_ByKey(dbOperationActIDKey, curActID)
+            if actName in ShareDefine.NeedWorldLVOperationActNameList:
+                #记录开启时世界等级
+                worldLV = PlayerDBGSEvent.GetDBGSTrig_ByKey(ShareDefine.Def_Notify_WorldKey_WorldAverageLv)
+                PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_OActWorldLV % actName, worldLV)
+                
             #此处为活动开启时
             if actName == ShareDefine.OperationActionName_BossReborn:
                 #重置BOSS复活点
@@ -416,10 +418,7 @@
                 #重置仙界盛典
                 PlayerFairyCeremony.ResetFairyCeremony()
             
-            if actName in ShareDefine.NeedWorldLVOperationActNameList:
-                #记录开启时世界等级
-                worldLV = PlayerDBGSEvent.GetDBGSTrig_ByKey(ShareDefine.Def_Notify_WorldKey_WorldAverageLv)
-                PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_OActWorldLV % actName, worldLV)
+            
                 
         if state == 1 and actName in ShareDefine.NeedWorldLVOperationActNameList:
             actWorldLV = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_OActWorldLV % actName)
@@ -434,11 +433,12 @@
                 pass
         elif actName == ShareDefine.OperationActionName_BossReborn:
             if isReload and ipyData:
-                GameWorldBoss.Sync_OperationAction_BossReborn(ipyData)
+                GameWorldBoss.SetBossRebornNeedPoint(True)
+
         elif actName == ShareDefine.OperationActionName_FairyCeremony:
             if isReload and ipyData:
                 PlayerFairyCeremony.Sync_OperationAction_FairyCeremony(ipyData)
-            if state == 0:
+            if preState != state and state == 0:
                 PlayerFairyCeremony.OnFairyCeremonyEnd()
         elif actName == ShareDefine.OperationActionName_RealmPoint:
             if isReload and ipyData:
@@ -449,7 +449,7 @@
         sendMapServerMsgDict[ShareDefine.ActKey_State] = state
         GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_OperationActionInfo % actName, sendMapServerMsgDict)
         
-        GameWorld.Log("运营活动变更: actName=%s,state=%s,dictName=%s, %s" % (actName, state, dictName, sendMapServerMsgDict))
+        GameWorld.Log("运营活动变更: actName=%s,preState=%s,state=%s,dictName=%s, %s" % (actName, preState, state, dictName, sendMapServerMsgDict))
     return
 
 def Sync_OperationAction_ExpRate(ipyData, curPlayer=None):
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldBoss.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldBoss.py
index 7c54f4a..97db3c6 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldBoss.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldBoss.py
@@ -888,7 +888,7 @@
         return
     totalPoint = gameWorld.GetDictByKey(ChConfig.Def_WorldKey_BossRebornNeedPoint)
     if not totalPoint:
-        totalPoint = __SetBossRebornNeedPoint()
+        totalPoint = SetBossRebornNeedPoint()
     if not totalPoint:
         GameWorld.Log(' 增加boss复活点 没有总点数!!!!')
         return
@@ -935,27 +935,35 @@
 def ResetBossRebornPoint():
     ## 重置boss复活点
     PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_BossRebornPoint, 0)
-    Sync_BossRebornPoint()
-    
+    # 活动开启时设置参数 服务器人数
+    lvLimit = IpyGameDataPY.GetFuncCfg('ServerActivePlayerCnt')
+    yesterdayPlayerCnt = len([1 for lv in PyGameData.g_yesterdayPlayerLVDict.values() if lv >= lvLimit]) #参数昨日活跃人数
+    serverActivePlayerCnt = eval(IpyGameDataPY.GetFuncCompileCfg('ServerActivePlayerCnt', 2))
+    PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_BRServerPlayerCnt, serverActivePlayerCnt)
+    GameWorld.Log('    boss复活活动开启时设置昨日活跃人数yesterdayPlayerCnt=%s'%yesterdayPlayerCnt)
     #重新计算需要总点数
-    __SetBossRebornNeedPoint()
+    SetBossRebornNeedPoint()
+    
+    Sync_BossRebornPoint()
     return
 
-def __SetBossRebornNeedPoint():
+def SetBossRebornNeedPoint(isSync=False):
     totalPointList = IpyGameDataPY.GetFuncEvalCfg('BossRebornTotalPoint')
-    worldLVList = IpyGameDataPY.GetFuncEvalCfg('BossRebornTotalPoint', 2)
+    playerCntList = IpyGameDataPY.GetFuncEvalCfg('BossRebornTotalPoint', 2)
     
-    actWorldLV = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_OActWorldLV % ShareDefine.OperationActionName_BossReborn)
+    BRServerPlayerCnt = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_BRServerPlayerCnt)
     
-    index = len(worldLVList)-1
-    for i, lv in enumerate(worldLVList):
-        prelv = 0 if i ==0 else worldLVList[i-1]
-        if prelv <=actWorldLV < lv:
+    index = len(playerCntList)-1
+    for i, cnt in enumerate(playerCntList):
+        preCnt = 0 if i ==0 else playerCntList[i-1]
+        if preCnt <=BRServerPlayerCnt < cnt:
             index = i
             break
     
     totalPoint = totalPointList[-1] if index >= len(totalPointList) else totalPointList[index]
     GameWorld.GetGameWorld().SetDict(ChConfig.Def_WorldKey_BossRebornNeedPoint, totalPoint)
+    if isSync:
+        Sync_BossRebornPoint()
     return totalPoint
 
 def BossRebornWorldNotify(curTime):
@@ -974,6 +982,10 @@
     ##通知BOSS复活点数
     packData = ChPyNetSendPack.tagGCBossRebornPoint()
     packData.Point = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_BossRebornPoint)
+    totalPoint = GameWorld.GetGameWorld().GetDictByKey(ChConfig.Def_WorldKey_BossRebornNeedPoint)
+    if not totalPoint:
+        totalPoint = SetBossRebornNeedPoint()
+    packData.TotalPoint = totalPoint
     playerManager = GameWorld.GetPlayerManager()
     if not curPlayer:
         for i in xrange(playerManager.GetActivePlayerCount()):
@@ -989,30 +1001,3 @@
         NetPackCommon.SendFakePack(curPlayer, packData)
     return
 
-
-def Sync_OperationAction_BossReborn(ipyData, curPlayer=None):
-    ## 通知boss复活活动信息
-    if not ipyData:
-        return
-    
-    bossRebornInfo = ChPyNetSendPack.tagGCBossRebornInfo()
-    bossRebornInfo.Clear()
-    bossRebornInfo.StartDate = ipyData.GetStartDate()
-    bossRebornInfo.EndtDate = ipyData.GetEndDate()
-    bossRebornInfo.WorldLV = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_OActWorldLV % ShareDefine.OperationActionName_BossReborn)
-    bossRebornInfo.LimitLV = ipyData.GetLVLimit()
-    if not curPlayer:
-        # 全服广播在线玩家
-        playerManager = GameWorld.GetPlayerManager()
-        for i in xrange(playerManager.GetActivePlayerCount()):
-            curPlayer = playerManager.GetActivePlayerAt(i)
-            if curPlayer == None or not curPlayer.GetInitOK():
-                continue
-            if PlayerControl.GetIsTJG(curPlayer):
-                continue
-            NetPackCommon.SendFakePack(curPlayer, bossRebornInfo)
-    else:
-        if PlayerControl.GetIsTJG(curPlayer):
-            return
-        NetPackCommon.SendFakePack(curPlayer, bossRebornInfo)
-    return
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldProcess.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldProcess.py
index 1071626..713981c 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldProcess.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldProcess.py
@@ -105,6 +105,7 @@
 import PlayerXMZZ
 import PlayerTeam
 import PyGameData
+import ChPlayer
 #---------------------------------------------------------------------
 
 #---------------------------------------------------------------------
@@ -161,7 +162,8 @@
     # GameDataRecord.OnDayResetRecord()
     # 仙盟红包
     PlayerFamilyRedPacket.DoOnDay()
-    
+    # 玩家等级记录更新
+    ChPlayer.UpdataPlayerLVInfo()
     # 通知开服天数
     #openServerDay = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_ServerDay)
     #GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_ServerDay, openServerDay)
@@ -1231,6 +1233,8 @@
     __DoMixServerInit()
     #仙魔之争
     PlayerXMZZ.OnGameServerInitOK()
+    #加载活跃玩家等级信息
+    ChPlayer.LoadPlayerLVData()
     #世界boss被杀次数重置
     #GameWorldBoss.CheckResetBossKilledCntOnServerInit()
     #GameWorldActionTeHui.OnGameServerInitOK() # 特惠活动初始化
@@ -1864,6 +1868,7 @@
 #  @return None
 def BeforeClose(tick):
     PlayerTeam.OnServerClose(tick)
+    ChPlayer.SavePlayerLVData()
     GameWorld.Log("通知C++关服!")
     GameWorld.GetGameWorld().OnServerClose()
     
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py b/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py
index 6b3d761..e807a07 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py
@@ -226,6 +226,7 @@
                         ("dict", "NotifyInfoStart", 0),
                         ("dict", "NotifyInfoEnd", 0),
                         ("WORD", "LVLimit", 0),
+                        ("BYTE", "TemplateID", 0),
                         ),
 
                 "ActFairyCeremony":(
@@ -659,7 +660,8 @@
         self.EndDate = ""
         self.NotifyInfoStart = {}
         self.NotifyInfoEnd = {}
-        self.LVLimit = 0
+        self.LVLimit = 0
+        self.TemplateID = 0
         return
         
     def GetCfgID(self): return self.CfgID # 配置ID
@@ -669,7 +671,8 @@
     def GetEndDate(self): return self.EndDate # 结束日期
     def GetNotifyInfoStart(self): return self.NotifyInfoStart # 全服提示信息 - 相对开始时间
     def GetNotifyInfoEnd(self): return self.NotifyInfoEnd # 全服提示信息 - 相对结束时间
-    def GetLVLimit(self): return self.LVLimit # 限制等级
+    def GetLVLimit(self): return self.LVLimit # 限制等级
+    def GetTemplateID(self): return self.TemplateID # 模板编号
 
 # 仙界盛典活动时间表
 class IPY_ActFairyCeremony():
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/ChPlayer.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/ChPlayer.py
index d6c0c46..99e2f5e 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/ChPlayer.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/ChPlayer.py
@@ -65,6 +65,7 @@
 import PlayerGeTui
 import GameWorldActionControl
 import GMT_CTG
+import PyGameData
 #---------------------------------------------------------------------
 
 #---------------------------------------------------------------------
@@ -154,6 +155,8 @@
         PlayerGeTui.CleanNewGuyCallBackGeTui(curPlayer.GetID())
         #活动
         GameWorldActionControl.OnPlayerLogin(curPlayer)
+        #玩家等级记录
+        PyGameData.g_todayPlayerLVDict[curPlayer.GetID()] = curPlayer.GetLV()
         
         GMT_CTG.OnPlayerLogin(curPlayer)
         
@@ -620,6 +623,10 @@
     elif packType == IPY_GameServer.CDBPlayerRefresh_LV:
         curPlayer.SetLV(packValue)
         PlayerSocial.UpdateSocialInfo(curPlayer, packType, packValue)
+        #玩家等级记录
+        playerID = curPlayer.GetID()
+        if playerID in PyGameData.g_todayPlayerLVDict:
+            PyGameData.g_todayPlayerLVDict[playerID] = packValue
 
     elif packType == IPY_GameServer.CDBPlayerRefresh_Job:
         curPlayer.SetJob(packValue)
@@ -1114,5 +1121,52 @@
     NetPackCommon.SendFakePack(curPlayer, serverDateTime)
     return
 
+def UpdataPlayerLVInfo():
+    #Onday更新玩家等级信息
+    PyGameData.g_yesterdayPlayerLVDict = PyGameData.g_todayPlayerLVDict
+    PyGameData.g_todayPlayerLVDict = {}
+    playerManager = GameWorld.GetPlayerManager()
+    for i in xrange(playerManager.GetActivePlayerCount()):
+        curPlayer = playerManager.GetActivePlayerAt(i)
+        if curPlayer == None or not curPlayer.GetInitOK():
+            continue
+        if PlayerControl.GetIsTJG(curPlayer):
+            continue
+        PyGameData.g_todayPlayerLVDict[curPlayer.GetID()] = curPlayer.GetLV()
+    return
+
+def LoadPlayerLVData():
+    #服务器开启时加载活跃玩家等级信息
+    universalRecMgr = GameWorld.GetUniversalRecMgr()
+
+    recDataList = universalRecMgr.GetTypeList(ShareDefine.Def_UniversalGameRecType_TodayPlayerLVInfo)
+    allCnt = recDataList.Count()
+    for index in xrange(allCnt):
+        recData = recDataList.At(index)
+        PyGameData.g_todayPlayerLVDict[recData.GetValue1()] = recData.GetValue2()
     
-    
\ No newline at end of file
+    recDataList = universalRecMgr.GetTypeList(ShareDefine.Def_UniversalGameRecType_YesterdayPlayerLVInfo)
+    allCnt = recDataList.Count()
+    for index in xrange(allCnt):
+        recData = recDataList.At(index)
+        PyGameData.g_yesterdayPlayerLVDict[recData.GetValue1()] = recData.GetValue2()
+    GameWorld.DebugLog('    服务器开启时加载活跃玩家等级信息g_todayPlayerLVDict=%s, g_yesterdayPlayerLVDict=%s'%(PyGameData.g_todayPlayerLVDict,PyGameData.g_yesterdayPlayerLVDict))
+    return
+
+def SavePlayerLVData():
+    #服务器关闭前时保存活跃玩家等级信息
+    GameWorld.GetUniversalRecMgr().Delete(ShareDefine.Def_UniversalGameRecType_TodayPlayerLVInfo)
+    GameWorld.GetUniversalRecMgr().Delete(ShareDefine.Def_UniversalGameRecType_YesterdayPlayerLVInfo)
+    universalRecMgr = GameWorld.GetUniversalRecMgr()
+    recDataList = universalRecMgr.GetTypeList(ShareDefine.Def_UniversalGameRecType_TodayPlayerLVInfo)
+    for playerID, lv in PyGameData.g_todayPlayerLVDict.items():
+        recData = recDataList.AddRec()
+        recData.SetValue1(playerID)
+        recData.SetValue2(lv)
+    
+    recDataList = universalRecMgr.GetTypeList(ShareDefine.Def_UniversalGameRecType_YesterdayPlayerLVInfo)
+    for playerID, lv in PyGameData.g_yesterdayPlayerLVDict.items():
+        recData = recDataList.AddRec()
+        recData.SetValue1(playerID)
+        recData.SetValue2(lv)
+    return
\ No newline at end of file
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerBourse.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerBourse.py
index e1ac5fc..ef8aa1b 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerBourse.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerBourse.py
@@ -35,7 +35,7 @@
 import time
 import json
 
-Def_Sort_IndexList_Interval = IpyGameDataPY.GetFuncCfg('BourseUpdataCD')  #五分钟更新一次子索引列表
+
 g_lastSortTimeForQueryTypeDict = {}     #记录对应查询类型上次更新子索引列表时间
 g_dict_Of_QueryTypeIndexList = {}       #储存对应查询类型的排序列表的字典
 
@@ -215,6 +215,7 @@
     lastSortTick = g_lastSortTimeForQueryTypeDict.get(queryType, 0)
     
     queryTypeList = g_dict_Of_QueryTypeIndexList.get(queryType, None)
+    Def_Sort_IndexList_Interval = IpyGameDataPY.GetFuncCfg('BourseUpdataCD')  #五分钟更新一次子索引列表
     if queryTypeList == None or tick - lastSortTick > Def_Sort_IndexList_Interval:
         SortIndexList(queryType)#重新排序指定类型
         lastSortTick = tick
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerDBGSEvent.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerDBGSEvent.py
index cdc822a..9e96568 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerDBGSEvent.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerDBGSEvent.py
@@ -144,6 +144,8 @@
 Def_OActWorldLV = "OActWorldLV_%s"
 #boss复活活动当前复活点
 Def_BossRebornPoint = "BossRebornPoint"
+#boss复活活动参数服务器人数
+Def_BRServerPlayerCnt = "BRServerPlayerCnt"
 
 ## 查找事件
 #  @param findID 查找的ID
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/PyGameData.py b/ServerPython/CoreServerGroup/GameServer/Script/PyGameData.py
index 947d2f7..36b4bf3 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/PyGameData.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/PyGameData.py
@@ -62,5 +62,7 @@
 g_bossShuntDeadLine = {} # boss分流线路boss已死亡的线路 {bossID:[lineID, ...], ...}
 g_bossShuntDeadLineChangeBoss = [] # boss分流已死亡线路有变更的boss列表
 
-g_ctgOfflinePlayerInfo = {} # {playerID:[[ctgInfo], ...], ...} # 离线玩家CTG信息缓存
+g_todayPlayerLVDict = {} #今日玩家等级字典 {playerID:lv,..}
+g_yesterdayPlayerLVDict = {} #昨日玩家等级字典{playerID:lv,..}
 
+g_ctgOfflinePlayerInfo = {} # {playerID:[[ctgInfo], ...], ...} # 离线玩家CTG信息缓存
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
index e9230e6..5930ffe 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
@@ -230,7 +230,7 @@
                            OperationActionName_FlashGiftbag, OperationActionName_FairyCeremony,
                            OperationActionName_RealmPoint]
 #需要记录开启活动时的世界等级的运营活动
-NeedWorldLVOperationActNameList = [OperationActionName_BossReborn, OperationActionName_FairyCeremony]
+NeedWorldLVOperationActNameList = [OperationActionName_FairyCeremony]
 
 #活动信息字典key定义
 ActKey_ID = "ID" # 活动ID,唯一标识的ID,一般是活动开启的time值
@@ -920,8 +920,8 @@
                                 Def_UniversalGameRecType_LVAwardRecord,  #玩家等级奖励记录 3
                                 Def_UniversalGameRecType_LimitFBOpenRecord,#限时副本开启时间记录4
                                 Def_UniversalGameRecType_DujieHelpCntRecord, # 渡劫副本护法次数5
-                                Def_UniversalGameRecType_6,
-                                Def_UniversalGameRecType_7,
+                                Def_UniversalGameRecType_TodayPlayerLVInfo, #今日活跃玩家等级信息6
+                                Def_UniversalGameRecType_YesterdayPlayerLVInfo,#昨日活跃玩家等级信息7
                                 Def_UniversalGameRecType_8,
                                 Def_UniversalGameRecType_9,
                                 Def_UniversalGameRecType_10,
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index b4da433..fd13d42 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -3553,9 +3553,9 @@
 
 #BOSS复活
 Def_PDict_BossRebornID = "BossRebornID"  # 玩家身上的BOSS复活活动ID,唯一标识,取活动开始日期time值
+Def_PDict_BossRebornTemplateID = "BossRebornTemplateID"  # 玩家身上的BOSS复活模板ID
 Def_PDict_BRActionCurTimes = "BRActionCurTimes_%s" #当前完成次数 参数BOSS复活活动ID
 Def_PDict_BRActionGotTimes = "BRActionGotTimes_%s" #当前已领次数 参数BOSS复活活动ID
-Def_PDict_BRActionWorldLV = "BRActionWorldLV" #玩家身上的BOSS复活时的世界等级
 
 #仙界盛典
 Def_PDict_FairyCeremonyID = "FairyCeremonyID"  # 玩家身上的仙界盛典活动ID,唯一标识,取活动开始日期time值
@@ -4940,14 +4940,16 @@
 Def_BRAct_GodArea, #进入古神禁地副本 2
 Def_BRAct_MoneyPray, #铜钱祈愿 3
 Def_BRAct_ExpPray, #经验祈愿 4
-Def_BRAct_Treasure, #寻宝 5
+Def_BRAct_Treasure, #极品寻宝 5
 Def_BRAct_WorldBOSS, #击杀世界boss获得掉落归属 6
 Def_BRAct_BOSSHome, #击杀boss之家获得掉落归属 7
 Def_BRAct_FMT, #挑战封魔坛BOSS 8
 Def_BRAct_RunTask, #完成师门悬赏 9
 Def_BRAct_XJMJ, #完成仙界秘境 10
 Def_BRAct_KirinHome, #完成麒麟之府 11
-) = range(1, 11+1)
+Def_BRAct_TowerSweep, #符印塔扫荡 12
+Def_BRAct_RuneTreasure,  #符印寻宝 13
+) = range(1, 13+1)
 
 #全民来嗨活动定义
 PeoplePartyActIDList = (
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
index 35c9502..7046202 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -4129,84 +4129,6 @@
 
 
 #------------------------------------------------------
-# AC 07 BOSS复活活动信息 #tagGCBossRebornInfo
-
-class  tagGCBossRebornInfo(Structure):
-    Head = tagHead()
-    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
-    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
-    WorldLV = 0    #(WORD WorldLV)// 世界等级
-    LimitLV = 0    #(WORD LimitLV)// 限制等级
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xAC
-        self.Head.SubCmd = 0x07
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
-        self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
-        self.WorldLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xAC
-        self.Head.SubCmd = 0x07
-        self.StartDate = ""
-        self.EndtDate = ""
-        self.WorldLV = 0
-        self.LimitLV = 0
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 10
-        length += 10
-        length += 2
-        length += 2
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        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.WorldLV)
-        data = CommFunc.WriteWORD(data, self.LimitLV)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                StartDate:%s,
-                                EndtDate:%s,
-                                WorldLV:%d,
-                                LimitLV:%d
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.StartDate,
-                                self.EndtDate,
-                                self.WorldLV,
-                                self.LimitLV
-                                )
-        return DumpString
-
-
-m_NAtagGCBossRebornInfo=tagGCBossRebornInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCBossRebornInfo.Head.Cmd,m_NAtagGCBossRebornInfo.Head.SubCmd))] = m_NAtagGCBossRebornInfo
-
-
-#------------------------------------------------------
 # AC 08 boss复活点数通知 #tagGCBossRebornPoint
 
 class  tagGCBossRebornPoint(Structure):
@@ -4215,6 +4137,7 @@
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
                   ("Point", c_int),    # 复活点数
+                  ("TotalPoint", c_int),    # 复活总点数
                   ]
 
     def __init__(self):
@@ -4232,6 +4155,7 @@
         self.Cmd = 0xAC
         self.SubCmd = 0x08
         self.Point = 0
+        self.TotalPoint = 0
         return
 
     def GetLength(self):
@@ -4244,12 +4168,14 @@
         DumpString = '''// AC 08 boss复活点数通知 //tagGCBossRebornPoint:
                                 Cmd:%s,
                                 SubCmd:%s,
-                                Point:%d
+                                Point:%d,
+                                TotalPoint:%d
                                 '''\
                                 %(
                                 self.Cmd,
                                 self.SubCmd,
-                                self.Point
+                                self.Point,
+                                self.TotalPoint
                                 )
         return DumpString
 
@@ -20427,6 +20353,210 @@
 
 
 #------------------------------------------------------
+# AB 04 Boss复活活动信息 #tagMCBossRebornInfo
+
+class  tagMCBossRebornAwardItem(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("ItemID", c_int),    
+                  ("ItemCount", c_ushort),    
+                  ("IsBind", c_ubyte),    
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.ItemID = 0
+        self.ItemCount = 0
+        self.IsBind = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCBossRebornAwardItem)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AB 04 Boss复活活动信息 //tagMCBossRebornInfo:
+                                ItemID:%d,
+                                ItemCount:%d,
+                                IsBind:%d
+                                '''\
+                                %(
+                                self.ItemID,
+                                self.ItemCount,
+                                self.IsBind
+                                )
+        return DumpString
+
+
+class  tagMCBossRebornTaskInfo(Structure):
+    TaskID = 0    #(BYTE TaskID)// id
+    TotalTimes = 0    #(BYTE TotalTimes)// 可完成总次数,0表示不限次数
+    SingleTimes = 0    #(BYTE SingleTimes)// 单次领奖需要次数
+    AwardItemCount = 0    #(BYTE AwardItemCount)// 奖励物品数
+    AwardItem = list()    #(vector<tagMCBossRebornAwardItem> AwardItem)// 奖励物品信息
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.TaskID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.TotalTimes,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.SingleTimes,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.AwardItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.AwardItemCount):
+            temAwardItem = tagMCBossRebornAwardItem()
+            _pos = temAwardItem.ReadData(_lpData, _pos)
+            self.AwardItem.append(temAwardItem)
+        return _pos
+
+    def Clear(self):
+        self.TaskID = 0
+        self.TotalTimes = 0
+        self.SingleTimes = 0
+        self.AwardItemCount = 0
+        self.AwardItem = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 1
+        length += 1
+        length += 1
+        length += 1
+        for i in range(self.AwardItemCount):
+            length += self.AwardItem[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteBYTE(data, self.TaskID)
+        data = CommFunc.WriteBYTE(data, self.TotalTimes)
+        data = CommFunc.WriteBYTE(data, self.SingleTimes)
+        data = CommFunc.WriteBYTE(data, self.AwardItemCount)
+        for i in range(self.AwardItemCount):
+            data = CommFunc.WriteString(data, self.AwardItem[i].GetLength(), self.AwardItem[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                TaskID:%d,
+                                TotalTimes:%d,
+                                SingleTimes:%d,
+                                AwardItemCount:%d,
+                                AwardItem:%s
+                                '''\
+                                %(
+                                self.TaskID,
+                                self.TotalTimes,
+                                self.SingleTimes,
+                                self.AwardItemCount,
+                                "..."
+                                )
+        return DumpString
+
+
+class  tagMCBossRebornInfo(Structure):
+    Head = tagHead()
+    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
+    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
+    LimitLV = 0    #(WORD LimitLV)// 限制等级
+    TaskCnt = 0    #(BYTE TaskCnt)
+    TaskInfo = list()    #(vector<tagMCBossRebornTaskInfo> TaskInfo)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xAB
+        self.Head.SubCmd = 0x04
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.TaskCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.TaskCnt):
+            temTaskInfo = tagMCBossRebornTaskInfo()
+            _pos = temTaskInfo.ReadData(_lpData, _pos)
+            self.TaskInfo.append(temTaskInfo)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xAB
+        self.Head.SubCmd = 0x04
+        self.StartDate = ""
+        self.EndtDate = ""
+        self.LimitLV = 0
+        self.TaskCnt = 0
+        self.TaskInfo = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 10
+        length += 10
+        length += 2
+        length += 1
+        for i in range(self.TaskCnt):
+            length += self.TaskInfo[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        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.LimitLV)
+        data = CommFunc.WriteBYTE(data, self.TaskCnt)
+        for i in range(self.TaskCnt):
+            data = CommFunc.WriteString(data, self.TaskInfo[i].GetLength(), self.TaskInfo[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                StartDate:%s,
+                                EndtDate:%s,
+                                LimitLV:%d,
+                                TaskCnt:%d,
+                                TaskInfo:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.StartDate,
+                                self.EndtDate,
+                                self.LimitLV,
+                                self.TaskCnt,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCBossRebornInfo=tagMCBossRebornInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCBossRebornInfo.Head.Cmd,m_NAtagMCBossRebornInfo.Head.SubCmd))] = m_NAtagMCBossRebornInfo
+
+
+#------------------------------------------------------
 # AB 23 摇骰子奖励回包 #tagMCDiceAward
 
 class  tagMCDiceAward(Structure):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_BossHome.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_BossHome.py
index 1a40f3a..c07e615 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_BossHome.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_BossHome.py
@@ -82,7 +82,9 @@
 #  @return None
 def DoEnterFB(curPlayer, tick):
     playerID = curPlayer.GetPlayerID()
-
+    if curPlayer.GetHP() == 0:
+        PlayerControl.PlayerLeaveFB(curPlayer)
+        return
     # 设置副本公共属性的单独处理,防止队员进入后被修改
     if not FBCommon.GetHadSetFBPropertyMark():
         lineID = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_ReqFBFuncLine)
@@ -101,7 +103,8 @@
             infoDict = {"MapID":mapID,"LineID":lineID}
             for moneyType, moneyNum in costMoneyList:
                 if not PlayerControl.PayMoney(curPlayer, moneyType, moneyNum, ChConfig.Def_Cost_EnterFB, infoDict):
-                    GameWorld.DebugLog("仙玉不足!costGold=%s" % costGold)
+                    GameWorld.Log("仙玉不足!costGold=%s" % costGold)
+                    PlayerControl.PlayerLeaveFB(curPlayer)
                     return
         EventReport.WriteEvent_FB(curPlayer, ChConfig.Def_FBMapID_BossHome, lineID, ChConfig.CME_Log_Start)
     
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_TrialTower.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_TrialTower.py
index 1ff0067..752effe 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_TrialTower.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_TrialTower.py
@@ -38,6 +38,7 @@
 
 import random
 import math
+import PlayerBossReborn
 
 g_runeTypeDict = {}
 FBDict_Level = 'FBDict_Level'   # 副本关卡
@@ -651,4 +652,6 @@
     FBCommon.Notify_FB_Over(curPlayer, overDict)
     #成就
     PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_TowerSD, 1)
+    #BOSS复活活动
+    PlayerBossReborn.AddBossRebornActionCnt(curPlayer, ChConfig.Def_BRAct_TowerSweep, 1)
     return True
\ No newline at end of file
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
index a6319fb..be30960 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -899,16 +899,11 @@
                         ),
 
                 "BossReborn":(
+                        ("BYTE", "TemplateID", 1),
                         ("BYTE", "ID", 1),
                         ("DWORD", "TotalTimes", 0),
                         ("WORD", "SingleTimes", 0),
-                        ("list", "RewardItemID1", 0),
-                        ("list", "RewardItemCnt1", 0),
-                        ("list", "RewardItemID2", 0),
-                        ("list", "RewardItemCnt2", 0),
-                        ("list", "RewardItemID3", 0),
-                        ("list", "RewardItemCnt3", 0),
-                        ("list", "WorldLVList", 0),
+                        ("list", "Reward", 0),
                         ),
 
                 "TrialExchange":(
@@ -2753,28 +2748,18 @@
 class IPY_BossReborn():
     
     def __init__(self):
+        self.TemplateID = 0
         self.ID = 0
         self.TotalTimes = 0
         self.SingleTimes = 0
-        self.RewardItemID1 = []
-        self.RewardItemCnt1 = []
-        self.RewardItemID2 = []
-        self.RewardItemCnt2 = []
-        self.RewardItemID3 = []
-        self.RewardItemCnt3 = []
-        self.WorldLVList = []
+        self.Reward = []
         return
         
-    def GetID(self): return self.ID # ID
+    def GetTemplateID(self): return self.TemplateID # 模板ID
+    def GetID(self): return self.ID # 活动条目ID
     def GetTotalTimes(self): return self.TotalTimes # 可完成的总次数,0表示不限次数
     def GetSingleTimes(self): return self.SingleTimes # 单次领奖需要的次数
-    def GetRewardItemID1(self): return self.RewardItemID1 # 奖励物品ID1
-    def GetRewardItemCnt1(self): return self.RewardItemCnt1 # 奖励物品数量1
-    def GetRewardItemID2(self): return self.RewardItemID2 # 奖励物品ID2
-    def GetRewardItemCnt2(self): return self.RewardItemCnt2 # 奖励物品数量2
-    def GetRewardItemID3(self): return self.RewardItemID3 # 奖励物品ID3
-    def GetRewardItemCnt3(self): return self.RewardItemCnt3 # 奖励物品数量3
-    def GetWorldLVList(self): return self.WorldLVList # 世界等级
+    def GetReward(self): return self.Reward # 奖励物品ID1
 
 # 宗门试炼兑换表
 class IPY_TrialExchange():
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 f90eea0..b73e56f 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBossReborn.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBossReborn.py
@@ -38,7 +38,9 @@
         # 活动中同步活动信息
         if actCostRebateInfo.get(ShareDefine.ActKey_State):
             SyncBossRebornInfo(curPlayer)
+            SyncBossRebornPlayerInfo(curPlayer)
     return
+
 
 def RefreshOperationAction_BossReborn():
     playerManager = GameWorld.GetPlayerManager()
@@ -58,43 +60,48 @@
     bossRebornID = actBossRebornInfo.get(ShareDefine.ActKey_ID, 0)
     state = actBossRebornInfo.get(ShareDefine.ActKey_State, 0)
     
-    playerBossRebornID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BossRebornID) # 玩家身上的活动ID
+    playerBossRebornID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BossRebornID)  # 玩家身上的活动ID
     
     # 活动ID 相同的话不处理
     if bossRebornID == playerBossRebornID:
         #GameWorld.DebugLog("BOSS复活活动ID不变,不处理!", curPlayer.GetPlayerID())
         return
-    BRWorldLV = actBossRebornInfo.get(ShareDefine.ActKey_WorldLV, 0)
-    playerBRWorldLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BRActionWorldLV)
-    GameWorld.DebugLog("BOSS复活重置! costRebateID=%s,playerCostRebateID=%s,state=%s,BRWorldLV=%s,playerBRWorldLV=%s" 
-                       % (bossRebornID, playerBossRebornID, state, BRWorldLV, playerBRWorldLV), playerID)
+    templateID = actBossRebornInfo.get(ShareDefine.ActKey_TemplateID, 0)
+    playerTemplateID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BossRebornTemplateID)
+    
+    GameWorld.DebugLog("BOSS复活重置! costRebateID=%s,playerCostRebateID=%s,state=%s,templateID=%s,playerTemplateID=%s" 
+                       % (bossRebornID, playerBossRebornID, state, templateID, playerTemplateID), playerID)
     
     # 未领取的奖励邮件发放
-    __SendBossRebornMail(curPlayer, playerBRWorldLV)
+    __SendBossRebornMail(curPlayer, playerTemplateID)
     
     PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_BossRebornID, bossRebornID)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_BRActionWorldLV, BRWorldLV)
+    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_BossRebornTemplateID, templateID)
     for brid in ChConfig.BossRebornActIDList:
         PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_BRActionCurTimes % brid, 0)
         PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_BRActionGotTimes % brid, 0)
-    
+        
     SyncBossRebornInfo(curPlayer)
+    SyncBossRebornPlayerInfo(curPlayer)
     return True
 
-def __SendBossRebornMail(curPlayer, playerBRWorldLV):
-    #未领取的奖励邮件发放
+
+def __SendBossRebornMail(curPlayer, playerTemplateID):
+    # 未领取的奖励邮件发放
+    ipyDataList = IpyGameDataPY.GetIpyGameDataByCondition("BossReborn", {'TemplateID':playerTemplateID}, True)
+    if not ipyDataList:
+        return
+    
     totalItemDict = {}
-    for brid in ChConfig.BossRebornActIDList:
-        ipyData = IpyGameDataPY.GetIpyGameData('BossReborn', brid)
-        if not ipyData:
-            continue
+    for ipyData in ipyDataList:
+        brid = ipyData.GetID()
         singleTimes = ipyData.GetSingleTimes()
         curTimes = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BRActionCurTimes % brid)
         gotTimes = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BRActionGotTimes % brid)
         canGotCnt = (curTimes - gotTimes) / singleTimes
         if not canGotCnt:
             continue
-        itemDict = __GetAwardItem(curPlayer, playerBRWorldLV, ipyData, canGotCnt)
+        itemDict = __GetAwardItem(curPlayer, ipyData, canGotCnt)
         GameWorld.AddDictValue(totalItemDict, itemDict)
     
     #去掉复活点道具
@@ -104,6 +111,7 @@
     totalItemList = [[itemID, itemCnt, 1] for itemID, itemCnt in totalItemDict.items()]
     PlayerControl.SendMailByKey('BossFHUnGetMail', [curPlayer.GetID()], totalItemList)
     return
+
 
 def AddBossRebornActionCnt(curPlayer, actionID, addCnt=1):
     '''增加boss复活相关活动完成次数'''
@@ -123,12 +131,14 @@
     
     PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_BRActionCurTimes % actionID, curTimes + addCnt)
     
-    SyncBossRebornInfo(curPlayer, actionID)
+    SyncBossRebornPlayerInfo(curPlayer, actionID)
     return
+
 
 def GetBossRebornActionAward(curPlayer, actionID):
     '''领取boss复活活动奖励'''
-    ipyData = IpyGameDataPY.GetIpyGameData('BossReborn', actionID)
+    playerTemplateID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BossRebornTemplateID)
+    ipyData = IpyGameDataPY.GetIpyGameData('BossReborn', playerTemplateID, actionID)
     if not ipyData:
         return
     singleTimes = ipyData.GetSingleTimes()
@@ -138,8 +148,7 @@
         return
     
     #给奖励
-    curWorldLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BRActionWorldLV)
-    awardDict = __GetAwardItem(curPlayer, curWorldLV, ipyData)
+    awardDict = __GetAwardItem(curPlayer, ipyData)
     # 检查背包
     needSpace = len(awardDict)
     packSpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem, needSpace)
@@ -153,40 +162,25 @@
     PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_BRActionGotTimes % actionID, newGotTimes)
     for itemID, itemCnt in awardDict.items():
         ItemControler.GivePlayerItem(curPlayer, itemID, itemCnt, 1, [IPY_GameWorld.rptItem])
-    SyncBossRebornInfo(curPlayer, actionID)
+    SyncBossRebornPlayerInfo(curPlayer, actionID)
     return
 
-def __GetAwardItem(curPlayer, worldLV, ipyData, times=1):
-    worldLVList = ipyData.GetWorldLVList()
-    playerLV = curPlayer.GetLV()
-    
-    awardIndex = len(worldLVList) - 1
-    for i, lv in enumerate(worldLVList):
-        prelv = 0 if i ==0 else worldLVList[i-1]
-        if prelv<=playerLV < lv:
-            awardIndex = i
-            break
+
+def __GetAwardItem(curPlayer, ipyData, times=1):
     awardDict = {}
-    for i in xrange(3): #目前配置3个奖励
-        if not hasattr(ipyData, 'GetRewardItemID%s' % (i + 1)):
-            break
-        itemIDList = getattr(ipyData, 'GetRewardItemID%s' % (i + 1))()
-        itemCntList = getattr(ipyData, 'GetRewardItemCnt%s' % (i + 1))()
-        if awardIndex >= len(itemIDList) or awardIndex >= len(itemCntList):
-            GameWorld.ErrLog('BOSS复活表奖励配置错误!')
-            return awardDict
-        itemID, itemCnt = itemIDList[awardIndex], itemCntList[awardIndex]
+    for itemID, itemCnt, isbind in ipyData.GetAward():
         if not itemID or not itemCnt:
             continue
         awardDict[itemID] = awardDict.get(itemID, 0) + itemCnt * times
         
     return awardDict
 
-def SyncBossRebornInfo(curPlayer, actID= -1):
+
+def SyncBossRebornPlayerInfo(curPlayer, actID=-1):
     #通知当前次数、已领次数 
     packData = ChPyNetSendPack.tagMCBossRebornPlayerInfo()
     packData.DataList = []
-    if actID !=-1:
+    if actID != -1:
         syneActIDList = [actID]
     else:
         syneActIDList = []
@@ -207,3 +201,39 @@
     packData.Count = len(packData.DataList)
     NetPackCommon.SendFakePack(curPlayer, packData)
     return
+
+
+def SyncBossRebornInfo(curPlayer):
+    actBossRebornInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_BossReborn, {})
+    state = actBossRebornInfo.get(ShareDefine.ActKey_State, 0)
+    if not state:
+        return
+    templateID = actBossRebornInfo.get(ShareDefine.ActKey_TemplateID, 0)
+    if not templateID:
+        return
+    ipyDataList = IpyGameDataPY.GetIpyGameDataByCondition("BossReborn", {'TemplateID':templateID}, True)
+    if not ipyDataList:
+        return
+    actInfo = ChPyNetSendPack.tagMCBossRebornInfo()
+    actInfo.Clear()
+    actInfo.StartDate = actBossRebornInfo.get(ShareDefine.ActKey_StartDate, "")
+    actInfo.EndtDate = actBossRebornInfo.get(ShareDefine.ActKey_EndDate, "")
+    actInfo.LimitLV = actBossRebornInfo.get(ShareDefine.ActKey_LVLimit, 0)
+    actInfo.TaskInfo = []
+    for ipyData in ipyDataList:
+        taskInfo = ChPyNetSendPack.tagMCBossRebornTaskInfo()
+        taskInfo.TaskID = ipyData.GetID()
+        taskInfo.TotalTimes = ipyData.GetTotalTimes()
+        taskInfo.SingleTimes = ipyData.GetSingleTimes()
+        taskInfo.AwardItem = []
+        for itemID, itemCnt, isBind in ipyData.GetReward():
+            awardItem = ChPyNetSendPack.tagMCBossRebornAwardItem()
+            awardItem.ItemID = itemID
+            awardItem.ItemCount = itemCnt
+            awardItem.IsBind = isBind
+            taskInfo.AwardItem.append(awardItem)
+        taskInfo.AwardItemCount = len(taskInfo.AwardItem)
+        actInfo.TaskInfo.append(taskInfo)
+    actInfo.TaskCnt = len(actInfo.TaskInfo)
+    NetPackCommon.SendFakePack(curPlayer, actInfo)
+    return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTreasure.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTreasure.py
index 7efc8a7..e72b2a5 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTreasure.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTreasure.py
@@ -309,11 +309,13 @@
         updLuck = 0
     PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TreasureLuck % (treasureType), updLuck)
     PlayerControl.GiveMoney(curPlayer, ShareDefine.TYPE_Price_TreasureScore, addScore)
-    PlayerBossReborn.AddBossRebornActionCnt(curPlayer, ChConfig.Def_BRAct_Treasure, treasureCount)
+    
     if treasureType == 2:
         PlayerFairyCeremony.AddFCPartyActionCnt(curPlayer, ChConfig.Def_PPAct_RuneTreasure, treasureCount)
+        PlayerBossReborn.AddBossRebornActionCnt(curPlayer, ChConfig.Def_BRAct_RuneTreasure, treasureCount)
     else:
         PlayerFairyCeremony.AddFCPartyActionCnt(curPlayer, ChConfig.Def_PPAct_Treasure, treasureCount)
+        PlayerBossReborn.AddBossRebornActionCnt(curPlayer, ChConfig.Def_BRAct_Treasure, treasureCount)
     # 给物品
     mailItemList = []
     itemControl = ItemControler.PlayerItemControler(curPlayer)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
index e9230e6..5930ffe 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
@@ -230,7 +230,7 @@
                            OperationActionName_FlashGiftbag, OperationActionName_FairyCeremony,
                            OperationActionName_RealmPoint]
 #需要记录开启活动时的世界等级的运营活动
-NeedWorldLVOperationActNameList = [OperationActionName_BossReborn, OperationActionName_FairyCeremony]
+NeedWorldLVOperationActNameList = [OperationActionName_FairyCeremony]
 
 #活动信息字典key定义
 ActKey_ID = "ID" # 活动ID,唯一标识的ID,一般是活动开启的time值
@@ -920,8 +920,8 @@
                                 Def_UniversalGameRecType_LVAwardRecord,  #玩家等级奖励记录 3
                                 Def_UniversalGameRecType_LimitFBOpenRecord,#限时副本开启时间记录4
                                 Def_UniversalGameRecType_DujieHelpCntRecord, # 渡劫副本护法次数5
-                                Def_UniversalGameRecType_6,
-                                Def_UniversalGameRecType_7,
+                                Def_UniversalGameRecType_TodayPlayerLVInfo, #今日活跃玩家等级信息6
+                                Def_UniversalGameRecType_YesterdayPlayerLVInfo,#昨日活跃玩家等级信息7
                                 Def_UniversalGameRecType_8,
                                 Def_UniversalGameRecType_9,
                                 Def_UniversalGameRecType_10,

--
Gitblit v1.8.0