From efaf363493930c5148271e5a50bbddd07909e110 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期三, 03 九月 2025 18:27:33 +0800
Subject: [PATCH] 1111 删除旧榜单相关;

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_EquipWash.py |    2 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerPet.py                 |    3 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerZhanling.py            |   10 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py               |    7 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActivity.py            |    3 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py                      |  179 -
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py                      |  431 ----
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py                  | 3494 -----------------------------------
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBillboard.py           |  135 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_EquipPlus.py |    2 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHorse.py               |    3 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCrossRealmPK.py        |    2 
 /dev/null                                                                                               |  852 --------
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGubao.py               |    4 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini                              |   52 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py                    |  410 ----
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py                  |   26 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCoin.py                |    2 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py                    |    7 
 PySysDB/PySysDBPY.h                                                                                     |  163 -
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py             |    2 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py        |   38 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py                         |   40 
 23 files changed, 91 insertions(+), 5,776 deletions(-)

diff --git a/PySysDB/PySysDBPY.h b/PySysDB/PySysDBPY.h
index 72c2c88..45bdd4b 100644
--- a/PySysDB/PySysDBPY.h
+++ b/PySysDB/PySysDBPY.h
@@ -2130,112 +2130,6 @@
 	BYTE		NeedNotify;		//是否需要广播
 };
 
-//垃圾分类活动时间表
-
-struct tagActGarbageSorting
-{
-	DWORD		_CfgID;	//配置ID
-	char		StartDate;	//开启日期
-	char		EndDate;	//结束日期
-	BYTE		ResetType;	//重置类型,0-0点重置;1-5点重置
-	WORD		LVLimit;	//限制等级
-	BYTE		CTGTypeEffValue;	//充值有效类型值
-};
-
-//垃圾分类任务产出表
-
-struct tagActGarbageTask
-{
-	DWORD		_GarbageTasklD;	//垃圾任务ID
-	DWORD		FinishNeedValue;	//完成所需进度值
-	DWORD		FinishTimeMax;	//总可完成次数,0不限
-	BYTE		AutoProduce;		//自动产生垃圾
-	list		ProduceGarbageRateList;	//随机产生垃圾概率饼图
-};
-
-//Boss历练活动表
-
-struct tagActBossTrial
-{
-	DWORD		_CfgID;	//配置ID
-	char		StartDate;	//开启日期
-	char		EndDate;	//结束日期
-	char		JoinStartTime;	//参与开始时间点
-	char		JoinEndTime;	//参与结束时间点
-	WORD		LVLimit;	//限制等级
-	BYTE		IsDayReset;	//是否每天重置
-	BYTE		ResetType;	//重置类型,0-0点重置;1-5点重置
-	dict		SubmitItemAwardInfo;	//提交凭证个数对应奖励
-	BYTE		SubmitAwardResetType;	//提交凭证每日重置类型,0-跟随活动; 1-0点重置;2-5点重置
-	WORD		ActShopType;	//开放商店类型,为0时不开放
-	list		TemplateIDList;	//榜单模板编号列表
-	list		FamilyTemplateIDList;	//仙盟榜单模板编号列表
-};
-
-//Boss历练榜单模版表
-
-struct tagActBossTrialTemplate
-{
-	DWORD		_TemplateID;	//模板编号
-	BYTE		Rank;	//名次
-	list		AwardItemList;	//奖励物品列表[[物品ID,个数,是否拍品], ...] 仙盟榜时为盟主奖励,如果没有配置,则统一取成员奖励
-	list		MemAwardItemList;	//仙盟榜成员奖励物品信息列表[[物品ID,个数,是否拍品], ...]
-	DWORD		NeedScore;	//上榜所需积分
-	dict		ScoreAwardEx;	//达标积分额外奖励 {积分:[[物品ID,个数,是否拍品], ...], ...}
-};
-
-//骑宠养成活动时间表
-
-struct tagActHorsePetTrain
-{
-	DWORD		_CfgID;	//配置ID
-	char		StartDate;	//开启日期
-	char		EndDate;	//结束日期
-	char		JoinStartTime;	//参与开始时间点
-	char		JoinEndTime;	//参与结束时间点
-	WORD		LVLimit;	//限制等级
-	WORD		ActShopType;	//开放商店类型,为0时不开放
-	WORD		PersonalTemplateID;	//个人排行模板编号
-	BYTE		IsRelationCrossAct;	//是否关联跨服活动
-};
-
-//骑宠养成榜单模版表
-
-struct tagActHorsePetTrainBillTemp
-{
-	DWORD		_TemplateID;	//模板编号
-	BYTE		Rank;	//名次
-	list		AwardItemList;	//奖励物品列表[[物品ID,个数,是否拍品], ...]
-	DWORD		NeedScore;	//上榜所需积分
-	dict		ScoreAwardEx;	//达标积分额外奖励 {积分:[[物品ID,个数,是否拍品], ...], ...}
-};
-
-//古宝养成活动时间表
-
-struct tagActGubao
-{
-	DWORD		_CfgID;	//配置ID
-	char		StartDate;	//开启日期
-	char		EndDate;	//结束日期
-	char		JoinStartTime;	//参与开始时间点
-	char		JoinEndTime;	//参与结束时间点
-	WORD		LVLimit;	//限制等级
-	WORD		ActShopType;	//开放商店类型,为0时不开放
-	WORD		PersonalTemplateID;	//个人排行模板编号
-	BYTE		IsRelationCrossAct;	//是否关联跨服活动
-};
-
-//古宝养成榜单模版表
-
-struct tagActGubaoBillTemp
-{
-	DWORD		_TemplateID;	//模板编号
-	BYTE		Rank;	//名次
-	list		AwardItemList;	//奖励物品列表[[物品ID,个数,是否拍品], ...]
-	DWORD		NeedScore;	//上榜所需积分
-	dict		ScoreAwardEx;	//达标积分额外奖励 {积分:[[物品ID,个数,是否拍品], ...], ...}
-};
-
 //炼器榜单模版表
 
 struct tagActLianqiBillTemp
@@ -2258,51 +2152,6 @@
 	list		GridWeightItemList;	//格子物品权重随机库 [[权重,物品ID,个数], ...]
 	list		LayerAwardItemList;	//通关该层固定奖励 [[物品ID,个数,是否拍品], ...]
 	list		LayerWeightItemList;	//通关该层额外随机奖励 [[权重,物品ID,个数], ...]
-};
-
-//仙匣秘境活动时间表
-
-struct tagActXianXiaMJ
-{
-	DWORD		_CfgID;	//配置ID
-	char		StartDate;	//开启日期
-	char		EndDate;	//结束日期
-	char		JoinStartTime;	//参与开始时间点
-	char		JoinEndTime;	//参与结束时间点
-	BYTE		IsDayReset;	//是否每天重置
-	WORD		LVLimit;	//限制等级
-	DWORD		UseItemID;	//消耗物品ID
-	list		UseMoneyInfo;	//消耗货币信息
-	BYTE		TemplateID;	//模板ID
-	WORD		PersonalTemplateID;	//个人排行模板编号
-	WORD		LotteryAddScore;	//每次抽奖加积分
-	WORD		LayerAddScore;	//每次跨层加积分
-	BYTE		IsRelationCrossAct;	//是否关联跨服活动
-};
-
-//仙匣秘境榜单模版表
-
-struct tagActXianXiaMJBillTemp
-{
-	DWORD		_TemplateID;	//模板编号
-	BYTE		Rank;	//名次
-	list		AwardItemList;	//奖励物品列表[[物品ID,个数,是否拍品], ...]
-	DWORD		NeedScore;	//上榜所需积分
-	dict		ScoreAwardEx;	//达标积分额外奖励 {积分:[[物品ID,个数,是否拍品], ...], ...}
-};
-
-//仙匣秘境奖池表
-
-struct tagActXianXiaMJAward
-{
-	DWORD		_TemplateID;	//奖池模板编号
-	BYTE		AwardLibType;	//奖励库类型
-	list		AwardItemCountList;	//层选择个数列表  层1物品数|层2|…
-	list		UnlockAwardLimitTimesList;	//层抽X次后可产出(本层) 层1限制|层2|…
-	list		AwardLibWeightList;	//产出该库外权重
-	dict		LibItemInfo;	//本库物品随机库内权重(先随机库外权重,若产出再随机库内权重)
-	dict		ItemLayerLimitInfo;	//物品产出奖池层限制 {物品ID:大于等于X层可产出, ...}
-	dict		ItemAwardTimesTotalInfo;	//物品产出次数限制(所有层){物品ID:总产出次数, ...}
 };
 
 //天帝礼包活动时间表
@@ -2333,18 +2182,6 @@
 	BYTE		ChooseItemCount;	//选择个数
 	dict		LibItemInfo;	//物品编号对应物品信息 {物品编号:[物品ID,个数,是否拍品,可选次数], ...}  0不限次数
 	list		NotifyItemNumList;	//需要广播的编号列表
-};
-
-//骑宠盛宴活动
-
-struct tagActHorsePetFeast
-{
-	DWORD		_CfgID;	//配置ID
-	char		StartDate;	//开启日期
-	char		EndDate;	//结束日期
-	list		StartTimeList;	//开启时间列表, 支持多个时段
-	list		EndTimeList;	//结束时间列表, 支持多个时段
-	WORD		LVLimit;	//限制等级
 };
 
 //BOSS复活活动时间表
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
index 47673ca..7b83ca6 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
@@ -1264,58 +1264,6 @@
 PacketSubCMD_2=0x06
 PacketCallFunc_2=OnActWishingDrag
 
-;boss历练活动
-[PlayerActBossTrial]
-ScriptName = Player\PlayerActBossTrial.py
-Writer = hxp
-Releaser = hxp
-RegType = 0
-RegisterPackCount = 2
-
-PacketCMD_1=0xAA
-PacketSubCMD_1=0x23
-PacketCallFunc_1=OnActBossTrialSubmit
-
-PacketCMD_2=0xAA
-PacketSubCMD_2=0x24
-PacketCallFunc_2=OnActBossTrialGetAward
-
-;垃圾分类活动
-[PlayerActGarbageSorting]
-ScriptName = Player\PlayerActGarbageSorting.py
-Writer = hxp
-Releaser = hxp
-RegType = 0
-RegisterPackCount = 2
-
-PacketCMD_1=0xAA
-PacketSubCMD_1=0x14
-PacketCallFunc_1=OnActGarbageSorting
-
-PacketCMD_2=0xAA
-PacketSubCMD_2=0x15
-PacketCallFunc_2=OnActGarbageGetTaskAward
-
-;仙匣秘境活动
-[PlayerActXianXiaMJ]
-ScriptName = Player\PlayerActXianXiaMJ.py
-Writer = hxp
-Releaser = hxp
-RegType = 0
-RegisterPackCount = 3
-
-PacketCMD_1=0xAA
-PacketSubCMD_1=0x16
-PacketCallFunc_1=OnActXianXiaMJSuperItem
-
-PacketCMD_2=0xAA
-PacketSubCMD_2=0x17
-PacketCallFunc_2=OnActXianXiaMJLottery
-
-PacketCMD_3=0xAA
-PacketSubCMD_3=0x18
-PacketCallFunc_3=OnActXianXiaMJAwardPoolRefresh
-
 ;天帝礼包活动
 [PlayerActGodGift]
 ScriptName = Player\PlayerActGodGift.py
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index d3866f5..3a5998d 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -3785,14 +3785,6 @@
 Def_PDict_LoginAwardGotTimes = "LoginAwardGotTimes_%s_%s" #当前已领次数 参数(第X天,模板ID)
 Def_PDict_LoginAwardWorldLV = "LoginAwardWorldLV%s" #活动开启时世界等级参数(第X天)
 
-#boss历练
-Def_PDict_BossTrialRecycleState = "BossTrialRecycleState"  # 活动物品回收状态,该活动所有的本服、跨服活动结束才回收 1-标记等待回收;2-已回收过
-Def_PDict_CA_BossTrialID = "CA_BossTrialID"  # 玩家身上的活动ID,唯一标识,取活动开始日期time值
-Def_PDict_BossTrialID = "BossTrialID_%s"  # 玩家身上的活动ID,唯一标识,取活动开始日期time,参数(活动编号)
-Def_PDict_BossTrialSubmitCount = "BossTrialSubmitCount_%s"  # 提交凭证物品个数,参数(活动编号)
-Def_PDict_BossTrialSubmitAwardCount = "BossTrialAwardCount_%s"  # 关联提交凭证奖励提交物品个数,参数(活动编号)
-Def_PDict_BossTrialSubmitAward = "BossTrialSubmitAward_%s"  # 提交凭证奖励状态,参数(活动编号)
-
 #幸运鉴宝
 Def_PDict_LuckyTreasureID = "LuckyTreasureID"  # 玩家身上的活动ID,唯一标识,取活动开始日期time值
 Def_PDict_LuckyTreasureFree = "LuckyTreasureFree" #是否免费过
@@ -3840,34 +3832,6 @@
 Def_PDict_TurntableItemID = "TurntableItemID_%s_%s"  # 转盘物品ID*10+物品库类型,参数:(活动编号, 物品编号)
 Def_PDict_TurntableItemCount = "TurntableCount_%s_%s"  # 转盘物品个数,参数:(活动编号, 物品编号)
 Def_PDict_TurntableItemState = "TurntableItemState_%s"  # 转盘物品是否已抽中,按物品编号二进制位代表是否已抽中,参数:(活动编号)
-
-#垃圾分类活动
-Def_PDict_GarbageSortingID = "ActGSID_%s"  # 玩家身上的活动ID,唯一标识,取活动开始日期time值,参数:(活动编号)
-Def_PDict_GarbageSortingWorldLV = "ActGSWorldLV_%s" #玩家身上的活动世界等级,参数:(活动编号)
-Def_PDict_GarbageTaskValue = "ActGSTaskValue_%s_%s" # 任务总进度值,参数(活动编号, 任务ID)
-Def_PDict_GarbageTaskFinishCount = "ActGSTaskFinishCount_%s_%s" # 任务已完成次数,参数(活动编号, 任务ID)
-Def_PDict_GarbageEnvironmentValue = "ActGSEnvValue_%s" # 活动累计获得环保值,参数(活动编号)
-Def_PDict_GarbageGJSeconds = "ActGSGJSeconds_%s"  # 挂机未处理收益的秒数,参数(活动编号)
-
-#仙匣秘境活动
-Def_PDict_CA_XianXiaMJID = "CA_XianXiaMJID"  # 玩家身上的活动ID,唯一标识,取活动开始日期time值
-Def_PDict_XianXiaMJID = "ActXXMJID_%s"  # 玩家身上的活动ID,唯一标识,取活动开始日期time值,参数:(活动编号)
-Def_PDict_XianXiaMJWorldLV = "ActXXMJWorldLV_%s" #玩家身上的活动世界等级,参数:(活动编号)
-Def_PDict_XianXiaMJLayerNum = "ActXianXiaMJLayerNum_%s" # 当前层数,参数:(活动编号)
-Def_PDict_XianXiaMJPlayCount = "ActXianXiaMJPlayCount_%s" # 当前层累计抽奖次数,参数:(活动编号)
-Def_PDict_XianXiaMJAwardItemInfo = "ActXXMJItemInfo_%s_%s_%s"  # 奖池物品ID*100+抽中位置编号,参数:(活动编号, 库类型, 物品编号)
-Def_PDict_XianXiaMJAwardItemTimes = "ActXXMJItemTimes_%s_%s_%s"  # 奖池物品累计产出次数,有限制次数的才记录,参数:(活动编号, 库类型, 物品ID)
-Def_PDict_XianXiaMJScore = "XianXiaMJScore_%s"  # 抽奖积分,参数:(活动编号)
-
-#古宝养成活动
-Def_PDict_CA_GubaoID = "CA_GubaoID"  # 玩家身上的活动ID,唯一标识,取活动开始日期time值
-Def_PDict_ActGubaoID = "ActGubaoID_%s"  # 玩家身上的活动ID,唯一标识,取活动开始日期time值,参数:(活动编号)
-Def_PDict_ActGubaoScore = "ActGubaoScore_%s"  # 养成积分,参数:(活动编号)
-
-#骑宠养成活动
-Def_PDict_CA_HorsePetTrainID = "CA_HorsePetTrainID"  # 玩家身上的活动ID,唯一标识,取活动开始日期time值
-Def_PDict_ActHorsePetTrainID = "ActHorsePetTrainID_%s"  # 玩家身上的活动ID,唯一标识,取活动开始日期time值,参数:(活动编号)
-Def_PDict_ActHorsePetTrainScore = "ActHorsePetTrainScore_%s"  # 累计获得活动养成积分,参数:(活动编号)
 
 #炼器活动
 Def_PDict_CA_LianqiID = "CA_LianqiID"  # 玩家身上的活动ID,唯一标识,取活动开始日期time值
@@ -5372,8 +5336,8 @@
 ActTaskType_Activity, # 累计获得活跃度 3
 ActTaskType_CrossPenglaiBoss, # 击杀蓬莱boss 4
 ActTaskType_CrossDemonLandBoss, # 击杀魔化之地boss 5
-ActTaskType_XianXiaMJLottery, # 仙匣秘境寻宝x次 6
-ActTaskType_XianXiaMJLayer, # 仙匣秘境达到x层 7
+ActTaskType_6, # 仙匣秘境寻宝x次 6
+ActTaskType_7, # 仙匣秘境达到x层 7
 ActTaskType_TreasureGubao, # 古宝寻宝x次 8
 ActTaskType_HorseUpItem, # 消耗X个坐骑经验丹 9
 ActTaskType_PetUpItem, # 消耗X个灵宠经验丹 10
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
index 75cb095..ee35ff6 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
@@ -11555,118 +11555,6 @@
 
 
 #------------------------------------------------------
-# AA 24 Boss历练领奖 #tagCMActBossTrialGetAward
-
-class  tagCMActBossTrialGetAward(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("ActNum", c_ubyte),    #活动编号
-                  ("SubmitCount", c_ushort),    #领取凭证个数对应奖励
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xAA
-        self.SubCmd = 0x24
-        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.Cmd = 0xAA
-        self.SubCmd = 0x24
-        self.ActNum = 0
-        self.SubmitCount = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagCMActBossTrialGetAward)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// AA 24 Boss历练领奖 //tagCMActBossTrialGetAward:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                ActNum:%d,
-                                SubmitCount:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.ActNum,
-                                self.SubmitCount
-                                )
-        return DumpString
-
-
-m_NAtagCMActBossTrialGetAward=tagCMActBossTrialGetAward()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActBossTrialGetAward.Cmd,m_NAtagCMActBossTrialGetAward.SubCmd))] = m_NAtagCMActBossTrialGetAward
-
-
-#------------------------------------------------------
-# AA 23 Boss历练提交凭证 #tagCMActBossTrialSubmit
-
-class  tagCMActBossTrialSubmit(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("ActNum", c_ubyte),    #活动编号
-                  ("SubmitCount", c_ushort),    #提交凭证个数
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xAA
-        self.SubCmd = 0x23
-        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.Cmd = 0xAA
-        self.SubCmd = 0x23
-        self.ActNum = 0
-        self.SubmitCount = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagCMActBossTrialSubmit)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// AA 23 Boss历练提交凭证 //tagCMActBossTrialSubmit:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                ActNum:%d,
-                                SubmitCount:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.ActNum,
-                                self.SubmitCount
-                                )
-        return DumpString
-
-
-m_NAtagCMActBossTrialSubmit=tagCMActBossTrialSubmit()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActBossTrialSubmit.Cmd,m_NAtagCMActBossTrialSubmit.SubCmd))] = m_NAtagCMActBossTrialSubmit
-
-
-#------------------------------------------------------
 # AA 09 集字活动兑换 #tagCMActCollectWordsExchange
 
 class  tagCMActCollectWordsExchange(Structure):
@@ -11720,143 +11608,6 @@
 
 m_NAtagCMActCollectWordsExchange=tagCMActCollectWordsExchange()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActCollectWordsExchange.Cmd,m_NAtagCMActCollectWordsExchange.SubCmd))] = m_NAtagCMActCollectWordsExchange
-
-
-#------------------------------------------------------
-# AA 15 垃圾分类活动收集已完成的任务垃圾 #tagCMActGarbageGetTaskAward
-
-class  tagCMActGarbageGetTaskAward(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("ActNum", c_ubyte),    #活动编号
-                  ("GarbageTaskID", c_ubyte),    #垃圾任务ID
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xAA
-        self.SubCmd = 0x15
-        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.Cmd = 0xAA
-        self.SubCmd = 0x15
-        self.ActNum = 0
-        self.GarbageTaskID = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagCMActGarbageGetTaskAward)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// AA 15 垃圾分类活动收集已完成的任务垃圾 //tagCMActGarbageGetTaskAward:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                ActNum:%d,
-                                GarbageTaskID:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.ActNum,
-                                self.GarbageTaskID
-                                )
-        return DumpString
-
-
-m_NAtagCMActGarbageGetTaskAward=tagCMActGarbageGetTaskAward()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActGarbageGetTaskAward.Cmd,m_NAtagCMActGarbageGetTaskAward.SubCmd))] = m_NAtagCMActGarbageGetTaskAward
-
-
-#------------------------------------------------------
-# AA 14 垃圾分类活动分类垃圾 #tagCMActGarbageSorting
-
-class  tagCMActGarbageSorting(Structure):
-    Head = tagHead()
-    ActNum = 0    #(BYTE ActNum)//活动编号
-    GarbageSortingType = 0    #(BYTE GarbageSortingType)//垃圾分类类型,即属于哪种垃圾
-    ItemIndexCount = 0    #(BYTE ItemIndexCount)//垃圾背包中的物品索引数
-    ItemIndexList = list()    #(vector<BYTE> ItemIndexList)//垃圾背包中的物品索引列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xAA
-        self.Head.SubCmd = 0x14
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.ActNum,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.GarbageSortingType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.ItemIndexCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.ItemIndexCount):
-            value,_pos=CommFunc.ReadBYTE(_lpData,_pos)
-            self.ItemIndexList.append(value)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xAA
-        self.Head.SubCmd = 0x14
-        self.ActNum = 0
-        self.GarbageSortingType = 0
-        self.ItemIndexCount = 0
-        self.ItemIndexList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        length += 1
-        length += 1
-        length += 1 * self.ItemIndexCount
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.ActNum)
-        data = CommFunc.WriteBYTE(data, self.GarbageSortingType)
-        data = CommFunc.WriteBYTE(data, self.ItemIndexCount)
-        for i in range(self.ItemIndexCount):
-            data = CommFunc.WriteBYTE(data, self.ItemIndexList[i])
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                ActNum:%d,
-                                GarbageSortingType:%d,
-                                ItemIndexCount:%d,
-                                ItemIndexList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.ActNum,
-                                self.GarbageSortingType,
-                                self.ItemIndexCount,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagCMActGarbageSorting=tagCMActGarbageSorting()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActGarbageSorting.Head.Cmd,m_NAtagCMActGarbageSorting.Head.SubCmd))] = m_NAtagCMActGarbageSorting
 
 
 #------------------------------------------------------
@@ -12351,188 +12102,6 @@
 
 m_NAtagCMActWishingRefresh=tagCMActWishingRefresh()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActWishingRefresh.Cmd,m_NAtagCMActWishingRefresh.SubCmd))] = m_NAtagCMActWishingRefresh
-
-
-#------------------------------------------------------
-# AA 18 仙匣秘境活动奖池刷新 #tagCMActXianXiaMJAwardPoolRefresh
-
-class  tagCMActXianXiaMJAwardPoolRefresh(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("ActNum", c_ubyte),    #活动编号
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xAA
-        self.SubCmd = 0x18
-        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.Cmd = 0xAA
-        self.SubCmd = 0x18
-        self.ActNum = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagCMActXianXiaMJAwardPoolRefresh)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// AA 18 仙匣秘境活动奖池刷新 //tagCMActXianXiaMJAwardPoolRefresh:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                ActNum:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.ActNum
-                                )
-        return DumpString
-
-
-m_NAtagCMActXianXiaMJAwardPoolRefresh=tagCMActXianXiaMJAwardPoolRefresh()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActXianXiaMJAwardPoolRefresh.Cmd,m_NAtagCMActXianXiaMJAwardPoolRefresh.SubCmd))] = m_NAtagCMActXianXiaMJAwardPoolRefresh
-
-
-#------------------------------------------------------
-# AA 17 仙匣秘境活动抽奖 #tagCMActXianXiaMJLottery
-
-class  tagCMActXianXiaMJLottery(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("ActNum", c_ubyte),    #活动编号
-                  ("PosNum", c_ubyte),    #玩家点击的奖励位置编号,从1开始
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xAA
-        self.SubCmd = 0x17
-        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.Cmd = 0xAA
-        self.SubCmd = 0x17
-        self.ActNum = 0
-        self.PosNum = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagCMActXianXiaMJLottery)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// AA 17 仙匣秘境活动抽奖 //tagCMActXianXiaMJLottery:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                ActNum:%d,
-                                PosNum:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.ActNum,
-                                self.PosNum
-                                )
-        return DumpString
-
-
-m_NAtagCMActXianXiaMJLottery=tagCMActXianXiaMJLottery()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActXianXiaMJLottery.Cmd,m_NAtagCMActXianXiaMJLottery.SubCmd))] = m_NAtagCMActXianXiaMJLottery
-
-
-#------------------------------------------------------
-# AA 16 仙匣秘境活动选择大奖 #tagCMActXianXiaMJSuperItem
-
-class  tagCMActXianXiaMJSuperItem(Structure):
-    Head = tagHead()
-    ActNum = 0    #(BYTE ActNum)//活动编号
-    SuperItemCount = 0    #(BYTE SuperItemCount)//选择物品数量
-    SuperItemIDList = list()    #(vector<DWORD> SuperItemIDList)//选择的大奖库物品ID列表,每次重新选择需要发送全部已选择的大奖物品ID,不能只发单个物品ID;
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xAA
-        self.Head.SubCmd = 0x16
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.ActNum,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.SuperItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.SuperItemCount):
-            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
-            self.SuperItemIDList.append(value)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xAA
-        self.Head.SubCmd = 0x16
-        self.ActNum = 0
-        self.SuperItemCount = 0
-        self.SuperItemIDList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        length += 1
-        length += 4 * self.SuperItemCount
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.ActNum)
-        data = CommFunc.WriteBYTE(data, self.SuperItemCount)
-        for i in range(self.SuperItemCount):
-            data = CommFunc.WriteDWORD(data, self.SuperItemIDList[i])
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                ActNum:%d,
-                                SuperItemCount:%d,
-                                SuperItemIDList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.ActNum,
-                                self.SuperItemCount,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagCMActXianXiaMJSuperItem=tagCMActXianXiaMJSuperItem()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActXianXiaMJSuperItem.Head.Cmd,m_NAtagCMActXianXiaMJSuperItem.Head.SubCmd))] = m_NAtagCMActXianXiaMJSuperItem
 
 
 #------------------------------------------------------
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
index 36739b4..62b85f1 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -22113,513 +22113,6 @@
 
 
 #------------------------------------------------------
-# AA 67 Boss历练活动信息 #tagMCActBossTrialInfo
-
-class  tagMCActBossTrialItem(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(tagMCActBossTrialItem)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// AA 67 Boss历练活动信息 //tagMCActBossTrialInfo:
-                                ItemID:%d,
-                                ItemCount:%d,
-                                IsBind:%d
-                                '''\
-                                %(
-                                self.ItemID,
-                                self.ItemCount,
-                                self.IsBind
-                                )
-        return DumpString
-
-
-class  tagMCActBossTrialAwardEx(Structure):
-    NeedScore = 0    #(DWORD NeedScore)// 额外奖励所需积分
-    Count = 0    #(BYTE Count)// 额外奖励物品数
-    AwardItemList = list()    #(vector<tagMCActBossTrialItem> AwardItemList)// 额外奖励物品列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.NeedScore,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.Count):
-            temAwardItemList = tagMCActBossTrialItem()
-            _pos = temAwardItemList.ReadData(_lpData, _pos)
-            self.AwardItemList.append(temAwardItemList)
-        return _pos
-
-    def Clear(self):
-        self.NeedScore = 0
-        self.Count = 0
-        self.AwardItemList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 4
-        length += 1
-        for i in range(self.Count):
-            length += self.AwardItemList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteDWORD(data, self.NeedScore)
-        data = CommFunc.WriteBYTE(data, self.Count)
-        for i in range(self.Count):
-            data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                NeedScore:%d,
-                                Count:%d,
-                                AwardItemList:%s
-                                '''\
-                                %(
-                                self.NeedScore,
-                                self.Count,
-                                "..."
-                                )
-        return DumpString
-
-
-class  tagMCActBossTrialBillard(Structure):
-    Rank = 0    #(DWORD Rank)// 名次,1-代表第一名;支持夸段,如1,3 代表第1名,第2~3名
-    Count = 0    #(BYTE Count)// 奖励物品数
-    AwardItemList = list()    #(vector<tagMCActBossTrialItem> AwardItemList)// 奖励物品列表,当仙盟榜时,如果有该奖励则代表盟主奖励,否则默认均为成员奖励
-    MemCount = 0    #(BYTE MemCount)// 成员奖励物品数
-    MemAwardItemList = list()    #(vector<tagMCActBossTrialItem> MemAwardItemList)// 成员奖励物品列表,仅仙盟榜时有效
-    NeedScore = 0    #(DWORD NeedScore)// 上榜所需积分
-    CountEx = 0    #(BYTE CountEx)// 额外奖励数
-    AwardItemExList = list()    #(vector<tagMCActBossTrialAwardEx> AwardItemExList)// 额外奖励列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.Rank,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.Count):
-            temAwardItemList = tagMCActBossTrialItem()
-            _pos = temAwardItemList.ReadData(_lpData, _pos)
-            self.AwardItemList.append(temAwardItemList)
-        self.MemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.MemCount):
-            temMemAwardItemList = tagMCActBossTrialItem()
-            _pos = temMemAwardItemList.ReadData(_lpData, _pos)
-            self.MemAwardItemList.append(temMemAwardItemList)
-        self.NeedScore,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.CountEx,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.CountEx):
-            temAwardItemExList = tagMCActBossTrialAwardEx()
-            _pos = temAwardItemExList.ReadData(_lpData, _pos)
-            self.AwardItemExList.append(temAwardItemExList)
-        return _pos
-
-    def Clear(self):
-        self.Rank = 0
-        self.Count = 0
-        self.AwardItemList = list()
-        self.MemCount = 0
-        self.MemAwardItemList = list()
-        self.NeedScore = 0
-        self.CountEx = 0
-        self.AwardItemExList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 4
-        length += 1
-        for i in range(self.Count):
-            length += self.AwardItemList[i].GetLength()
-        length += 1
-        for i in range(self.MemCount):
-            length += self.MemAwardItemList[i].GetLength()
-        length += 4
-        length += 1
-        for i in range(self.CountEx):
-            length += self.AwardItemExList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteDWORD(data, self.Rank)
-        data = CommFunc.WriteBYTE(data, self.Count)
-        for i in range(self.Count):
-            data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.MemCount)
-        for i in range(self.MemCount):
-            data = CommFunc.WriteString(data, self.MemAwardItemList[i].GetLength(), self.MemAwardItemList[i].GetBuffer())
-        data = CommFunc.WriteDWORD(data, self.NeedScore)
-        data = CommFunc.WriteBYTE(data, self.CountEx)
-        for i in range(self.CountEx):
-            data = CommFunc.WriteString(data, self.AwardItemExList[i].GetLength(), self.AwardItemExList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Rank:%d,
-                                Count:%d,
-                                AwardItemList:%s,
-                                MemCount:%d,
-                                MemAwardItemList:%s,
-                                NeedScore:%d,
-                                CountEx:%d,
-                                AwardItemExList:%s
-                                '''\
-                                %(
-                                self.Rank,
-                                self.Count,
-                                "...",
-                                self.MemCount,
-                                "...",
-                                self.NeedScore,
-                                self.CountEx,
-                                "..."
-                                )
-        return DumpString
-
-
-class  tagMCActBossTrialSubmitInfo(Structure):
-    RecordIndex = 0    #(BYTE RecordIndex)// 记录索引
-    NeedCount = 0    #(WORD NeedCount)// 所需提交个数
-    Count = 0    #(BYTE Count)// 奖励物品数
-    AwardItemList = list()    #(vector<tagMCActBossTrialItem> AwardItemList)// 奖励物品列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.RecordIndex,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.NeedCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.Count):
-            temAwardItemList = tagMCActBossTrialItem()
-            _pos = temAwardItemList.ReadData(_lpData, _pos)
-            self.AwardItemList.append(temAwardItemList)
-        return _pos
-
-    def Clear(self):
-        self.RecordIndex = 0
-        self.NeedCount = 0
-        self.Count = 0
-        self.AwardItemList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 1
-        length += 2
-        length += 1
-        for i in range(self.Count):
-            length += self.AwardItemList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteBYTE(data, self.RecordIndex)
-        data = CommFunc.WriteWORD(data, self.NeedCount)
-        data = CommFunc.WriteBYTE(data, self.Count)
-        for i in range(self.Count):
-            data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                RecordIndex:%d,
-                                NeedCount:%d,
-                                Count:%d,
-                                AwardItemList:%s
-                                '''\
-                                %(
-                                self.RecordIndex,
-                                self.NeedCount,
-                                self.Count,
-                                "..."
-                                )
-        return DumpString
-
-
-class  tagMCActBossTrialInfo(Structure):
-    Head = tagHead()
-    ActNum = 0    #(BYTE ActNum)// 活动编号
-    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
-    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
-    JoinStartTime = ""    #(char JoinStartTime[5])// 参与开始时间点 mm:ss
-    JoinEndTime = ""    #(char JoinEndTime[5])// 参与结束时间点 mm:ss
-    IsDayReset = 0    #(BYTE IsDayReset)// 是否每天重置
-    ResetType = 0    #(BYTE ResetType)// 重置类型,0-0点重置;1-5点重置
-    LimitLV = 0    #(WORD LimitLV)// 限制等级
-    ShopType = 0    #(WORD ShopType)// 开放商店类型,可能为0不开放
-    SubResetType = 0    #(BYTE SubResetType)// 提交凭证奖励重置类型,0-跟随活动; 1-0点重置;2-5点重置
-    SubmitCount = 0    #(BYTE SubmitCount)
-    SubmitInfoList = list()    #(vector<tagMCActBossTrialSubmitInfo> SubmitInfoList)// 提交凭证信息列表
-    PersonalBillCount = 0    #(BYTE PersonalBillCount)
-    PersonalBillboardInfoList = list()    #(vector<tagMCActBossTrialBillard> PersonalBillboardInfoList)// 个人榜单奖励信息列表,如果没有代表本次活动没有该榜奖励
-    FamilyBillCount = 0    #(BYTE FamilyBillCount)
-    FamilyBillboardInfoList = list()    #(vector<tagMCActBossTrialBillard> FamilyBillboardInfoList)// 仙盟榜单奖励信息列表,如果没有代表本次活动没有该榜奖励
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xAA
-        self.Head.SubCmd = 0x67
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.ActNum,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
-        self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
-        self.JoinStartTime,_pos = CommFunc.ReadString(_lpData, _pos,5)
-        self.JoinEndTime,_pos = CommFunc.ReadString(_lpData, _pos,5)
-        self.IsDayReset,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.ResetType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.ShopType,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.SubResetType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.SubmitCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.SubmitCount):
-            temSubmitInfoList = tagMCActBossTrialSubmitInfo()
-            _pos = temSubmitInfoList.ReadData(_lpData, _pos)
-            self.SubmitInfoList.append(temSubmitInfoList)
-        self.PersonalBillCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.PersonalBillCount):
-            temPersonalBillboardInfoList = tagMCActBossTrialBillard()
-            _pos = temPersonalBillboardInfoList.ReadData(_lpData, _pos)
-            self.PersonalBillboardInfoList.append(temPersonalBillboardInfoList)
-        self.FamilyBillCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.FamilyBillCount):
-            temFamilyBillboardInfoList = tagMCActBossTrialBillard()
-            _pos = temFamilyBillboardInfoList.ReadData(_lpData, _pos)
-            self.FamilyBillboardInfoList.append(temFamilyBillboardInfoList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xAA
-        self.Head.SubCmd = 0x67
-        self.ActNum = 0
-        self.StartDate = ""
-        self.EndtDate = ""
-        self.JoinStartTime = ""
-        self.JoinEndTime = ""
-        self.IsDayReset = 0
-        self.ResetType = 0
-        self.LimitLV = 0
-        self.ShopType = 0
-        self.SubResetType = 0
-        self.SubmitCount = 0
-        self.SubmitInfoList = list()
-        self.PersonalBillCount = 0
-        self.PersonalBillboardInfoList = list()
-        self.FamilyBillCount = 0
-        self.FamilyBillboardInfoList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        length += 10
-        length += 10
-        length += 5
-        length += 5
-        length += 1
-        length += 1
-        length += 2
-        length += 2
-        length += 1
-        length += 1
-        for i in range(self.SubmitCount):
-            length += self.SubmitInfoList[i].GetLength()
-        length += 1
-        for i in range(self.PersonalBillCount):
-            length += self.PersonalBillboardInfoList[i].GetLength()
-        length += 1
-        for i in range(self.FamilyBillCount):
-            length += self.FamilyBillboardInfoList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.ActNum)
-        data = CommFunc.WriteString(data, 10, self.StartDate)
-        data = CommFunc.WriteString(data, 10, self.EndtDate)
-        data = CommFunc.WriteString(data, 5, self.JoinStartTime)
-        data = CommFunc.WriteString(data, 5, self.JoinEndTime)
-        data = CommFunc.WriteBYTE(data, self.IsDayReset)
-        data = CommFunc.WriteBYTE(data, self.ResetType)
-        data = CommFunc.WriteWORD(data, self.LimitLV)
-        data = CommFunc.WriteWORD(data, self.ShopType)
-        data = CommFunc.WriteBYTE(data, self.SubResetType)
-        data = CommFunc.WriteBYTE(data, self.SubmitCount)
-        for i in range(self.SubmitCount):
-            data = CommFunc.WriteString(data, self.SubmitInfoList[i].GetLength(), self.SubmitInfoList[i].GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.PersonalBillCount)
-        for i in range(self.PersonalBillCount):
-            data = CommFunc.WriteString(data, self.PersonalBillboardInfoList[i].GetLength(), self.PersonalBillboardInfoList[i].GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.FamilyBillCount)
-        for i in range(self.FamilyBillCount):
-            data = CommFunc.WriteString(data, self.FamilyBillboardInfoList[i].GetLength(), self.FamilyBillboardInfoList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                ActNum:%d,
-                                StartDate:%s,
-                                EndtDate:%s,
-                                JoinStartTime:%s,
-                                JoinEndTime:%s,
-                                IsDayReset:%d,
-                                ResetType:%d,
-                                LimitLV:%d,
-                                ShopType:%d,
-                                SubResetType:%d,
-                                SubmitCount:%d,
-                                SubmitInfoList:%s,
-                                PersonalBillCount:%d,
-                                PersonalBillboardInfoList:%s,
-                                FamilyBillCount:%d,
-                                FamilyBillboardInfoList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.ActNum,
-                                self.StartDate,
-                                self.EndtDate,
-                                self.JoinStartTime,
-                                self.JoinEndTime,
-                                self.IsDayReset,
-                                self.ResetType,
-                                self.LimitLV,
-                                self.ShopType,
-                                self.SubResetType,
-                                self.SubmitCount,
-                                "...",
-                                self.PersonalBillCount,
-                                "...",
-                                self.FamilyBillCount,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagMCActBossTrialInfo=tagMCActBossTrialInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActBossTrialInfo.Head.Cmd,m_NAtagMCActBossTrialInfo.Head.SubCmd))] = m_NAtagMCActBossTrialInfo
-
-
-#------------------------------------------------------
-# AA 68 Boss历练活动玩家信息 #tagMCActBossTrialPlayerInfo
-
-class  tagMCActBossTrialPlayerInfo(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("ActNum", c_ubyte),    # 活动编号
-                  ("SubmitCount", c_int),    # 已提交凭证个数,总个数
-                  ("SubmitAwardCount", c_int),    # 已提交凭证个数,关联提交奖励的个数,领奖使用该个数判断
-                  ("SubmitAwardState", c_int),    # 提交凭证奖励领奖状态
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xAA
-        self.SubCmd = 0x68
-        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.Cmd = 0xAA
-        self.SubCmd = 0x68
-        self.ActNum = 0
-        self.SubmitCount = 0
-        self.SubmitAwardCount = 0
-        self.SubmitAwardState = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCActBossTrialPlayerInfo)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// AA 68 Boss历练活动玩家信息 //tagMCActBossTrialPlayerInfo:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                ActNum:%d,
-                                SubmitCount:%d,
-                                SubmitAwardCount:%d,
-                                SubmitAwardState:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.ActNum,
-                                self.SubmitCount,
-                                self.SubmitAwardCount,
-                                self.SubmitAwardState
-                                )
-        return DumpString
-
-
-m_NAtagMCActBossTrialPlayerInfo=tagMCActBossTrialPlayerInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActBossTrialPlayerInfo.Cmd,m_NAtagMCActBossTrialPlayerInfo.SubCmd))] = m_NAtagMCActBossTrialPlayerInfo
-
-
-#------------------------------------------------------
 # AA 74 购买次数礼包活动信息 #tagMCActBuyCountGiftInfo
 
 class  tagMCActBuyCountGiftItem(Structure):
@@ -23891,285 +23384,6 @@
 
 
 #------------------------------------------------------
-# AA 55 垃圾收集活动信息 #tagMCActGarbageSortingInfo
-
-class  tagMCActGarbageSortingInfo(Structure):
-    Head = tagHead()
-    ActNum = 0    #(BYTE ActNum)// 活动编号
-    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
-    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
-    LimitLV = 0    #(WORD LimitLV)// 限制等级
-    ResetType = 0    #(BYTE ResetType)// 重置类型,0-0点重置;1-5点开,5点重置;2-5点开,0点重置
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xAA
-        self.Head.SubCmd = 0x55
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.ActNum,_pos = CommFunc.ReadBYTE(_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.ResetType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xAA
-        self.Head.SubCmd = 0x55
-        self.ActNum = 0
-        self.StartDate = ""
-        self.EndtDate = ""
-        self.LimitLV = 0
-        self.ResetType = 0
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        length += 10
-        length += 10
-        length += 2
-        length += 1
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.ActNum)
-        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.ResetType)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                ActNum:%d,
-                                StartDate:%s,
-                                EndtDate:%s,
-                                LimitLV:%d,
-                                ResetType:%d
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.ActNum,
-                                self.StartDate,
-                                self.EndtDate,
-                                self.LimitLV,
-                                self.ResetType
-                                )
-        return DumpString
-
-
-m_NAtagMCActGarbageSortingInfo=tagMCActGarbageSortingInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActGarbageSortingInfo.Head.Cmd,m_NAtagMCActGarbageSortingInfo.Head.SubCmd))] = m_NAtagMCActGarbageSortingInfo
-
-
-#------------------------------------------------------
-# AA 57 垃圾收集活动分类结果 #tagMCActGarbageSortingResult
-
-class  tagMCActGarbageSortingResult(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("ActNum", c_ubyte),    #活动编号
-                  ("GarbageSortingType", c_ubyte),    #垃圾分类类型
-                  ("IsRight", c_ubyte),    #是否正确
-                  ("AddEnvValue", c_int),    #增加环保值
-                  ("HisEnvValueTotal", c_int),    # 当前活动累计获得环保值
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xAA
-        self.SubCmd = 0x57
-        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.Cmd = 0xAA
-        self.SubCmd = 0x57
-        self.ActNum = 0
-        self.GarbageSortingType = 0
-        self.IsRight = 0
-        self.AddEnvValue = 0
-        self.HisEnvValueTotal = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCActGarbageSortingResult)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// AA 57 垃圾收集活动分类结果 //tagMCActGarbageSortingResult:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                ActNum:%d,
-                                GarbageSortingType:%d,
-                                IsRight:%d,
-                                AddEnvValue:%d,
-                                HisEnvValueTotal:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.ActNum,
-                                self.GarbageSortingType,
-                                self.IsRight,
-                                self.AddEnvValue,
-                                self.HisEnvValueTotal
-                                )
-        return DumpString
-
-
-m_NAtagMCActGarbageSortingResult=tagMCActGarbageSortingResult()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActGarbageSortingResult.Cmd,m_NAtagMCActGarbageSortingResult.SubCmd))] = m_NAtagMCActGarbageSortingResult
-
-
-#------------------------------------------------------
-# AA 56 垃圾收集活动任务进度信息 #tagMCActGarbageTaskInfo
-
-class  tagMCActGarbageTask(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("GarbageTaskID", c_ubyte),    #垃圾任务ID
-                  ("GarbageTaskValue", c_int),    #当前进度值,一直累加
-                  ("GarbageTaskFinishCount", c_int),    #当前已完成次数; 前端计算未完成次数的进度值=max(0, 当前进度值 - (完成次数 * 单次所需进度))
-                  ]
-
-    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.GarbageTaskID = 0
-        self.GarbageTaskValue = 0
-        self.GarbageTaskFinishCount = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCActGarbageTask)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// AA 56 垃圾收集活动任务进度信息 //tagMCActGarbageTaskInfo:
-                                GarbageTaskID:%d,
-                                GarbageTaskValue:%d,
-                                GarbageTaskFinishCount:%d
-                                '''\
-                                %(
-                                self.GarbageTaskID,
-                                self.GarbageTaskValue,
-                                self.GarbageTaskFinishCount
-                                )
-        return DumpString
-
-
-class  tagMCActGarbageTaskInfo(Structure):
-    Head = tagHead()
-    ActNum = 0    #(BYTE ActNum)// 活动编号
-    HisEnvValueTotal = 0    #(DWORD HisEnvValueTotal)// 当前活动累计获得环保值
-    GarbageTaskCount = 0    #(BYTE GarbageTaskCount)//任务数
-    GarbageTaskList = list()    #(vector<tagMCActGarbageTask> GarbageTaskList)//任务信息列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xAA
-        self.Head.SubCmd = 0x56
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.ActNum,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.HisEnvValueTotal,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.GarbageTaskCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.GarbageTaskCount):
-            temGarbageTaskList = tagMCActGarbageTask()
-            _pos = temGarbageTaskList.ReadData(_lpData, _pos)
-            self.GarbageTaskList.append(temGarbageTaskList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xAA
-        self.Head.SubCmd = 0x56
-        self.ActNum = 0
-        self.HisEnvValueTotal = 0
-        self.GarbageTaskCount = 0
-        self.GarbageTaskList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        length += 4
-        length += 1
-        for i in range(self.GarbageTaskCount):
-            length += self.GarbageTaskList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.ActNum)
-        data = CommFunc.WriteDWORD(data, self.HisEnvValueTotal)
-        data = CommFunc.WriteBYTE(data, self.GarbageTaskCount)
-        for i in range(self.GarbageTaskCount):
-            data = CommFunc.WriteString(data, self.GarbageTaskList[i].GetLength(), self.GarbageTaskList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                ActNum:%d,
-                                HisEnvValueTotal:%d,
-                                GarbageTaskCount:%d,
-                                GarbageTaskList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.ActNum,
-                                self.HisEnvValueTotal,
-                                self.GarbageTaskCount,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagMCActGarbageTaskInfo=tagMCActGarbageTaskInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActGarbageTaskInfo.Head.Cmd,m_NAtagMCActGarbageTaskInfo.Head.SubCmd))] = m_NAtagMCActGarbageTaskInfo
-
-
-#------------------------------------------------------
 # AA 60 天帝礼包活动信息 #tagMCActGodGiftInfo
 
 class  tagMCActGodGiftItem(Structure):
@@ -24832,862 +24046,6 @@
 
 m_NAtagMCActGrowupBuyInfo=tagMCActGrowupBuyInfo()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActGrowupBuyInfo.Head.Cmd,m_NAtagMCActGrowupBuyInfo.Head.SubCmd))] = m_NAtagMCActGrowupBuyInfo
-
-
-#------------------------------------------------------
-# AA 81 古宝养成活动信息 #tagMCActGubaoInfo
-
-class  tagMCActGubaoItem(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(tagMCActGubaoItem)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// AA 81 古宝养成活动信息 //tagMCActGubaoInfo:
-                                ItemID:%d,
-                                ItemCount:%d,
-                                IsBind:%d
-                                '''\
-                                %(
-                                self.ItemID,
-                                self.ItemCount,
-                                self.IsBind
-                                )
-        return DumpString
-
-
-class  tagMCActGubaoAwardEx(Structure):
-    NeedScore = 0    #(DWORD NeedScore)// 额外奖励所需积分
-    Count = 0    #(BYTE Count)// 额外奖励物品数
-    AwardItemList = list()    #(vector<tagMCActGubaoItem> AwardItemList)// 额外奖励物品列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.NeedScore,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.Count):
-            temAwardItemList = tagMCActGubaoItem()
-            _pos = temAwardItemList.ReadData(_lpData, _pos)
-            self.AwardItemList.append(temAwardItemList)
-        return _pos
-
-    def Clear(self):
-        self.NeedScore = 0
-        self.Count = 0
-        self.AwardItemList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 4
-        length += 1
-        for i in range(self.Count):
-            length += self.AwardItemList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteDWORD(data, self.NeedScore)
-        data = CommFunc.WriteBYTE(data, self.Count)
-        for i in range(self.Count):
-            data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                NeedScore:%d,
-                                Count:%d,
-                                AwardItemList:%s
-                                '''\
-                                %(
-                                self.NeedScore,
-                                self.Count,
-                                "..."
-                                )
-        return DumpString
-
-
-class  tagMCActGubaoBillard(Structure):
-    Rank = 0    #(DWORD Rank)// 名次,1-代表第一名;支持夸段,如1,3 代表第1名,第2~3名
-    Count = 0    #(BYTE Count)// 奖励物品数
-    AwardItemList = list()    #(vector<tagMCActGubaoItem> AwardItemList)// 奖励物品列表
-    NeedScore = 0    #(DWORD NeedScore)// 上榜所需积分
-    CountEx = 0    #(BYTE CountEx)// 额外奖励数
-    AwardItemExList = list()    #(vector<tagMCActGubaoAwardEx> AwardItemExList)// 额外奖励列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.Rank,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.Count):
-            temAwardItemList = tagMCActGubaoItem()
-            _pos = temAwardItemList.ReadData(_lpData, _pos)
-            self.AwardItemList.append(temAwardItemList)
-        self.NeedScore,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.CountEx,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.CountEx):
-            temAwardItemExList = tagMCActGubaoAwardEx()
-            _pos = temAwardItemExList.ReadData(_lpData, _pos)
-            self.AwardItemExList.append(temAwardItemExList)
-        return _pos
-
-    def Clear(self):
-        self.Rank = 0
-        self.Count = 0
-        self.AwardItemList = list()
-        self.NeedScore = 0
-        self.CountEx = 0
-        self.AwardItemExList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 4
-        length += 1
-        for i in range(self.Count):
-            length += self.AwardItemList[i].GetLength()
-        length += 4
-        length += 1
-        for i in range(self.CountEx):
-            length += self.AwardItemExList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteDWORD(data, self.Rank)
-        data = CommFunc.WriteBYTE(data, self.Count)
-        for i in range(self.Count):
-            data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer())
-        data = CommFunc.WriteDWORD(data, self.NeedScore)
-        data = CommFunc.WriteBYTE(data, self.CountEx)
-        for i in range(self.CountEx):
-            data = CommFunc.WriteString(data, self.AwardItemExList[i].GetLength(), self.AwardItemExList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Rank:%d,
-                                Count:%d,
-                                AwardItemList:%s,
-                                NeedScore:%d,
-                                CountEx:%d,
-                                AwardItemExList:%s
-                                '''\
-                                %(
-                                self.Rank,
-                                self.Count,
-                                "...",
-                                self.NeedScore,
-                                self.CountEx,
-                                "..."
-                                )
-        return DumpString
-
-
-class  tagMCActGubaoInfo(Structure):
-    Head = tagHead()
-    ActNum = 0    #(BYTE ActNum)// 活动编号
-    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
-    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
-    JoinStartTime = ""    #(char JoinStartTime[5])// 参与开始时间点 mm:ss
-    JoinEndTime = ""    #(char JoinEndTime[5])// 参与结束时间点 mm:ss
-    LimitLV = 0    #(WORD LimitLV)// 限制等级
-    ShopType = 0    #(WORD ShopType)// 开放商店类型,可能为0不开放
-    PersonalBillCount = 0    #(BYTE PersonalBillCount)
-    PersonalBillboardInfoList = list()    #(vector<tagMCActGubaoBillard> PersonalBillboardInfoList)// 个人榜单奖励信息列表,如果没有代表本次活动没有该榜奖励
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xAA
-        self.Head.SubCmd = 0x81
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.ActNum,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
-        self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
-        self.JoinStartTime,_pos = CommFunc.ReadString(_lpData, _pos,5)
-        self.JoinEndTime,_pos = CommFunc.ReadString(_lpData, _pos,5)
-        self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.ShopType,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.PersonalBillCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.PersonalBillCount):
-            temPersonalBillboardInfoList = tagMCActGubaoBillard()
-            _pos = temPersonalBillboardInfoList.ReadData(_lpData, _pos)
-            self.PersonalBillboardInfoList.append(temPersonalBillboardInfoList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xAA
-        self.Head.SubCmd = 0x81
-        self.ActNum = 0
-        self.StartDate = ""
-        self.EndtDate = ""
-        self.JoinStartTime = ""
-        self.JoinEndTime = ""
-        self.LimitLV = 0
-        self.ShopType = 0
-        self.PersonalBillCount = 0
-        self.PersonalBillboardInfoList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        length += 10
-        length += 10
-        length += 5
-        length += 5
-        length += 2
-        length += 2
-        length += 1
-        for i in range(self.PersonalBillCount):
-            length += self.PersonalBillboardInfoList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.ActNum)
-        data = CommFunc.WriteString(data, 10, self.StartDate)
-        data = CommFunc.WriteString(data, 10, self.EndtDate)
-        data = CommFunc.WriteString(data, 5, self.JoinStartTime)
-        data = CommFunc.WriteString(data, 5, self.JoinEndTime)
-        data = CommFunc.WriteWORD(data, self.LimitLV)
-        data = CommFunc.WriteWORD(data, self.ShopType)
-        data = CommFunc.WriteBYTE(data, self.PersonalBillCount)
-        for i in range(self.PersonalBillCount):
-            data = CommFunc.WriteString(data, self.PersonalBillboardInfoList[i].GetLength(), self.PersonalBillboardInfoList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                ActNum:%d,
-                                StartDate:%s,
-                                EndtDate:%s,
-                                JoinStartTime:%s,
-                                JoinEndTime:%s,
-                                LimitLV:%d,
-                                ShopType:%d,
-                                PersonalBillCount:%d,
-                                PersonalBillboardInfoList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.ActNum,
-                                self.StartDate,
-                                self.EndtDate,
-                                self.JoinStartTime,
-                                self.JoinEndTime,
-                                self.LimitLV,
-                                self.ShopType,
-                                self.PersonalBillCount,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagMCActGubaoInfo=tagMCActGubaoInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActGubaoInfo.Head.Cmd,m_NAtagMCActGubaoInfo.Head.SubCmd))] = m_NAtagMCActGubaoInfo
-
-
-#------------------------------------------------------
-# AA 82 古宝养成活动玩家信息 #tagMCActGubaoPlayerInfo
-
-class  tagMCActGubaoPlayerInfo(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("ActNum", c_ubyte),    # 活动编号
-                  ("Score", c_int),    # 当前积分
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xAA
-        self.SubCmd = 0x82
-        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.Cmd = 0xAA
-        self.SubCmd = 0x82
-        self.ActNum = 0
-        self.Score = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCActGubaoPlayerInfo)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// AA 82 古宝养成活动玩家信息 //tagMCActGubaoPlayerInfo:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                ActNum:%d,
-                                Score:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.ActNum,
-                                self.Score
-                                )
-        return DumpString
-
-
-m_NAtagMCActGubaoPlayerInfo=tagMCActGubaoPlayerInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActGubaoPlayerInfo.Cmd,m_NAtagMCActGubaoPlayerInfo.SubCmd))] = m_NAtagMCActGubaoPlayerInfo
-
-
-#------------------------------------------------------
-# AA 54 骑宠盛宴活动信息 #tagMCActHorsePetFeastInfo
-
-class  tagMCActHorsePetFeastTime(Structure):
-    StartTime = ""    #(char StartTime[5])// 开始时间 H:M
-    EndtTime = ""    #(char EndtTime[5])// 结束时间 H:M
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.StartTime,_pos = CommFunc.ReadString(_lpData, _pos,5)
-        self.EndtTime,_pos = CommFunc.ReadString(_lpData, _pos,5)
-        return _pos
-
-    def Clear(self):
-        self.StartTime = ""
-        self.EndtTime = ""
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 5
-        length += 5
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, 5, self.StartTime)
-        data = CommFunc.WriteString(data, 5, self.EndtTime)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                StartTime:%s,
-                                EndtTime:%s
-                                '''\
-                                %(
-                                self.StartTime,
-                                self.EndtTime
-                                )
-        return DumpString
-
-
-class  tagMCActHorsePetFeastInfo(Structure):
-    Head = tagHead()
-    ActNum = 0    #(BYTE ActNum)//活动编号
-    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
-    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
-    TimeCount = 0    #(BYTE TimeCount)
-    ActTimeList = list()    #(vector<tagMCActHorsePetFeastTime> ActTimeList)// 活动时间 H:M 列表
-    LimitLV = 0    #(WORD LimitLV)// 限制等级
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xAA
-        self.Head.SubCmd = 0x54
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.ActNum,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
-        self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
-        self.TimeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.TimeCount):
-            temActTimeList = tagMCActHorsePetFeastTime()
-            _pos = temActTimeList.ReadData(_lpData, _pos)
-            self.ActTimeList.append(temActTimeList)
-        self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xAA
-        self.Head.SubCmd = 0x54
-        self.ActNum = 0
-        self.StartDate = ""
-        self.EndtDate = ""
-        self.TimeCount = 0
-        self.ActTimeList = list()
-        self.LimitLV = 0
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        length += 10
-        length += 10
-        length += 1
-        for i in range(self.TimeCount):
-            length += self.ActTimeList[i].GetLength()
-        length += 2
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.ActNum)
-        data = CommFunc.WriteString(data, 10, self.StartDate)
-        data = CommFunc.WriteString(data, 10, self.EndtDate)
-        data = CommFunc.WriteBYTE(data, self.TimeCount)
-        for i in range(self.TimeCount):
-            data = CommFunc.WriteString(data, self.ActTimeList[i].GetLength(), self.ActTimeList[i].GetBuffer())
-        data = CommFunc.WriteWORD(data, self.LimitLV)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                ActNum:%d,
-                                StartDate:%s,
-                                EndtDate:%s,
-                                TimeCount:%d,
-                                ActTimeList:%s,
-                                LimitLV:%d
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.ActNum,
-                                self.StartDate,
-                                self.EndtDate,
-                                self.TimeCount,
-                                "...",
-                                self.LimitLV
-                                )
-        return DumpString
-
-
-m_NAtagMCActHorsePetFeastInfo=tagMCActHorsePetFeastInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActHorsePetFeastInfo.Head.Cmd,m_NAtagMCActHorsePetFeastInfo.Head.SubCmd))] = m_NAtagMCActHorsePetFeastInfo
-
-
-#------------------------------------------------------
-# AA 84 骑宠养成活动信息 #tagMCActHorsePetTrainInfo
-
-class  tagMCActHorsePetTrainItem(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(tagMCActHorsePetTrainItem)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// AA 84 骑宠养成活动信息 //tagMCActHorsePetTrainInfo:
-                                ItemID:%d,
-                                ItemCount:%d,
-                                IsBind:%d
-                                '''\
-                                %(
-                                self.ItemID,
-                                self.ItemCount,
-                                self.IsBind
-                                )
-        return DumpString
-
-
-class  tagMCActHorsePetTrainAwardEx(Structure):
-    NeedScore = 0    #(DWORD NeedScore)// 额外奖励所需积分
-    Count = 0    #(BYTE Count)// 额外奖励物品数
-    AwardItemList = list()    #(vector<tagMCActHorsePetTrainItem> AwardItemList)// 额外奖励物品列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.NeedScore,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.Count):
-            temAwardItemList = tagMCActHorsePetTrainItem()
-            _pos = temAwardItemList.ReadData(_lpData, _pos)
-            self.AwardItemList.append(temAwardItemList)
-        return _pos
-
-    def Clear(self):
-        self.NeedScore = 0
-        self.Count = 0
-        self.AwardItemList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 4
-        length += 1
-        for i in range(self.Count):
-            length += self.AwardItemList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteDWORD(data, self.NeedScore)
-        data = CommFunc.WriteBYTE(data, self.Count)
-        for i in range(self.Count):
-            data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                NeedScore:%d,
-                                Count:%d,
-                                AwardItemList:%s
-                                '''\
-                                %(
-                                self.NeedScore,
-                                self.Count,
-                                "..."
-                                )
-        return DumpString
-
-
-class  tagMCActHorsePetTrainBillard(Structure):
-    Rank = 0    #(DWORD Rank)// 名次,1-代表第一名;支持夸段,如1,3 代表第1名,第2~3名
-    Count = 0    #(BYTE Count)// 奖励物品数
-    AwardItemList = list()    #(vector<tagMCActHorsePetTrainItem> AwardItemList)// 奖励物品列表
-    NeedScore = 0    #(DWORD NeedScore)// 上榜所需积分
-    CountEx = 0    #(BYTE CountEx)// 额外奖励数
-    AwardItemExList = list()    #(vector<tagMCActHorsePetTrainAwardEx> AwardItemExList)// 额外奖励列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.Rank,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.Count):
-            temAwardItemList = tagMCActHorsePetTrainItem()
-            _pos = temAwardItemList.ReadData(_lpData, _pos)
-            self.AwardItemList.append(temAwardItemList)
-        self.NeedScore,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.CountEx,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.CountEx):
-            temAwardItemExList = tagMCActHorsePetTrainAwardEx()
-            _pos = temAwardItemExList.ReadData(_lpData, _pos)
-            self.AwardItemExList.append(temAwardItemExList)
-        return _pos
-
-    def Clear(self):
-        self.Rank = 0
-        self.Count = 0
-        self.AwardItemList = list()
-        self.NeedScore = 0
-        self.CountEx = 0
-        self.AwardItemExList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 4
-        length += 1
-        for i in range(self.Count):
-            length += self.AwardItemList[i].GetLength()
-        length += 4
-        length += 1
-        for i in range(self.CountEx):
-            length += self.AwardItemExList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteDWORD(data, self.Rank)
-        data = CommFunc.WriteBYTE(data, self.Count)
-        for i in range(self.Count):
-            data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer())
-        data = CommFunc.WriteDWORD(data, self.NeedScore)
-        data = CommFunc.WriteBYTE(data, self.CountEx)
-        for i in range(self.CountEx):
-            data = CommFunc.WriteString(data, self.AwardItemExList[i].GetLength(), self.AwardItemExList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Rank:%d,
-                                Count:%d,
-                                AwardItemList:%s,
-                                NeedScore:%d,
-                                CountEx:%d,
-                                AwardItemExList:%s
-                                '''\
-                                %(
-                                self.Rank,
-                                self.Count,
-                                "...",
-                                self.NeedScore,
-                                self.CountEx,
-                                "..."
-                                )
-        return DumpString
-
-
-class  tagMCActHorsePetTrainInfo(Structure):
-    Head = tagHead()
-    ActNum = 0    #(BYTE ActNum)// 活动编号
-    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
-    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
-    JoinStartTime = ""    #(char JoinStartTime[5])// 参与开始时间点 mm:ss
-    JoinEndTime = ""    #(char JoinEndTime[5])// 参与结束时间点 mm:ss
-    LimitLV = 0    #(WORD LimitLV)// 限制等级
-    ShopType = 0    #(WORD ShopType)// 开放商店类型,可能为0不开放
-    PersonalBillCount = 0    #(BYTE PersonalBillCount)
-    PersonalBillboardInfoList = list()    #(vector<tagMCActHorsePetTrainBillard> PersonalBillboardInfoList)// 个人榜单奖励信息列表,如果没有代表本次活动没有该榜奖励
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xAA
-        self.Head.SubCmd = 0x84
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.ActNum,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
-        self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
-        self.JoinStartTime,_pos = CommFunc.ReadString(_lpData, _pos,5)
-        self.JoinEndTime,_pos = CommFunc.ReadString(_lpData, _pos,5)
-        self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.ShopType,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.PersonalBillCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.PersonalBillCount):
-            temPersonalBillboardInfoList = tagMCActHorsePetTrainBillard()
-            _pos = temPersonalBillboardInfoList.ReadData(_lpData, _pos)
-            self.PersonalBillboardInfoList.append(temPersonalBillboardInfoList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xAA
-        self.Head.SubCmd = 0x84
-        self.ActNum = 0
-        self.StartDate = ""
-        self.EndtDate = ""
-        self.JoinStartTime = ""
-        self.JoinEndTime = ""
-        self.LimitLV = 0
-        self.ShopType = 0
-        self.PersonalBillCount = 0
-        self.PersonalBillboardInfoList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        length += 10
-        length += 10
-        length += 5
-        length += 5
-        length += 2
-        length += 2
-        length += 1
-        for i in range(self.PersonalBillCount):
-            length += self.PersonalBillboardInfoList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.ActNum)
-        data = CommFunc.WriteString(data, 10, self.StartDate)
-        data = CommFunc.WriteString(data, 10, self.EndtDate)
-        data = CommFunc.WriteString(data, 5, self.JoinStartTime)
-        data = CommFunc.WriteString(data, 5, self.JoinEndTime)
-        data = CommFunc.WriteWORD(data, self.LimitLV)
-        data = CommFunc.WriteWORD(data, self.ShopType)
-        data = CommFunc.WriteBYTE(data, self.PersonalBillCount)
-        for i in range(self.PersonalBillCount):
-            data = CommFunc.WriteString(data, self.PersonalBillboardInfoList[i].GetLength(), self.PersonalBillboardInfoList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                ActNum:%d,
-                                StartDate:%s,
-                                EndtDate:%s,
-                                JoinStartTime:%s,
-                                JoinEndTime:%s,
-                                LimitLV:%d,
-                                ShopType:%d,
-                                PersonalBillCount:%d,
-                                PersonalBillboardInfoList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.ActNum,
-                                self.StartDate,
-                                self.EndtDate,
-                                self.JoinStartTime,
-                                self.JoinEndTime,
-                                self.LimitLV,
-                                self.ShopType,
-                                self.PersonalBillCount,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagMCActHorsePetTrainInfo=tagMCActHorsePetTrainInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActHorsePetTrainInfo.Head.Cmd,m_NAtagMCActHorsePetTrainInfo.Head.SubCmd))] = m_NAtagMCActHorsePetTrainInfo
-
-
-#------------------------------------------------------
-# AA 85 骑宠养成活动玩家信息 #tagMCActHorsePetTrainPlayerInfo
-
-class  tagMCActHorsePetTrainPlayerInfo(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("ActNum", c_ubyte),    # 活动编号
-                  ("Score", c_int),    # 当前活动积分
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xAA
-        self.SubCmd = 0x85
-        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.Cmd = 0xAA
-        self.SubCmd = 0x85
-        self.ActNum = 0
-        self.Score = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCActHorsePetTrainPlayerInfo)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// AA 85 骑宠养成活动玩家信息 //tagMCActHorsePetTrainPlayerInfo:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                ActNum:%d,
-                                Score:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.ActNum,
-                                self.Score
-                                )
-        return DumpString
-
-
-m_NAtagMCActHorsePetTrainPlayerInfo=tagMCActHorsePetTrainPlayerInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActHorsePetTrainPlayerInfo.Cmd,m_NAtagMCActHorsePetTrainPlayerInfo.SubCmd))] = m_NAtagMCActHorsePetTrainPlayerInfo
 
 
 #------------------------------------------------------
@@ -29573,593 +27931,6 @@
 
 
 #------------------------------------------------------
-# AA 59 仙匣秘境抽奖结果 #tagMCActXianXiaMJAwardItemResult
-
-class  tagMCActXianXiaMJAwardItemResult(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("ActNum", c_ubyte),    # 活动编号
-                  ("ItemLibType", c_ubyte),    #物品库类型;9-固定为大奖库,非9-策划自定义库
-                  ("ItemID", c_int),    # 注意: 不同库物品ID可能相同,但个数不同
-                  ("ItemCount", c_ushort),    
-                  ("PosNum", c_ubyte),    # 被抽中时的位置编号,1~99,前端自定义展示位置编号,0代表未被抽中;
-                  ("TotalTimesNow", c_ubyte),    #当前已产出次数,不限制次数时不记录,即同样为0
-                  ("LotteryScore", c_int),    #当前抽奖积分
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xAA
-        self.SubCmd = 0x59
-        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.Cmd = 0xAA
-        self.SubCmd = 0x59
-        self.ActNum = 0
-        self.ItemLibType = 0
-        self.ItemID = 0
-        self.ItemCount = 0
-        self.PosNum = 0
-        self.TotalTimesNow = 0
-        self.LotteryScore = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCActXianXiaMJAwardItemResult)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// AA 59 仙匣秘境抽奖结果 //tagMCActXianXiaMJAwardItemResult:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                ActNum:%d,
-                                ItemLibType:%d,
-                                ItemID:%d,
-                                ItemCount:%d,
-                                PosNum:%d,
-                                TotalTimesNow:%d,
-                                LotteryScore:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.ActNum,
-                                self.ItemLibType,
-                                self.ItemID,
-                                self.ItemCount,
-                                self.PosNum,
-                                self.TotalTimesNow,
-                                self.LotteryScore
-                                )
-        return DumpString
-
-
-m_NAtagMCActXianXiaMJAwardItemResult=tagMCActXianXiaMJAwardItemResult()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActXianXiaMJAwardItemResult.Cmd,m_NAtagMCActXianXiaMJAwardItemResult.SubCmd))] = m_NAtagMCActXianXiaMJAwardItemResult
-
-
-#------------------------------------------------------
-# AA 58 仙匣秘境活动信息 #tagMCActXianXiaMJInfo
-
-class  tagMCActXianXiaMJItem(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(tagMCActXianXiaMJItem)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// AA 58 仙匣秘境活动信息 //tagMCActXianXiaMJInfo:
-                                ItemID:%d,
-                                ItemCount:%d,
-                                IsBind:%d
-                                '''\
-                                %(
-                                self.ItemID,
-                                self.ItemCount,
-                                self.IsBind
-                                )
-        return DumpString
-
-
-class  tagMCActXianXiaMJAwardEx(Structure):
-    NeedScore = 0    #(DWORD NeedScore)// 额外奖励所需积分
-    Count = 0    #(BYTE Count)// 额外奖励物品数
-    AwardItemList = list()    #(vector<tagMCActXianXiaMJItem> AwardItemList)// 额外奖励物品列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.NeedScore,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.Count):
-            temAwardItemList = tagMCActXianXiaMJItem()
-            _pos = temAwardItemList.ReadData(_lpData, _pos)
-            self.AwardItemList.append(temAwardItemList)
-        return _pos
-
-    def Clear(self):
-        self.NeedScore = 0
-        self.Count = 0
-        self.AwardItemList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 4
-        length += 1
-        for i in range(self.Count):
-            length += self.AwardItemList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteDWORD(data, self.NeedScore)
-        data = CommFunc.WriteBYTE(data, self.Count)
-        for i in range(self.Count):
-            data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                NeedScore:%d,
-                                Count:%d,
-                                AwardItemList:%s
-                                '''\
-                                %(
-                                self.NeedScore,
-                                self.Count,
-                                "..."
-                                )
-        return DumpString
-
-
-class  tagMCActXianXiaMJBillard(Structure):
-    Rank = 0    #(DWORD Rank)// 名次,1-代表第一名;支持夸段,如1,3 代表第1名,第2~3名
-    Count = 0    #(BYTE Count)// 奖励物品数
-    AwardItemList = list()    #(vector<tagMCActXianXiaMJItem> AwardItemList)// 奖励物品列表
-    NeedScore = 0    #(DWORD NeedScore)// 上榜所需积分
-    CountEx = 0    #(BYTE CountEx)// 额外奖励数
-    AwardItemExList = list()    #(vector<tagMCActXianXiaMJAwardEx> AwardItemExList)// 额外奖励列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.Rank,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.Count):
-            temAwardItemList = tagMCActXianXiaMJItem()
-            _pos = temAwardItemList.ReadData(_lpData, _pos)
-            self.AwardItemList.append(temAwardItemList)
-        self.NeedScore,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.CountEx,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.CountEx):
-            temAwardItemExList = tagMCActXianXiaMJAwardEx()
-            _pos = temAwardItemExList.ReadData(_lpData, _pos)
-            self.AwardItemExList.append(temAwardItemExList)
-        return _pos
-
-    def Clear(self):
-        self.Rank = 0
-        self.Count = 0
-        self.AwardItemList = list()
-        self.NeedScore = 0
-        self.CountEx = 0
-        self.AwardItemExList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 4
-        length += 1
-        for i in range(self.Count):
-            length += self.AwardItemList[i].GetLength()
-        length += 4
-        length += 1
-        for i in range(self.CountEx):
-            length += self.AwardItemExList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteDWORD(data, self.Rank)
-        data = CommFunc.WriteBYTE(data, self.Count)
-        for i in range(self.Count):
-            data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer())
-        data = CommFunc.WriteDWORD(data, self.NeedScore)
-        data = CommFunc.WriteBYTE(data, self.CountEx)
-        for i in range(self.CountEx):
-            data = CommFunc.WriteString(data, self.AwardItemExList[i].GetLength(), self.AwardItemExList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Rank:%d,
-                                Count:%d,
-                                AwardItemList:%s,
-                                NeedScore:%d,
-                                CountEx:%d,
-                                AwardItemExList:%s
-                                '''\
-                                %(
-                                self.Rank,
-                                self.Count,
-                                "...",
-                                self.NeedScore,
-                                self.CountEx,
-                                "..."
-                                )
-        return DumpString
-
-
-class  tagMCActXianXiaMJInfo(Structure):
-    Head = tagHead()
-    ActNum = 0    #(BYTE ActNum)// 活动编号
-    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
-    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
-    JoinStartTime = ""    #(char JoinStartTime[5])// 参与开始时间点 mm:ss
-    JoinEndTime = ""    #(char JoinEndTime[5])// 参与结束时间点 mm:ss
-    IsDayReset = 0    #(BYTE IsDayReset)// 是否每天重置
-    LimitLV = 0    #(WORD LimitLV)// 限制等级
-    UseItemID = 0    #(DWORD UseItemID)//消耗物品ID,默认1个;消耗物品或货币二选一即可,或都配则先消耗道具,不足则消耗货币
-    MoneyType = 0    #(BYTE MoneyType)//消耗货币类型
-    MoneyValue = 0    #(WORD MoneyValue)//消耗货币值
-    LotteryAddScore = 0    #(WORD LotteryAddScore)//每次抽奖加积分
-    LayerAddScore = 0    #(WORD LayerAddScore)//每次跨层加积分
-    PersonalBillCount = 0    #(BYTE PersonalBillCount)
-    PersonalBillboardInfoList = list()    #(vector<tagMCActXianXiaMJBillard> PersonalBillboardInfoList)// 个人榜单奖励信息列表,如果没有代表本次活动没有该榜奖励
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xAA
-        self.Head.SubCmd = 0x58
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.ActNum,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
-        self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
-        self.JoinStartTime,_pos = CommFunc.ReadString(_lpData, _pos,5)
-        self.JoinEndTime,_pos = CommFunc.ReadString(_lpData, _pos,5)
-        self.IsDayReset,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.UseItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.MoneyType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.MoneyValue,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.LotteryAddScore,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.LayerAddScore,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.PersonalBillCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.PersonalBillCount):
-            temPersonalBillboardInfoList = tagMCActXianXiaMJBillard()
-            _pos = temPersonalBillboardInfoList.ReadData(_lpData, _pos)
-            self.PersonalBillboardInfoList.append(temPersonalBillboardInfoList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xAA
-        self.Head.SubCmd = 0x58
-        self.ActNum = 0
-        self.StartDate = ""
-        self.EndtDate = ""
-        self.JoinStartTime = ""
-        self.JoinEndTime = ""
-        self.IsDayReset = 0
-        self.LimitLV = 0
-        self.UseItemID = 0
-        self.MoneyType = 0
-        self.MoneyValue = 0
-        self.LotteryAddScore = 0
-        self.LayerAddScore = 0
-        self.PersonalBillCount = 0
-        self.PersonalBillboardInfoList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        length += 10
-        length += 10
-        length += 5
-        length += 5
-        length += 1
-        length += 2
-        length += 4
-        length += 1
-        length += 2
-        length += 2
-        length += 2
-        length += 1
-        for i in range(self.PersonalBillCount):
-            length += self.PersonalBillboardInfoList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.ActNum)
-        data = CommFunc.WriteString(data, 10, self.StartDate)
-        data = CommFunc.WriteString(data, 10, self.EndtDate)
-        data = CommFunc.WriteString(data, 5, self.JoinStartTime)
-        data = CommFunc.WriteString(data, 5, self.JoinEndTime)
-        data = CommFunc.WriteBYTE(data, self.IsDayReset)
-        data = CommFunc.WriteWORD(data, self.LimitLV)
-        data = CommFunc.WriteDWORD(data, self.UseItemID)
-        data = CommFunc.WriteBYTE(data, self.MoneyType)
-        data = CommFunc.WriteWORD(data, self.MoneyValue)
-        data = CommFunc.WriteWORD(data, self.LotteryAddScore)
-        data = CommFunc.WriteWORD(data, self.LayerAddScore)
-        data = CommFunc.WriteBYTE(data, self.PersonalBillCount)
-        for i in range(self.PersonalBillCount):
-            data = CommFunc.WriteString(data, self.PersonalBillboardInfoList[i].GetLength(), self.PersonalBillboardInfoList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                ActNum:%d,
-                                StartDate:%s,
-                                EndtDate:%s,
-                                JoinStartTime:%s,
-                                JoinEndTime:%s,
-                                IsDayReset:%d,
-                                LimitLV:%d,
-                                UseItemID:%d,
-                                MoneyType:%d,
-                                MoneyValue:%d,
-                                LotteryAddScore:%d,
-                                LayerAddScore:%d,
-                                PersonalBillCount:%d,
-                                PersonalBillboardInfoList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.ActNum,
-                                self.StartDate,
-                                self.EndtDate,
-                                self.JoinStartTime,
-                                self.JoinEndTime,
-                                self.IsDayReset,
-                                self.LimitLV,
-                                self.UseItemID,
-                                self.MoneyType,
-                                self.MoneyValue,
-                                self.LotteryAddScore,
-                                self.LayerAddScore,
-                                self.PersonalBillCount,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagMCActXianXiaMJInfo=tagMCActXianXiaMJInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActXianXiaMJInfo.Head.Cmd,m_NAtagMCActXianXiaMJInfo.Head.SubCmd))] = m_NAtagMCActXianXiaMJInfo
-
-
-#------------------------------------------------------
-# AA 79 仙匣秘境层信息 #tagMCActXianXiaMJLayerInfo
-
-class  tagMCActXianXiaMJLayerItem(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("ItemLibType", c_ubyte),    #物品库类型;9-固定为大奖库,非9-策划自定义库
-                  ("ItemID", c_int),    # 注意: 不同库物品ID可能相同,但个数不同
-                  ("ItemCount", c_ushort),    
-                  ("PosNum", c_ubyte),    # 被抽中时的位置编号,1~99,前端自定义展示位置编号,0代表未被抽中;
-                  ("TotalTimesNow", c_ubyte),    #当前已产出次数,不限制次数时不记录,即同样为0
-                  ("TotalTimesMax", c_ubyte),    #最大可产出次数,0不限
-                  ("LayerLimit", c_ubyte),    #大于等于X层后可产出,0不限
-                  ]
-
-    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.ItemLibType = 0
-        self.ItemID = 0
-        self.ItemCount = 0
-        self.PosNum = 0
-        self.TotalTimesNow = 0
-        self.TotalTimesMax = 0
-        self.LayerLimit = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCActXianXiaMJLayerItem)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// AA 79 仙匣秘境层信息 //tagMCActXianXiaMJLayerInfo:
-                                ItemLibType:%d,
-                                ItemID:%d,
-                                ItemCount:%d,
-                                PosNum:%d,
-                                TotalTimesNow:%d,
-                                TotalTimesMax:%d,
-                                LayerLimit:%d
-                                '''\
-                                %(
-                                self.ItemLibType,
-                                self.ItemID,
-                                self.ItemCount,
-                                self.PosNum,
-                                self.TotalTimesNow,
-                                self.TotalTimesMax,
-                                self.LayerLimit
-                                )
-        return DumpString
-
-
-class  tagMCActXianXiaMJLayerInfo(Structure):
-    Head = tagHead()
-    ActNum = 0    #(BYTE ActNum)// 活动编号
-    LayerNum = 0    #(WORD LayerNum)//当前奖池第几层
-    LotteryScore = 0    #(DWORD LotteryScore)//当前抽奖积分
-    AwardItemCount = 0    #(BYTE AwardItemCount)
-    AwardItemList = list()    #(vector<tagMCActXianXiaMJLayerItem> AwardItemList)// 奖池物品列表,已生成的,包含已选择的大奖物品
-    SuperItemCount = 0    #(BYTE SuperItemCount)
-    SuperItemList = list()    #(vector<tagMCActXianXiaMJLayerItem> SuperItemList)// 大奖物品待选择库,由玩家从库中选择放入奖池的物品;
-    SuperItemCanChooseCount = 0    #(BYTE SuperItemCanChooseCount)// 大奖物品可选择个数
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xAA
-        self.Head.SubCmd = 0x79
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.ActNum,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.LayerNum,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.LotteryScore,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.AwardItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.AwardItemCount):
-            temAwardItemList = tagMCActXianXiaMJLayerItem()
-            _pos = temAwardItemList.ReadData(_lpData, _pos)
-            self.AwardItemList.append(temAwardItemList)
-        self.SuperItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.SuperItemCount):
-            temSuperItemList = tagMCActXianXiaMJLayerItem()
-            _pos = temSuperItemList.ReadData(_lpData, _pos)
-            self.SuperItemList.append(temSuperItemList)
-        self.SuperItemCanChooseCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xAA
-        self.Head.SubCmd = 0x79
-        self.ActNum = 0
-        self.LayerNum = 0
-        self.LotteryScore = 0
-        self.AwardItemCount = 0
-        self.AwardItemList = list()
-        self.SuperItemCount = 0
-        self.SuperItemList = list()
-        self.SuperItemCanChooseCount = 0
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        length += 2
-        length += 4
-        length += 1
-        for i in range(self.AwardItemCount):
-            length += self.AwardItemList[i].GetLength()
-        length += 1
-        for i in range(self.SuperItemCount):
-            length += self.SuperItemList[i].GetLength()
-        length += 1
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.ActNum)
-        data = CommFunc.WriteWORD(data, self.LayerNum)
-        data = CommFunc.WriteDWORD(data, self.LotteryScore)
-        data = CommFunc.WriteBYTE(data, self.AwardItemCount)
-        for i in range(self.AwardItemCount):
-            data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.SuperItemCount)
-        for i in range(self.SuperItemCount):
-            data = CommFunc.WriteString(data, self.SuperItemList[i].GetLength(), self.SuperItemList[i].GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.SuperItemCanChooseCount)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                ActNum:%d,
-                                LayerNum:%d,
-                                LotteryScore:%d,
-                                AwardItemCount:%d,
-                                AwardItemList:%s,
-                                SuperItemCount:%d,
-                                SuperItemList:%s,
-                                SuperItemCanChooseCount:%d
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.ActNum,
-                                self.LayerNum,
-                                self.LotteryScore,
-                                self.AwardItemCount,
-                                "...",
-                                self.SuperItemCount,
-                                "...",
-                                self.SuperItemCanChooseCount
-                                )
-        return DumpString
-
-
-m_NAtagMCActXianXiaMJLayerInfo=tagMCActXianXiaMJLayerInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActXianXiaMJLayerInfo.Head.Cmd,m_NAtagMCActXianXiaMJLayerInfo.Head.SubCmd))] = m_NAtagMCActXianXiaMJLayerInfo
-
-
-#------------------------------------------------------
 # AA 87 运势活动信息 #tagMCActYunshiInfo
 
 class  tagMCActYunshiInfo(Structure):
@@ -31172,961 +28943,6 @@
 
 
 #------------------------------------------------------
-# AA 76 Boss历练跨服活动信息 #tagMCCrossActBossTrialInfo
-
-class  tagMCCrossActBossTrialItem(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(tagMCCrossActBossTrialItem)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// AA 76 Boss历练跨服活动信息 //tagMCCrossActBossTrialInfo:
-                                ItemID:%d,
-                                ItemCount:%d,
-                                IsBind:%d
-                                '''\
-                                %(
-                                self.ItemID,
-                                self.ItemCount,
-                                self.IsBind
-                                )
-        return DumpString
-
-
-class  tagMCCrossActBossTrialAwardEx(Structure):
-    NeedScore = 0    #(DWORD NeedScore)// 额外奖励所需积分
-    Count = 0    #(BYTE Count)// 额外奖励物品数
-    AwardItemList = list()    #(vector<tagMCCrossActBossTrialItem> AwardItemList)// 额外奖励物品列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.NeedScore,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.Count):
-            temAwardItemList = tagMCCrossActBossTrialItem()
-            _pos = temAwardItemList.ReadData(_lpData, _pos)
-            self.AwardItemList.append(temAwardItemList)
-        return _pos
-
-    def Clear(self):
-        self.NeedScore = 0
-        self.Count = 0
-        self.AwardItemList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 4
-        length += 1
-        for i in range(self.Count):
-            length += self.AwardItemList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteDWORD(data, self.NeedScore)
-        data = CommFunc.WriteBYTE(data, self.Count)
-        for i in range(self.Count):
-            data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                NeedScore:%d,
-                                Count:%d,
-                                AwardItemList:%s
-                                '''\
-                                %(
-                                self.NeedScore,
-                                self.Count,
-                                "..."
-                                )
-        return DumpString
-
-
-class  tagMCCrossActBossTrialBillard(Structure):
-    Rank = 0    #(DWORD Rank)// 名次,1-代表第一名;支持夸段,如1,3 代表第1名,第2~3名
-    Count = 0    #(BYTE Count)// 奖励物品数
-    AwardItemList = list()    #(vector<tagMCCrossActBossTrialItem> AwardItemList)// 奖励物品列表,当仙盟榜时,如果有该奖励则代表盟主奖励,否则默认均为成员奖励
-    MemCount = 0    #(BYTE MemCount)// 成员奖励物品数
-    MemAwardItemList = list()    #(vector<tagMCCrossActBossTrialItem> MemAwardItemList)// 成员奖励物品列表,仅仙盟榜时有效
-    NeedScore = 0    #(DWORD NeedScore)// 上榜所需积分
-    CountEx = 0    #(BYTE CountEx)// 额外奖励数
-    AwardItemExList = list()    #(vector<tagMCCrossActBossTrialAwardEx> AwardItemExList)// 额外奖励列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.Rank,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.Count):
-            temAwardItemList = tagMCCrossActBossTrialItem()
-            _pos = temAwardItemList.ReadData(_lpData, _pos)
-            self.AwardItemList.append(temAwardItemList)
-        self.MemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.MemCount):
-            temMemAwardItemList = tagMCCrossActBossTrialItem()
-            _pos = temMemAwardItemList.ReadData(_lpData, _pos)
-            self.MemAwardItemList.append(temMemAwardItemList)
-        self.NeedScore,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.CountEx,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.CountEx):
-            temAwardItemExList = tagMCCrossActBossTrialAwardEx()
-            _pos = temAwardItemExList.ReadData(_lpData, _pos)
-            self.AwardItemExList.append(temAwardItemExList)
-        return _pos
-
-    def Clear(self):
-        self.Rank = 0
-        self.Count = 0
-        self.AwardItemList = list()
-        self.MemCount = 0
-        self.MemAwardItemList = list()
-        self.NeedScore = 0
-        self.CountEx = 0
-        self.AwardItemExList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 4
-        length += 1
-        for i in range(self.Count):
-            length += self.AwardItemList[i].GetLength()
-        length += 1
-        for i in range(self.MemCount):
-            length += self.MemAwardItemList[i].GetLength()
-        length += 4
-        length += 1
-        for i in range(self.CountEx):
-            length += self.AwardItemExList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteDWORD(data, self.Rank)
-        data = CommFunc.WriteBYTE(data, self.Count)
-        for i in range(self.Count):
-            data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.MemCount)
-        for i in range(self.MemCount):
-            data = CommFunc.WriteString(data, self.MemAwardItemList[i].GetLength(), self.MemAwardItemList[i].GetBuffer())
-        data = CommFunc.WriteDWORD(data, self.NeedScore)
-        data = CommFunc.WriteBYTE(data, self.CountEx)
-        for i in range(self.CountEx):
-            data = CommFunc.WriteString(data, self.AwardItemExList[i].GetLength(), self.AwardItemExList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Rank:%d,
-                                Count:%d,
-                                AwardItemList:%s,
-                                MemCount:%d,
-                                MemAwardItemList:%s,
-                                NeedScore:%d,
-                                CountEx:%d,
-                                AwardItemExList:%s
-                                '''\
-                                %(
-                                self.Rank,
-                                self.Count,
-                                "...",
-                                self.MemCount,
-                                "...",
-                                self.NeedScore,
-                                self.CountEx,
-                                "..."
-                                )
-        return DumpString
-
-
-class  tagMCCrossActBossTrialInfo(Structure):
-    Head = tagHead()
-    ServerInfoLen = 0    #(BYTE ServerInfoLen)
-    ServerIDRangeInfo = ""    #(String ServerIDRangeInfo)//开放该活动的服务器ID范围列表,json格式 [[IDA, IDB], ...], [] 为全服
-    GroupValue1 = 0    #(BYTE GroupValue1)// 活动榜单分组值1,用于查询对应榜单
-    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
-    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
-    JoinStartTime = ""    #(char JoinStartTime[5])// 参与开始时间点 mm:ss
-    JoinEndTime = ""    #(char JoinEndTime[5])// 参与结束时间点 mm:ss
-    IsDayReset = 0    #(BYTE IsDayReset)// 是否每天重置
-    ResetType = 0    #(BYTE ResetType)// 重置类型,0-0点重置;1-5点重置
-    PersonalBillCount = 0    #(BYTE PersonalBillCount)
-    PersonalBillboardInfoList = list()    #(vector<tagMCCrossActBossTrialBillard> PersonalBillboardInfoList)// 个人榜单奖励信息列表,如果没有代表本次活动没有该榜奖励
-    FamilyBillCount = 0    #(BYTE FamilyBillCount)
-    FamilyBillboardInfoList = list()    #(vector<tagMCCrossActBossTrialBillard> FamilyBillboardInfoList)// 仙盟榜单奖励信息列表,如果没有代表本次活动没有该榜奖励
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xAA
-        self.Head.SubCmd = 0x76
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.ServerInfoLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.ServerIDRangeInfo,_pos = CommFunc.ReadString(_lpData, _pos,self.ServerInfoLen)
-        self.GroupValue1,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
-        self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
-        self.JoinStartTime,_pos = CommFunc.ReadString(_lpData, _pos,5)
-        self.JoinEndTime,_pos = CommFunc.ReadString(_lpData, _pos,5)
-        self.IsDayReset,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.ResetType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.PersonalBillCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.PersonalBillCount):
-            temPersonalBillboardInfoList = tagMCCrossActBossTrialBillard()
-            _pos = temPersonalBillboardInfoList.ReadData(_lpData, _pos)
-            self.PersonalBillboardInfoList.append(temPersonalBillboardInfoList)
-        self.FamilyBillCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.FamilyBillCount):
-            temFamilyBillboardInfoList = tagMCCrossActBossTrialBillard()
-            _pos = temFamilyBillboardInfoList.ReadData(_lpData, _pos)
-            self.FamilyBillboardInfoList.append(temFamilyBillboardInfoList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xAA
-        self.Head.SubCmd = 0x76
-        self.ServerInfoLen = 0
-        self.ServerIDRangeInfo = ""
-        self.GroupValue1 = 0
-        self.StartDate = ""
-        self.EndtDate = ""
-        self.JoinStartTime = ""
-        self.JoinEndTime = ""
-        self.IsDayReset = 0
-        self.ResetType = 0
-        self.PersonalBillCount = 0
-        self.PersonalBillboardInfoList = list()
-        self.FamilyBillCount = 0
-        self.FamilyBillboardInfoList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        length += len(self.ServerIDRangeInfo)
-        length += 1
-        length += 10
-        length += 10
-        length += 5
-        length += 5
-        length += 1
-        length += 1
-        length += 1
-        for i in range(self.PersonalBillCount):
-            length += self.PersonalBillboardInfoList[i].GetLength()
-        length += 1
-        for i in range(self.FamilyBillCount):
-            length += self.FamilyBillboardInfoList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.ServerInfoLen)
-        data = CommFunc.WriteString(data, self.ServerInfoLen, self.ServerIDRangeInfo)
-        data = CommFunc.WriteBYTE(data, self.GroupValue1)
-        data = CommFunc.WriteString(data, 10, self.StartDate)
-        data = CommFunc.WriteString(data, 10, self.EndtDate)
-        data = CommFunc.WriteString(data, 5, self.JoinStartTime)
-        data = CommFunc.WriteString(data, 5, self.JoinEndTime)
-        data = CommFunc.WriteBYTE(data, self.IsDayReset)
-        data = CommFunc.WriteBYTE(data, self.ResetType)
-        data = CommFunc.WriteBYTE(data, self.PersonalBillCount)
-        for i in range(self.PersonalBillCount):
-            data = CommFunc.WriteString(data, self.PersonalBillboardInfoList[i].GetLength(), self.PersonalBillboardInfoList[i].GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.FamilyBillCount)
-        for i in range(self.FamilyBillCount):
-            data = CommFunc.WriteString(data, self.FamilyBillboardInfoList[i].GetLength(), self.FamilyBillboardInfoList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                ServerInfoLen:%d,
-                                ServerIDRangeInfo:%s,
-                                GroupValue1:%d,
-                                StartDate:%s,
-                                EndtDate:%s,
-                                JoinStartTime:%s,
-                                JoinEndTime:%s,
-                                IsDayReset:%d,
-                                ResetType:%d,
-                                PersonalBillCount:%d,
-                                PersonalBillboardInfoList:%s,
-                                FamilyBillCount:%d,
-                                FamilyBillboardInfoList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.ServerInfoLen,
-                                self.ServerIDRangeInfo,
-                                self.GroupValue1,
-                                self.StartDate,
-                                self.EndtDate,
-                                self.JoinStartTime,
-                                self.JoinEndTime,
-                                self.IsDayReset,
-                                self.ResetType,
-                                self.PersonalBillCount,
-                                "...",
-                                self.FamilyBillCount,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagMCCrossActBossTrialInfo=tagMCCrossActBossTrialInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCrossActBossTrialInfo.Head.Cmd,m_NAtagMCCrossActBossTrialInfo.Head.SubCmd))] = m_NAtagMCCrossActBossTrialInfo
-
-
-#------------------------------------------------------
-# AA 83 古宝养成跨服活动信息 #tagMCCrossActGubaoInfo
-
-class  tagMCCrossActGubaoItem(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(tagMCCrossActGubaoItem)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// AA 83 古宝养成跨服活动信息 //tagMCCrossActGubaoInfo:
-                                ItemID:%d,
-                                ItemCount:%d,
-                                IsBind:%d
-                                '''\
-                                %(
-                                self.ItemID,
-                                self.ItemCount,
-                                self.IsBind
-                                )
-        return DumpString
-
-
-class  tagMCCrossActGubaoAwardEx(Structure):
-    NeedScore = 0    #(DWORD NeedScore)// 额外奖励所需积分
-    Count = 0    #(BYTE Count)// 额外奖励物品数
-    AwardItemList = list()    #(vector<tagMCCrossActGubaoItem> AwardItemList)// 额外奖励物品列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.NeedScore,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.Count):
-            temAwardItemList = tagMCCrossActGubaoItem()
-            _pos = temAwardItemList.ReadData(_lpData, _pos)
-            self.AwardItemList.append(temAwardItemList)
-        return _pos
-
-    def Clear(self):
-        self.NeedScore = 0
-        self.Count = 0
-        self.AwardItemList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 4
-        length += 1
-        for i in range(self.Count):
-            length += self.AwardItemList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteDWORD(data, self.NeedScore)
-        data = CommFunc.WriteBYTE(data, self.Count)
-        for i in range(self.Count):
-            data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                NeedScore:%d,
-                                Count:%d,
-                                AwardItemList:%s
-                                '''\
-                                %(
-                                self.NeedScore,
-                                self.Count,
-                                "..."
-                                )
-        return DumpString
-
-
-class  tagMCCrossActGubaoBillard(Structure):
-    Rank = 0    #(DWORD Rank)// 名次,1-代表第一名;支持夸段,如1,3 代表第1名,第2~3名
-    Count = 0    #(BYTE Count)// 奖励物品数
-    AwardItemList = list()    #(vector<tagMCCrossActGubaoItem> AwardItemList)// 奖励物品列表
-    NeedScore = 0    #(DWORD NeedScore)// 上榜所需积分
-    CountEx = 0    #(BYTE CountEx)// 额外奖励数
-    AwardItemExList = list()    #(vector<tagMCCrossActGubaoAwardEx> AwardItemExList)// 额外奖励列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.Rank,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.Count):
-            temAwardItemList = tagMCCrossActGubaoItem()
-            _pos = temAwardItemList.ReadData(_lpData, _pos)
-            self.AwardItemList.append(temAwardItemList)
-        self.NeedScore,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.CountEx,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.CountEx):
-            temAwardItemExList = tagMCCrossActGubaoAwardEx()
-            _pos = temAwardItemExList.ReadData(_lpData, _pos)
-            self.AwardItemExList.append(temAwardItemExList)
-        return _pos
-
-    def Clear(self):
-        self.Rank = 0
-        self.Count = 0
-        self.AwardItemList = list()
-        self.NeedScore = 0
-        self.CountEx = 0
-        self.AwardItemExList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 4
-        length += 1
-        for i in range(self.Count):
-            length += self.AwardItemList[i].GetLength()
-        length += 4
-        length += 1
-        for i in range(self.CountEx):
-            length += self.AwardItemExList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteDWORD(data, self.Rank)
-        data = CommFunc.WriteBYTE(data, self.Count)
-        for i in range(self.Count):
-            data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer())
-        data = CommFunc.WriteDWORD(data, self.NeedScore)
-        data = CommFunc.WriteBYTE(data, self.CountEx)
-        for i in range(self.CountEx):
-            data = CommFunc.WriteString(data, self.AwardItemExList[i].GetLength(), self.AwardItemExList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Rank:%d,
-                                Count:%d,
-                                AwardItemList:%s,
-                                NeedScore:%d,
-                                CountEx:%d,
-                                AwardItemExList:%s
-                                '''\
-                                %(
-                                self.Rank,
-                                self.Count,
-                                "...",
-                                self.NeedScore,
-                                self.CountEx,
-                                "..."
-                                )
-        return DumpString
-
-
-class  tagMCCrossActGubaoInfo(Structure):
-    Head = tagHead()
-    ServerInfoLen = 0    #(BYTE ServerInfoLen)
-    ServerIDRangeInfo = ""    #(String ServerIDRangeInfo)//开放该活动的服务器ID范围列表,json格式 [[IDA, IDB], ...], [] 为全服
-    GroupValue1 = 0    #(BYTE GroupValue1)// 活动榜单分组值1,用于查询对应榜单
-    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
-    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
-    JoinStartTime = ""    #(char JoinStartTime[5])// 参与开始时间点 mm:ss
-    JoinEndTime = ""    #(char JoinEndTime[5])// 参与结束时间点 mm:ss
-    PersonalBillCount = 0    #(BYTE PersonalBillCount)
-    PersonalBillboardInfoList = list()    #(vector<tagMCCrossActGubaoBillard> PersonalBillboardInfoList)// 个人榜单奖励信息列表,如果没有代表本次活动没有该榜奖励
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xAA
-        self.Head.SubCmd = 0x83
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.ServerInfoLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.ServerIDRangeInfo,_pos = CommFunc.ReadString(_lpData, _pos,self.ServerInfoLen)
-        self.GroupValue1,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
-        self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
-        self.JoinStartTime,_pos = CommFunc.ReadString(_lpData, _pos,5)
-        self.JoinEndTime,_pos = CommFunc.ReadString(_lpData, _pos,5)
-        self.PersonalBillCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.PersonalBillCount):
-            temPersonalBillboardInfoList = tagMCCrossActGubaoBillard()
-            _pos = temPersonalBillboardInfoList.ReadData(_lpData, _pos)
-            self.PersonalBillboardInfoList.append(temPersonalBillboardInfoList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xAA
-        self.Head.SubCmd = 0x83
-        self.ServerInfoLen = 0
-        self.ServerIDRangeInfo = ""
-        self.GroupValue1 = 0
-        self.StartDate = ""
-        self.EndtDate = ""
-        self.JoinStartTime = ""
-        self.JoinEndTime = ""
-        self.PersonalBillCount = 0
-        self.PersonalBillboardInfoList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        length += len(self.ServerIDRangeInfo)
-        length += 1
-        length += 10
-        length += 10
-        length += 5
-        length += 5
-        length += 1
-        for i in range(self.PersonalBillCount):
-            length += self.PersonalBillboardInfoList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.ServerInfoLen)
-        data = CommFunc.WriteString(data, self.ServerInfoLen, self.ServerIDRangeInfo)
-        data = CommFunc.WriteBYTE(data, self.GroupValue1)
-        data = CommFunc.WriteString(data, 10, self.StartDate)
-        data = CommFunc.WriteString(data, 10, self.EndtDate)
-        data = CommFunc.WriteString(data, 5, self.JoinStartTime)
-        data = CommFunc.WriteString(data, 5, self.JoinEndTime)
-        data = CommFunc.WriteBYTE(data, self.PersonalBillCount)
-        for i in range(self.PersonalBillCount):
-            data = CommFunc.WriteString(data, self.PersonalBillboardInfoList[i].GetLength(), self.PersonalBillboardInfoList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                ServerInfoLen:%d,
-                                ServerIDRangeInfo:%s,
-                                GroupValue1:%d,
-                                StartDate:%s,
-                                EndtDate:%s,
-                                JoinStartTime:%s,
-                                JoinEndTime:%s,
-                                PersonalBillCount:%d,
-                                PersonalBillboardInfoList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.ServerInfoLen,
-                                self.ServerIDRangeInfo,
-                                self.GroupValue1,
-                                self.StartDate,
-                                self.EndtDate,
-                                self.JoinStartTime,
-                                self.JoinEndTime,
-                                self.PersonalBillCount,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagMCCrossActGubaoInfo=tagMCCrossActGubaoInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCrossActGubaoInfo.Head.Cmd,m_NAtagMCCrossActGubaoInfo.Head.SubCmd))] = m_NAtagMCCrossActGubaoInfo
-
-
-#------------------------------------------------------
-# AA 86 骑宠养成跨服活动信息 #tagMCCrossActHorsePetTrainInfo
-
-class  tagMCCrossActHorsePetTrainItem(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(tagMCCrossActHorsePetTrainItem)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// AA 86 骑宠养成跨服活动信息 //tagMCCrossActHorsePetTrainInfo:
-                                ItemID:%d,
-                                ItemCount:%d,
-                                IsBind:%d
-                                '''\
-                                %(
-                                self.ItemID,
-                                self.ItemCount,
-                                self.IsBind
-                                )
-        return DumpString
-
-
-class  tagMCCrossActHorsePetTrainAwardEx(Structure):
-    NeedScore = 0    #(DWORD NeedScore)// 额外奖励所需积分
-    Count = 0    #(BYTE Count)// 额外奖励物品数
-    AwardItemList = list()    #(vector<tagMCCrossActHorsePetTrainItem> AwardItemList)// 额外奖励物品列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.NeedScore,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.Count):
-            temAwardItemList = tagMCCrossActHorsePetTrainItem()
-            _pos = temAwardItemList.ReadData(_lpData, _pos)
-            self.AwardItemList.append(temAwardItemList)
-        return _pos
-
-    def Clear(self):
-        self.NeedScore = 0
-        self.Count = 0
-        self.AwardItemList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 4
-        length += 1
-        for i in range(self.Count):
-            length += self.AwardItemList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteDWORD(data, self.NeedScore)
-        data = CommFunc.WriteBYTE(data, self.Count)
-        for i in range(self.Count):
-            data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                NeedScore:%d,
-                                Count:%d,
-                                AwardItemList:%s
-                                '''\
-                                %(
-                                self.NeedScore,
-                                self.Count,
-                                "..."
-                                )
-        return DumpString
-
-
-class  tagMCCrossActHorsePetTrainBillard(Structure):
-    Rank = 0    #(DWORD Rank)// 名次,1-代表第一名;支持夸段,如1,3 代表第1名,第2~3名
-    Count = 0    #(BYTE Count)// 奖励物品数
-    AwardItemList = list()    #(vector<tagMCCrossActHorsePetTrainItem> AwardItemList)// 奖励物品列表
-    NeedScore = 0    #(DWORD NeedScore)// 上榜所需积分
-    CountEx = 0    #(BYTE CountEx)// 额外奖励数
-    AwardItemExList = list()    #(vector<tagMCCrossActHorsePetTrainAwardEx> AwardItemExList)// 额外奖励列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.Rank,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.Count):
-            temAwardItemList = tagMCCrossActHorsePetTrainItem()
-            _pos = temAwardItemList.ReadData(_lpData, _pos)
-            self.AwardItemList.append(temAwardItemList)
-        self.NeedScore,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.CountEx,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.CountEx):
-            temAwardItemExList = tagMCCrossActHorsePetTrainAwardEx()
-            _pos = temAwardItemExList.ReadData(_lpData, _pos)
-            self.AwardItemExList.append(temAwardItemExList)
-        return _pos
-
-    def Clear(self):
-        self.Rank = 0
-        self.Count = 0
-        self.AwardItemList = list()
-        self.NeedScore = 0
-        self.CountEx = 0
-        self.AwardItemExList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 4
-        length += 1
-        for i in range(self.Count):
-            length += self.AwardItemList[i].GetLength()
-        length += 4
-        length += 1
-        for i in range(self.CountEx):
-            length += self.AwardItemExList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteDWORD(data, self.Rank)
-        data = CommFunc.WriteBYTE(data, self.Count)
-        for i in range(self.Count):
-            data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer())
-        data = CommFunc.WriteDWORD(data, self.NeedScore)
-        data = CommFunc.WriteBYTE(data, self.CountEx)
-        for i in range(self.CountEx):
-            data = CommFunc.WriteString(data, self.AwardItemExList[i].GetLength(), self.AwardItemExList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Rank:%d,
-                                Count:%d,
-                                AwardItemList:%s,
-                                NeedScore:%d,
-                                CountEx:%d,
-                                AwardItemExList:%s
-                                '''\
-                                %(
-                                self.Rank,
-                                self.Count,
-                                "...",
-                                self.NeedScore,
-                                self.CountEx,
-                                "..."
-                                )
-        return DumpString
-
-
-class  tagMCCrossActHorsePetTrainInfo(Structure):
-    Head = tagHead()
-    ServerInfoLen = 0    #(BYTE ServerInfoLen)
-    ServerIDRangeInfo = ""    #(String ServerIDRangeInfo)//开放该活动的服务器ID范围列表,json格式 [[IDA, IDB], ...], [] 为全服
-    GroupValue1 = 0    #(BYTE GroupValue1)// 活动榜单分组值1,用于查询对应榜单
-    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
-    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
-    JoinStartTime = ""    #(char JoinStartTime[5])// 参与开始时间点 mm:ss
-    JoinEndTime = ""    #(char JoinEndTime[5])// 参与结束时间点 mm:ss
-    PersonalBillCount = 0    #(BYTE PersonalBillCount)
-    PersonalBillboardInfoList = list()    #(vector<tagMCCrossActHorsePetTrainBillard> PersonalBillboardInfoList)// 个人榜单奖励信息列表,如果没有代表本次活动没有该榜奖励
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xAA
-        self.Head.SubCmd = 0x86
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.ServerInfoLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.ServerIDRangeInfo,_pos = CommFunc.ReadString(_lpData, _pos,self.ServerInfoLen)
-        self.GroupValue1,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
-        self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
-        self.JoinStartTime,_pos = CommFunc.ReadString(_lpData, _pos,5)
-        self.JoinEndTime,_pos = CommFunc.ReadString(_lpData, _pos,5)
-        self.PersonalBillCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.PersonalBillCount):
-            temPersonalBillboardInfoList = tagMCCrossActHorsePetTrainBillard()
-            _pos = temPersonalBillboardInfoList.ReadData(_lpData, _pos)
-            self.PersonalBillboardInfoList.append(temPersonalBillboardInfoList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xAA
-        self.Head.SubCmd = 0x86
-        self.ServerInfoLen = 0
-        self.ServerIDRangeInfo = ""
-        self.GroupValue1 = 0
-        self.StartDate = ""
-        self.EndtDate = ""
-        self.JoinStartTime = ""
-        self.JoinEndTime = ""
-        self.PersonalBillCount = 0
-        self.PersonalBillboardInfoList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        length += len(self.ServerIDRangeInfo)
-        length += 1
-        length += 10
-        length += 10
-        length += 5
-        length += 5
-        length += 1
-        for i in range(self.PersonalBillCount):
-            length += self.PersonalBillboardInfoList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.ServerInfoLen)
-        data = CommFunc.WriteString(data, self.ServerInfoLen, self.ServerIDRangeInfo)
-        data = CommFunc.WriteBYTE(data, self.GroupValue1)
-        data = CommFunc.WriteString(data, 10, self.StartDate)
-        data = CommFunc.WriteString(data, 10, self.EndtDate)
-        data = CommFunc.WriteString(data, 5, self.JoinStartTime)
-        data = CommFunc.WriteString(data, 5, self.JoinEndTime)
-        data = CommFunc.WriteBYTE(data, self.PersonalBillCount)
-        for i in range(self.PersonalBillCount):
-            data = CommFunc.WriteString(data, self.PersonalBillboardInfoList[i].GetLength(), self.PersonalBillboardInfoList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                ServerInfoLen:%d,
-                                ServerIDRangeInfo:%s,
-                                GroupValue1:%d,
-                                StartDate:%s,
-                                EndtDate:%s,
-                                JoinStartTime:%s,
-                                JoinEndTime:%s,
-                                PersonalBillCount:%d,
-                                PersonalBillboardInfoList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.ServerInfoLen,
-                                self.ServerIDRangeInfo,
-                                self.GroupValue1,
-                                self.StartDate,
-                                self.EndtDate,
-                                self.JoinStartTime,
-                                self.JoinEndTime,
-                                self.PersonalBillCount,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagMCCrossActHorsePetTrainInfo=tagMCCrossActHorsePetTrainInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCrossActHorsePetTrainInfo.Head.Cmd,m_NAtagMCCrossActHorsePetTrainInfo.Head.SubCmd))] = m_NAtagMCCrossActHorsePetTrainInfo
-
-
-#------------------------------------------------------
 # AA 90 炼器跨服活动信息 #tagMCCrossActLianqiInfo
 
 class  tagMCCrossActLianqiItem(Structure):
@@ -32628,314 +29444,6 @@
 
 m_NAtagMCActLianqiPlayerInfo=tagMCActLianqiPlayerInfo()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActLianqiPlayerInfo.Head.Cmd,m_NAtagMCActLianqiPlayerInfo.Head.SubCmd))] = m_NAtagMCActLianqiPlayerInfo
-
-
-#------------------------------------------------------
-# AA 80 仙匣秘境跨服活动信息 #tagMCCrossActXianXiaMJInfo
-
-class  tagMCCrossActXianXiaMJItem(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(tagMCCrossActXianXiaMJItem)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// AA 80 仙匣秘境跨服活动信息 //tagMCCrossActXianXiaMJInfo:
-                                ItemID:%d,
-                                ItemCount:%d,
-                                IsBind:%d
-                                '''\
-                                %(
-                                self.ItemID,
-                                self.ItemCount,
-                                self.IsBind
-                                )
-        return DumpString
-
-
-class  tagMCCrossActXianXiaMJAwardEx(Structure):
-    NeedScore = 0    #(DWORD NeedScore)// 额外奖励所需积分
-    Count = 0    #(BYTE Count)// 额外奖励物品数
-    AwardItemList = list()    #(vector<tagMCCrossActXianXiaMJItem> AwardItemList)// 额外奖励物品列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.NeedScore,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.Count):
-            temAwardItemList = tagMCCrossActXianXiaMJItem()
-            _pos = temAwardItemList.ReadData(_lpData, _pos)
-            self.AwardItemList.append(temAwardItemList)
-        return _pos
-
-    def Clear(self):
-        self.NeedScore = 0
-        self.Count = 0
-        self.AwardItemList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 4
-        length += 1
-        for i in range(self.Count):
-            length += self.AwardItemList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteDWORD(data, self.NeedScore)
-        data = CommFunc.WriteBYTE(data, self.Count)
-        for i in range(self.Count):
-            data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                NeedScore:%d,
-                                Count:%d,
-                                AwardItemList:%s
-                                '''\
-                                %(
-                                self.NeedScore,
-                                self.Count,
-                                "..."
-                                )
-        return DumpString
-
-
-class  tagMCCrossActXianXiaMJBillard(Structure):
-    Rank = 0    #(DWORD Rank)// 名次,1-代表第一名;支持夸段,如1,3 代表第1名,第2~3名
-    Count = 0    #(BYTE Count)// 奖励物品数
-    AwardItemList = list()    #(vector<tagMCCrossActXianXiaMJItem> AwardItemList)// 奖励物品列表
-    NeedScore = 0    #(DWORD NeedScore)// 上榜所需积分
-    CountEx = 0    #(BYTE CountEx)// 额外奖励数
-    AwardItemExList = list()    #(vector<tagMCCrossActXianXiaMJAwardEx> AwardItemExList)// 额外奖励列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.Rank,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.Count):
-            temAwardItemList = tagMCCrossActXianXiaMJItem()
-            _pos = temAwardItemList.ReadData(_lpData, _pos)
-            self.AwardItemList.append(temAwardItemList)
-        self.NeedScore,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.CountEx,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.CountEx):
-            temAwardItemExList = tagMCCrossActXianXiaMJAwardEx()
-            _pos = temAwardItemExList.ReadData(_lpData, _pos)
-            self.AwardItemExList.append(temAwardItemExList)
-        return _pos
-
-    def Clear(self):
-        self.Rank = 0
-        self.Count = 0
-        self.AwardItemList = list()
-        self.NeedScore = 0
-        self.CountEx = 0
-        self.AwardItemExList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 4
-        length += 1
-        for i in range(self.Count):
-            length += self.AwardItemList[i].GetLength()
-        length += 4
-        length += 1
-        for i in range(self.CountEx):
-            length += self.AwardItemExList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteDWORD(data, self.Rank)
-        data = CommFunc.WriteBYTE(data, self.Count)
-        for i in range(self.Count):
-            data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer())
-        data = CommFunc.WriteDWORD(data, self.NeedScore)
-        data = CommFunc.WriteBYTE(data, self.CountEx)
-        for i in range(self.CountEx):
-            data = CommFunc.WriteString(data, self.AwardItemExList[i].GetLength(), self.AwardItemExList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Rank:%d,
-                                Count:%d,
-                                AwardItemList:%s,
-                                NeedScore:%d,
-                                CountEx:%d,
-                                AwardItemExList:%s
-                                '''\
-                                %(
-                                self.Rank,
-                                self.Count,
-                                "...",
-                                self.NeedScore,
-                                self.CountEx,
-                                "..."
-                                )
-        return DumpString
-
-
-class  tagMCCrossActXianXiaMJInfo(Structure):
-    Head = tagHead()
-    ServerInfoLen = 0    #(BYTE ServerInfoLen)
-    ServerIDRangeInfo = ""    #(String ServerIDRangeInfo)//开放该活动的服务器ID范围列表,json格式 [[IDA, IDB], ...], [] 为全服
-    GroupValue1 = 0    #(BYTE GroupValue1)// 活动榜单分组值1,用于查询对应榜单
-    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
-    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
-    JoinStartTime = ""    #(char JoinStartTime[5])// 参与开始时间点 mm:ss
-    JoinEndTime = ""    #(char JoinEndTime[5])// 参与结束时间点 mm:ss
-    IsDayReset = 0    #(BYTE IsDayReset)// 是否每天重置
-    PersonalBillCount = 0    #(BYTE PersonalBillCount)
-    PersonalBillboardInfoList = list()    #(vector<tagMCCrossActXianXiaMJBillard> PersonalBillboardInfoList)// 个人榜单奖励信息列表,如果没有代表本次活动没有该榜奖励
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xAA
-        self.Head.SubCmd = 0x80
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.ServerInfoLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.ServerIDRangeInfo,_pos = CommFunc.ReadString(_lpData, _pos,self.ServerInfoLen)
-        self.GroupValue1,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
-        self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
-        self.JoinStartTime,_pos = CommFunc.ReadString(_lpData, _pos,5)
-        self.JoinEndTime,_pos = CommFunc.ReadString(_lpData, _pos,5)
-        self.IsDayReset,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.PersonalBillCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.PersonalBillCount):
-            temPersonalBillboardInfoList = tagMCCrossActXianXiaMJBillard()
-            _pos = temPersonalBillboardInfoList.ReadData(_lpData, _pos)
-            self.PersonalBillboardInfoList.append(temPersonalBillboardInfoList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xAA
-        self.Head.SubCmd = 0x80
-        self.ServerInfoLen = 0
-        self.ServerIDRangeInfo = ""
-        self.GroupValue1 = 0
-        self.StartDate = ""
-        self.EndtDate = ""
-        self.JoinStartTime = ""
-        self.JoinEndTime = ""
-        self.IsDayReset = 0
-        self.PersonalBillCount = 0
-        self.PersonalBillboardInfoList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        length += len(self.ServerIDRangeInfo)
-        length += 1
-        length += 10
-        length += 10
-        length += 5
-        length += 5
-        length += 1
-        length += 1
-        for i in range(self.PersonalBillCount):
-            length += self.PersonalBillboardInfoList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.ServerInfoLen)
-        data = CommFunc.WriteString(data, self.ServerInfoLen, self.ServerIDRangeInfo)
-        data = CommFunc.WriteBYTE(data, self.GroupValue1)
-        data = CommFunc.WriteString(data, 10, self.StartDate)
-        data = CommFunc.WriteString(data, 10, self.EndtDate)
-        data = CommFunc.WriteString(data, 5, self.JoinStartTime)
-        data = CommFunc.WriteString(data, 5, self.JoinEndTime)
-        data = CommFunc.WriteBYTE(data, self.IsDayReset)
-        data = CommFunc.WriteBYTE(data, self.PersonalBillCount)
-        for i in range(self.PersonalBillCount):
-            data = CommFunc.WriteString(data, self.PersonalBillboardInfoList[i].GetLength(), self.PersonalBillboardInfoList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                ServerInfoLen:%d,
-                                ServerIDRangeInfo:%s,
-                                GroupValue1:%d,
-                                StartDate:%s,
-                                EndtDate:%s,
-                                JoinStartTime:%s,
-                                JoinEndTime:%s,
-                                IsDayReset:%d,
-                                PersonalBillCount:%d,
-                                PersonalBillboardInfoList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.ServerInfoLen,
-                                self.ServerIDRangeInfo,
-                                self.GroupValue1,
-                                self.StartDate,
-                                self.EndtDate,
-                                self.JoinStartTime,
-                                self.JoinEndTime,
-                                self.IsDayReset,
-                                self.PersonalBillCount,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagMCCrossActXianXiaMJInfo=tagMCCrossActXianXiaMJInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCrossActXianXiaMJInfo.Head.Cmd,m_NAtagMCCrossActXianXiaMJInfo.Head.SubCmd))] = m_NAtagMCCrossActXianXiaMJInfo
 
 
 #------------------------------------------------------
@@ -40240,7 +36748,7 @@
                   ("CampID", c_ubyte),    # 营地ID,从1开始
                   ("GoldID", c_ubyte),    # 淘金ID,为0时代表该营地为空
                   ("RefreshCnt", c_ushort),    # 已刷新次数
-                  ("EndTime", c_int),    # 预计完成时的时间戳,为0时代表还未开始淘金,通过该时间进行倒计时,完成时需发送操作完成淘金
+                  ("EndTime", c_int),    # 预计完成时的时间戳,为0时代表还未开始淘金,通过该时间进行倒计时
                   ("WorkerCnt", c_ubyte),    # 使用监工数
                   ]
 
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_EquipPlus.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_EquipPlus.py
index a550b62..e9b7703 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_EquipPlus.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_EquipPlus.py
@@ -36,7 +36,6 @@
 import ChPyNetSendPack
 import NetPackCommon
 import PlayerWeekParty
-import PlayerActGarbageSorting
 import PlayerTongTianLing
 #-------------------------------------------------------------------------------------------
 
@@ -206,7 +205,6 @@
     PlayerSuccess.UpdateSuccessProgressByConditions(curPlayer, ShareDefine.SuccType_EquipPlus, plusLVCountDict)
     PlayerSuccess.UptateSuccessProgress(curPlayer, ShareDefine.SuccType_EquipPlusTotal, totalPlusLV)
     PlayerSuccess.UptateSuccessProgress(curPlayer, ShareDefine.SuccType_EquipPlusClass, classPlusLV, [classLV])
-    PlayerActGarbageSorting.AddActGarbageTaskProgress(curPlayer, ChConfig.Def_GarbageTask_EquipPlus)
     return
 
 def DoLogic_OnEquipPartStarLVChange(curPlayer, packType, classLV):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_EquipWash.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_EquipWash.py
index 881d5c1..afd1248 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_EquipWash.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_EquipWash.py
@@ -23,7 +23,6 @@
 import PlayerSuccess
 import IPY_GameWorld
 import PlayerTongTianLing
-import PlayerActGarbageSorting
 import DataRecordPack
 import PlayerActLogin
 import PlayerActTask
@@ -298,7 +297,6 @@
     if isRefreshAttr:
         RefreshEquipWashAttr(curPlayer, classLV)
     PlayerActLogin.AddLoginAwardActionCnt(curPlayer, ChConfig.Def_LoginAct_EquipWash, 1)
-    PlayerActGarbageSorting.AddActGarbageTaskProgress(curPlayer, ChConfig.Def_GarbageTask_EquipWash)
     PlayerTongTianLing.AddTongTianTaskValue(curPlayer, ChConfig.TTLTaskType_Wash, 1)
     PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_EquipWash)
     return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/ActNum.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/ActNum.py
deleted file mode 100644
index 96db725..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/ActNum.py
+++ /dev/null
@@ -1,78 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-##@package GM.Commands.ActNum
-#
-# @todo:活动
-# @author hxp
-# @date 2024-08-29
-# @version 1.0
-#
-# 详细描述: 活动
-#
-#-------------------------------------------------------------------------------
-#"""Version = 2024-08-29 16:00"""
-#-------------------------------------------------------------------------------
-
-import GameWorld
-import PlayerActXianXiaMJ
-import PlayerActHorsePetTrain
-import PlayerActGubao
-import ShareDefine
-
-#---------------------------------------------------------------------
-#逻辑实现
-
-## GM命令执行入口
-#  @param curPlayer 当前玩家
-#  @param msgList 参数列表
-#  @return None
-#  @remarks 函数详细说明.
-def OnExec(curPlayer, msgList):
-    if not msgList:
-        GameWorld.DebugAnswer(curPlayer, "仙匣秘境加积分: ActNum x actNum 加积分 是否同步跨服")
-        GameWorld.DebugAnswer(curPlayer, "骑宠养成加积分: ActNum q actNum 加积分 是否同步跨服")
-        GameWorld.DebugAnswer(curPlayer, "古宝养成加积分: ActNum g actNum 加积分 是否同步跨服")
-        return
-    
-    value1 = msgList[0]
-    if value1 == "x":
-        actNum = msgList[1] if len(msgList) > 1 else 0
-        addScore = msgList[2] if len(msgList) > 2 else 1
-        isRelationCrossAct = msgList[3] if len(msgList) > 3 else 0
-        actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_XianXiaMJ, actNum)
-        if not actInfo.get(ShareDefine.ActKey_State):
-            GameWorld.DebugAnswer(curPlayer, "仙匣秘境非活动中! actNum:%s" % actNum)
-            return
-        updScore = PlayerActXianXiaMJ.AddPlayerLotteryScore(curPlayer, actNum, addScore, isRelationCrossAct)
-        GameWorld.DebugAnswer(curPlayer, "仙匣秘境加分!actNum:%s,+%s,%s" % (actNum, addScore, updScore))
-        return
-    
-    if value1 == "q":
-        actNum = msgList[1] if len(msgList) > 1 else 0
-        addScore = msgList[2] if len(msgList) > 2 else 1
-        isRelationCrossAct = msgList[3] if len(msgList) > 3 else 0
-        actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_HorsePetTrain, actNum)
-        if not actInfo.get(ShareDefine.ActKey_State):
-            GameWorld.DebugAnswer(curPlayer, "骑宠养成非活动中! actNum:%s" % actNum)
-            return
-        updScore = PlayerActHorsePetTrain.AddPlayerScore(curPlayer, actNum, addScore, isRelationCrossAct)
-        GameWorld.DebugAnswer(curPlayer, "骑宠养成加分!actNum:%s,+%s,%s" % (actNum, addScore, updScore))
-        return
-    
-    if value1 == "g":
-        actNum = msgList[1] if len(msgList) > 1 else 0
-        addScore = msgList[2] if len(msgList) > 2 else 1
-        isRelationCrossAct = msgList[3] if len(msgList) > 3 else 0
-        actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_Gubao, actNum)
-        if not actInfo.get(ShareDefine.ActKey_State):
-            GameWorld.DebugAnswer(curPlayer, "古宝养成非活动中! actNum:%s" % actNum)
-            return
-        updScore = PlayerActGubao.AddPlayerScore(curPlayer, actNum, addScore, isRelationCrossAct)
-        GameWorld.DebugAnswer(curPlayer, "古宝养成加分!actNum:%s,+%s,%s" % (actNum, addScore, updScore))
-        return
-    
-    return
-
-
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
index 8f9d297..778bbbf 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -1707,88 +1707,6 @@
                         ("BYTE", "NeedNotify", 0),
                         ),
 
-                "ActGarbageSorting":(
-                        ("DWORD", "CfgID", 1),
-                        ("char", "StartDate", 0),
-                        ("char", "EndDate", 0),
-                        ("BYTE", "ResetType", 0),
-                        ("WORD", "LVLimit", 0),
-                        ("BYTE", "CTGTypeEffValue", 0),
-                        ),
-
-                "ActGarbageTask":(
-                        ("DWORD", "GarbageTasklD", 1),
-                        ("DWORD", "FinishNeedValue", 0),
-                        ("DWORD", "FinishTimeMax", 0),
-                        ("BYTE", "AutoProduce", 0),
-                        ("list", "ProduceGarbageRateList", 0),
-                        ),
-
-                "ActBossTrial":(
-                        ("DWORD", "CfgID", 1),
-                        ("char", "StartDate", 0),
-                        ("char", "EndDate", 0),
-                        ("char", "JoinStartTime", 0),
-                        ("char", "JoinEndTime", 0),
-                        ("WORD", "LVLimit", 0),
-                        ("BYTE", "IsDayReset", 0),
-                        ("BYTE", "ResetType", 0),
-                        ("dict", "SubmitItemAwardInfo", 0),
-                        ("BYTE", "SubmitAwardResetType", 0),
-                        ("WORD", "ActShopType", 0),
-                        ("list", "TemplateIDList", 0),
-                        ("list", "FamilyTemplateIDList", 0),
-                        ),
-
-                "ActBossTrialTemplate":(
-                        ("DWORD", "TemplateID", 1),
-                        ("BYTE", "Rank", 0),
-                        ("list", "AwardItemList", 0),
-                        ("list", "MemAwardItemList", 0),
-                        ("DWORD", "NeedScore", 0),
-                        ("dict", "ScoreAwardEx", 0),
-                        ),
-
-                "ActHorsePetTrain":(
-                        ("DWORD", "CfgID", 1),
-                        ("char", "StartDate", 0),
-                        ("char", "EndDate", 0),
-                        ("char", "JoinStartTime", 0),
-                        ("char", "JoinEndTime", 0),
-                        ("WORD", "LVLimit", 0),
-                        ("WORD", "ActShopType", 0),
-                        ("WORD", "PersonalTemplateID", 0),
-                        ("BYTE", "IsRelationCrossAct", 0),
-                        ),
-
-                "ActHorsePetTrainBillTemp":(
-                        ("DWORD", "TemplateID", 1),
-                        ("BYTE", "Rank", 0),
-                        ("list", "AwardItemList", 0),
-                        ("DWORD", "NeedScore", 0),
-                        ("dict", "ScoreAwardEx", 0),
-                        ),
-
-                "ActGubao":(
-                        ("DWORD", "CfgID", 1),
-                        ("char", "StartDate", 0),
-                        ("char", "EndDate", 0),
-                        ("char", "JoinStartTime", 0),
-                        ("char", "JoinEndTime", 0),
-                        ("WORD", "LVLimit", 0),
-                        ("WORD", "ActShopType", 0),
-                        ("WORD", "PersonalTemplateID", 0),
-                        ("BYTE", "IsRelationCrossAct", 0),
-                        ),
-
-                "ActGubaoBillTemp":(
-                        ("DWORD", "TemplateID", 1),
-                        ("BYTE", "Rank", 0),
-                        ("list", "AwardItemList", 0),
-                        ("DWORD", "NeedScore", 0),
-                        ("dict", "ScoreAwardEx", 0),
-                        ),
-
                 "ActLianqiBillTemp":(
                         ("DWORD", "TemplateID", 1),
                         ("BYTE", "Rank", 0),
@@ -1805,42 +1723,6 @@
                         ("list", "GridWeightItemList", 0),
                         ("list", "LayerAwardItemList", 0),
                         ("list", "LayerWeightItemList", 0),
-                        ),
-
-                "ActXianXiaMJ":(
-                        ("DWORD", "CfgID", 1),
-                        ("char", "StartDate", 0),
-                        ("char", "EndDate", 0),
-                        ("char", "JoinStartTime", 0),
-                        ("char", "JoinEndTime", 0),
-                        ("BYTE", "IsDayReset", 0),
-                        ("WORD", "LVLimit", 0),
-                        ("DWORD", "UseItemID", 0),
-                        ("list", "UseMoneyInfo", 0),
-                        ("BYTE", "TemplateID", 0),
-                        ("WORD", "PersonalTemplateID", 0),
-                        ("WORD", "LotteryAddScore", 0),
-                        ("WORD", "LayerAddScore", 0),
-                        ("BYTE", "IsRelationCrossAct", 0),
-                        ),
-
-                "ActXianXiaMJBillTemp":(
-                        ("DWORD", "TemplateID", 1),
-                        ("BYTE", "Rank", 0),
-                        ("list", "AwardItemList", 0),
-                        ("DWORD", "NeedScore", 0),
-                        ("dict", "ScoreAwardEx", 0),
-                        ),
-
-                "ActXianXiaMJAward":(
-                        ("DWORD", "TemplateID", 1),
-                        ("BYTE", "AwardLibType", 0),
-                        ("list", "AwardItemCountList", 0),
-                        ("list", "UnlockAwardLimitTimesList", 0),
-                        ("list", "AwardLibWeightList", 0),
-                        ("dict", "LibItemInfo", 0),
-                        ("dict", "ItemLayerLimitInfo", 0),
-                        ("dict", "ItemAwardTimesTotalInfo", 0),
                         ),
 
                 "ActGodGift":(
@@ -1865,15 +1747,6 @@
                         ("BYTE", "ChooseItemCount", 0),
                         ("dict", "LibItemInfo", 0),
                         ("list", "NotifyItemNumList", 0),
-                        ),
-
-                "ActHorsePetFeast":(
-                        ("DWORD", "CfgID", 1),
-                        ("char", "StartDate", 0),
-                        ("char", "EndDate", 0),
-                        ("list", "StartTimeList", 0),
-                        ("list", "EndTimeList", 0),
-                        ("WORD", "LVLimit", 0),
                         ),
 
                 "ActBossReborn":(
@@ -5145,128 +5018,6 @@
     def GetNeedItemList(self): return self.attrTuple[4] # 所需物品信息列表 [[物品ID,个数,是否绑定], ...] list
     def GetNeedNotify(self): return self.attrTuple[5] # 是否需要广播 BYTE
 
-# 垃圾分类活动时间表
-class IPY_ActGarbageSorting():
-    
-    def __init__(self):
-        self.attrTuple = None
-        return
-        
-    def GetCfgID(self): return self.attrTuple[0] # 配置ID DWORD
-    def GetStartDate(self): return self.attrTuple[1] # 开启日期 char
-    def GetEndDate(self): return self.attrTuple[2] # 结束日期 char
-    def GetResetType(self): return self.attrTuple[3] # 重置类型,0-0点重置;1-5点重置 BYTE
-    def GetLVLimit(self): return self.attrTuple[4] # 限制等级 WORD
-    def GetCTGTypeEffValue(self): return self.attrTuple[5] # 充值有效类型值 BYTE
-
-# 垃圾分类任务产出表
-class IPY_ActGarbageTask():
-    
-    def __init__(self):
-        self.attrTuple = None
-        return
-        
-    def GetGarbageTasklD(self): return self.attrTuple[0] # 垃圾任务ID DWORD
-    def GetFinishNeedValue(self): return self.attrTuple[1] # 完成所需进度值 DWORD
-    def GetFinishTimeMax(self): return self.attrTuple[2] # 总可完成次数,0不限 DWORD
-    def GetAutoProduce(self): return self.attrTuple[3] # 自动产生垃圾 BYTE
-    def GetProduceGarbageRateList(self): return self.attrTuple[4] # 随机产生垃圾概率饼图 list
-
-# Boss历练活动表
-class IPY_ActBossTrial():
-    
-    def __init__(self):
-        self.attrTuple = None
-        return
-        
-    def GetCfgID(self): return self.attrTuple[0] # 配置ID DWORD
-    def GetStartDate(self): return self.attrTuple[1] # 开启日期 char
-    def GetEndDate(self): return self.attrTuple[2] # 结束日期 char
-    def GetJoinStartTime(self): return self.attrTuple[3] # 参与开始时间点 char
-    def GetJoinEndTime(self): return self.attrTuple[4] # 参与结束时间点 char
-    def GetLVLimit(self): return self.attrTuple[5] # 限制等级 WORD
-    def GetIsDayReset(self): return self.attrTuple[6] # 是否每天重置 BYTE
-    def GetResetType(self): return self.attrTuple[7] # 重置类型,0-0点重置;1-5点重置 BYTE
-    def GetSubmitItemAwardInfo(self): return self.attrTuple[8] # 提交凭证个数对应奖励 dict
-    def GetSubmitAwardResetType(self): return self.attrTuple[9] # 提交凭证每日重置类型,0-跟随活动; 1-0点重置;2-5点重置 BYTE
-    def GetActShopType(self): return self.attrTuple[10] # 开放商店类型,为0时不开放 WORD
-    def GetTemplateIDList(self): return self.attrTuple[11] # 榜单模板编号列表 list
-    def GetFamilyTemplateIDList(self): return self.attrTuple[12] # 仙盟榜单模板编号列表 list
-
-# Boss历练榜单模版表
-class IPY_ActBossTrialTemplate():
-    
-    def __init__(self):
-        self.attrTuple = None
-        return
-        
-    def GetTemplateID(self): return self.attrTuple[0] # 模板编号 DWORD
-    def GetRank(self): return self.attrTuple[1] # 名次 BYTE
-    def GetAwardItemList(self): return self.attrTuple[2] # 奖励物品列表[[物品ID,个数,是否拍品], ...] 仙盟榜时为盟主奖励,如果没有配置,则统一取成员奖励 list
-    def GetMemAwardItemList(self): return self.attrTuple[3] # 仙盟榜成员奖励物品信息列表[[物品ID,个数,是否拍品], ...] list
-    def GetNeedScore(self): return self.attrTuple[4] # 上榜所需积分 DWORD
-    def GetScoreAwardEx(self): return self.attrTuple[5] # 达标积分额外奖励 {积分:[[物品ID,个数,是否拍品], ...], ...} dict
-
-# 骑宠养成活动时间表
-class IPY_ActHorsePetTrain():
-    
-    def __init__(self):
-        self.attrTuple = None
-        return
-        
-    def GetCfgID(self): return self.attrTuple[0] # 配置ID DWORD
-    def GetStartDate(self): return self.attrTuple[1] # 开启日期 char
-    def GetEndDate(self): return self.attrTuple[2] # 结束日期 char
-    def GetJoinStartTime(self): return self.attrTuple[3] # 参与开始时间点 char
-    def GetJoinEndTime(self): return self.attrTuple[4] # 参与结束时间点 char
-    def GetLVLimit(self): return self.attrTuple[5] # 限制等级 WORD
-    def GetActShopType(self): return self.attrTuple[6] # 开放商店类型,为0时不开放 WORD
-    def GetPersonalTemplateID(self): return self.attrTuple[7] # 个人排行模板编号 WORD
-    def GetIsRelationCrossAct(self): return self.attrTuple[8] # 是否关联跨服活动 BYTE
-
-# 骑宠养成榜单模版表
-class IPY_ActHorsePetTrainBillTemp():
-    
-    def __init__(self):
-        self.attrTuple = None
-        return
-        
-    def GetTemplateID(self): return self.attrTuple[0] # 模板编号 DWORD
-    def GetRank(self): return self.attrTuple[1] # 名次 BYTE
-    def GetAwardItemList(self): return self.attrTuple[2] # 奖励物品列表[[物品ID,个数,是否拍品], ...] list
-    def GetNeedScore(self): return self.attrTuple[3] # 上榜所需积分 DWORD
-    def GetScoreAwardEx(self): return self.attrTuple[4] # 达标积分额外奖励 {积分:[[物品ID,个数,是否拍品], ...], ...} dict
-
-# 古宝养成活动时间表
-class IPY_ActGubao():
-    
-    def __init__(self):
-        self.attrTuple = None
-        return
-        
-    def GetCfgID(self): return self.attrTuple[0] # 配置ID DWORD
-    def GetStartDate(self): return self.attrTuple[1] # 开启日期 char
-    def GetEndDate(self): return self.attrTuple[2] # 结束日期 char
-    def GetJoinStartTime(self): return self.attrTuple[3] # 参与开始时间点 char
-    def GetJoinEndTime(self): return self.attrTuple[4] # 参与结束时间点 char
-    def GetLVLimit(self): return self.attrTuple[5] # 限制等级 WORD
-    def GetActShopType(self): return self.attrTuple[6] # 开放商店类型,为0时不开放 WORD
-    def GetPersonalTemplateID(self): return self.attrTuple[7] # 个人排行模板编号 WORD
-    def GetIsRelationCrossAct(self): return self.attrTuple[8] # 是否关联跨服活动 BYTE
-
-# 古宝养成榜单模版表
-class IPY_ActGubaoBillTemp():
-    
-    def __init__(self):
-        self.attrTuple = None
-        return
-        
-    def GetTemplateID(self): return self.attrTuple[0] # 模板编号 DWORD
-    def GetRank(self): return self.attrTuple[1] # 名次 BYTE
-    def GetAwardItemList(self): return self.attrTuple[2] # 奖励物品列表[[物品ID,个数,是否拍品], ...] list
-    def GetNeedScore(self): return self.attrTuple[3] # 上榜所需积分 DWORD
-    def GetScoreAwardEx(self): return self.attrTuple[4] # 达标积分额外奖励 {积分:[[物品ID,个数,是否拍品], ...], ...} dict
-
 # 炼器榜单模版表
 class IPY_ActLianqiBillTemp():
     
@@ -5294,57 +5045,6 @@
     def GetGridWeightItemList(self): return self.attrTuple[4] # 格子物品权重随机库 [[权重,物品ID,个数], ...] list
     def GetLayerAwardItemList(self): return self.attrTuple[5] # 通关该层固定奖励 [[物品ID,个数,是否拍品], ...] list
     def GetLayerWeightItemList(self): return self.attrTuple[6] # 通关该层额外随机奖励 [[权重,物品ID,个数], ...] list
-
-# 仙匣秘境活动时间表
-class IPY_ActXianXiaMJ():
-    
-    def __init__(self):
-        self.attrTuple = None
-        return
-        
-    def GetCfgID(self): return self.attrTuple[0] # 配置ID DWORD
-    def GetStartDate(self): return self.attrTuple[1] # 开启日期 char
-    def GetEndDate(self): return self.attrTuple[2] # 结束日期 char
-    def GetJoinStartTime(self): return self.attrTuple[3] # 参与开始时间点 char
-    def GetJoinEndTime(self): return self.attrTuple[4] # 参与结束时间点 char
-    def GetIsDayReset(self): return self.attrTuple[5] # 是否每天重置 BYTE
-    def GetLVLimit(self): return self.attrTuple[6] # 限制等级 WORD
-    def GetUseItemID(self): return self.attrTuple[7] # 消耗物品ID DWORD
-    def GetUseMoneyInfo(self): return self.attrTuple[8] # 消耗货币信息 list
-    def GetTemplateID(self): return self.attrTuple[9] # 模板ID BYTE
-    def GetPersonalTemplateID(self): return self.attrTuple[10] # 个人排行模板编号 WORD
-    def GetLotteryAddScore(self): return self.attrTuple[11] # 每次抽奖加积分 WORD
-    def GetLayerAddScore(self): return self.attrTuple[12] # 每次跨层加积分 WORD
-    def GetIsRelationCrossAct(self): return self.attrTuple[13] # 是否关联跨服活动 BYTE
-
-# 仙匣秘境榜单模版表
-class IPY_ActXianXiaMJBillTemp():
-    
-    def __init__(self):
-        self.attrTuple = None
-        return
-        
-    def GetTemplateID(self): return self.attrTuple[0] # 模板编号 DWORD
-    def GetRank(self): return self.attrTuple[1] # 名次 BYTE
-    def GetAwardItemList(self): return self.attrTuple[2] # 奖励物品列表[[物品ID,个数,是否拍品], ...] list
-    def GetNeedScore(self): return self.attrTuple[3] # 上榜所需积分 DWORD
-    def GetScoreAwardEx(self): return self.attrTuple[4] # 达标积分额外奖励 {积分:[[物品ID,个数,是否拍品], ...], ...} dict
-
-# 仙匣秘境奖池表
-class IPY_ActXianXiaMJAward():
-    
-    def __init__(self):
-        self.attrTuple = None
-        return
-        
-    def GetTemplateID(self): return self.attrTuple[0] # 奖池模板编号 DWORD
-    def GetAwardLibType(self): return self.attrTuple[1] # 奖励库类型 BYTE
-    def GetAwardItemCountList(self): return self.attrTuple[2] # 层选择个数列表  层1物品数|层2|… list
-    def GetUnlockAwardLimitTimesList(self): return self.attrTuple[3] # 层抽X次后可产出(本层) 层1限制|层2|… list
-    def GetAwardLibWeightList(self): return self.attrTuple[4] # 产出该库外权重 list
-    def GetLibItemInfo(self): return self.attrTuple[5] # 本库物品随机库内权重(先随机库外权重,若产出再随机库内权重) dict
-    def GetItemLayerLimitInfo(self): return self.attrTuple[6] # 物品产出奖池层限制 {物品ID:大于等于X层可产出, ...} dict
-    def GetItemAwardTimesTotalInfo(self): return self.attrTuple[7] # 物品产出次数限制(所有层){物品ID:总产出次数, ...} dict
 
 # 天帝礼包活动时间表
 class IPY_ActGodGift():
@@ -5379,20 +5079,6 @@
     def GetChooseItemCount(self): return self.attrTuple[3] # 选择个数 BYTE
     def GetLibItemInfo(self): return self.attrTuple[4] # 物品编号对应物品信息 {物品编号:[物品ID,个数,是否拍品,可选次数], ...}  0不限次数 dict
     def GetNotifyItemNumList(self): return self.attrTuple[5] # 需要广播的编号列表 list
-
-# 骑宠盛宴活动
-class IPY_ActHorsePetFeast():
-    
-    def __init__(self):
-        self.attrTuple = None
-        return
-        
-    def GetCfgID(self): return self.attrTuple[0] # 配置ID DWORD
-    def GetStartDate(self): return self.attrTuple[1] # 开启日期 char
-    def GetEndDate(self): return self.attrTuple[2] # 结束日期 char
-    def GetStartTimeList(self): return self.attrTuple[3] # 开启时间列表, 支持多个时段 list
-    def GetEndTimeList(self): return self.attrTuple[4] # 结束时间列表, 支持多个时段 list
-    def GetLVLimit(self): return self.attrTuple[5] # 限制等级 WORD
 
 # BOSS复活活动时间表
 class IPY_ActBossReborn():
@@ -6910,22 +6596,10 @@
         self.__LoadFileData("ActFamilyCTGAssistTemp", onlyCheck)
         self.__LoadFileData("ActCollectWords", onlyCheck)
         self.__LoadFileData("CollectWordsExchange", onlyCheck)
-        self.__LoadFileData("ActGarbageSorting", onlyCheck)
-        self.__LoadFileData("ActGarbageTask", onlyCheck)
-        self.__LoadFileData("ActBossTrial", onlyCheck)
-        self.__LoadFileData("ActBossTrialTemplate", onlyCheck)
-        self.__LoadFileData("ActHorsePetTrain", onlyCheck)
-        self.__LoadFileData("ActHorsePetTrainBillTemp", onlyCheck)
-        self.__LoadFileData("ActGubao", onlyCheck)
-        self.__LoadFileData("ActGubaoBillTemp", onlyCheck)
         self.__LoadFileData("ActLianqiBillTemp", onlyCheck)
         self.__LoadFileData("CrossActFamilyGCZSQ", onlyCheck)
-        self.__LoadFileData("ActXianXiaMJ", onlyCheck)
-        self.__LoadFileData("ActXianXiaMJBillTemp", onlyCheck)
-        self.__LoadFileData("ActXianXiaMJAward", onlyCheck)
         self.__LoadFileData("ActGodGift", onlyCheck)
         self.__LoadFileData("ActGodGiftAward", onlyCheck)
-        self.__LoadFileData("ActHorsePetFeast", onlyCheck)
         self.__LoadFileData("ActBossReborn", onlyCheck)
         self.__LoadFileData("BossReborn", onlyCheck)
         self.__LoadFileData("ActRealmPoint", onlyCheck)
@@ -8327,62 +8001,6 @@
         self.CheckLoadData("CollectWordsExchange")
         return self.ipyCollectWordsExchangeCache[index]
 
-    def GetActGarbageSortingCount(self):
-        self.CheckLoadData("ActGarbageSorting")
-        return self.ipyActGarbageSortingLen
-    def GetActGarbageSortingByIndex(self, index):
-        self.CheckLoadData("ActGarbageSorting")
-        return self.ipyActGarbageSortingCache[index]
-
-    def GetActGarbageTaskCount(self):
-        self.CheckLoadData("ActGarbageTask")
-        return self.ipyActGarbageTaskLen
-    def GetActGarbageTaskByIndex(self, index):
-        self.CheckLoadData("ActGarbageTask")
-        return self.ipyActGarbageTaskCache[index]
-
-    def GetActBossTrialCount(self):
-        self.CheckLoadData("ActBossTrial")
-        return self.ipyActBossTrialLen
-    def GetActBossTrialByIndex(self, index):
-        self.CheckLoadData("ActBossTrial")
-        return self.ipyActBossTrialCache[index]
-
-    def GetActBossTrialTemplateCount(self):
-        self.CheckLoadData("ActBossTrialTemplate")
-        return self.ipyActBossTrialTemplateLen
-    def GetActBossTrialTemplateByIndex(self, index):
-        self.CheckLoadData("ActBossTrialTemplate")
-        return self.ipyActBossTrialTemplateCache[index]
-
-    def GetActHorsePetTrainCount(self):
-        self.CheckLoadData("ActHorsePetTrain")
-        return self.ipyActHorsePetTrainLen
-    def GetActHorsePetTrainByIndex(self, index):
-        self.CheckLoadData("ActHorsePetTrain")
-        return self.ipyActHorsePetTrainCache[index]
-
-    def GetActHorsePetTrainBillTempCount(self):
-        self.CheckLoadData("ActHorsePetTrainBillTemp")
-        return self.ipyActHorsePetTrainBillTempLen
-    def GetActHorsePetTrainBillTempByIndex(self, index):
-        self.CheckLoadData("ActHorsePetTrainBillTemp")
-        return self.ipyActHorsePetTrainBillTempCache[index]
-
-    def GetActGubaoCount(self):
-        self.CheckLoadData("ActGubao")
-        return self.ipyActGubaoLen
-    def GetActGubaoByIndex(self, index):
-        self.CheckLoadData("ActGubao")
-        return self.ipyActGubaoCache[index]
-
-    def GetActGubaoBillTempCount(self):
-        self.CheckLoadData("ActGubaoBillTemp")
-        return self.ipyActGubaoBillTempLen
-    def GetActGubaoBillTempByIndex(self, index):
-        self.CheckLoadData("ActGubaoBillTemp")
-        return self.ipyActGubaoBillTempCache[index]
-
     def GetActLianqiBillTempCount(self):
         self.CheckLoadData("ActLianqiBillTemp")
         return self.ipyActLianqiBillTempLen
@@ -8397,27 +8015,6 @@
         self.CheckLoadData("CrossActFamilyGCZSQ")
         return self.ipyCrossActFamilyGCZSQCache[index]
 
-    def GetActXianXiaMJCount(self):
-        self.CheckLoadData("ActXianXiaMJ")
-        return self.ipyActXianXiaMJLen
-    def GetActXianXiaMJByIndex(self, index):
-        self.CheckLoadData("ActXianXiaMJ")
-        return self.ipyActXianXiaMJCache[index]
-
-    def GetActXianXiaMJBillTempCount(self):
-        self.CheckLoadData("ActXianXiaMJBillTemp")
-        return self.ipyActXianXiaMJBillTempLen
-    def GetActXianXiaMJBillTempByIndex(self, index):
-        self.CheckLoadData("ActXianXiaMJBillTemp")
-        return self.ipyActXianXiaMJBillTempCache[index]
-
-    def GetActXianXiaMJAwardCount(self):
-        self.CheckLoadData("ActXianXiaMJAward")
-        return self.ipyActXianXiaMJAwardLen
-    def GetActXianXiaMJAwardByIndex(self, index):
-        self.CheckLoadData("ActXianXiaMJAward")
-        return self.ipyActXianXiaMJAwardCache[index]
-
     def GetActGodGiftCount(self):
         self.CheckLoadData("ActGodGift")
         return self.ipyActGodGiftLen
@@ -8431,13 +8028,6 @@
     def GetActGodGiftAwardByIndex(self, index):
         self.CheckLoadData("ActGodGiftAward")
         return self.ipyActGodGiftAwardCache[index]
-
-    def GetActHorsePetFeastCount(self):
-        self.CheckLoadData("ActHorsePetFeast")
-        return self.ipyActHorsePetFeastLen
-    def GetActHorsePetFeastByIndex(self, index):
-        self.CheckLoadData("ActHorsePetFeast")
-        return self.ipyActHorsePetFeastCache[index]
 
     def GetActBossRebornCount(self):
         self.CheckLoadData("ActBossReborn")
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py
index 1f6e2cb..9981cf9 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py
@@ -31,7 +31,6 @@
 import ChPyNetSendPack
 import NetPackCommon
 import Operate_EquipStone
-import PlayerActBossTrial
 import PlayerXiangong
 import IpyGameDataPY
 import DataRecordPack
@@ -999,11 +998,7 @@
                 #GameWorld.DebugLog("增加副本次数默认使用! mapID=%s" % mapID)
                 tagItem.Clear()
                 return True
-        #活动道具自动转化
-        if PlayerActBossTrial.CheckActItemAutoTransform(curPlayer, tagItem, itemID, tagItemCount):
-            tagItem.Clear()
-            return True
-        
+            
         if itemID in ChConfig.Def_TransformItemIDList or tagItem.GetType() == ChConfig.Def_ItemType_AutoUseMoney:
             # 直接转化为对应货币的物品仅在放入背包时直接转化,否则还是以真实物品的形式存在,但堆叠上限需要做特殊处理
             if packIndex == IPY_GameWorld.rptItem:
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py
index 747a68f..5059b04 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py
@@ -48,8 +48,6 @@
 import PlayerBossReborn
 import PlayerCrossYaomoBoss
 import PlayerActCollectWords
-import PlayerActGarbageSorting
-import PlayerActBossTrial
 import PlayerTongTianLing
 import CrossPlayerData
 import PlayerFeastWish
@@ -1080,11 +1078,7 @@
         PlayerGubao.AddGubaoItemEffValue(curPlayer, PlayerGubao.GubaoEffType_KillCrossDemonLandBoss, 1)
         PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_CrossDemonLandBoss, 1)
     if mapID in [ChConfig.Def_FBMapID_CrossPenglai, ChConfig.Def_FBMapID_CrossDemonLand]:
-        PlayerActGarbageSorting.AddActGarbageTaskProgress(curPlayer, ChConfig.Def_GarbageTask_CrossBoss)
         PlayerTongTianLing.AddTongTianTaskValue(curPlayer, ChConfig.TTLTaskType_CrossBoss, 1)
-        
-    if npcData.GetIsBoss() == ChConfig.Def_NPCType_Boss_Dark:
-        PlayerActGarbageSorting.AddActGarbageTaskProgress(curPlayer, ChConfig.Def_GarbageTask_KillBoss)
         
     # 个人首杀记录
     ipyData = IpyGameDataPY.GetIpyGameDataNotLog("BOSSFirstKill", npcID)
@@ -3321,7 +3315,6 @@
         else:
             if GetNPCLV(curNPC) >= curPlayer.GetLV() - IpyGameDataPY.GetFuncCfg('DailyQuestKillMonster'):
                 PlayerActivity.AddDailyActionFinishCnt(curPlayer, ShareDefine.DailyActionID_KillNPC)
-                PlayerActGarbageSorting.AddActGarbageTaskProgress(curPlayer, ChConfig.Def_GarbageTask_KillNPC)
                 PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_KillNPC)
             PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_FeastRedPack_KillSpecificNPC, 1, [npcID])
         #PlayerPrestigeSys.AddRealmTaskValue(curPlayer, PlayerPrestigeSys.RealmTaskType_KillNPC, 1)
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 857fa73..e20ab95 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
@@ -82,18 +82,12 @@
 import PlayerActCollectWords
 import PlayerActTotalRecharge
 import PlayerActRechargePrize
-import PlayerActGarbageSorting
-import PlayerActXianXiaMJ
-import PlayerActGubao
-import PlayerActHorsePetTrain
 import PlayerActLianqi
 import PlayerActGodGift
 import PlayerActFamilyCTGAssist
 import PlayerActRechargeRebateGold
 import PlayerActManyDayRecharge
 import PlayerActSingleRecharge
-import PlayerActHorsePetFeast
-import PlayerActBossTrial
 import PlayerSpringSale
 import GY_Query_BossFirstKill
 import PlayerCrossYaomoBoss
@@ -664,10 +658,6 @@
     PlayerFreeGoods.OnLogin(curPlayer)
     # BOSS复活活动
     PlayerBossReborn.OnLogin(curPlayer)
-    # boss历练
-    PlayerActBossTrial.OnPlayerLogin(curPlayer)
-    # 骑宠盛宴活动
-    PlayerActHorsePetFeast.OnLogin(curPlayer)
     # 周狂欢活动
     PlayerWeekParty.OnLogin(curPlayer)
     # 购买次数礼包活动
@@ -690,14 +680,6 @@
     PlayerFeastTravel.OnPlayerLogin(curPlayer)
     # 登录奖励活动
     PlayerActLogin.OnLogin(curPlayer)
-    # 垃圾分类活动
-    PlayerActGarbageSorting.OnPlayerLogin(curPlayer)
-    # 仙匣秘境活动
-    PlayerActXianXiaMJ.OnPlayerLogin(curPlayer)
-    # 古宝养成活动
-    PlayerActGubao.OnPlayerLogin(curPlayer)
-    # 骑宠养成活动
-    PlayerActHorsePetTrain.OnPlayerLogin(curPlayer)
     # 炼器活动
     PlayerActLianqi.OnPlayerLogin(curPlayer)
     # 天帝礼包活动
@@ -919,14 +901,6 @@
     # 同步排行榜
     PlayerBillboard.UpdatePlayerBillboardOnLeaveServer(curPlayer, isAll=True)
     
-    # boss凭证
-    PlayerActBossTrial.OnMixFirstLogin(curPlayer)
-    # 仙匣秘境
-    PlayerActXianXiaMJ.OnMixFirstLogin(curPlayer)
-    # 古宝养成
-    PlayerActGubao.OnMixFirstLogin(curPlayer)
-    # 骑宠养成
-    PlayerActHorsePetTrain.OnMixFirstLogin(curPlayer)
     # 重置玩家改名次数
     #UpdatePlayerName.ResetChangeNameCnt(curPlayer)
     return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActBossTrial.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActBossTrial.py
deleted file mode 100644
index 6868471..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActBossTrial.py
+++ /dev/null
@@ -1,533 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-##@package Player.PlayerActBossTrial
-#
-# @todo:boss历练
-# @author hxp
-# @date 2023-10-20
-# @version 1.0
-#
-# 详细描述: boss历练
-#
-#-------------------------------------------------------------------------------
-#"""Version = 2023-10-20 16:00"""
-#-------------------------------------------------------------------------------
-
-import PyGameData
-import ItemCommon
-import ShareDefine
-import PlayerControl
-import IpyGameDataPY
-import ChPyNetSendPack
-import CrossRealmPlayer
-import FunctionNPCCommon
-import PlayerBillboard
-import ItemControler
-import NetPackCommon
-import IPY_GameWorld
-import GameWorld
-import ChConfig
-
-def OnMixFirstLogin(curPlayer):
-    
-    for actInfo in PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_BossTrial, {}).values():
-        actNum = actInfo.get(ShareDefine.ActKey_ActNum, 0)
-        if not actInfo.get(ShareDefine.ActKey_State):
-            continue
-        submitCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BossTrialSubmitCount % actNum)
-        if not submitCount:
-            continue
-        GameWorld.Log("Boss历练合服首登同步凭证榜单: actNum=%s,submitCount=%s" % (actNum, submitCount), curPlayer.GetPlayerID())
-        PlayerBillboard.UpdatePlayerBillboard(curPlayer, ShareDefine.Def_BT_BossTrialSubmit, submitCount, autoSort=True)
-        break
-    
-    return
-
-def OnPlayerLogin(curPlayer):
-    
-    for actInfo in PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_BossTrial, {}).values():
-        actNum = actInfo.get(ShareDefine.ActKey_ActNum, 0)
-        isReset = __CheckPlayerBossTrialAction(curPlayer, actNum)
-        # 活动中同步活动信息
-        if not isReset and actInfo.get(ShareDefine.ActKey_State):
-            Sync_BossTrialActionInfo(curPlayer, actNum)
-            Sync_BossTrialPlayerInfo(curPlayer, actNum)
-            
-    if not __CheckPlayerCrossActBossTrial(curPlayer):
-        Sync_CrossActBossTrialActionInfo(curPlayer)
-        
-    return
-
-def PlayerOnDay(curPlayer, onEventType):
-    for actInfo in PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_BossTrial, {}).values():
-        if not actInfo.get(ShareDefine.ActKey_State):
-            continue
-                
-        actNum = actInfo.get(ShareDefine.ActKey_ActNum, 0)
-        cfgID = actInfo.get(ShareDefine.ActKey_CfgID)
-        ipyData = IpyGameDataPY.GetIpyGameData("ActBossTrial", cfgID)
-        if not ipyData:
-            continue
-        submitAwardResetType = ipyData.GetSubmitAwardResetType()
-        if not submitAwardResetType:
-            continue
-        
-        if onEventType != submitAwardResetType:
-            continue
-        
-        GameWorld.DebugLog("boss历练活动重置提交奖励: actNum=%s,cfgID=%s,submitAwardResetType=%s" 
-                           % (actNum, cfgID, submitAwardResetType), curPlayer.GetPlayerID())
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_BossTrialSubmitAwardCount % actNum, 0)
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_BossTrialSubmitAward % actNum, 0)
-        Sync_BossTrialPlayerInfo(curPlayer, actNum)
-        
-    return
-
-def RefreshBossTrialActionInfo(actNum):
-    ## 收到GameServer同步的活动信息,刷新活动信息
-    playerManager = GameWorld.GetPlayerManager()
-    for index in xrange(playerManager.GetPlayerCount()):
-        curPlayer = playerManager.GetPlayerByIndex(index)
-        if not GameWorld.IsNormalPlayer(curPlayer):
-            continue
-        __CheckPlayerBossTrialAction(curPlayer, actNum)
-    return
-
-def __CheckPlayerBossTrialAction(curPlayer, actNum):
-    ## 检查玩活动数据信息
-    
-    playerID = curPlayer.GetPlayerID()
-    
-    actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_BossTrial, actNum)
-    actID = actInfo.get(ShareDefine.ActKey_ID, 0)
-    state = actInfo.get(ShareDefine.ActKey_State, 0)
-    
-    playerActID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BossTrialID % actNum) # 玩家身上的活动ID
-    
-    __CheckActItemRecycle(curPlayer) # 必须在活动ID更新之前处理
-    # 活动ID 相同的话不处理
-    if actID == playerActID:
-        GameWorld.DebugLog("Boss历练活动ID不变,不处理! actID=%s" % actID, curPlayer.GetPlayerID())
-        return
-    GameWorld.DebugLog("Boss历练活动重置! actID=%s,playerActID=%s,state=%s" % (actID, playerActID, state), playerID)
-    
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_BossTrialID % actNum, actID)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_BossTrialSubmitCount % actNum, 0)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_BossTrialSubmitAwardCount % actNum, 0)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_BossTrialSubmitAward % actNum, 0)
-    
-    if state:
-        cfgID = actInfo.get(ShareDefine.ActKey_CfgID)
-        ipyData = IpyGameDataPY.GetIpyGameData("ActBossTrial", cfgID)
-        if ipyData and ipyData.GetActShopType():
-            FunctionNPCCommon.ResetShopItemBuyCountByShopType(curPlayer, [ipyData.GetActShopType()])
-        Sync_BossTrialActionInfo(curPlayer, actNum)
-        Sync_BossTrialPlayerInfo(curPlayer, actNum)
-        
-    return True
-
-def RefreshCrossActBossTrialInfo():
-    ## 收到GameServer同步的活动信息,刷新活动信息
-    playerManager = GameWorld.GetPlayerManager()
-    for index in xrange(playerManager.GetPlayerCount()):
-        curPlayer = playerManager.GetPlayerByIndex(index)
-        if not GameWorld.IsNormalPlayer(curPlayer):
-            continue
-        __CheckPlayerCrossActBossTrial(curPlayer)
-        
-    return
-
-def __CheckPlayerCrossActBossTrial(curPlayer):
-    
-    playerID = curPlayer.GetPlayerID()
-    
-    actInfo = CrossRealmPlayer.GetPlayerCrossActInfo(curPlayer, ShareDefine.CrossActName_BossTrial)
-    cfgID = actInfo.get(ShareDefine.ActKey_CfgID, 0)
-    actID = actInfo.get(ShareDefine.ActKey_ID, 0)
-    state = actInfo.get(ShareDefine.ActKey_State, 0)
-    dayIndex = actInfo.get(ShareDefine.ActKey_DayIndex, 0)
-    
-    playerActID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CA_BossTrialID) # 玩家身上的活动ID
-    
-    __CheckActItemRecycle(curPlayer) # 必须在活动ID更新之前处理
-    # 活动ID 相同的话不处理
-    if actID == playerActID:
-        GameWorld.DebugLog("跨服Boss历练活动ID不变,不处理!cfgID=%s,dayIndex=%s,actID=%s" % (cfgID, dayIndex, actID), playerID)   
-        return
-    GameWorld.DebugLog("跨服Boss历练活动重置! cfgID=%s,actID=%s,playerActID=%s,state=%s" % (cfgID, actID, playerActID, state), playerID)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CA_BossTrialID, actID)
-    
-    if not state:
-        CrossRealmPlayer.NotifyCrossActEnd(curPlayer, ShareDefine.CrossActName_BossTrial)
-        
-    Sync_CrossActBossTrialActionInfo(curPlayer)
-    return True
-
-def __CheckActItemRecycle(curPlayer):
-    ## 检查活动物品回收,玩家所有参与过的活动ID都结束后才处理
-    
-    if IsInActBossTrial(curPlayer):
-        # 还有活动中,标记待回收,如果一直有交替的活动开启中,则该状态一直为等待回收状态
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_BossTrialRecycleState, 1)
-        return
-    
-    playerID = curPlayer.GetPlayerID()
-    recycleState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BossTrialRecycleState)
-    if not recycleState:
-        # 这样可以兼容回收功能上线后,确保老玩家之前屯的活动物品不会被回收,至少可以参与一次
-        GameWorld.DebugLog("Boss历练活动玩家没有标记过等待回收活动物品,不处理!", playerID)
-        return
-    
-    if recycleState == 2:
-        # 因为结束参与及活动结束都会触发检查,所以需要标记已处理过,防止一次活动多次回收
-        GameWorld.DebugLog("Boss历练活动已回收过活动物品!", playerID)
-        return
-    
-    actItemID = IpyGameDataPY.GetFuncCfg("BossTrial", 1)
-    clearCountDict = ItemControler.ClearItemID(curPlayer, [actItemID])
-    clearCount = clearCountDict.get(actItemID, 0)
-    GameWorld.Log("Boss历练活动回收活动物品! actItemID=%s,clearCount=%s" % (actItemID, clearCount), playerID)
-    if clearCount > 0:
-        addMoney = clearCount
-        PlayerControl.GiveMoney(curPlayer, ShareDefine.TYPE_Price_BossTrial, addMoney, "BossTrialRecycle")
-        paramList = [clearCount, actItemID, actItemID, addMoney]
-        PlayerControl.SendMailByKey("BossTrialRecycle", [playerID], [], paramList)
-        
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_BossTrialRecycleState, 2)
-    return
-
-def CheckActItemAutoTransform(curPlayer, tagItem, itemID, tagItemCount):
-    ## 检查活动物品自动转化为对应积分,物品实例外部统一清理
-    if itemID != IpyGameDataPY.GetFuncCfg("BossTrial", 1):
-        return False
-    if IsInActBossTrial(curPlayer):
-        return False
-    GameWorld.DebugLog("Boss历练活动非参与中,自动回收获得的活动物品! itemID=%s,itemCount=%s" % (itemID, tagItemCount))
-    PlayerControl.GiveMoney(curPlayer, ShareDefine.TYPE_Price_BossTrial, tagItemCount, "BossTrialRecycle")
-    return True
-
-def IsInActBossTrial(curPlayer):
-    ## 玩家是否有正在进行中活动,不含参与结束阶段
-    return PlayerControl.IsInOperationAction(curPlayer, ShareDefine.OperationActionName_BossTrial, ChConfig.Def_PDict_BossTrialID, 
-                                             ShareDefine.CrossActName_BossTrial, ChConfig.Def_PDict_CA_BossTrialID)
-    
-def SendToGameServer_BossTrial(curPlayer, msgType, dataMsg=""):
-    playerID = curPlayer.GetPlayerID()
-    msgList = str([msgType, dataMsg])
-    GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(playerID, 0, 0, "BossTrial", msgList, len(msgList))
-    GameWorld.Log("Boss历练发送GameServer: %s, %s" % (msgType, dataMsg), playerID)
-    return
-
-#// AA 23 Boss历练提交凭证 #tagCMActBossTrialSubmit
-#
-#struct    tagCMActBossTrialSubmit
-#{
-#    tagHead        Head;
-#    BYTE        ActNum;        //活动编号
-#    WORD        SubmitCount;    //提交凭证个数
-#};
-def OnActBossTrialSubmit(index, clientData, tick):
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    actNum = clientData.ActNum
-    submitCount = clientData.SubmitCount
-    
-    playerID = curPlayer.GetPlayerID()
-    actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_BossTrial, actNum)
-    if not actInfo.get(ShareDefine.ActKey_State):
-        GameWorld.DebugLog("Boss历练非活动中: actNum=%s" % actNum, playerID)
-        return
-    
-    crossActInfo = CrossRealmPlayer.GetPlayerCrossActInfo(curPlayer, ShareDefine.CrossActName_BossTrial)
-    if crossActInfo.get(ShareDefine.ActKey_State, 0):
-        if crossActInfo.get(ShareDefine.ActKey_StateJoin) != ShareDefine.ActStateJoin_Start:
-            GameWorld.Log("跨服Boss历练非参与活动中: actNum=%s" % actNum, playerID)
-            return
-    else:
-        if actInfo.get(ShareDefine.ActKey_StateJoin) != ShareDefine.ActStateJoin_Start:
-            GameWorld.Log("Boss历练非参与活动中: actNum=%s" % actNum, playerID)
-            return
-        
-    itemID = IpyGameDataPY.GetFuncCfg("BossTrial", 1)
-    itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
-    lackItemDict, delInfoDict = ItemCommon.GetCostItemIndexList({itemID:submitCount}, itemPack)
-    if lackItemDict:
-        GameWorld.DebugLog("Boss历练提交凭证物品不足! actNum=%s,itemID=%s,submitCount=%s,lackItemDict=%s" % (actNum, itemID, submitCount, lackItemDict), playerID)
-        return
-    ItemCommon.DelCostItem(curPlayer, itemPack, delInfoDict, "BossTrialSubmit")
-    
-    submitAwardCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BossTrialSubmitAwardCount % actNum)
-    updSubmitAwardCount = submitAwardCount + submitCount    
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_BossTrialSubmitAwardCount % actNum, updSubmitAwardCount)
-    
-    nowSubmitCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BossTrialSubmitCount % actNum)
-    updSubmitCount = nowSubmitCount + submitCount    
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_BossTrialSubmitCount % actNum, updSubmitCount)
-    GameWorld.DebugLog("Boss历练提交凭证: actNum=%s,itemID=%s,submitCount=%s,updSubmitCount=%s,updSubmitAwardCount=%s" 
-                       % (actNum, itemID, submitCount, updSubmitCount, updSubmitAwardCount), playerID)
-    
-    PlayerControl.GiveMoney(curPlayer, ShareDefine.TYPE_Price_BossTrial, submitCount, "BossTrialSubmit")
-    
-    PlayerBillboard.UpdatePlayerBillboard(curPlayer, ShareDefine.Def_BT_BossTrialSubmit, updSubmitCount, autoSort=True)
-    
-    Sync_BossTrialPlayerInfo(curPlayer, actNum)
-    
-    SendToGameServer_BossTrial(curPlayer, "BossTrialSubmit", [submitCount, updSubmitCount])
-    return
-
-#// AA 24 Boss历练领奖 #tagCMActBossTrialGetAward
-#
-#struct    tagCMActBossTrialGetAward
-#{
-#    tagHead        Head;
-#    BYTE        ActNum;        //活动编号
-#    WORD        SubmitCount;    //领取凭证个数对应奖励
-#};
-def OnActBossTrialGetAward(index, clientData, tick):
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    actNum = clientData.ActNum
-    submitCount = clientData.SubmitCount
-    
-    playerID = curPlayer.GetPlayerID()
-    actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_BossTrial, actNum)
-    if not actInfo.get(ShareDefine.ActKey_State):
-        GameWorld.DebugLog("Boss历练非活动中: actNum=%s" % actNum, playerID)
-        return
-    
-    cfgID = actInfo.get(ShareDefine.ActKey_CfgID)
-    ipyData = IpyGameDataPY.GetIpyGameData("ActBossTrial", cfgID)
-    if not ipyData:
-        return
-    submitItemAwardInfo = ipyData.GetSubmitItemAwardInfo()
-    if submitCount not in submitItemAwardInfo:
-        GameWorld.DebugLog("Boss历练没有该奖励: actNum=%s,submitCount=%s not in %s" % (actNum, submitCount, submitItemAwardInfo.keys()), playerID)
-        return
-    recordIndex, awardItemList = submitItemAwardInfo[submitCount]
-    
-    nowSubmitCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BossTrialSubmitAwardCount % actNum)
-    if nowSubmitCount < submitCount:
-        GameWorld.DebugLog("Boss历练提交凭证个数不足,无法领奖: actNum=%s,nowSubmitCount=%s < %s" % (actNum, nowSubmitCount, submitCount), playerID)
-        return
-    
-    awardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BossTrialSubmitAward % actNum)
-    if awardState & pow(2, recordIndex):
-        GameWorld.DebugLog("Boss历练领奖已领取过: actNum=%s,submitCount=%s,recordIndex=%s,awardState=%s" % (actNum, submitCount, recordIndex, awardState), playerID)
-        return
-    updAwardState = awardState | pow(2, recordIndex)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_BossTrialSubmitAward % actNum, updAwardState)
-    GameWorld.DebugLog("Boss历练领奖: actNum=%s,submitCount=%s,recordIndex=%s,awardState=%s,updAwardState=%s" 
-                       % (actNum, submitCount, recordIndex, awardState, updAwardState), playerID)
-    
-    ItemControler.GivePlayerItemOrMail(curPlayer, awardItemList, event=["BossTrial", False, {}])
-    Sync_BossTrialPlayerInfo(curPlayer, actNum)
-    return
-
-def GetBossTrialDropItemIDList(curPlayer, limitIndex):
-    bossIndexDropRateDict = IpyGameDataPY.GetFuncEvalCfg("BossTrial", 4)
-    if limitIndex not in bossIndexDropRateDict:
-        return
-    dropCountRateList = bossIndexDropRateDict[limitIndex]
-    
-    dropCountTotal = 0
-    itemID = IpyGameDataPY.GetFuncCfg("BossTrial", 1)
-    
-    if not GameWorld.IsCrossServer():
-        for actInfo in PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_BossTrial, {}).values():
-            actNum = actInfo.get(ShareDefine.ActKey_ActNum, 0)
-            if not actInfo.get(ShareDefine.ActKey_State):
-                GameWorld.DebugLog("Boss历练非活动中,不掉落! actNum=%s" % actNum)
-                continue
-            dropCount = GameWorld.GetResultByRandomList(dropCountRateList)
-            GameWorld.DebugLog("本服Boss历练掉落! bossIndex=%s,actNum=%s,dropCount=%s" % (limitIndex, actNum, dropCount))
-            if not dropCount:
-                continue
-            dropCountTotal += dropCount
-            
-    else:
-        crossActInfo = CrossRealmPlayer.GetPlayerCrossActInfo(curPlayer, ShareDefine.CrossActName_BossTrial)
-        if crossActInfo.get(ShareDefine.ActKey_State):
-            dropCount = GameWorld.GetResultByRandomList(dropCountRateList)
-            GameWorld.DebugLog("跨服Boss历练掉落! bossIndex=%s,dropCount=%s" % (limitIndex, dropCount))
-            if dropCount:
-                dropCountTotal += dropCount
-                
-    return itemID, dropCountTotal
-
-def Sync_BossTrialPlayerInfo(curPlayer, actNum):
-    ## 通知玩家数据信息
-    actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_BossTrial, actNum)
-    if not actInfo.get(ShareDefine.ActKey_State):
-        return
-    clientPack = ChPyNetSendPack.tagMCActBossTrialPlayerInfo()
-    clientPack.ActNum = actNum
-    clientPack.SubmitCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BossTrialSubmitCount % actNum)
-    clientPack.SubmitAwardCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BossTrialSubmitAwardCount % actNum)
-    clientPack.SubmitAwardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BossTrialSubmitAward % actNum)
-    NetPackCommon.SendFakePack(curPlayer, clientPack)
-    return
-
-def Sync_BossTrialActionInfo(curPlayer, actNum):
-    ## 通知活动信息
-    actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_BossTrial, actNum)
-    if not actInfo.get(ShareDefine.ActKey_State):
-        return
-    
-    cfgID = actInfo.get(ShareDefine.ActKey_CfgID)
-    dayIndex = actInfo.get(ShareDefine.ActKey_DayIndex, 0)
-    ipyData = IpyGameDataPY.GetIpyGameData("ActBossTrial", cfgID)
-    if not ipyData:
-        return
-    
-    personalTempIpyDataList = []
-    personalTempID = GameWorld.GetTemplateIDByList(ipyData.GetTemplateIDList(), dayIndex)
-    if personalTempID:
-        personalTempIpyDataList = IpyGameDataPY.GetIpyGameDataList("ActBossTrialTemplate", personalTempID)
-        
-    familyTempIpyDataList = []
-    familyTempID = GameWorld.GetTemplateIDByList(ipyData.GetFamilyTemplateIDList(), dayIndex)
-    if familyTempID:
-        familyTempIpyDataList = IpyGameDataPY.GetIpyGameDataList("ActBossTrialTemplate", familyTempID)
-        
-    startDateStr, endDateStr = GameWorld.GetOperationActionDateStr(ipyData)
-    startDateSync = actInfo.get(ShareDefine.ActKey_StartDateSync, startDateStr)
-    actInfo = ChPyNetSendPack.tagMCActBossTrialInfo()
-    actInfo.ActNum = actNum
-    actInfo.StartDate = startDateSync
-    actInfo.EndtDate = endDateStr
-    actInfo.JoinStartTime = ipyData.GetJoinStartTime()
-    actInfo.JoinEndTime = ipyData.GetJoinEndTime()
-    actInfo.IsDayReset = ipyData.GetIsDayReset()
-    actInfo.ResetType = ipyData.GetResetType()
-    actInfo.LimitLV = ipyData.GetLVLimit()
-    actInfo.ShopType = ipyData.GetActShopType()
-    actInfo.SubResetType = ipyData.GetSubmitAwardResetType()
-    
-    actInfo.SubmitInfoList = []
-    submitItemAwardInfo = ipyData.GetSubmitItemAwardInfo()
-    submitCountList = submitItemAwardInfo.keys()
-    submitCountList.sort()
-    for submitCount in submitCountList:
-        recordIndex, awardItemList = submitItemAwardInfo[submitCount]
-        subInfo = ChPyNetSendPack.tagMCActBossTrialSubmitInfo()
-        subInfo.Clear()
-        subInfo.RecordIndex = recordIndex
-        subInfo.NeedCount = submitCount
-        subInfo.AwardItemList = []
-        for itemID, itemCount, isAuctionItem in awardItemList:
-            item = ChPyNetSendPack.tagMCActBossTrialItem()
-            item.Clear()
-            item.ItemID = itemID
-            item.ItemCount = itemCount
-            item.IsBind = isAuctionItem
-            subInfo.AwardItemList.append(item)
-        subInfo.Count = len(subInfo.AwardItemList)
-        actInfo.SubmitInfoList.append(subInfo)
-    actInfo.SubmitCount = len(actInfo.SubmitInfoList)
-    
-    actInfo.PersonalBillboardInfoList = __GetTempRankBillPackList(personalTempIpyDataList)
-    actInfo.PersonalBillCount = len(actInfo.PersonalBillboardInfoList)
-    
-    actInfo.FamilyBillboardInfoList = __GetTempRankBillPackList(familyTempIpyDataList)
-    actInfo.FamilyBillCount = len(actInfo.FamilyBillboardInfoList)
-    
-    NetPackCommon.SendFakePack(curPlayer, actInfo)
-    return
-
-def __GetTempRankBillPackList(ipyDataList):
-    packBillList = []
-    if not ipyDataList:
-        return packBillList
-    for tempIpyData in ipyDataList:
-        rankInfo = ChPyNetSendPack.tagMCActBossTrialBillard()
-        rankInfo.Rank = tempIpyData.GetRank()
-        
-        rankInfo.AwardItemList = []
-        awardItemList = tempIpyData.GetAwardItemList()
-        for itemID, itemCount, isAuctionItem in awardItemList:
-            item = ChPyNetSendPack.tagMCActBossTrialItem()
-            item.Clear()
-            item.ItemID = itemID
-            item.ItemCount = itemCount
-            item.IsBind = isAuctionItem
-            rankInfo.AwardItemList.append(item)
-        rankInfo.Count = len(rankInfo.AwardItemList)
-        
-        rankInfo.MemAwardItemList = []
-        memAwardItemList = tempIpyData.GetMemAwardItemList()
-        for itemID, itemCount, isAuctionItem in memAwardItemList:
-            item = ChPyNetSendPack.tagMCActBossTrialItem()
-            item.Clear()
-            item.ItemID = itemID
-            item.ItemCount = itemCount
-            item.IsBind = isAuctionItem
-            rankInfo.MemAwardItemList.append(item)
-        rankInfo.MemCount = len(rankInfo.MemAwardItemList)
-        
-        rankInfo.NeedScore = tempIpyData.GetNeedScore()
-        rankInfo.AwardItemExList = []
-        scoreAwardEx = tempIpyData.GetScoreAwardEx()
-        scoreExList = scoreAwardEx.keys()
-        scoreExList.sort()
-        for scoreEx in scoreExList:
-            itemExList = scoreAwardEx[scoreEx]
-            awardEx = ChPyNetSendPack.tagMCActBossTrialAwardEx()
-            awardEx.NeedScore = scoreEx
-            awardEx.AwardItemList = []
-            for itemID, itemCount, isAuctionItem in itemExList:
-                item = ChPyNetSendPack.tagMCActBossTrialItem()
-                item.Clear()
-                item.ItemID = itemID
-                item.ItemCount = itemCount
-                item.IsBind = isAuctionItem
-                awardEx.AwardItemList.append(item)
-            awardEx.Count = len(awardEx.AwardItemList)
-            
-            rankInfo.AwardItemExList.append(awardEx)
-        rankInfo.CountEx = len(rankInfo.AwardItemExList)
-        
-        packBillList.append(rankInfo)
-    return packBillList
-
-def Sync_CrossActBossTrialActionInfo(curPlayer):
-    ## 通知活动信息
-    actInfo = CrossRealmPlayer.GetPlayerCrossActInfo(curPlayer, ShareDefine.CrossActName_BossTrial)
-    if not actInfo:
-        return
-    
-    if not actInfo.get(ShareDefine.ActKey_State):
-        return
-    
-    ipyDataDict = actInfo.get(ShareDefine.ActKey_IpyDataInfo, {})
-    if not ipyDataDict:
-        return
-    
-    personalTempIpyDataList = []
-    personalTempID = ipyDataDict.get("PersonalTemplateID", 0)
-    if personalTempID:
-        personalTempIpyDataList = IpyGameDataPY.GetIpyGameDataList("ActBossTrialTemplate", personalTempID)
-        
-    familyTempIpyDataList = []
-    familyTempID = ipyDataDict.get("FamilyTemplateID", 0)
-    if familyTempID:
-        familyTempIpyDataList = IpyGameDataPY.GetIpyGameDataList("ActBossTrialTemplate", familyTempID)
-        
-    actPack = ChPyNetSendPack.tagMCCrossActBossTrialInfo()
-    actPack.ServerIDRangeInfo = str(actInfo.get(ShareDefine.ActKey_ServerIDRangeList, []))
-    actPack.ServerInfoLen = len(actPack.ServerIDRangeInfo)
-    actPack.GroupValue1 = ipyDataDict.get("ZoneID", 0)
-    actPack.StartDate = ipyDataDict.get("StartDate", "")
-    actPack.EndtDate = ipyDataDict.get("EndDate", "")
-    actPack.JoinStartTime = ipyDataDict.get("JoinStartTime", "")
-    actPack.JoinEndTime = ipyDataDict.get("JoinEndTime", "")
-    actPack.IsDayReset = ipyDataDict.get("IsDayReset", 0)
-    actPack.ResetType = ipyDataDict.get("ResetType", 0)
-    
-    actPack.PersonalBillboardInfoList = __GetTempRankBillPackList(personalTempIpyDataList)
-    actPack.PersonalBillCount = len(actPack.PersonalBillboardInfoList)
-    
-    actPack.FamilyBillboardInfoList = __GetTempRankBillPackList(familyTempIpyDataList)
-    actPack.FamilyBillCount = len(actPack.FamilyBillboardInfoList)
-    
-    NetPackCommon.SendFakePack(curPlayer, actPack)
-    return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActGarbageSorting.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActGarbageSorting.py
deleted file mode 100644
index 6166659..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActGarbageSorting.py
+++ /dev/null
@@ -1,383 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-##@package Player.PlayerActGarbageSorting
-#
-# @todo:垃圾分类活动
-# @author hxp
-# @date 2021-05-13
-# @version 1.0
-#
-# 详细描述: 垃圾分类活动
-#
-#-------------------------------------------------------------------------------
-#"""Version = 2021-05-13 19:30"""
-#-------------------------------------------------------------------------------
-
-import PyGameData
-import ShareDefine
-import PlayerControl
-import IpyGameDataPY
-import ItemControler
-import ChPyNetSendPack
-import NetPackCommon
-import GameWorld
-import ChConfig
-import ItemCommon
-import PlayerBillboard
-
-def OnPlayerLogin(curPlayer):
-    
-    for actInfo in PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_GarbageSorting, {}).values():
-        actNum = actInfo.get(ShareDefine.ActKey_ActNum, 0)
-        isReset = __CheckPlayerGarbageSortingAction(curPlayer, actNum)
-        if not isReset:
-            # 活动中同步活动信息
-            if actInfo.get(ShareDefine.ActKey_State):
-                Sync_GarbageSortingActionInfo(curPlayer, actNum)
-                Sync_GarbageTaskInfo(curPlayer, actNum)
-    return
-
-def RefreshGarbageSortingActionInfo(actNum):
-    ## 收到GameServer同步的活动信息,刷新活动信息
-    playerManager = GameWorld.GetPlayerManager()
-    for index in xrange(playerManager.GetPlayerCount()):
-        curPlayer = playerManager.GetPlayerByIndex(index)
-        if not GameWorld.IsNormalPlayer(curPlayer):
-            continue
-        __CheckPlayerGarbageSortingAction(curPlayer, actNum)
-    return
-
-def __CheckPlayerGarbageSortingAction(curPlayer, actNum):
-    ## 检查玩家活动数据信息
-    
-    playerID = curPlayer.GetPlayerID()
-    actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_GarbageSorting, actNum)
-    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_GarbageSortingID % actNum) # 玩家身上的活动ID
-    
-    # 活动ID 相同的话不处理
-    if actID == playerActID:
-        GameWorld.DebugLog("垃圾分类活动ID不变,不处理!actNum=%s,actID=%s" % (actNum, actID), playerID)
-        return
-    
-    actWorldLV = actInfo.get(ShareDefine.ActKey_WorldLV, 0)
-    
-    GameWorld.DebugLog("垃圾分类重置! actNum=%s,actID=%s,playerActID=%s,state=%s,cfgID=%s" 
-                       % (actNum, actID, playerActID, state, cfgID), playerID)
-    
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GarbageSortingID % actNum, actID)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GarbageSortingWorldLV % actNum, actWorldLV)
-    for taskID in ChConfig.GarbageTaskList:
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GarbageTaskValue % (actNum, taskID), 0)
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GarbageTaskFinishCount % (actNum, taskID), 0)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GarbageEnvironmentValue % actNum, 0)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GarbageGJSeconds % actNum, 0)
-    
-    # 清除垃圾背包物品、重置环保值
-    ItemControler.ClearPack(curPlayer, ShareDefine.rptGarbage)
-    PlayerControl.SetPlayerCurrency(curPlayer, ShareDefine.TYPE_Price_Environment, 0)
-    
-    Sync_GarbageSortingActionInfo(curPlayer, actNum)
-    Sync_GarbageTaskInfo(curPlayer, actNum)
-    return True
-
-def AddActGarbageTaskProgress(curPlayer, taskID, addValue=1, valueInfo=None, isTJG=False):
-    ## 增加垃圾收集任务进度
-    # @param valueInfo: taskID 对应的自定义扩展信息值
-    if addValue <= 0:
-        return
-    
-    giveGarbageItemList = []
-    for actInfo in PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_GarbageSorting, {}).values():
-        actNum = actInfo.get(ShareDefine.ActKey_ActNum, 0)
-        if not actInfo.get(ShareDefine.ActKey_State):
-            #GameWorld.DebugLog("垃圾分类活动未开启! actNum=%s" % actNum)
-            continue
-        
-        if taskID == ChConfig.Def_GarbageTask_CTG:
-            cfgID = actInfo.get(ShareDefine.ActKey_CfgID, 0)
-            if not cfgID:
-                continue
-            
-            ipyData = IpyGameDataPY.GetIpyGameData("ActGarbageSorting", cfgID)
-            if not ipyData:
-                continue
-            
-            coinType = valueInfo
-            ctgTypeEffValue = ipyData.GetCTGTypeEffValue()
-            if not ctgTypeEffValue & pow(2, coinType):
-                #GameWorld.DebugLog("垃圾分类活动充值类型对该活动无效! actNum=%s,coinType=%s,ctgTypeEffValue=%s" 
-                #                   % (actNum, coinType, ctgTypeEffValue), curPlayer.GetPlayerID())
-                continue
-            
-        taskIpyData = IpyGameDataPY.GetIpyGameData("ActGarbageTask", taskID)
-        if not taskIpyData:
-            continue
-        maxFinishCount = taskIpyData.GetFinishTimeMax()
-        maxValue = ChConfig.Def_UpperLimit_DWord
-        if maxFinishCount:
-            maxValue = min(maxValue, taskIpyData.GetFinishNeedValue() * maxFinishCount)
-            
-        curValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GarbageTaskValue % (actNum, taskID))
-        updValue = min(curValue + addValue, maxValue)
-        if curValue >= maxValue:
-            #GameWorld.DebugLog("该垃圾分类活动任务已达到最大进度值!actNum=%s,taskID=%s,curValue(%s) >= maxValue(%s)" 
-            #                   % (actNum, taskID, curValue, maxValue))
-            continue
-        
-        #GameWorld.DebugLog("增加垃圾分类活动任务进度: actNum=%s,taskID=%s,curValue=%s,addValue=%s,updValue=%s" 
-        #                   % (actNum, taskID, curValue, addValue, updValue))
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GarbageTaskValue % (actNum, taskID), updValue)
-        
-        # 完成时自动产生垃圾
-        if taskIpyData.GetAutoProduce():
-            giveItemList = __DoCheckFinishGarbageTask(curPlayer, actNum, taskID, taskIpyData, isTJG)
-            if giveItemList:
-                giveGarbageItemList += giveItemList
-                continue
-            
-        Sync_GarbageTaskInfo(curPlayer, actNum, taskID)
-        
-    return giveGarbageItemList
-
-def __DoCheckFinishGarbageTask(curPlayer, actNum, taskID, taskIpyData=None, isTJG=False):
-    ## 检查完成垃圾收集任务
-    
-    if not taskIpyData:
-        taskIpyData = IpyGameDataPY.GetIpyGameData("ActGarbageTask", taskID)
-    if not taskIpyData:
-        return
-    curFinishCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GarbageTaskFinishCount % (actNum, taskID))
-    maxFinishCount = taskIpyData.GetFinishTimeMax()
-    if maxFinishCount and curFinishCount >= maxFinishCount:
-        GameWorld.DebugLog("该垃圾分类活动任务已达到最大完成次数!actNum=%s,taskID=%s,curFinishCount=%s" % (actNum, taskID, curFinishCount))
-        return
-    
-    curValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GarbageTaskValue % (actNum, taskID))
-    updFinishCount = curValue / taskIpyData.GetFinishNeedValue()
-    if maxFinishCount:
-        updFinishCount = min(maxFinishCount, updFinishCount)
-    addFinishCount = updFinishCount - curFinishCount
-    if addFinishCount <= 0:
-        #GameWorld.DebugLog("垃圾分类活动任务未完成,无法领取!actNum=%s,taskID=%s,curValue=%s,curFinishCount=%s,updFinishCount=%s" 
-        #                   % (actNum, taskID, curValue, curFinishCount, updFinishCount))
-        return
-    
-    # 给垃圾收集奖励
-    giveItemDict = {}
-    rateList = taskIpyData.GetProduceGarbageRateList()
-    for _ in xrange(addFinishCount):
-        itemInfo = GameWorld.GetResultByRandomList(rateList)
-        if not itemInfo:
-            continue
-        itemID, itemCount, isAuctionItem = itemInfo
-        befItemCount = giveItemDict[itemID][1] if itemID in giveItemDict else 0
-        giveItemDict[itemID] = [itemID, befItemCount + itemCount, isAuctionItem]
-    giveItemList = giveItemDict.values()
-    
-    if not giveItemList:
-        return
-    
-    #此功能暂不验证背包
-    #if not ItemControler.CheckPackSpaceEnough(curPlayer, giveItemList):
-    #    return
-    
-    #GameWorld.DebugLog("垃圾分类活动任务完成,给奖励! actNum=%s,taskID=%s,curValue=%s,curFinishCount=%s,addFinishCount=%s,updFinishCount=%s" 
-    #                   % (actNum, taskID, curValue, curFinishCount, addFinishCount, updFinishCount))
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GarbageTaskFinishCount % (actNum, taskID), updFinishCount)
-    
-    if not isTJG:
-        for itemID, itemCnt, isAuctionItem in giveItemList:
-            ItemControler.GivePlayerItem(curPlayer, itemID, itemCnt, isAuctionItem, [])
-            
-    Sync_GarbageTaskInfo(curPlayer, actNum, taskID)
-    return giveItemList
-
-def OnGetGuajiAwardItemDict(curPlayer, awardSeconds, useUnsecond):
-    ## 获取挂机收益
-        
-    dropItemCountDict = {}
-    guajiAwardSet = IpyGameDataPY.GetFuncEvalCfg("GarbageSorting", 3) # 挂机收益设置 x秒|x次执行数值4
-    if not guajiAwardSet:
-        return dropItemCountDict
-    doSeconds, doCount = guajiAwardSet
-    
-    dropRateList = IpyGameDataPY.GetFuncEvalCfg("GarbageSorting", 4) # 挂机收益概率饼图 [[概率, [物品ID,个数,是否拍品]], ...]
-    
-    for actInfo in PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_GarbageSorting, {}).values():
-        actNum = actInfo.get(ShareDefine.ActKey_ActNum, 0)
-        
-        if not actInfo.get(ShareDefine.ActKey_State):
-            continue
-        
-        if useUnsecond:
-            unSeconds = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GarbageGJSeconds % (actNum))
-            awardSeconds += unSeconds
-            
-            canDoCount = awardSeconds / doSeconds
-            killCount = canDoCount * doCount
-            
-            updUnSeconds = awardSeconds % doSeconds
-            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GarbageGJSeconds % (actNum), updUnSeconds)
-            GameWorld.DebugLog("    挂机垃圾分类: actNum=%s,awardSeconds=%s,canDoCount=%s,killCount=%s,unSeconds=%s,updUnSeconds=%s" 
-                               % (actNum, awardSeconds, canDoCount, killCount, unSeconds, updUnSeconds))
-        else:
-            canDoCount = awardSeconds / doSeconds
-            killCount = canDoCount * doCount
-            GameWorld.DebugLog("    挂机垃圾分类: actNum=%s,awardSeconds=%s,canDoCount=%s,killCount=%s" 
-                               % (actNum, awardSeconds, canDoCount, killCount))
-        if killCount <= 0:
-            continue
-        
-        preRate = 0
-        maxRate = dropRateList[-1][0]
-        for rateInfo in dropRateList:
-            rate, dropItemInfo = rateInfo
-            curRate = rate - preRate
-            if not curRate:
-                break
-            preRate = rate
-            if not dropItemInfo:
-                continue
-            totalRate = curRate * killCount # 总概率
-            dropCount = totalRate / maxRate # 可掉落数
-            rateEx = totalRate % maxRate # 剩余概率
-            if GameWorld.CanHappen(rateEx, maxRate):
-                dropCount += 1
-            if not dropCount:
-                continue
-            dropItemID, itemCount, _ = dropItemInfo
-            dropItemCount = itemCount * dropCount
-            
-            dropItemCountDict[dropItemID] = dropItemCountDict.get(dropItemID, 0) + dropItemCount
-            GameWorld.DebugLog("    挂机垃圾分类产出: actNum=%s,dropItemID=%s,dropCount=%s,dropItemCount=%s,curRate=%s,totalRate=%s" 
-                               % (actNum, dropItemID, dropCount, dropItemCount, curRate, totalRate))
-            
-    return dropItemCountDict
-
-#// AA 14 垃圾分类活动分类垃圾 #tagCMActGarbageSorting
-#
-#struct    tagCMActGarbageSorting
-#{
-#    tagHead        Head;
-#    BYTE        ActNum;        //活动编号
-#    BYTE        GarbageSortingType;    //垃圾分类类型,即属于哪种垃圾
-#    BYTE        ItemIndexCount;        //垃圾背包中的物品索引数
-#    BYTE        ItemIndexList[ItemIndexCount];    //垃圾背包中的物品索引列表
-#};
-def OnActGarbageSorting(index, clientData, tick):
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    actNum = clientData.ActNum
-    sortingType = clientData.GarbageSortingType
-    itemIndexList = clientData.ItemIndexList
-    
-    playerID = curPlayer.GetPlayerID()
-    
-    GameWorld.DebugLog("垃圾分类投放: sortingType=%s,itemIndexList=%s" % (sortingType, itemIndexList), playerID)
-    
-    isRight = 1
-    environmentValueInfo = IpyGameDataPY.GetFuncEvalCfg("GarbageSorting", 2)
-    addEnvValueTotal = 0
-    garbagePack = curPlayer.GetItemManager().GetPack(ShareDefine.rptGarbage)
-    for index in itemIndexList:
-        if index >= garbagePack.GetCount():
-            continue
-        curItem = garbagePack.GetAt(index)
-        if not ItemCommon.CheckItemCanUse(curItem):
-            continue
-        itemID = curItem.GetItemTypeID()
-        itemSortingType = curItem.GetEffectByIndex(0).GetEffectValue(0)
-        if sortingType == itemSortingType:
-            delCount = curItem.GetCount()
-            addEnvValue = environmentValueInfo[0] * delCount
-        else:
-            delCount = 1 # 错误只扣除1一个
-            addEnvValue = environmentValueInfo[1] * delCount
-            isRight = 0
-            
-        ItemControler.SetItemCount(curItem, max(0, curItem.GetCount() - delCount))
-        addEnvValueTotal += addEnvValue
-        GameWorld.DebugLog("    index=%s,itemID=%s,itemSortingType=%s,delCount=%s,addEnvValue=%s" 
-                           % (index, itemID, itemSortingType, delCount, addEnvValue), playerID)
-        
-    if not addEnvValueTotal:
-        return
-    
-    PlayerControl.GiveMoney(curPlayer, ShareDefine.TYPE_Price_Environment, addEnvValueTotal, isSysHint=False)
-    actEnvValueTotal = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GarbageEnvironmentValue % actNum) + addEnvValueTotal
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GarbageEnvironmentValue % actNum, actEnvValueTotal)    
-    GameWorld.DebugLog("    addEnvValueTotal=%s,actEnvValueTotal=%s,curEnvValue=%s" 
-                       % (addEnvValueTotal, actEnvValueTotal, PlayerControl.GetMoney(curPlayer, ShareDefine.TYPE_Price_Environment)), playerID)
-    
-    PlayerBillboard.UpdatePlayerBillboard(curPlayer, ShareDefine.Def_BT_Environment, actEnvValueTotal)
-    
-    # 通知结果
-    clientPack = ChPyNetSendPack.tagMCActGarbageSortingResult()
-    clientPack.ActNum = actNum
-    clientPack.GarbageSortingType = sortingType
-    clientPack.IsRight = isRight
-    clientPack.AddEnvValue = addEnvValueTotal
-    clientPack.HisEnvValueTotal = actEnvValueTotal
-    NetPackCommon.SendFakePack(curPlayer, clientPack)
-    return
-
-
-#// AA 15 垃圾分类活动收集已完成的任务垃圾 #tagCMActGarbageGetTaskAward
-#
-#struct    tagCMActGarbageGetTaskAward
-#{
-#    tagHead        Head;
-#    BYTE        ActNum;        //活动编号
-#    BYTE        GarbageTaskID;    //垃圾任务ID
-#};
-def OnActGarbageGetTaskAward(index, clientData, tick):
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    actNum = clientData.ActNum
-    taskID = clientData.GarbageTaskID
-    __DoCheckFinishGarbageTask(curPlayer, actNum, taskID)
-    return
-
-def Sync_GarbageTaskInfo(curPlayer, actNum, taskID=0):
-    ## 通知垃圾收集任务信息
-    syncTaskIDList = [taskID] if taskID else ChConfig.GarbageTaskList
-    clientPack = ChPyNetSendPack.tagMCActGarbageTaskInfo()
-    clientPack.ActNum = actNum
-    clientPack.HisEnvValueTotal = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GarbageEnvironmentValue % actNum)
-    clientPack.GarbageTaskList = []
-    for taskID in syncTaskIDList:
-        task = ChPyNetSendPack.tagMCActGarbageTask()
-        task.GarbageTaskID = taskID
-        task.GarbageTaskValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GarbageTaskValue % (actNum, taskID))
-        task.GarbageTaskFinishCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GarbageTaskFinishCount % (actNum, taskID))
-        clientPack.GarbageTaskList.append(task)
-    clientPack.GarbageTaskCount = len(clientPack.GarbageTaskList)
-    NetPackCommon.SendFakePack(curPlayer, clientPack)
-    return
-
-def Sync_GarbageSortingActionInfo(curPlayer, actNum):
-    ## 通知活动信息
-    
-    actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_GarbageSorting, actNum)
-    if not actInfo.get(ShareDefine.ActKey_State):
-        return
-    
-    cfgID = actInfo.get(ShareDefine.ActKey_CfgID)
-    ipyData = IpyGameDataPY.GetIpyGameData("ActGarbageSorting", cfgID)
-    if not ipyData:
-        return
-    
-    startDateStr, endDateStr = GameWorld.GetOperationActionDateStr(ipyData)
-    clientPack = ChPyNetSendPack.tagMCActGarbageSortingInfo()
-    clientPack.ActNum = actNum
-    clientPack.StartDate = startDateStr
-    clientPack.EndtDate = endDateStr
-    clientPack.LimitLV = ipyData.GetLVLimit()
-    clientPack.ResetType = ipyData.GetResetType()
-    NetPackCommon.SendFakePack(curPlayer, clientPack)
-    return
-
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActGubao.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActGubao.py
deleted file mode 100644
index db7456f..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActGubao.py
+++ /dev/null
@@ -1,351 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-##@package Player.PlayerActGubao
-#
-# @todo:古宝养成活动
-# @author hxp
-# @date 2024-08-12
-# @version 1.0
-#
-# 详细描述: 古宝养成活动
-#
-#-------------------------------------------------------------------------------
-#"""Version = 2024-08-12 19:30"""
-#-------------------------------------------------------------------------------
-
-import PyGameData
-import ShareDefine
-import PlayerControl
-import IpyGameDataPY
-import CrossRealmPlayer
-import FunctionNPCCommon
-import PlayerBillboard
-import ChPyNetSendPack
-import PlayerZhanling
-import NetPackCommon
-import GameWorld
-import ChConfig
-
-def OnMixFirstLogin(curPlayer):
-    
-    for actInfo in PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_Gubao, {}).values():
-        actNum = actInfo.get(ShareDefine.ActKey_ActNum, 0)
-        if not actInfo.get(ShareDefine.ActKey_State):
-            continue
-        score = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActGubaoScore % actNum)
-        if not score:
-            continue
-        GameWorld.Log("古宝养成合服首登同步积分榜单: actNum=%s,score=%s" % (actNum, score), curPlayer.GetPlayerID())
-        PlayerBillboard.UpdatePlayerBillboard(curPlayer, ShareDefine.Def_BT_GubaoScore, score, autoSort=True)
-        break
-    
-    return
-
-def OnPlayerLogin(curPlayer):
-    
-    for actInfo in PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_Gubao, {}).values():
-        actNum = actInfo.get(ShareDefine.ActKey_ActNum, 0)
-        isReset = __CheckPlayerGubaoAction(curPlayer, actNum)
-        if not isReset:
-            # 活动中同步活动信息
-            if actInfo.get(ShareDefine.ActKey_State):
-                Sync_GubaoActionInfo(curPlayer, actNum)
-                Sync_GubaoPlayerInfo(curPlayer, actNum)
-                
-    if not __CheckPlayerCrossActGubao(curPlayer):
-        Sync_CrossActGubaoActionInfo(curPlayer)
-        
-    return
-
-def RefreshGubaoActionInfo(actNum):
-    ## 收到GameServer同步的活动信息,刷新活动信息
-    playerManager = GameWorld.GetPlayerManager()
-    for index in xrange(playerManager.GetPlayerCount()):
-        curPlayer = playerManager.GetPlayerByIndex(index)
-        if not GameWorld.IsNormalPlayer(curPlayer):
-            continue
-        __CheckPlayerGubaoAction(curPlayer, actNum)
-    return
-
-def __CheckPlayerGubaoAction(curPlayer, actNum):
-    ## 检查玩家活动数据信息
-    
-    playerID = curPlayer.GetPlayerID()
-    actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_Gubao, actNum)
-    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_ActGubaoID % actNum) # 玩家身上的活动ID
-    
-    # 活动ID 相同的话不处理
-    if actID == playerActID:
-        GameWorld.DebugLog("古宝养成活动ID不变,不处理!actNum=%s,actID=%s" % (actNum, actID), playerID)
-        return
-    
-    GameWorld.DebugLog("古宝养成重置! actNum=%s,actID=%s,playerActID=%s,state=%s,cfgID=%s" 
-                       % (actNum, actID, playerActID, state, cfgID), playerID)
-    score = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActGubaoScore % actNum)
-    PlayerZhanling.ResetZhanling(curPlayer, PlayerZhanling.ZhanlingType_GubaoTrain, score)
-    
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ActGubaoID % actNum, actID)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ActGubaoScore % actNum, 0)
-    
-    if state:
-        cfgID = actInfo.get(ShareDefine.ActKey_CfgID)
-        ipyData = IpyGameDataPY.GetIpyGameData("ActGubao", cfgID)
-        if ipyData and ipyData.GetActShopType():
-            FunctionNPCCommon.ResetShopItemBuyCountByShopType(curPlayer, [ipyData.GetActShopType()])
-        Sync_GubaoActionInfo(curPlayer, actNum)
-        Sync_GubaoPlayerInfo(curPlayer, actNum)
-    return True
-
-def RefreshCrossActGubaoInfo():
-    ## 收到GameServer同步的活动信息,刷新活动信息
-    playerManager = GameWorld.GetPlayerManager()
-    for index in xrange(playerManager.GetPlayerCount()):
-        curPlayer = playerManager.GetPlayerByIndex(index)
-        if not GameWorld.IsNormalPlayer(curPlayer):
-            continue
-        __CheckPlayerCrossActGubao(curPlayer)
-        
-    return
-
-def __CheckPlayerCrossActGubao(curPlayer):
-    
-    playerID = curPlayer.GetPlayerID()
-    
-    actInfo = CrossRealmPlayer.GetPlayerCrossActInfo(curPlayer, ShareDefine.CrossActName_Gubao)
-    cfgID = actInfo.get(ShareDefine.ActKey_CfgID, 0)
-    actID = actInfo.get(ShareDefine.ActKey_ID, 0)
-    state = actInfo.get(ShareDefine.ActKey_State, 0)
-    dayIndex = actInfo.get(ShareDefine.ActKey_DayIndex, 0)
-    
-    playerActID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CA_GubaoID) # 玩家身上的活动ID
-    
-    # 活动ID 相同的话不处理
-    if actID == playerActID:
-        GameWorld.DebugLog("跨服古宝养成活动ID不变,不处理!cfgID=%s,dayIndex=%s,actID=%s" % (cfgID, dayIndex, actID), playerID)   
-        return
-    GameWorld.DebugLog("跨服古宝养成活动重置! cfgID=%s,actID=%s,playerActID=%s,state=%s" % (cfgID, actID, playerActID, state), playerID)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CA_GubaoID, actID)
-    
-    if not state:
-        CrossRealmPlayer.NotifyCrossActEnd(curPlayer, ShareDefine.CrossActName_Gubao)
-        
-    Sync_CrossActGubaoActionInfo(curPlayer)
-    return True
-
-def OnGubaoCost(curPlayer, costPieceInfo, costItemList):
-    
-    playerID = curPlayer.GetPlayerID()
-    for actInfo in PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_Gubao, {}).values():
-        actNum = actInfo.get(ShareDefine.ActKey_ActNum, 0)
-        if not actInfo.get(ShareDefine.ActKey_State):
-            continue
-        
-        cfgID = actInfo.get(ShareDefine.ActKey_CfgID)
-        ipyData = IpyGameDataPY.GetIpyGameData("ActGubao", cfgID)
-        if not ipyData:
-            continue
-        
-        if ipyData.GetIsRelationCrossAct():
-            crossActInfo = CrossRealmPlayer.GetPlayerCrossActInfo(curPlayer, ShareDefine.CrossActName_Gubao)
-            if crossActInfo.get(ShareDefine.ActKey_State, 0):
-                if crossActInfo.get(ShareDefine.ActKey_StateJoin) != ShareDefine.ActStateJoin_Start:
-                    GameWorld.Log("跨服古宝养成非参与活动中: actNum=%s" % actNum, playerID)
-                    continue
-        else:
-            if actInfo.get(ShareDefine.ActKey_StateJoin) != ShareDefine.ActStateJoin_Start:
-                GameWorld.Log("古宝养成非参与活动中: actNum=%s" % actNum, playerID)
-                continue
-            
-        addGubaoScore = 0
-        pieceQualityScoreDict = IpyGameDataPY.GetFuncEvalCfg("GubaoAct", 1, {})
-        for pieceID, pieceCount in costPieceInfo.items():
-            gbIpyData = IpyGameDataPY.GetIpyGameData("Gubao", pieceID)
-            if not gbIpyData:
-                continue
-            quality = gbIpyData.GetGubaoQuality()
-            if str(quality) not in pieceQualityScoreDict:
-                continue
-            qualityScore = pieceQualityScoreDict[str(quality)] * pieceCount
-            addGubaoScore += qualityScore
-            GameWorld.DebugLog("古宝活动碎片积分统计: actNum=%s,pieceID=%s,quality=%s,pieceCount=%s,qualityScore=%s, %s" 
-                               % (actNum, pieceID, quality, pieceCount, qualityScore, addGubaoScore))
-            
-        otherAddScore = IpyGameDataPY.GetFuncCfg("GubaoAct", 2)
-        for itemID, costCount in costItemList:
-            otherScore = costCount * otherAddScore
-            addGubaoScore += otherScore
-            GameWorld.DebugLog("古宝活动其他积分统计: actNum=%s,itemID=%s,costCount=%s,otherScore=%s, %s" 
-                               % (actNum, itemID, costCount, otherScore, addGubaoScore))
-            
-        if addGubaoScore <= 0:
-            continue
-        
-        AddPlayerScore(curPlayer, actNum, addGubaoScore, ipyData.GetIsRelationCrossAct())
-        
-    return
-
-def AddPlayerScore(curPlayer, actNum, addScore, isRelationCrossAct):
-    if addScore <= 0:
-        return 0
-    score = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActGubaoScore % actNum)
-    updScore = score + addScore
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ActGubaoScore % actNum, updScore)
-    GameWorld.DebugLog("古宝活动增加积分: actNum=%s,addScore=%s,updScore=%s" % (actNum, addScore, updScore))
-    Sync_GubaoPlayerInfo(curPlayer, actNum)
-    PlayerControl.GiveMoney(curPlayer, ShareDefine.TYPE_Price_GubaoTrainScore, addScore, "ActGubaoTrain")
-    PlayerBillboard.UpdatePlayerBillboard(curPlayer, ShareDefine.Def_BT_GubaoScore, updScore, autoSort=True)
-    SendToGameServer_Gubao(curPlayer, "AddGubaoScore", [addScore, updScore, isRelationCrossAct])
-    return updScore
-
-def SendToGameServer_Gubao(curPlayer, msgType, dataMsg=""):
-    playerID = curPlayer.GetPlayerID()
-    msgList = str([msgType, dataMsg])
-    GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(playerID, 0, 0, "ActGubao", msgList, len(msgList))
-    GameWorld.Log("古宝养成发送GameServer: %s, %s" % (msgType, dataMsg), playerID)
-    return
-
-def GetActGubaoTrainScore(curPlayer):
-    ## 获取活动中养成积分
-    actScore = 0
-    for actInfo in PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_Gubao, {}).values():
-        actNum = actInfo.get(ShareDefine.ActKey_ActNum, 0)
-        if not actInfo.get(ShareDefine.ActKey_State):
-            continue
-        score = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActGubaoScore % actNum)
-        actScore = max(score, actScore)
-    return actScore
-
-def Sync_GubaoActionInfo(curPlayer, actNum):
-    ## 通知活动信息
-    
-    actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_Gubao, actNum)
-    if not actInfo.get(ShareDefine.ActKey_State):
-        return
-    
-    cfgID = actInfo.get(ShareDefine.ActKey_CfgID)
-    ipyData = IpyGameDataPY.GetIpyGameData("ActGubao", cfgID)
-    if not ipyData:
-        return
-    
-    personalTempID = ipyData.GetPersonalTemplateID()
-    personalTempIpyDataList = IpyGameDataPY.GetIpyGameDataList("ActGubaoBillTemp", personalTempID) if personalTempID else []
-    
-    startDateStr, endDateStr = GameWorld.GetOperationActionDateStr(ipyData)
-    
-    clientPack = ChPyNetSendPack.tagMCActGubaoInfo()
-    clientPack.ActNum = actNum
-    clientPack.StartDate = startDateStr
-    clientPack.EndtDate = endDateStr
-    clientPack.JoinStartTime = ipyData.GetJoinStartTime()
-    clientPack.JoinEndTime = ipyData.GetJoinEndTime()
-    clientPack.LimitLV = ipyData.GetLVLimit()
-    clientPack.ShopType = ipyData.GetActShopType()
-    
-    clientPack.PersonalBillboardInfoList = __GetTempRankBillPackList(personalTempIpyDataList)
-    clientPack.PersonalBillCount = len(clientPack.PersonalBillboardInfoList)
-    NetPackCommon.SendFakePack(curPlayer, clientPack)
-    return
-
-def Sync_GubaoPlayerInfo(curPlayer, actNum):
-    
-    actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_Gubao, actNum)
-    if not actInfo.get(ShareDefine.ActKey_State):
-        return
-    
-    clientPack = ChPyNetSendPack.tagMCActGubaoPlayerInfo()
-    clientPack.ActNum = actNum
-    clientPack.Score = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActGubaoScore % actNum)
-    NetPackCommon.SendFakePack(curPlayer, clientPack)
-    return
-
-def Sync_CrossActGubaoActionInfo(curPlayer):
-    ## 通知活动信息
-    actInfo = CrossRealmPlayer.GetPlayerCrossActInfo(curPlayer, ShareDefine.CrossActName_Gubao)
-    if not actInfo:
-        return
-    
-    if not actInfo.get(ShareDefine.ActKey_State):
-        return
-    
-    ipyDataDict = actInfo.get(ShareDefine.ActKey_IpyDataInfo, {})
-    if not ipyDataDict:
-        return
-    
-    personalTempID = ipyDataDict.get("PersonalTemplateID", 0)
-    personalTempIpyDataList = IpyGameDataPY.GetIpyGameDataList("ActGubaoBillTemp", personalTempID) if personalTempID else []
-    
-    clientPack = ChPyNetSendPack.tagMCCrossActGubaoInfo()
-    clientPack.ServerIDRangeInfo = str(actInfo.get(ShareDefine.ActKey_ServerIDRangeList, []))
-    clientPack.ServerInfoLen = len(clientPack.ServerIDRangeInfo)
-    clientPack.GroupValue1 = ipyDataDict.get("ZoneID", 0)
-    clientPack.StartDate = ipyDataDict.get("StartDate", "")
-    clientPack.EndtDate = ipyDataDict.get("EndDate", "")
-    clientPack.JoinStartTime = ipyDataDict.get("JoinStartTime", "")
-    clientPack.JoinEndTime = ipyDataDict.get("JoinEndTime", "")
-    
-    clientPack.PersonalBillboardInfoList = __GetTempRankBillPackList(personalTempIpyDataList)
-    clientPack.PersonalBillCount = len(clientPack.PersonalBillboardInfoList)
-    
-    NetPackCommon.SendFakePack(curPlayer, clientPack)
-    return
-
-def __GetTempRankBillPackList(ipyDataList):
-    packBillList = []
-    if not ipyDataList:
-        return packBillList
-    for tempIpyData in ipyDataList:
-        rankInfo = ChPyNetSendPack.tagMCActGubaoBillard()
-        rankInfo.Rank = tempIpyData.GetRank()
-        
-        rankInfo.AwardItemList = []
-        awardItemList = tempIpyData.GetAwardItemList()
-        for itemID, itemCount, isAuctionItem in awardItemList:
-            item = ChPyNetSendPack.tagMCActGubaoItem()
-            item.Clear()
-            item.ItemID = itemID
-            item.ItemCount = itemCount
-            item.IsBind = isAuctionItem
-            rankInfo.AwardItemList.append(item)
-        rankInfo.Count = len(rankInfo.AwardItemList)
-        
-#        rankInfo.MemAwardItemList = []
-#        memAwardItemList = tempIpyData.GetMemAwardItemList()
-#        for itemID, itemCount, isAuctionItem in memAwardItemList:
-#            item = ChPyNetSendPack.tagMCActGubaoItem()
-#            item.Clear()
-#            item.ItemID = itemID
-#            item.ItemCount = itemCount
-#            item.IsBind = isAuctionItem
-#            rankInfo.MemAwardItemList.append(item)
-#        rankInfo.MemCount = len(rankInfo.MemAwardItemList)
-        
-        rankInfo.NeedScore = tempIpyData.GetNeedScore()
-        rankInfo.AwardItemExList = []
-        scoreAwardEx = tempIpyData.GetScoreAwardEx()
-        scoreExList = scoreAwardEx.keys()
-        scoreExList.sort()
-        for scoreEx in scoreExList:
-            itemExList = scoreAwardEx[scoreEx]
-            awardEx = ChPyNetSendPack.tagMCActGubaoAwardEx()
-            awardEx.NeedScore = scoreEx
-            awardEx.AwardItemList = []
-            for itemID, itemCount, isAuctionItem in itemExList:
-                item = ChPyNetSendPack.tagMCActGubaoItem()
-                item.Clear()
-                item.ItemID = itemID
-                item.ItemCount = itemCount
-                item.IsBind = isAuctionItem
-                awardEx.AwardItemList.append(item)
-            awardEx.Count = len(awardEx.AwardItemList)
-            
-            rankInfo.AwardItemExList.append(awardEx)
-        rankInfo.CountEx = len(rankInfo.AwardItemExList)
-        
-        packBillList.append(rankInfo)
-    return packBillList
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActHorsePetFeast.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActHorsePetFeast.py
deleted file mode 100644
index 67fc970..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActHorsePetFeast.py
+++ /dev/null
@@ -1,154 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-##@package Player.PlayerActHorsePetFeast
-#
-# @todo:骑宠盛宴
-# @author hxp
-# @date 2021-05-08
-# @version 1.0
-#
-# 详细描述: 骑宠盛宴
-#
-#-------------------------------------------------------------------------------
-#"""Version = 2021-05-08 17:00"""
-#-------------------------------------------------------------------------------
-
-import ChConfig
-import ShareDefine
-import IpyGameDataPY
-import ChPyNetSendPack
-import NetPackCommon
-import PyGameData
-import GameWorld
-import NPCCommon
-
-def OnLogin(curPlayer):
-    
-    for actInfo in PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_HorsePetFeast, {}).values():
-        actNum = actInfo.get(ShareDefine.ActKey_ActNum, 0)
-        if actInfo.get(ShareDefine.ActKey_CfgID):
-            SyncHorsePetFeastInfo(curPlayer, actNum)
-            
-    return
-
-def RefreshOperationAction_HorsePetFeast(actNum):
-    actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_HorsePetFeast, actNum)
-    if not actInfo.get(ShareDefine.ActKey_CfgID):
-        return
-    
-    playerManager = GameWorld.GetPlayerManager()
-    for i in xrange(playerManager.GetPlayerCount()):
-        curPlayer = playerManager.GetPlayerByIndex(i)
-        if not GameWorld.IsNormalPlayer(curPlayer):
-            continue
-        SyncHorsePetFeastInfo(curPlayer, actNum)
-        
-    return
-
-def SyncHorsePetFeastInfo(curPlayer, actNum):
-    actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_HorsePetFeast, actNum)
-    #state = actInfo.get(ShareDefine.ActKey_State)
-    cfgID = actInfo.get(ShareDefine.ActKey_CfgID)
-    if not cfgID:
-        return
-    
-    actIpyData = IpyGameDataPY.GetIpyGameData("ActHorsePetFeast", cfgID)
-    if not actIpyData:
-        return
-    
-    startTimeList = actIpyData.GetStartTimeList()
-    endTimeList = actIpyData.GetEndTimeList()
-    if len(startTimeList) != len(endTimeList):
-        return
-    
-    startDateStr, endDateStr = GameWorld.GetOperationActionDateStr(actIpyData)
-    actInfo = ChPyNetSendPack.tagMCActHorsePetFeastInfo()
-    actInfo.Clear()
-    actInfo.StartDate = startDateStr
-    actInfo.EndtDate = endDateStr
-    actInfo.ActTimeList = []
-    for i, startTime in enumerate(startTimeList):
-        timeObj = ChPyNetSendPack.tagMCActHorsePetFeastTime()
-        timeObj.StartTime = startTime
-        timeObj.EndtTime = endTimeList[i]
-        actInfo.ActTimeList.append(timeObj) 
-    actInfo.TimeCount = len(actInfo.ActTimeList)
-    actInfo.LimitLV = actIpyData.GetLVLimit()
-    NetPackCommon.SendFakePack(curPlayer, actInfo)
-    return
-
-
-def DoActBossOnKilledLogic(npcRankHurtMgr):
-    ## 活动boss被击杀
-    #  @param rankHurtList: NPCHurtMgr.PlayerRankHurtList
-    
-    npcID = npcRankHurtMgr.npcID
-    
-    # 受奖励次数影响的物品掉落概率 {NPCID:[[物品ID,个数, 是否拍品, 掉落万分率], ...], ...},根据奖励次数随机多次,注意该配置非饼图,每种物品都会独立判断
-    dropByPlayerCountInfo = IpyGameDataPY.GetFuncEvalCfg("HorsePetFeast", 2, {})
-    if npcID not in dropByPlayerCountInfo:
-        return
-    # 不受奖励次数影响的物品掉落概率 {NPCID:[[物品ID,个数, 是否拍品, 掉落万分率], ...], ...},仅随机一次,注意该配置非饼图,每种物品都会独立判断
-    dropOneChanceInfo = IpyGameDataPY.GetFuncEvalCfg("HorsePetFeast", 3, {})
-    
-    GameWorld.Log("骑宠盛宴活动boss被击杀: npcID=%s" % (npcID))
-    
-    curNPC = npcRankHurtMgr.curNPC
-    
-    awardPlayerDict = {}
-    copyPlayerManager = GameWorld.GetMapCopyPlayerManager()
-    for index in xrange(npcRankHurtMgr.GetHurtCount()):
-        hurtObj = npcRankHurtMgr.GetHurtAt(index)
-        if hurtObj.GetValueType() != ChConfig.Def_NPCHurtTypePlayer:
-            continue
-        playerID = hurtObj.GetValueID()
-        hurtPlayer = copyPlayerManager.FindPlayerByID(playerID)
-        if not hurtPlayer:
-            continue
-        if curNPC and not hurtPlayer.CanSeeOther(curNPC):
-            GameWorld.Log("    伤血玩家不在boss视野内,无法获得奖励!playerPos(%s,%s), npcPos(%s,%s)" 
-                          % (hurtPlayer.GetPosX(), hurtPlayer.GetPosY(), curNPC.GetPosX(), curNPC.GetPosY()))
-            continue
-        awardPlayerDict[playerID] = hurtPlayer
-        
-    awardPlayerIDList = awardPlayerDict.keys()
-    GameWorld.Log("    奖励玩家人数=%s, awardPlayerIDList=%s" % (len(awardPlayerIDList), awardPlayerIDList))
-    if not awardPlayerDict:
-        return
-    awardRandCount = len(awardPlayerIDList)
-    
-    awardRandCountMin, awardRandCountMax = IpyGameDataPY.GetFuncEvalCfg("HorsePetFeast", 1, [])
-    awardRandCount = max(awardRandCountMin, min(awardRandCountMax, awardRandCount))
-    GameWorld.Log("    奖励随机次数: %s" % awardRandCount)
-    
-    dropPosX, dropPosY = curNPC.GetPosX(), curNPC.GetPosY()
-    awardByPlayerCountList = dropByPlayerCountInfo[npcID]
-    awardOneChanceList = dropOneChanceInfo.get(npcID, [])
-    for playerID, hurtPlayer in awardPlayerDict.items():
-        awardItemList = []
-        for itemID, itemCount, isAuctionItem, dropRate in awardByPlayerCountList:
-            dropCountTotal = 0
-            for _ in xrange(awardRandCount):
-                if dropRate < ShareDefine.Def_MaxRateValue and not GameWorld.CanHappen(dropRate):
-                    continue
-                dropCountTotal += itemCount
-            if not dropCountTotal:
-                continue
-            awardItemList.append([itemID, dropCountTotal, isAuctionItem])
-            
-        for itemID, itemCount, isAuctionItem, dropRate in awardOneChanceList:
-            if not GameWorld.CanHappen(dropRate):
-                continue
-            awardItemList.append([itemID, itemCount, isAuctionItem])
-            
-        GameWorld.Log("        玩家掉落: %s" % awardItemList, playerID)
-        if not awardItemList:
-            continue
-        
-        # 直接给物品并展示虚拟掉落
-        NPCCommon.DoGiveItemByVirtualDrop(hurtPlayer, awardItemList, npcID, dropPosX, dropPosY)
-        
-    return
-
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActHorsePetTrain.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActHorsePetTrain.py
deleted file mode 100644
index 6565ef5..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActHorsePetTrain.py
+++ /dev/null
@@ -1,342 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-##@package Player.PlayerActHorsePetTrain
-#
-# @todo:骑宠养成活动
-# @author hxp
-# @date 2024-08-14
-# @version 1.0
-#
-# 详细描述: 骑宠养成活动
-#
-#-------------------------------------------------------------------------------
-#"""Version = 2024-08-14 16:30"""
-#-------------------------------------------------------------------------------
-
-import PyGameData
-import ShareDefine
-import PlayerControl
-import IpyGameDataPY
-import CrossRealmPlayer
-import FunctionNPCCommon
-import PlayerBillboard
-import ChPyNetSendPack
-import PlayerZhanling
-import NetPackCommon
-import PlayerActTask
-import GameWorld
-import ChConfig
-
-def OnMixFirstLogin(curPlayer):
-    
-    for actInfo in PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_HorsePetTrain, {}).values():
-        actNum = actInfo.get(ShareDefine.ActKey_ActNum, 0)
-        if not actInfo.get(ShareDefine.ActKey_State):
-            continue
-        score = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActHorsePetTrainScore % actNum)
-        if not score:
-            continue
-        GameWorld.Log("骑宠养成合服首登同步积分榜单: actNum=%s,score=%s" % (actNum, score), curPlayer.GetPlayerID())
-        PlayerBillboard.UpdatePlayerBillboard(curPlayer, ShareDefine.Def_BT_HorsePetTrainScore, score, autoSort=True)
-        break
-    
-    return
-
-def OnPlayerLogin(curPlayer):
-    
-    for actInfo in PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_HorsePetTrain, {}).values():
-        actNum = actInfo.get(ShareDefine.ActKey_ActNum, 0)
-        isReset = __CheckPlayerHorsePetTrainAction(curPlayer, actNum)
-        if not isReset:
-            # 活动中同步活动信息
-            if actInfo.get(ShareDefine.ActKey_State):
-                Sync_HorsePetTrainActionInfo(curPlayer, actNum)
-                Sync_HorsePetTrainPlayerInfo(curPlayer, actNum)
-                
-    if not __CheckPlayerCrossActHorsePetTrain(curPlayer):
-        Sync_CrossActHorsePetTrainActionInfo(curPlayer)
-        
-    return
-
-def RefreshHorsePetTrainActionInfo(actNum):
-    ## 收到GameServer同步的活动信息,刷新活动信息
-    playerManager = GameWorld.GetPlayerManager()
-    for index in xrange(playerManager.GetPlayerCount()):
-        curPlayer = playerManager.GetPlayerByIndex(index)
-        if not GameWorld.IsNormalPlayer(curPlayer):
-            continue
-        __CheckPlayerHorsePetTrainAction(curPlayer, actNum)
-    return
-
-def __CheckPlayerHorsePetTrainAction(curPlayer, actNum):
-    ## 检查玩家活动数据信息
-    
-    playerID = curPlayer.GetPlayerID()
-    actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_HorsePetTrain, actNum)
-    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_ActHorsePetTrainID % actNum) # 玩家身上的活动ID
-    
-    # 活动ID 相同的话不处理
-    if actID == playerActID:
-        GameWorld.DebugLog("骑宠养成活动ID不变,不处理!actNum=%s,actID=%s" % (actNum, actID), playerID)
-        return
-    
-    GameWorld.DebugLog("骑宠养成活动重置! actNum=%s,actID=%s,playerActID=%s,state=%s,cfgID=%s" 
-                       % (actNum, actID, playerActID, state, cfgID), playerID)
-    score = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActHorsePetTrainScore % actNum)
-    PlayerZhanling.ResetZhanling(curPlayer, PlayerZhanling.ZhanlingType_HorsePetTrain, score)
-    
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ActHorsePetTrainID % actNum, actID)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ActHorsePetTrainScore % actNum, 0)
-    
-    if state:
-        cfgID = actInfo.get(ShareDefine.ActKey_CfgID)
-        ipyData = IpyGameDataPY.GetIpyGameData("ActHorsePetTrain", cfgID)
-        if ipyData and ipyData.GetActShopType():
-            FunctionNPCCommon.ResetShopItemBuyCountByShopType(curPlayer, [ipyData.GetActShopType()])
-        Sync_HorsePetTrainActionInfo(curPlayer, actNum)
-        Sync_HorsePetTrainPlayerInfo(curPlayer, actNum)
-    return True
-
-def RefreshCrossActHorsePetTrainInfo():
-    ## 收到GameServer同步的活动信息,刷新活动信息
-    playerManager = GameWorld.GetPlayerManager()
-    for index in xrange(playerManager.GetPlayerCount()):
-        curPlayer = playerManager.GetPlayerByIndex(index)
-        if not GameWorld.IsNormalPlayer(curPlayer):
-            continue
-        __CheckPlayerCrossActHorsePetTrain(curPlayer)
-        
-    return
-
-def __CheckPlayerCrossActHorsePetTrain(curPlayer):
-    
-    playerID = curPlayer.GetPlayerID()
-    
-    actInfo = CrossRealmPlayer.GetPlayerCrossActInfo(curPlayer, ShareDefine.CrossActName_HorsePetTrain)
-    cfgID = actInfo.get(ShareDefine.ActKey_CfgID, 0)
-    actID = actInfo.get(ShareDefine.ActKey_ID, 0)
-    state = actInfo.get(ShareDefine.ActKey_State, 0)
-    dayIndex = actInfo.get(ShareDefine.ActKey_DayIndex, 0)
-    
-    playerActID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CA_HorsePetTrainID) # 玩家身上的活动ID
-    
-    # 活动ID 相同的话不处理
-    if actID == playerActID:
-        GameWorld.DebugLog("跨服骑宠养成活动ID不变,不处理!cfgID=%s,dayIndex=%s,actID=%s" % (cfgID, dayIndex, actID), playerID)   
-        return
-    GameWorld.DebugLog("跨服骑宠养成活动重置! cfgID=%s,actID=%s,playerActID=%s,state=%s" % (cfgID, actID, playerActID, state), playerID)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CA_HorsePetTrainID, actID)
-    
-    if not state:
-        CrossRealmPlayer.NotifyCrossActEnd(curPlayer, ShareDefine.CrossActName_HorsePetTrain)
-        
-    Sync_CrossActHorsePetTrainActionInfo(curPlayer)
-    return True
-
-def OnHorsePetTrainCost(curPlayer, costItemDict):
-    
-    playerID = curPlayer.GetPlayerID()
-    for actInfo in PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_HorsePetTrain, {}).values():
-        actNum = actInfo.get(ShareDefine.ActKey_ActNum, 0)
-        if not actInfo.get(ShareDefine.ActKey_State):
-            continue
-        
-        cfgID = actInfo.get(ShareDefine.ActKey_CfgID)
-        ipyData = IpyGameDataPY.GetIpyGameData("ActHorsePetTrain", cfgID)
-        if not ipyData:
-            continue
-        
-        if ipyData.GetIsRelationCrossAct():
-            crossActInfo = CrossRealmPlayer.GetPlayerCrossActInfo(curPlayer, ShareDefine.CrossActName_HorsePetTrain)
-            if crossActInfo.get(ShareDefine.ActKey_State, 0):
-                if crossActInfo.get(ShareDefine.ActKey_StateJoin) != ShareDefine.ActStateJoin_Start:
-                    GameWorld.Log("跨服骑宠养成非参与活动中: actNum=%s" % actNum, playerID)
-                    continue
-        else:
-            if actInfo.get(ShareDefine.ActKey_StateJoin) != ShareDefine.ActStateJoin_Start:
-                GameWorld.Log("骑宠养成非参与活动中: actNum=%s" % actNum, playerID)
-                continue
-            
-        addActScore = 0
-        itemScoreDict = IpyGameDataPY.GetFuncEvalCfg("HorsePetTrainAct", 1, {})
-        for itemID, costCount in costItemDict.items():
-            if str(itemID) not in itemScoreDict:
-                continue
-            itemScore = costCount * itemScoreDict[str(itemID)]
-            addActScore += itemScore
-            GameWorld.DebugLog("骑宠养成活动消耗物品积分统计: actNum=%s,itemID=%s,costCount=%s,itemScore=%s, %s" 
-                               % (actNum, itemID, costCount, itemScore, addActScore))
-            
-        if addActScore <= 0:
-            continue
-        
-        AddPlayerScore(curPlayer, actNum, addActScore, ipyData.GetIsRelationCrossAct())
-        
-    return
-
-def AddPlayerScore(curPlayer, actNum, addScore, isRelationCrossAct):
-    if addScore <= 0:
-        return 0
-    score = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActHorsePetTrainScore % actNum)
-    updScore = score + addScore
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ActHorsePetTrainScore % actNum, updScore)
-    GameWorld.DebugLog("骑宠养成活动增加积分: actNum=%s,addScore=%s,updScore=%s" % (actNum, addScore, updScore))
-    Sync_HorsePetTrainPlayerInfo(curPlayer, actNum)
-    PlayerControl.GiveMoney(curPlayer, ShareDefine.TYPE_Price_HorsePetTrainScore, addScore, "ActHorsePetTrain")
-    PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_HorsePetActScore, addScore)
-    PlayerBillboard.UpdatePlayerBillboard(curPlayer, ShareDefine.Def_BT_HorsePetTrainScore, updScore, autoSort=True)
-    SendToGameServer_HorsePetTrain(curPlayer, "AddHorsePetTrainScore", [addScore, updScore, isRelationCrossAct])
-    return updScore
-
-def SendToGameServer_HorsePetTrain(curPlayer, msgType, dataMsg=""):
-    playerID = curPlayer.GetPlayerID()
-    msgList = str([msgType, dataMsg])
-    GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(playerID, 0, 0, "ActHorsePetTrain", msgList, len(msgList))
-    GameWorld.Log("骑宠养成活动发送GameServer: %s, %s" % (msgType, dataMsg), playerID)
-    return
-
-def GetActHorsePetTrainScore(curPlayer):
-    ## 获取活动中养成积分
-    actScore = 0
-    for actInfo in PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_HorsePetTrain, {}).values():
-        actNum = actInfo.get(ShareDefine.ActKey_ActNum, 0)
-        if not actInfo.get(ShareDefine.ActKey_State):
-            continue
-        score = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActHorsePetTrainScore % actNum)
-        actScore = max(score, actScore)
-    return actScore
-
-def Sync_HorsePetTrainActionInfo(curPlayer, actNum):
-    ## 通知活动信息
-    
-    actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_HorsePetTrain, actNum)
-    if not actInfo.get(ShareDefine.ActKey_State):
-        return
-    
-    cfgID = actInfo.get(ShareDefine.ActKey_CfgID)
-    ipyData = IpyGameDataPY.GetIpyGameData("ActHorsePetTrain", cfgID)
-    if not ipyData:
-        return
-    
-    personalTempID = ipyData.GetPersonalTemplateID()
-    personalTempIpyDataList = IpyGameDataPY.GetIpyGameDataList("ActHorsePetTrainBillTemp", personalTempID) if personalTempID else []
-    
-    startDateStr, endDateStr = GameWorld.GetOperationActionDateStr(ipyData)
-    
-    clientPack = ChPyNetSendPack.tagMCActHorsePetTrainInfo()
-    clientPack.ActNum = actNum
-    clientPack.StartDate = startDateStr
-    clientPack.EndtDate = endDateStr
-    clientPack.JoinStartTime = ipyData.GetJoinStartTime()
-    clientPack.JoinEndTime = ipyData.GetJoinEndTime()
-    clientPack.LimitLV = ipyData.GetLVLimit()
-    clientPack.ShopType = ipyData.GetActShopType()
-    
-    clientPack.PersonalBillboardInfoList = __GetTempRankBillPackList(personalTempIpyDataList)
-    clientPack.PersonalBillCount = len(clientPack.PersonalBillboardInfoList)
-    NetPackCommon.SendFakePack(curPlayer, clientPack)
-    return
-
-def Sync_HorsePetTrainPlayerInfo(curPlayer, actNum):
-    
-    actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_HorsePetTrain, actNum)
-    if not actInfo.get(ShareDefine.ActKey_State):
-        return
-    
-    clientPack = ChPyNetSendPack.tagMCActHorsePetTrainPlayerInfo()
-    clientPack.ActNum = actNum
-    clientPack.Score = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActHorsePetTrainScore % actNum)
-    NetPackCommon.SendFakePack(curPlayer, clientPack)
-    return
-
-def Sync_CrossActHorsePetTrainActionInfo(curPlayer):
-    ## 通知活动信息
-    actInfo = CrossRealmPlayer.GetPlayerCrossActInfo(curPlayer, ShareDefine.CrossActName_HorsePetTrain)
-    if not actInfo:
-        return
-    
-    if not actInfo.get(ShareDefine.ActKey_State):
-        return
-    
-    ipyDataDict = actInfo.get(ShareDefine.ActKey_IpyDataInfo, {})
-    if not ipyDataDict:
-        return
-    
-    personalTempID = ipyDataDict.get("PersonalTemplateID", 0)
-    personalTempIpyDataList = IpyGameDataPY.GetIpyGameDataList("ActHorsePetTrainBillTemp", personalTempID) if personalTempID else []
-    
-    clientPack = ChPyNetSendPack.tagMCCrossActHorsePetTrainInfo()
-    clientPack.ServerIDRangeInfo = str(actInfo.get(ShareDefine.ActKey_ServerIDRangeList, []))
-    clientPack.ServerInfoLen = len(clientPack.ServerIDRangeInfo)
-    clientPack.GroupValue1 = ipyDataDict.get("ZoneID", 0)
-    clientPack.StartDate = ipyDataDict.get("StartDate", "")
-    clientPack.EndtDate = ipyDataDict.get("EndDate", "")
-    clientPack.JoinStartTime = ipyDataDict.get("JoinStartTime", "")
-    clientPack.JoinEndTime = ipyDataDict.get("JoinEndTime", "")
-    
-    clientPack.PersonalBillboardInfoList = __GetTempRankBillPackList(personalTempIpyDataList)
-    clientPack.PersonalBillCount = len(clientPack.PersonalBillboardInfoList)
-    
-    NetPackCommon.SendFakePack(curPlayer, clientPack)
-    return
-
-def __GetTempRankBillPackList(ipyDataList):
-    packBillList = []
-    if not ipyDataList:
-        return packBillList
-    for tempIpyData in ipyDataList:
-        rankInfo = ChPyNetSendPack.tagMCActHorsePetTrainBillard()
-        rankInfo.Rank = tempIpyData.GetRank()
-        
-        rankInfo.AwardItemList = []
-        awardItemList = tempIpyData.GetAwardItemList()
-        for itemID, itemCount, isAuctionItem in awardItemList:
-            item = ChPyNetSendPack.tagMCActHorsePetTrainItem()
-            item.Clear()
-            item.ItemID = itemID
-            item.ItemCount = itemCount
-            item.IsBind = isAuctionItem
-            rankInfo.AwardItemList.append(item)
-        rankInfo.Count = len(rankInfo.AwardItemList)
-        
-#        rankInfo.MemAwardItemList = []
-#        memAwardItemList = tempIpyData.GetMemAwardItemList()
-#        for itemID, itemCount, isAuctionItem in memAwardItemList:
-#            item = ChPyNetSendPack.tagMCActHorsePetTrainItem()
-#            item.Clear()
-#            item.ItemID = itemID
-#            item.ItemCount = itemCount
-#            item.IsBind = isAuctionItem
-#            rankInfo.MemAwardItemList.append(item)
-#        rankInfo.MemCount = len(rankInfo.MemAwardItemList)
-        
-        rankInfo.NeedScore = tempIpyData.GetNeedScore()
-        rankInfo.AwardItemExList = []
-        scoreAwardEx = tempIpyData.GetScoreAwardEx()
-        scoreExList = scoreAwardEx.keys()
-        scoreExList.sort()
-        for scoreEx in scoreExList:
-            itemExList = scoreAwardEx[scoreEx]
-            awardEx = ChPyNetSendPack.tagMCActHorsePetTrainAwardEx()
-            awardEx.NeedScore = scoreEx
-            awardEx.AwardItemList = []
-            for itemID, itemCount, isAuctionItem in itemExList:
-                item = ChPyNetSendPack.tagMCActHorsePetTrainItem()
-                item.Clear()
-                item.ItemID = itemID
-                item.ItemCount = itemCount
-                item.IsBind = isAuctionItem
-                awardEx.AwardItemList.append(item)
-            awardEx.Count = len(awardEx.AwardItemList)
-            
-            rankInfo.AwardItemExList.append(awardEx)
-        rankInfo.CountEx = len(rankInfo.AwardItemExList)
-        
-        packBillList.append(rankInfo)
-    return packBillList
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActXianXiaMJ.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActXianXiaMJ.py
deleted file mode 100644
index 4bc5284..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActXianXiaMJ.py
+++ /dev/null
@@ -1,852 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-##@package Player.PlayerActXianXiaMJ
-#
-# @todo:仙匣秘境
-# @author hxp
-# @date 2021-05-26
-# @version 1.0
-#
-# 详细描述: 仙匣秘境
-#
-#-------------------------------------------------------------------------------
-#"""Version = 2021-05-26 11:30"""
-#-------------------------------------------------------------------------------
-
-import PyGameData
-import ShareDefine
-import PlayerControl
-import IpyGameDataPY
-import ItemControler
-import CrossRealmPlayer
-import PlayerBillboard
-import ChPyNetSendPack
-import NetPackCommon
-import PlayerActTask
-import ItemCommon
-import GameWorld
-import ChConfig
-
-Def_SuperLibType = 9 # 大奖库类型固定为9
-
-def OnMixFirstLogin(curPlayer):
-    
-    for actInfo in PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_XianXiaMJ, {}).values():
-        actNum = actInfo.get(ShareDefine.ActKey_ActNum, 0)
-        if not actInfo.get(ShareDefine.ActKey_State):
-            continue
-        score = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_XianXiaMJScore % actNum)
-        if not score:
-            continue
-        GameWorld.Log("仙匣秘境合服首登同步积分榜单: actNum=%s,score=%s" % (actNum, score), curPlayer.GetPlayerID())
-        PlayerBillboard.UpdatePlayerBillboard(curPlayer, ShareDefine.Def_BT_XianXiaMJScore, score, autoSort=True)
-        break
-    
-    return
-
-def OnPlayerLogin(curPlayer):
-    
-    for actInfo in PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_XianXiaMJ, {}).values():
-        actNum = actInfo.get(ShareDefine.ActKey_ActNum, 0)
-        isReset = __CheckPlayerXianXiaMJAction(curPlayer, actNum)
-        if not isReset:
-            # 活动中同步活动信息
-            if actInfo.get(ShareDefine.ActKey_State):
-                Sync_XianXiaMJActionInfo(curPlayer, actNum)
-                Sync_XianXiaMJLayerInfo(curPlayer, actNum)
-                
-    if not __CheckPlayerCrossActXianXiaMJ(curPlayer):
-        Sync_CrossActXianXiaMJActionInfo(curPlayer)
-        
-    return
-
-def RefreshXianXiaMJActionInfo(actNum):
-    ## 收到GameServer同步的活动信息,刷新活动信息
-    playerManager = GameWorld.GetPlayerManager()
-    for index in xrange(playerManager.GetPlayerCount()):
-        curPlayer = playerManager.GetPlayerByIndex(index)
-        if not GameWorld.IsNormalPlayer(curPlayer):
-            continue
-        __CheckPlayerXianXiaMJAction(curPlayer, actNum)
-    return
-
-def __CheckPlayerXianXiaMJAction(curPlayer, actNum):
-    ## 检查玩家活动数据信息
-    
-    playerID = curPlayer.GetPlayerID()
-    actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_XianXiaMJ, actNum)
-    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_XianXiaMJID % actNum) # 玩家身上的活动ID
-    
-    # 活动ID 相同的话不处理
-    if actID == playerActID:
-        GameWorld.DebugLog("仙匣秘境活动ID不变,不处理!actNum=%s,actID=%s" % (actNum, actID), playerID)
-        
-        layerNum = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_XianXiaMJLayerNum % actNum)
-        if state and layerNum <= 0:
-            GameWorld.Log("仙匣秘境活动中但首层奖池未刷新初始化,尝试刷新!actNum=%s,actID=%s" % (actNum, actID), playerID)
-            __InitFirstLayerData(curPlayer, actNum, actInfo)
-            
-        return
-    
-    actWorldLV = actInfo.get(ShareDefine.ActKey_WorldLV, 0)
-    
-    GameWorld.DebugLog("仙匣秘境重置! actNum=%s,actID=%s,playerActID=%s,state=%s,cfgID=%s" 
-                       % (actNum, actID, playerActID, state, cfgID), playerID)
-    
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_XianXiaMJID % actNum, actID)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_XianXiaMJWorldLV % actNum, 0)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_XianXiaMJLayerNum % actNum, 0)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_XianXiaMJPlayCount % actNum, 0)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_XianXiaMJScore % actNum, 0)
-    
-    if state:
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_XianXiaMJWorldLV % actNum, actWorldLV)
-        Sync_XianXiaMJActionInfo(curPlayer, actNum)
-        __InitFirstLayerData(curPlayer, actNum, actInfo)
-    return True
-
-def __InitFirstLayerData(curPlayer, actNum, actInfo):
-    ## 初始化首层数据
-    
-    state = actInfo.get(ShareDefine.ActKey_State, 0)
-    cfgID = actInfo.get(ShareDefine.ActKey_CfgID, 0)
-    
-    ipyData = IpyGameDataPY.GetIpyGameData("ActXianXiaMJ", cfgID) if cfgID else None
-    templateID = ipyData.GetTemplateID() if ipyData else 0
-    awardIpyDataList = IpyGameDataPY.GetIpyGameDataList("ActXianXiaMJAward", templateID) if templateID else []
-    if awardIpyDataList:
-        for awardIpyData in awardIpyDataList:
-            libType = awardIpyData.GetAwardLibType()
-            libItemCount = max(awardIpyData.GetAwardItemCountList())
-            for num in xrange(libItemCount):
-                PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_XianXiaMJAwardItemInfo % (actNum, libType, num), 0)
-                
-            itemAwardTimesTotalInfo = awardIpyData.GetItemAwardTimesTotalInfo()
-            for itemID in itemAwardTimesTotalInfo.keys():
-                PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_XianXiaMJAwardItemTimes % (actNum, libType, itemID), 0)
-                
-        # 活动中,生成新奖池    
-        if state:
-            __RefreshXianXiaMJAwardPool(curPlayer, actInfo, ipyData, awardIpyDataList)
-            
-    Sync_XianXiaMJLayerInfo(curPlayer, actNum)
-    return True
-
-def RefreshCrossActXianXiaMJInfo():
-    ## 收到GameServer同步的活动信息,刷新活动信息
-    playerManager = GameWorld.GetPlayerManager()
-    for index in xrange(playerManager.GetPlayerCount()):
-        curPlayer = playerManager.GetPlayerByIndex(index)
-        if not GameWorld.IsNormalPlayer(curPlayer):
-            continue
-        __CheckPlayerCrossActXianXiaMJ(curPlayer)
-        
-    return
-
-def __CheckPlayerCrossActXianXiaMJ(curPlayer):
-    
-    playerID = curPlayer.GetPlayerID()
-    
-    actInfo = CrossRealmPlayer.GetPlayerCrossActInfo(curPlayer, ShareDefine.CrossActName_XianXiaMJ)
-    cfgID = actInfo.get(ShareDefine.ActKey_CfgID, 0)
-    actID = actInfo.get(ShareDefine.ActKey_ID, 0)
-    state = actInfo.get(ShareDefine.ActKey_State, 0)
-    dayIndex = actInfo.get(ShareDefine.ActKey_DayIndex, 0)
-    
-    playerActID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CA_XianXiaMJID) # 玩家身上的活动ID
-    
-    # 活动ID 相同的话不处理
-    if actID == playerActID:
-        GameWorld.DebugLog("跨服仙匣秘境活动ID不变,不处理!cfgID=%s,dayIndex=%s,actID=%s" % (cfgID, dayIndex, actID), playerID)   
-        return
-    GameWorld.DebugLog("跨服仙匣秘境活动重置! cfgID=%s,actID=%s,playerActID=%s,state=%s" % (cfgID, actID, playerActID, state), playerID)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CA_XianXiaMJID, actID)
-    
-    if not state:
-        CrossRealmPlayer.NotifyCrossActEnd(curPlayer, ShareDefine.CrossActName_XianXiaMJ)
-        
-    Sync_CrossActXianXiaMJActionInfo(curPlayer)
-    return True
-
-def SendToGameServer_XianXiaMJ(curPlayer, msgType, dataMsg=""):
-    playerID = curPlayer.GetPlayerID()
-    msgList = str([msgType, dataMsg])
-    GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(playerID, 0, 0, "XianXiaMJ", msgList, len(msgList))
-    GameWorld.Log("仙匣秘境发送GameServer: %s, %s" % (msgType, dataMsg), playerID)
-    return
-
-def AddPlayerLotteryScore(curPlayer, actNum, addScore, isRelationCrossAct):
-    if addScore <= 0:
-        return 0
-    lotteryScore = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_XianXiaMJScore % actNum)
-    updLotteryScore = lotteryScore + addScore
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_XianXiaMJScore % actNum, updLotteryScore)
-    PlayerBillboard.UpdatePlayerBillboard(curPlayer, ShareDefine.Def_BT_XianXiaMJScore, updLotteryScore, autoSort=True)
-    SendToGameServer_XianXiaMJ(curPlayer, "AddLotteryScore", [addScore, updLotteryScore, isRelationCrossAct])
-    return updLotteryScore
-
-def GetLayerSetByList(layerNum, setList):
-    if not setList:
-        return 0
-    return setList[layerNum - 1] if len(setList) >= layerNum else setList[-1]
-
-#// AA 16 仙匣秘境活动选择大奖 #tagCMActXianXiaMJSuperItem
-#
-#struct    tagCMActXianXiaMJSuperItem
-#{
-#    tagHead        Head;
-#    BYTE        ActNum;        //活动编号
-#    BYTE        SuperItemCount;    //选择物品数量
-#    DWORD        SuperItemIDList[SuperItemCount];    //选择的大奖库物品ID列表,每次重新选择需要发送全部已选择的大奖物品ID,不能只发单个物品ID;
-#};
-def OnActXianXiaMJSuperItem(index, clientData, tick):
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    actNum = clientData.ActNum
-    superItemIDList = clientData.SuperItemIDList
-    
-    GameWorld.DebugLog("仙匣秘境活动选择大奖: actNum=%s,superItemIDList=%s" % (actNum, superItemIDList))
-    
-    actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_XianXiaMJ, actNum)
-    if not actInfo.get(ShareDefine.ActKey_State):
-        GameWorld.DebugLog("    非活动中!")
-        return
-    
-    cfgID = actInfo.get(ShareDefine.ActKey_CfgID)
-    ipyData = IpyGameDataPY.GetIpyGameData("ActXianXiaMJ", cfgID)
-    if not ipyData:
-        return
-    
-    templateID = ipyData.GetTemplateID()
-    if not templateID:
-        return
-        
-    layerNum = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_XianXiaMJLayerNum % actNum)
-    actWorldLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_XianXiaMJWorldLV % actNum)
-    awardIpyDataList = IpyGameDataPY.GetIpyGameDataList("ActXianXiaMJAward", templateID)
-    if not awardIpyDataList:
-        return
-    
-    superAwardIpyData = None
-    for awardIpyData in awardIpyDataList:
-        libType = awardIpyData.GetAwardLibType()
-        if libType == Def_SuperLibType:
-            superAwardIpyData = awardIpyData
-            break
-    
-    if not superAwardIpyData:
-        GameWorld.ErrLog("没有配置仙匣秘境活动大奖库! cfgID=%s,actNum=%s,templateID=%s" % (cfgID, actNum, templateID))
-        return
-    
-    superLibItemCount = GetLayerSetByList(layerNum, superAwardIpyData.GetAwardItemCountList())
-    if len(superItemIDList) != superLibItemCount:
-        GameWorld.ErrLog("仙匣秘境活动选择大奖个数错误! cfgID=%s,actNum=%s,templateID=%s,layerNum=%s,superLibItemCount=%s,reqSuperItemIDList=%s" 
-                         % (cfgID, actNum, templateID, layerNum, superLibItemCount, superItemIDList))        
-        return
-    
-    posNumItemIDList = [] # 已抽中的大奖物品ID
-    libType = superAwardIpyData.GetAwardLibType()
-    for num in xrange(superLibItemCount):
-        itemInfoValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_XianXiaMJAwardItemInfo % (actNum, libType, num))
-        if not itemInfoValue:
-            break
-        itemID, posNum = itemInfoValue / 100, itemInfoValue % 100
-        if posNum and itemID not in superItemIDList:
-            GameWorld.ErrLog("仙匣秘境活动选择大奖ID错误! 已抽中的大奖ID为必选ID! posNum=%s, itemID=%s not in superItemIDList=%s" 
-                             % (posNum, itemID, superItemIDList))
-            return
-        
-        if posNum:
-            posNumItemIDList.append(itemID)
-            
-    GameWorld.DebugLog("    已抽中的大奖ID! %s" % posNumItemIDList)
-    
-    
-    libItemDict = __GetXianXiaMJAwardLibItem(superAwardIpyData.GetLibItemInfo(), actWorldLV)
-    layerLimitInfo = superAwardIpyData.GetItemLayerLimitInfo()
-    awardTimesTotalInfo = superAwardIpyData.GetItemAwardTimesTotalInfo()
-    
-    replaceSuperItemIDList = [] # 需要替换的大奖ID列表
-    
-    for selectItemID in superItemIDList:
-        if selectItemID in posNumItemIDList:
-            GameWorld.DebugLog("        已抽中的大奖ID,不验证!selectItemID=%s" % (selectItemID))
-            continue
-        
-        if selectItemID not in libItemDict:
-            GameWorld.ErrLog("仙匣秘境活动选择大奖ID错误! 大奖ID不存在大奖库中! selectItemID=%s not in libItemDict=%s" 
-                             % (selectItemID, libItemDict))
-            return
-        
-        layerLimit = layerLimitInfo.get(selectItemID, 0)
-        if layerLimit > layerNum:
-            GameWorld.ErrLog("仙匣秘境活动选择大奖ID错误! 大奖ID该层不能选择! selectItemID=%s layerLimit(%s) > layerNum(%s)" 
-                             % (selectItemID, layerLimit, layerNum))
-            return
-        
-        totalTimesLimit = awardTimesTotalInfo.get(selectItemID, 0)
-        if totalTimesLimit:
-            totalTimesNow = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_XianXiaMJAwardItemTimes % (actNum, libType, selectItemID))
-            if totalTimesNow >= totalTimesLimit:
-                GameWorld.ErrLog("仙匣秘境活动选择大奖ID错误! 大奖ID已达到最大奖励次数,不能选择! selectItemID=%s totalTimesNow(%s) >= totalTimesLimit(%s)" 
-                                 % (selectItemID, totalTimesNow, totalTimesLimit))
-                return
-                
-        replaceSuperItemIDList.append(selectItemID)
-        
-    GameWorld.DebugLog("    验证通过,可替换大奖ID! replaceSuperItemIDList=%s" % replaceSuperItemIDList)
-    if not replaceSuperItemIDList:
-        return
-    
-    for num in xrange(superLibItemCount):
-        itemInfoValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_XianXiaMJAwardItemInfo % (actNum, libType, num))
-        itemID, posNum = itemInfoValue / 100, itemInfoValue % 100
-        if itemID in posNumItemIDList:
-            GameWorld.DebugLog("        已抽中的大奖ID,不替换!itemID=%s" % (itemID))
-            continue
-        replaceSuperItemID = replaceSuperItemIDList.pop(0)
-        updItemInfoValue = replaceSuperItemID * 100 + posNum
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_XianXiaMJAwardItemInfo % (actNum, libType, num), updItemInfoValue)
-        GameWorld.DebugLog("        替换大奖ID选择!num=%s,itemID=%s,posNum=%s,replaceSuperItemID=%s,updItemInfoValue=%s" 
-                           % (num, itemID, posNum, replaceSuperItemID, updItemInfoValue))
-        
-        if not replaceSuperItemIDList:
-            break
-        
-    Sync_XianXiaMJLayerInfo(curPlayer, actNum)
-    return
-
-#// AA 18 仙匣秘境活动奖池刷新 #tagCMActXianXiaMJAwardPoolRefresh
-#
-#struct    tagCMActXianXiaMJAwardPoolRefresh
-#{
-#    tagHead        Head;
-#    BYTE        ActNum;        //活动编号
-#};
-def OnActXianXiaMJAwardPoolRefresh(index, clientData, tick):
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    actNum = clientData.ActNum
-    
-    GameWorld.DebugLog("仙匣秘境活动奖池刷新: actNum=%s" % (actNum))
-    
-    actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_XianXiaMJ, actNum)
-    if not actInfo.get(ShareDefine.ActKey_State):
-        GameWorld.DebugLog("    非活动中!")
-        return
-    
-    cfgID = actInfo.get(ShareDefine.ActKey_CfgID)
-    ipyData = IpyGameDataPY.GetIpyGameData("ActXianXiaMJ", cfgID)
-    if not ipyData:
-        return
-    
-    templateID = ipyData.GetTemplateID()
-    if not templateID:
-        return
-    
-    awardIpyDataList = IpyGameDataPY.GetIpyGameDataList("ActXianXiaMJAward", templateID)
-    if not awardIpyDataList:
-        return
-    
-    if not __RefreshXianXiaMJAwardPool(curPlayer, actInfo, ipyData, awardIpyDataList):
-        return
-    
-    Sync_XianXiaMJLayerInfo(curPlayer, actNum)
-    return
-
-def __RefreshXianXiaMJAwardPool(curPlayer, actInfo, ipyData, awardIpyDataList):
-    ## 刷新奖池物品
-    
-    cfgID = actInfo.get(ShareDefine.ActKey_CfgID)
-    actNum = actInfo.get(ShareDefine.ActKey_ActNum, 0)
-    actWorldLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_XianXiaMJWorldLV % actNum)
-    layerNum = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_XianXiaMJLayerNum % actNum)
-    
-    GameWorld.DebugLog("刷新仙匣秘境奖池物品: cfgID=%s,actNum=%s,actWorldLV=%s,layerNum=%s" % (cfgID, actNum, actWorldLV, layerNum))
-    
-    if layerNum:
-        # 非0层,验证大奖是否已抽完,抽完才可以刷新奖池层
-        superLib = False
-        for awardIpyData in awardIpyDataList:
-            libType = awardIpyData.GetAwardLibType()
-            if libType != Def_SuperLibType:
-                continue
-            superLib = True
-            libItemCount = GetLayerSetByList(layerNum, awardIpyData.GetAwardItemCountList())
-            for num in xrange(libItemCount):
-                itemInfoValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_XianXiaMJAwardItemInfo % (actNum, libType, num))
-                if not itemInfoValue:
-                    GameWorld.ErrLog("未选择大奖!无法刷新奖池! cfgID=%s,actNum=%s,layerNum=%s,num=%s" 
-                                     % (cfgID, actNum, layerNum, num))
-                    return
-                itemID, posNum = itemInfoValue / 100, itemInfoValue % 100
-                if itemID and not posNum:
-                    GameWorld.ErrLog("有大奖未抽中!无法刷新奖池! cfgID=%s,actNum=%s,layerNum=%s,num=%s,itemID=%s,posNum=%s" 
-                                     % (cfgID, actNum, layerNum, num, itemID, posNum))
-                    return
-            break
-        if not superLib:
-            GameWorld.ErrLog("奖池配置没有大奖库!无法刷新奖池! cfgID=%s,actNum=%s,layerNum=%s,superLib=%s" % (cfgID, actNum, layerNum, superLib))
-            return
-        
-    layerNum = min(layerNum + 1, 65530) # 可刷新奖池,默认+1层
-    GameWorld.DebugLog("    可刷新奖池!下一层: layerNum=%s" % (layerNum))
-    
-    refreshLibDict = {}
-    for awardIpyData in awardIpyDataList:
-        libType = awardIpyData.GetAwardLibType()
-        libItemCount = GetLayerSetByList(layerNum, awardIpyData.GetAwardItemCountList())
-        libItemDict = __GetXianXiaMJAwardLibItem(awardIpyData.GetLibItemInfo(), actWorldLV)
-        layerLimitInfo = awardIpyData.GetItemLayerLimitInfo()
-        awardTimesTotalInfo = awardIpyData.GetItemAwardTimesTotalInfo()
-        
-        canRandItemDict = {}
-        for itemID, libItemInfo in libItemDict.items():
-            _, weight = libItemInfo
-            
-            layerLimit = layerLimitInfo.get(itemID, 0)
-            if layerLimit > layerNum:
-                GameWorld.DebugLog("        该层不能选择该奖品! itemID=%s layerLimit(%s) > layerNum(%s)" 
-                                 % (itemID, layerLimit, layerNum))
-                continue
-            
-            totalTimesLimit = awardTimesTotalInfo.get(itemID, 0)
-            if totalTimesLimit:
-                totalTimesNow = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_XianXiaMJAwardItemTimes % (actNum, libType, itemID))
-                if totalTimesNow >= totalTimesLimit:
-                    GameWorld.DebugLog("        奖品ID已达到最大奖励次数,不能选择! itemID=%s totalTimesNow(%s) >= totalTimesLimit(%s)" 
-                                       % (itemID, totalTimesNow, totalTimesLimit))
-                    continue
-                
-            canRandItemDict[itemID] = [weight, itemID]
-            
-        if libItemCount > len(canRandItemDict):
-            GameWorld.ErrLog("奖品库配置可选择奖品个数不够!无法刷新奖池! cfgID=%s,actNum=%s,libType=%s,layerNum=%s,libItemCount=%s > %s canRandItemDict(%s)" 
-                             % (cfgID, actNum, libType, layerNum, libItemCount, len(canRandItemDict), canRandItemDict))
-            return
-        
-        refreshLibDict[libType] = [libItemCount, canRandItemDict]
-        
-    for libType, refreshInfo in refreshLibDict.items():
-        libItemCount, canRandItemDict = refreshInfo
-        GameWorld.DebugLog("    随机奖池物品: libType=%s,libItemCount=%s,canRandItemDict=%s, %s" % (libType, libItemCount, len(canRandItemDict), canRandItemDict))
-        
-        if libType == Def_SuperLibType:
-            # 大奖直接重置,系统不生成,由玩家手动选择
-            for num in xrange(libItemCount):
-                PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_XianXiaMJAwardItemInfo % (actNum, libType, num), 0)
-            continue
-        
-        for num in xrange(libItemCount):
-            weightList = canRandItemDict.values()
-            randItemID = GameWorld.GetResultByWeightList(weightList)
-            canRandItemDict.pop(randItemID, None)
-            
-            posNum = 0
-            itemInfoValue = randItemID * 100 + posNum
-            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_XianXiaMJAwardItemInfo % (actNum, libType, num), itemInfoValue)
-            GameWorld.DebugLog("        随机生成奖品! libType=%s,num=%s,randItemID=%s" % (libType, num, randItemID))
-            
-    playCount = 0 # 每层重置抽奖次数
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_XianXiaMJLayerNum % actNum, layerNum)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_XianXiaMJPlayCount % actNum, playCount)
-    GameWorld.DebugLog("    刷新完成! layerNum=%s,playCount=%s" % (layerNum, playCount))
-    PlayerActTask.UpdActTaskValue(curPlayer, ChConfig.ActTaskType_XianXiaMJLayer, layerNum)
-    if layerNum > 1:
-        AddPlayerLotteryScore(curPlayer, actNum, ipyData.GetLayerAddScore(), ipyData.GetIsRelationCrossAct())
-    return True
-
-#// AA 17 仙匣秘境活动抽奖 #tagCMActXianXiaMJLottery
-#
-#struct    tagCMActXianXiaMJLottery
-#{
-#    tagHead        Head;
-#    BYTE        ActNum;        //活动编号
-#    BYTE        PosNum;        //玩家点击的奖励位置编号,从1开始
-#};
-def OnActXianXiaMJLottery(index, clientData, tick):
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    actNum = clientData.ActNum
-    reqPosNum = clientData.PosNum
-    
-    GameWorld.DebugLog("仙匣秘境活动抽奖: actNum=%s,reqPosNum=%s" % (actNum, reqPosNum))
-    
-    if reqPosNum <= 0:
-        return
-    
-    actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_XianXiaMJ, actNum)
-    if not actInfo.get(ShareDefine.ActKey_State):
-        GameWorld.DebugLog("    非活动中!")
-        return
-        
-    playerID = curPlayer.GetPlayerID()
-    cfgID = actInfo.get(ShareDefine.ActKey_CfgID)
-    ipyData = IpyGameDataPY.GetIpyGameData("ActXianXiaMJ", cfgID)
-    if not ipyData:
-        return
-    
-    if ipyData.GetIsRelationCrossAct():
-        crossActInfo = CrossRealmPlayer.GetPlayerCrossActInfo(curPlayer, ShareDefine.CrossActName_XianXiaMJ)
-        if crossActInfo.get(ShareDefine.ActKey_State, 0):
-            if crossActInfo.get(ShareDefine.ActKey_StateJoin) != ShareDefine.ActStateJoin_Start:
-                GameWorld.Log("跨服仙匣秘境非参与活动中: actNum=%s" % actNum, playerID)
-                return
-    else:
-        if actInfo.get(ShareDefine.ActKey_StateJoin) != ShareDefine.ActStateJoin_Start:
-            GameWorld.Log("仙匣秘境非参与活动中: actNum=%s" % actNum, playerID)
-            return
-        
-    templateID = ipyData.GetTemplateID()
-    if not templateID:
-        return
-    
-    actWorldLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_XianXiaMJWorldLV % actNum)
-    awardIpyDataList = IpyGameDataPY.GetIpyGameDataList("ActXianXiaMJAward", templateID)
-    if not awardIpyDataList:
-        return
-    
-    checkUseMoney = False
-    costItemID = ipyData.GetUseItemID()
-    costItemCount = 1
-    if costItemID:
-        costItemIndexList, bindCnt, unBindCnt = ItemCommon.GetPackItemBindStateIndexInfo(curPlayer, costItemID, costItemCount)
-        lackCnt = costItemCount - bindCnt - unBindCnt
-        if lackCnt > 0:
-            checkUseMoney = True
-    else:
-        checkUseMoney = True
-        
-    costMoneyType, costMoneyValue = ipyData.GetUseMoneyInfo()
-    if checkUseMoney:
-        if not costMoneyType or not costMoneyValue:
-            return
-        if not PlayerControl.HaveMoney(curPlayer, costMoneyType, costMoneyValue):
-            GameWorld.DebugLog("    货币不足,无法抽奖! costMoneyType=%s,costMoneyValue(%s) > curMoneyValue(%s)" 
-                               % (costMoneyType, costMoneyValue, PlayerControl.GetMoney(curPlayer, costMoneyType)))
-            return
-        
-    layerNum = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_XianXiaMJLayerNum % actNum)
-    playCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_XianXiaMJPlayCount % actNum)
-    GameWorld.DebugLog("layerNum=%s,playCount=%s" % (layerNum, playCount))
-    
-    posNumMax = 0
-    randLibItemDict = {}
-    for awardIpyData in awardIpyDataList:
-        libType = awardIpyData.GetAwardLibType()
-        libItemCount = GetLayerSetByList(layerNum, awardIpyData.GetAwardItemCountList())
-        unlockLimitTimes = GetLayerSetByList(layerNum, awardIpyData.GetUnlockAwardLimitTimesList())
-        libWeight = GetLayerSetByList(layerNum, awardIpyData.GetAwardLibWeightList())
-        posNumMax += libItemCount
-        
-        if libType == Def_SuperLibType:
-            for num in xrange(libItemCount):
-                itemInfoValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_XianXiaMJAwardItemInfo % (actNum, libType, num))
-                if not itemInfoValue:
-                    GameWorld.DebugLog("    未选择大奖!无法抽奖! libType=%s,num=%s,itemInfoValue=%s" % (libType, num, itemInfoValue))         
-                    return
-                
-        if unlockLimitTimes and playCount < unlockLimitTimes:
-            GameWorld.DebugLog("    该库当前抽奖次数无法解锁! libType=%s,playCount(%s) < unlockLimitTimes(%s)" % (libType, playCount, unlockLimitTimes))
-            continue
-        
-        awardTimesTotalInfo = awardIpyData.GetItemAwardTimesTotalInfo()
-        libItemDict = __GetXianXiaMJAwardLibItem(awardIpyData.GetLibItemInfo(), actWorldLV)
-        canRandItemList = []
-        for num in xrange(libItemCount):
-            itemInfoValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_XianXiaMJAwardItemInfo % (actNum, libType, num))
-            if not itemInfoValue:            
-                return
-            
-            itemID, posNum = itemInfoValue / 100, itemInfoValue % 100
-            if itemID not in libItemDict:
-                continue
-            
-            if posNum:
-                GameWorld.DebugLog("    该奖品已被抽中! libType=%s,itemID=%s,posNum=%s" % (libType, itemID, posNum))
-                if posNum == reqPosNum:
-                    GameWorld.ErrLog("    该位置已经有抽奖结果,无法重复选择抽奖! libType=%s,num=%s,itemInfoValue=%s,posNum=%s" 
-                                     % (libType, num, itemInfoValue, posNum))                
-                    return                
-                continue
-            
-            itemCount, weight = libItemDict[itemID]
-            isAddTimes = (itemID in awardTimesTotalInfo)
-            canRandItemList.append([weight, itemID, itemCount, num, isAddTimes])
-            
-        if canRandItemList:
-            randLibItemDict[libType] = [libWeight, libType, canRandItemList]
-            GameWorld.DebugLog("    该库有机会抽到物品: libType=%s,libWeight=%s,canRandItemList=%s" % (libType, libWeight, canRandItemList))
-        else:
-            GameWorld.DebugLog("    该库物品已全被抽完: libType=%s,libWeight=%s,canRandItemList=%s" % (libType, libWeight, canRandItemList))
-            
-    if reqPosNum > posNumMax:
-        GameWorld.DebugLog("    请求位置异常,无法抽奖! reqPosNum(%s) > posNumMax(%s)" % (reqPosNum, posNumMax))
-        return
-    
-    if not randLibItemDict:
-        GameWorld.DebugLog("    没有可抽奖的奖品了,无法抽奖!")
-        return
-    
-    randLibInfo = GameWorld.GetResultByWeightList(randLibItemDict.values())
-    if not randLibInfo:
-        return
-    libType, canRandItemList = randLibInfo
-    randItemInfo = GameWorld.GetResultByWeightList(canRandItemList)
-    if not randItemInfo:
-        return
-    itemID, itemCount, num, isAddTimes = randItemInfo
-    
-    # 扣除消耗
-    if checkUseMoney:
-        PlayerControl.PayMoney(curPlayer, costMoneyType, costMoneyValue, "ActXianXiaMJ")
-        GameWorld.DebugLog("消耗货币: costMoneyType=%s,costMoneyValue=%s" % (costMoneyType, costMoneyValue))
-    else:
-        GameWorld.DebugLog("消耗道具: costItemID=%s,costItemCount=%s %s" % (costItemID, costItemCount, costItemIndexList))
-        ItemCommon.DelCostItemByBind(curPlayer, costItemIndexList, bindCnt, unBindCnt, costItemCount, "XianXiaMJ")
-        
-    # 更新已抽中值
-    updItemInfoValue = itemID * 100 + reqPosNum
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_XianXiaMJAwardItemInfo % (actNum, libType, num), updItemInfoValue)
-    
-    totalTimesNow = 0
-    if isAddTimes:
-        totalTimesNow = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_XianXiaMJAwardItemTimes % (actNum, libType, itemID)) + 1
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_XianXiaMJAwardItemTimes % (actNum, libType, itemID), totalTimesNow)
-        
-    playCount += 1
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_XianXiaMJPlayCount % actNum, playCount)
-    
-    GameWorld.DebugLog("    抽中物品: layerNum=%s,libType=%s,itemID=%s,itemCount=%s,num=%s,reqPosNum=%s,updItemInfoValue=%s,totalTimesNow=%s,playCount=%s" 
-                       % (layerNum, libType, itemID, itemCount, num, reqPosNum, updItemInfoValue, totalTimesNow, playCount))
-    
-    # 给物品
-    isAuctionItem = 0
-    itemList = [[itemID, itemCount, isAuctionItem]]
-    ItemControler.GivePlayerItemOrMail(curPlayer, itemList, event=["XianXiaMJLottery", False, {}])
-    
-    # 任务
-    PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_XianXiaMJLottery, 1)
-    
-    # 广播
-    if libType == Def_SuperLibType:
-        PlayerControl.WorldNotify(0, "XianXiaMJ%s" % actNum, [curPlayer.GetPlayerName(), itemID, itemCount])
-        
-    # 积分
-    lotteryScore = AddPlayerLotteryScore(curPlayer, actNum, ipyData.GetLotteryAddScore(), ipyData.GetIsRelationCrossAct())
-    
-    # 通知抽奖结果
-    clientPack = ChPyNetSendPack.tagMCActXianXiaMJAwardItemResult()
-    clientPack.ActNum = actNum
-    clientPack.ItemLibType = libType
-    clientPack.ItemID = itemID
-    clientPack.ItemCount = itemCount
-    clientPack.PosNum = reqPosNum
-    clientPack.TotalTimesNow = totalTimesNow
-    clientPack.LotteryScore = lotteryScore
-    NetPackCommon.SendFakePack(curPlayer, clientPack)
-    return
-
-def Sync_XianXiaMJActionInfo(curPlayer, actNum):
-    ## 通知活动信息
-    
-    actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_XianXiaMJ, actNum)
-    if not actInfo.get(ShareDefine.ActKey_State):
-        return
-    
-    cfgID = actInfo.get(ShareDefine.ActKey_CfgID)
-    ipyData = IpyGameDataPY.GetIpyGameData("ActXianXiaMJ", cfgID)
-    if not ipyData:
-        return
-    costMoneyType, costMoneyValue = ipyData.GetUseMoneyInfo()
-    
-    personalTempID = ipyData.GetPersonalTemplateID()
-    personalTempIpyDataList = IpyGameDataPY.GetIpyGameDataList("ActXianXiaMJBillTemp", personalTempID) if personalTempID else []
-    
-    startDateStr, endDateStr = GameWorld.GetOperationActionDateStr(ipyData)
-    
-    clientPack = ChPyNetSendPack.tagMCActXianXiaMJInfo()
-    clientPack.ActNum = actNum
-    clientPack.StartDate = startDateStr
-    clientPack.EndtDate = endDateStr
-    clientPack.JoinStartTime = ipyData.GetJoinStartTime()
-    clientPack.JoinEndTime = ipyData.GetJoinEndTime()
-    clientPack.IsDayReset = ipyData.GetIsDayReset()
-    clientPack.LimitLV = ipyData.GetLVLimit()
-    clientPack.UseItemID = ipyData.GetUseItemID()
-    clientPack.MoneyType = costMoneyType
-    clientPack.MoneyValue = costMoneyValue
-    clientPack.LotteryAddScore = ipyData.GetLotteryAddScore()
-    clientPack.LayerAddScore = ipyData.GetLayerAddScore()
-    
-    clientPack.PersonalBillboardInfoList = __GetTempRankBillPackList(personalTempIpyDataList)
-    clientPack.PersonalBillCount = len(clientPack.PersonalBillboardInfoList)
-    NetPackCommon.SendFakePack(curPlayer, clientPack)
-    return
-
-def __GetXianXiaMJAwardLibItem(libItemInfo, actWorldLV):
-    ## 获取奖励库物品信息字典,支持按世界等级范围配置的格式
-    keyList = libItemInfo.keys()
-    if not keyList:
-        return {}
-    if isinstance(keyList[0], tuple) and len(keyList[0]) == 2:
-        return GameWorld.GetDictValueByRangeKey(libItemInfo, actWorldLV, {})
-    return libItemInfo
-
-def Sync_XianXiaMJLayerInfo(curPlayer, actNum):
-    
-    actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_XianXiaMJ, actNum)
-    if not actInfo.get(ShareDefine.ActKey_State):
-        return
-    cfgID = actInfo.get(ShareDefine.ActKey_CfgID)
-    ipyData = IpyGameDataPY.GetIpyGameData("ActXianXiaMJ", cfgID)
-    if not ipyData:
-        return
-    
-    templateID = ipyData.GetTemplateID()
-    if not templateID:
-        return
-    actWorldLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_XianXiaMJWorldLV % actNum)
-    layerNum = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_XianXiaMJLayerNum % actNum)
-    
-    clientPack = ChPyNetSendPack.tagMCActXianXiaMJLayerInfo()
-    clientPack.ActNum = actNum
-    clientPack.LayerNum = layerNum
-    clientPack.LotteryScore = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_XianXiaMJScore % actNum)
-    clientPack.AwardItemList = [] # 奖池物品列表
-    awardIpyDataList = IpyGameDataPY.GetIpyGameDataList("ActXianXiaMJAward", templateID)
-    if awardIpyDataList:
-        for awardIpyData in awardIpyDataList:
-            libType = awardIpyData.GetAwardLibType()
-            libItemCount = GetLayerSetByList(layerNum, awardIpyData.GetAwardItemCountList())
-            libItemDict = __GetXianXiaMJAwardLibItem(awardIpyData.GetLibItemInfo(), actWorldLV)
-            layerLimitInfo = awardIpyData.GetItemLayerLimitInfo()
-            awardTimesTotalInfo = awardIpyData.GetItemAwardTimesTotalInfo()
-            
-            # 奖池物品列表,已生成的,包含已选择的大奖物品
-            for num in xrange(libItemCount):
-                itemInfoValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_XianXiaMJAwardItemInfo % (actNum, libType, num))
-                if not itemInfoValue:
-                    break
-                itemID, posNum = itemInfoValue / 100, itemInfoValue % 100
-                if itemID not in libItemDict:
-                    continue
-                libItemInfo = libItemDict[itemID]
-                
-                layerItem = ChPyNetSendPack.tagMCActXianXiaMJLayerItem()
-                layerItem.ItemLibType = libType
-                layerItem.ItemID = itemID
-                layerItem.ItemCount = libItemInfo[0]
-                layerItem.PosNum = posNum
-                layerItem.TotalTimesMax = awardTimesTotalInfo.get(itemID, 0)
-                layerItem.TotalTimesNow = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_XianXiaMJAwardItemTimes % (actNum, libType, itemID))
-                layerItem.LayerLimit = layerLimitInfo.get(itemID, 0)
-                clientPack.AwardItemList.append(layerItem)
-                
-            # 大奖物品待选择库,全部同步
-            if libType == Def_SuperLibType:
-                for itemID, libItemInfo in libItemDict.items():
-                    layerItem = ChPyNetSendPack.tagMCActXianXiaMJLayerItem()
-                    layerItem.ItemLibType = libType
-                    layerItem.ItemID = itemID
-                    layerItem.ItemCount = libItemInfo[0]
-                    layerItem.TotalTimesMax = awardTimesTotalInfo.get(itemID, 0)
-                    layerItem.TotalTimesNow = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_XianXiaMJAwardItemTimes % (actNum, libType, itemID))
-                    layerItem.LayerLimit = layerLimitInfo.get(itemID, 0)
-                    clientPack.SuperItemList.append(layerItem)
-                clientPack.SuperItemCount = len(clientPack.SuperItemList)
-                clientPack.SuperItemCanChooseCount = libItemCount
-                
-    clientPack.AwardItemCount = len(clientPack.AwardItemList)
-    NetPackCommon.SendFakePack(curPlayer, clientPack)
-    return
-
-def Sync_CrossActXianXiaMJActionInfo(curPlayer):
-    ## 通知活动信息
-    actInfo = CrossRealmPlayer.GetPlayerCrossActInfo(curPlayer, ShareDefine.CrossActName_XianXiaMJ)
-    if not actInfo:
-        return
-    
-    if not actInfo.get(ShareDefine.ActKey_State):
-        return
-    
-    ipyDataDict = actInfo.get(ShareDefine.ActKey_IpyDataInfo, {})
-    if not ipyDataDict:
-        return
-    
-    personalTempID = ipyDataDict.get("PersonalTemplateID", 0)
-    personalTempIpyDataList = IpyGameDataPY.GetIpyGameDataList("ActXianXiaMJBillTemp", personalTempID) if personalTempID else []
-    
-    clientPack = ChPyNetSendPack.tagMCCrossActXianXiaMJInfo()
-    clientPack.ServerIDRangeInfo = str(actInfo.get(ShareDefine.ActKey_ServerIDRangeList, []))
-    clientPack.ServerInfoLen = len(clientPack.ServerIDRangeInfo)
-    clientPack.GroupValue1 = ipyDataDict.get("ZoneID", 0)
-    clientPack.StartDate = ipyDataDict.get("StartDate", "")
-    clientPack.EndtDate = ipyDataDict.get("EndDate", "")
-    clientPack.JoinStartTime = ipyDataDict.get("JoinStartTime", "")
-    clientPack.JoinEndTime = ipyDataDict.get("JoinEndTime", "")
-    clientPack.IsDayReset = ipyDataDict.get("IsDayReset", 0)
-    
-    clientPack.PersonalBillboardInfoList = __GetTempRankBillPackList(personalTempIpyDataList)
-    clientPack.PersonalBillCount = len(clientPack.PersonalBillboardInfoList)
-    
-    NetPackCommon.SendFakePack(curPlayer, clientPack)
-    return
-
-def __GetTempRankBillPackList(ipyDataList):
-    packBillList = []
-    if not ipyDataList:
-        return packBillList
-    for tempIpyData in ipyDataList:
-        rankInfo = ChPyNetSendPack.tagMCActXianXiaMJBillard()
-        rankInfo.Rank = tempIpyData.GetRank()
-        
-        rankInfo.AwardItemList = []
-        awardItemList = tempIpyData.GetAwardItemList()
-        for itemID, itemCount, isAuctionItem in awardItemList:
-            item = ChPyNetSendPack.tagMCActXianXiaMJItem()
-            item.Clear()
-            item.ItemID = itemID
-            item.ItemCount = itemCount
-            item.IsBind = isAuctionItem
-            rankInfo.AwardItemList.append(item)
-        rankInfo.Count = len(rankInfo.AwardItemList)
-        
-#        rankInfo.MemAwardItemList = []
-#        memAwardItemList = tempIpyData.GetMemAwardItemList()
-#        for itemID, itemCount, isAuctionItem in memAwardItemList:
-#            item = ChPyNetSendPack.tagMCActXianXiaMJItem()
-#            item.Clear()
-#            item.ItemID = itemID
-#            item.ItemCount = itemCount
-#            item.IsBind = isAuctionItem
-#            rankInfo.MemAwardItemList.append(item)
-#        rankInfo.MemCount = len(rankInfo.MemAwardItemList)
-        
-        rankInfo.NeedScore = tempIpyData.GetNeedScore()
-        rankInfo.AwardItemExList = []
-        scoreAwardEx = tempIpyData.GetScoreAwardEx()
-        scoreExList = scoreAwardEx.keys()
-        scoreExList.sort()
-        for scoreEx in scoreExList:
-            itemExList = scoreAwardEx[scoreEx]
-            awardEx = ChPyNetSendPack.tagMCActXianXiaMJAwardEx()
-            awardEx.NeedScore = scoreEx
-            awardEx.AwardItemList = []
-            for itemID, itemCount, isAuctionItem in itemExList:
-                item = ChPyNetSendPack.tagMCActXianXiaMJItem()
-                item.Clear()
-                item.ItemID = itemID
-                item.ItemCount = itemCount
-                item.IsBind = isAuctionItem
-                awardEx.AwardItemList.append(item)
-            awardEx.Count = len(awardEx.AwardItemList)
-            
-            rankInfo.AwardItemExList.append(awardEx)
-        rankInfo.CountEx = len(rankInfo.AwardItemExList)
-        
-        packBillList.append(rankInfo)
-    return packBillList
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActivity.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActivity.py
index 47c3bd6..2c65b4a 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActivity.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActivity.py
@@ -33,7 +33,6 @@
 import time
 import FormulaControl
 import PlayerBossReborn
-import PlayerActGarbageSorting
 import PlayerTongTianLing
 import PlayerActTask
 import PlayerSuccess
@@ -309,7 +308,6 @@
     curTotalPoint = __GetPDictValue(curPlayer, ChConfig.Def_PDict_Activity_TotalPoint)
     __SetPDictValue(curPlayer, ChConfig.Def_PDict_Activity_TotalPoint, curTotalPoint + addValue)
     __AddCanCostActivityPoint(curPlayer, addValue, isLVUp)
-    PlayerActGarbageSorting.AddActGarbageTaskProgress(curPlayer, ChConfig.Def_GarbageTask_Activity, addValue)
     PlayerTongTianLing.AddTongTianTaskValue(curPlayer, ChConfig.TTLTaskType_Activity, addValue)
     PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_Activity, addValue)
     #PlayerControl.NotifyCode(curPlayer, "GetActivity", [addValue])
@@ -948,7 +946,6 @@
     GameWorld.DebugLog("领取活跃放置奖励: totalCount=%s,rewardCount=%s,rewardItemCount=%s,rewardItemList=%s" % (totalCount, rewardCount, rewardItemCount, rewardItemList))
     ItemControler.GivePlayerItemOrMail(curPlayer, rewardItemList, event=["ActivityPlace", False, {}])
     
-    PlayerActGarbageSorting.AddActGarbageTaskProgress(curPlayer, ChConfig.Def_GarbageTask_ActivityPlace, rewardCount)
     PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_ActivityPlace, rewardCount)
     PlayerGubao.AddGubaoItemEffValue(curPlayer, PlayerGubao.GubaoEffType_ActivityPlace, rewardCount)
     
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBillboard.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBillboard.py
index 899b53c..4054605 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBillboard.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBillboard.py
@@ -15,15 +15,11 @@
 #"""Version = 2018-03-06 11:00"""
 #-------------------------------------------------------------------------------
 
-import ChConfig
 import GameWorld
 import ShareDefine
-import PlayerControl
-import OpenServerCampaign
 import ChPyNetSendPack
 import NetPackCommon
 import IpyGameDataPY
-import GameFuncComm
 import DBDataMgr
 
 import time
@@ -38,7 +34,7 @@
         
     billboardMgr = DBDataMgr.GetBillboardMgr()
     for billboardType in drBillboardTypeList:
-        if billboardType in [ShareDefine.Def_CBT_BossTrialSubmitBak, ShareDefine.Def_CBT_BossTrialSubmitFamilyBak, ShareDefine.Def_CBT_CrossRealmPK]:
+        if billboardType in []:
             continue
         groupList = billboardMgr.GetBillboardGroupList(billboardType)
         for billboardType, groupValue1, groupValue2 in groupList:
@@ -71,35 +67,30 @@
         # 跨服服务器不用更新本服榜
         return
     
-    UpdatePlayerLVBillboard(curPlayer) # 等级榜
     UpdatePlayerFPTotalBillboard(curPlayer, True) # 战斗力榜
     UpdateHorseBillboard(curPlayer, True, False) # 坐骑榜
     UpdatePyPetBillboard(curPlayer, True, False) # 灵宠榜
     UpdateRealmBillboard(curPlayer) # 境界榜
-    
-    if isAll:
-        UpdateRuneTowerBillboard(curPlayer)
-        
     return
 
 def UpdatePlayerFPTotalBillboard(curPlayer, isForceUpdate=False, isCheckRule=True):
     ##更新玩家总战斗力
-    
-    playerFightPower = PlayerControl.GetFightPower(curPlayer)
-    if not __CheckFightPowerCanUpdate(curPlayer, ChConfig.Def_PDict_FightPower_Total, playerFightPower,
-                                      isForceUpdate, isCheckRule, ChConfig.Def_PDict_FightPower_TotalEx):
-        return
-    
-    fightPower = playerFightPower % ChConfig.Def_PerPointValue
-    fightPowerEx = playerFightPower / ChConfig.Def_PerPointValue
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FightPower_Total, fightPower,
-                                       ChConfig.Def_PDictType_FightPower)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FightPower_TotalEx, fightPowerEx,
-                                       ChConfig.Def_PDictType_FightPower)
-    
-    GameWorld.DebugLog("更新总战斗力:playerFightPower=%s" % (playerFightPower), curPlayer.GetPlayerID())
-    
-    UpdatePlayerBillboard(curPlayer, ShareDefine.Def_BT_FightPower, fightPowerEx, fightPower)
+#    
+#    playerFightPower = PlayerControl.GetFightPower(curPlayer)
+#    if not __CheckFightPowerCanUpdate(curPlayer, ChConfig.Def_PDict_FightPower_Total, playerFightPower,
+#                                      isForceUpdate, isCheckRule, ChConfig.Def_PDict_FightPower_TotalEx):
+#        return
+#    
+#    fightPower = playerFightPower % ChConfig.Def_PerPointValue
+#    fightPowerEx = playerFightPower / ChConfig.Def_PerPointValue
+#    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FightPower_Total, fightPower,
+#                                       ChConfig.Def_PDictType_FightPower)
+#    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FightPower_TotalEx, fightPowerEx,
+#                                       ChConfig.Def_PDictType_FightPower)
+#    
+#    GameWorld.DebugLog("更新总战斗力:playerFightPower=%s" % (playerFightPower), curPlayer.GetPlayerID())
+#    
+#    UpdatePlayerBillboard(curPlayer, ShareDefine.Def_BT_FightPower, fightPowerEx, fightPower)
     
 #    if bType == ShareDefine.Def_BT_FightPower:
 #        playerID = bID
@@ -121,79 +112,47 @@
 #            UpdatePlayerBillboard(bID, bName, bName2, jobBType, bType2, value1, value2, cmpValue, autoSort, cmpValue2, **kwargs)
     return
 
-def __CheckFightPowerCanUpdate(curPlayer, key, fightPower, isForceUpdate=False, isCheckRule=True, key2=None):
-    ''' 检查玩家可否更新战斗力
-    @param curPlayer 玩家实例
-    @param key 战斗力类型对应key
-    @param fightPower 当前战斗力
-    @param isForceUpdate 是否强制更新(若设置强制更新,在某些潜规则下也不一定能强制更新,如GM等)
-    @param isCheckRule 是否检查战力范围更新差值
-    @return True-可更新 
-    '''
-    if fightPower <= 0:
-        return False
-    
-    historyFightPower = curPlayer.NomalDictGetProperty(key, 0, ChConfig.Def_PDictType_FightPower)
-    if key2 != None:
-        historyFightPower += curPlayer.NomalDictGetProperty(key2, 0, ChConfig.Def_PDictType_FightPower) * ChConfig.Def_PerPointValue
-        
-    if not __CanPlayerBillboardComm(curPlayer):
-        return False
-    
-    if isForceUpdate:
-        GameWorld.DebugLog("战斗力更新检查:强制更新 key=%s,fightPower=%s,history=%s" 
-                           % (key, fightPower, historyFightPower), curPlayer.GetPlayerID())
-        return True
-    
-    if fightPower == historyFightPower:
-        GameWorld.DebugLog("战斗力更新检查:与上次相同,默认不更新 key=%s,fightPower=%s,history=%s" 
-                           % (key, fightPower, historyFightPower), curPlayer.GetPlayerID())
-        return False
-    
-    return True
+#def __CheckFightPowerCanUpdate(curPlayer, key, fightPower, isForceUpdate=False, isCheckRule=True, key2=None):
+#    ''' 检查玩家可否更新战斗力
+#    @param curPlayer 玩家实例
+#    @param key 战斗力类型对应key
+#    @param fightPower 当前战斗力
+#    @param isForceUpdate 是否强制更新(若设置强制更新,在某些潜规则下也不一定能强制更新,如GM等)
+#    @param isCheckRule 是否检查战力范围更新差值
+#    @return True-可更新 
+#    '''
+#    if fightPower <= 0:
+#        return False
+#    
+#    historyFightPower = curPlayer.NomalDictGetProperty(key, 0, ChConfig.Def_PDictType_FightPower)
+#    if key2 != None:
+#        historyFightPower += curPlayer.NomalDictGetProperty(key2, 0, ChConfig.Def_PDictType_FightPower) * ChConfig.Def_PerPointValue
+#        
+#    if not __CanPlayerBillboardComm(curPlayer):
+#        return False
+#    
+#    if isForceUpdate:
+#        GameWorld.DebugLog("战斗力更新检查:强制更新 key=%s,fightPower=%s,history=%s" 
+#                           % (key, fightPower, historyFightPower), curPlayer.GetPlayerID())
+#        return True
+#    
+#    if fightPower == historyFightPower:
+#        GameWorld.DebugLog("战斗力更新检查:与上次相同,默认不更新 key=%s,fightPower=%s,history=%s" 
+#                           % (key, fightPower, historyFightPower), curPlayer.GetPlayerID())
+#        return False
+#    
+#    return True
 
 def UpdateHorseBillboard(curPlayer, isForceUpdate=False, isUpdateTotal=True):
     ##更新玩家坐骑排行榜
-    
-    HorseFightPower = PlayerControl.GetMFPFightPower(curPlayer, ShareDefine.Def_MFPType_Horse)
-    if not HorseFightPower:
-        return
-    
-    fightPower = HorseFightPower % ChConfig.Def_PerPointValue
-    fightPowerEx = HorseFightPower / ChConfig.Def_PerPointValue
-    
-    UpdatePlayerBillboard(curPlayer, ShareDefine.Def_BT_FightPower_Horse, fightPowerEx, fightPower)
-    
-    if isUpdateTotal:
-        UpdatePlayerFPTotalBillboard(curPlayer, isForceUpdate)
     return
 
 def UpdatePyPetBillboard(curPlayer, isForceUpdate=False, isUpdateTotal=True):
     ## 更新宠物排行榜
     return
-#    petMaxAtk = PlayerControl.GetPetMaxAtk(curPlayer)
-#    if not petMaxAtk:
-#        return
-#    UpdatePlayerBillboard(curPlayer, ShareDefine.Def_BT_FightPower_Pet, petMaxAtk) 
-#       
-#    if isUpdateTotal:
-#        UpdatePlayerFPTotalBillboard(curPlayer, isForceUpdate)
-#    return
-
-def UpdatePlayerLVBillboard(curPlayer, isForceUpdate=True):
-    ##更新玩家等级排行榜
-    UpdatePlayerBillboard(curPlayer, ShareDefine.Def_BT_LV, curPlayer.GetLV())
-    return
-
-def UpdateRuneTowerBillboard(curPlayer):
-    ##更新玩家符印塔排行榜
-    return
 
 def UpdateRealmBillboard(curPlayer):
     ##境界榜
-    if not curPlayer.GetOfficialRank():
-        return
-    UpdatePlayerBillboard(curPlayer, ShareDefine.Def_BT_Realm, curPlayer.GetOfficialRank())
     return
 
 def __CanPlayerBillboardComm(curPlayer):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCoin.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCoin.py
index 823bd2b..5bb9f03 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCoin.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCoin.py
@@ -45,7 +45,6 @@
 import PlayerDailyGiftbag
 import PlayerGoldGift
 import PlayerActTotalRecharge
-import PlayerActGarbageSorting
 import PlayerActRechargeRebateGold
 import PlayerActFamilyCTGAssist
 import PlayerActManyDayRecharge
@@ -782,7 +781,6 @@
     PlayerGoldGift.OnPlayerChargeGold(curPlayer)
     #累积充值X元
     PlayerActTotalRecharge.AddTotalRechargeGold(curPlayer, orderCoin, coinType)
-    PlayerActGarbageSorting.AddActGarbageTaskProgress(curPlayer, ChConfig.Def_GarbageTask_CTG, addVIPExp, coinType) # 垃圾分类
     PlayerActSingleRecharge.UpdSingleRechargeValue(curPlayer, orderCoin, coinType) # 单笔累充
     PlayerActTurntable.OnPlayerRecharge(curPlayer, orderCoin, coinType) # 转盘
     #开服活动
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
index b82cb93..b74e0cb 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
@@ -50,7 +50,6 @@
 import PlayerActTurntable
 import PlayerCostRebate
 import PlayerActLunhuidian
-import PlayerActGarbageSorting
 import GY_Query_CrossRealmReg
 import PlayerTongTianLing
 import FunctionNPCCommon
@@ -2888,7 +2887,6 @@
     if costType not in ChConfig.CostRebate_DisableType:
         PlayerCostRebate.AddCostRebateGold(curPlayer, costType, price, infoDict)
         PlayerFeastTravel.AddFeastTravelTaskValue(curPlayer, ChConfig.Def_FeastTravel_UseGold, price)
-        PlayerActGarbageSorting.AddActGarbageTaskProgress(curPlayer, ChConfig.Def_GarbageTask_UseGold, price)
     else:
         GameWorld.DebugLog("不计入消费活动的消费类型!costType=%s" % costType, curPlayer.GetPlayerID())
         
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCrossRealmPK.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCrossRealmPK.py
index 85b0bd2..e1e775c 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCrossRealmPK.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCrossRealmPK.py
@@ -24,7 +24,6 @@
 import CrossRealmPlayer
 import PlayerTongTianLing
 import FunctionNPCCommon
-import PlayerActGarbageSorting
 import DataRecordPack
 import PlayerWeekParty
 import IPY_GameWorld
@@ -364,7 +363,6 @@
         PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_FeastRedPack_CrossPK, 1)
         PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_CrossPK, 1)
         PlayerGubao.AddGubaoItemEffValue(curPlayer, PlayerGubao.GubaoEffType_CrossRealmPK, 1)
-        PlayerActGarbageSorting.AddActGarbageTaskProgress(curPlayer, ChConfig.Def_GarbageTask_CrossPK)
         PlayerTongTianLing.AddTongTianTaskValue(curPlayer, ChConfig.TTLTaskType_CrossPK, 1)
     else:
         GameWorld.Log("    不同天的PK结算不增加今日PK次数! ", playerID)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
index 6733d51..0d76246 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
@@ -50,10 +50,6 @@
 import CrossActAllRecharge
 import PlayerActCollectWords
 import PlayerActTotalRecharge
-import PlayerActGarbageSorting
-import PlayerActXianXiaMJ
-import PlayerActGubao
-import PlayerActHorsePetTrain
 import PlayerActLianqi
 import PlayerActGodGift
 import PlayerActFamilyGCZ
@@ -64,7 +60,6 @@
 import PlayerActRechargePrize
 import PlayerActGrowupBuy
 import PlayerActTurntable
-import PlayerActBossTrial
 import PlayerActBuyOne
 import PlayerSpringSale
 import PlayerBossReborn
@@ -82,7 +77,6 @@
 import PlayerFlashGiftbag
 import PlayerDailyGiftbag
 import PlayerOfflineSupport
-import PlayerActHorsePetFeast
 import PlayerFeastRedPacket
 import PlayerCrossYaomoBoss
 import PlayerLuckyCloudBuy
@@ -349,8 +343,6 @@
     PlayerWishingWell.OnDay(curPlayer)
     #通天令
     PlayerTongTianLing.OnDay(curPlayer, onEventType)
-    #boss凭证
-    PlayerActBossTrial.PlayerOnDay(curPlayer, onEventType)
     #任务活动
     PlayerActTask.OnDay(curPlayer)
     #登录活动
@@ -943,18 +935,6 @@
             elif actionName == ShareDefine.OperationActionName_TotalRecharge:
                 PlayerActTotalRecharge.RefreshTotalRechargeActionInfo(actNum)
                 
-            elif actionName == ShareDefine.OperationActionName_GarbageSorting:
-                PlayerActGarbageSorting.RefreshGarbageSortingActionInfo(actNum)
-                
-            elif actionName == ShareDefine.OperationActionName_XianXiaMJ:
-                PlayerActXianXiaMJ.RefreshXianXiaMJActionInfo(actNum)
-                
-            elif actionName == ShareDefine.OperationActionName_Gubao:
-                PlayerActGubao.RefreshGubaoActionInfo(actNum)
-                
-            elif actionName == ShareDefine.OperationActionName_HorsePetTrain:
-                PlayerActHorsePetTrain.RefreshHorsePetTrainActionInfo(actNum)
-                
             elif actionName == ShareDefine.OperationActionName_GodGift:
                 PlayerActGodGift.RefreshGodGiftActionInfo(actNum)
                 
@@ -972,12 +952,6 @@
 
             elif actionName == ShareDefine.OperationActionName_BossReborn:
                 PlayerBossReborn.RefreshOperationAction_BossReborn()
-                
-            elif actionName == ShareDefine.OperationActionName_BossTrial:
-                PlayerActBossTrial.RefreshBossTrialActionInfo(actNum)
-                
-            elif actionName == ShareDefine.OperationActionName_HorsePetFeast:
-                PlayerActHorsePetFeast.RefreshOperationAction_HorsePetFeast(actNum)
                 
             elif actionName == ShareDefine.OperationActionName_FlashGiftbag:
                 PlayerFlashGiftbag.RefreshFlashGiftbagActionInfo(actNum)
@@ -1067,18 +1041,6 @@
                 
             elif actionName == ShareDefine.CrossActName_AllRecharge:
                 CrossActAllRecharge.RefreshCrossActAllRechargeInfo()
-                
-            elif actionName == ShareDefine.CrossActName_BossTrial:
-                PlayerActBossTrial.RefreshCrossActBossTrialInfo()
-                
-            elif actionName == ShareDefine.CrossActName_XianXiaMJ:
-                PlayerActXianXiaMJ.RefreshCrossActXianXiaMJInfo()
-                
-            elif actionName == ShareDefine.CrossActName_Gubao:
-                PlayerActGubao.RefreshCrossActGubaoInfo()
-                
-            elif actionName == ShareDefine.CrossActName_HorsePetTrain:
-                PlayerActHorsePetTrain.RefreshCrossActHorsePetTrainInfo()
                 
             elif actionName == ShareDefine.CrossActName_Lianqi:
                 PlayerActLianqi.RefreshCrossActLianqiInfo()
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGubao.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGubao.py
index 9f27a19..7e736f6 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGubao.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGubao.py
@@ -29,7 +29,6 @@
 import ChConfig
 import ItemControler
 import PlayerDienstgrad
-import PlayerActGubao
 import PlayerActTask
 import PlayerCoat
 
@@ -168,7 +167,6 @@
     RefreshGubaoAttr(curPlayer)
     Sync_GubaoInfo(curPlayer, [gubaoID])
     
-    PlayerActGubao.OnGubaoCost(curPlayer, needPieceInfo, realNeedItemList)
     return
 
 #// B2 17 古宝升星 #tagCMGubaoStarUp
@@ -265,7 +263,6 @@
     RefreshGubaoAttr(curPlayer)
     Sync_GubaoInfo(curPlayer, [gubaoID])
     
-    PlayerActGubao.OnGubaoCost(curPlayer, needPieceInfo, realNeedItemList)
     PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_GubaoStarUp)
     return
 
@@ -397,7 +394,6 @@
     RefreshGubaoAttr(curPlayer)
     Sync_GubaoInfo(curPlayer, [gubaoID])
     
-    PlayerActGubao.OnGubaoCost(curPlayer, needPieceInfo, realNeedItemList)
     PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_GubaoLVUp)
     return
 
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHorse.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHorse.py
index 519373b..3e672e3 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHorse.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHorse.py
@@ -33,7 +33,6 @@
 import CrossPlayerData
 import PlayerSuccess
 import PlayerActLunhuidian
-import PlayerActHorsePetTrain
 import PlayerActTask
 import PlayerPet
 
@@ -649,7 +648,6 @@
     # 刷属性,更新排行榜
     RefreshHorseAttr(curPlayer)
     
-    PlayerActHorsePetTrain.OnHorsePetTrainCost(curPlayer, {costItemID:costItemCount})
     PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_HorseUpItem, costItemCount)
     PlayerActLunhuidian.AddLunhuidianValue(curPlayer, PlayerActLunhuidian.AwardType_UseItem, costItemID, costItemCount)
     return
@@ -732,7 +730,6 @@
     # 刷属性,更新排行榜
     RefreshHorseAttr(curPlayer)
     
-    PlayerActHorsePetTrain.OnHorsePetTrainCost(curPlayer, {costItemID:costItemCount})
     if trainType == 2:
         PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_HorseTrainItem2, costItemCount)
     elif trainType == 3:
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerPet.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerPet.py
index 512cd75..7707b0b 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerPet.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerPet.py
@@ -43,7 +43,6 @@
 import ChPyNetSendPack
 import NetPackCommon
 import PlayerActLunhuidian
-import PlayerActHorsePetTrain
 import PlayerActTask
 import PlayerHorse
 import GameObj
@@ -767,7 +766,6 @@
         
     #EventReport.WriteEvent_pet_class(curPlayer, petNpcData.GetName(), classLV, petClassExp, updClassLV, newClassExp)
     
-    PlayerActHorsePetTrain.OnHorsePetTrainCost(curPlayer, {autoBuyItemID:costItemCount})
     PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_PetUpItem, costItemCount)
     PlayerActLunhuidian.AddLunhuidianValue(curPlayer, PlayerActLunhuidian.AwardType_UseItem, autoBuyItemID, costItemCount)
     return
@@ -1119,7 +1117,6 @@
     # 刷属性,更新排行榜
     RefreshPetItemAddAttr(curPlayer, True)
     
-    PlayerActHorsePetTrain.OnHorsePetTrainCost(curPlayer, {costItemID:costItemCount})
     if trainType == 2:
         PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_PetTrainItem2, costItemCount)
     elif trainType == 3:
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerZhanling.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerZhanling.py
index 34df084..46574db 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerZhanling.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerZhanling.py
@@ -21,8 +21,6 @@
 import IpyGameDataPY
 import PlayerControl
 import ChPyNetSendPack
-import PlayerActHorsePetTrain
-import PlayerActGubao
 import ItemControler
 import IPY_GameWorld
 import PlayerGubao
@@ -38,8 +36,8 @@
 ZhanlingType_GubaoStar, # 古宝总星数 4
 ZhanlingType_Login, # 登录 5
 ZhanlingType_GatherTheSoulLV, # 聚魂 6
-ZhanlingType_HorsePetTrain, # 骑宠养成 7
-ZhanlingType_GubaoTrain, # 古宝养成 8
+ZhanlingType_7, # 骑宠养成 7
+ZhanlingType_8, # 古宝养成 8
 ZhanlingType_Xianyuan, # 仙缘 9
 ZhanlingType_Huanjingge, # 幻境阁 10
 ZhanlingType_Lianqi, # 炼器 11
@@ -241,10 +239,6 @@
         if not firstLoginTime:
             return
         curValue = GameWorld.GetDiff_Day(int(time.time()), firstLoginTime) + 1      
-    elif zhanlingType == ZhanlingType_HorsePetTrain:
-        curValue = PlayerActHorsePetTrain.GetActHorsePetTrainScore(curPlayer)
-    elif zhanlingType == ZhanlingType_GubaoTrain:
-        curValue = PlayerActGubao.GetActGubaoTrainScore(curPlayer)
     elif zhanlingType == ZhanlingType_Xianyuan:
         curValue = PlayerControl.GetMoney(curPlayer, ShareDefine.TYPE_Price_XianyuanScore)
     elif zhanlingType in ZhanlingValue1TypeList:
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
index 08ac90f..02a556f 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
@@ -313,18 +313,12 @@
 OperationActionName_ManyDayRecharge = "ActManyDayRecharge" # 多日连充活动
 OperationActionName_SingleRecharge = "ActSingleRecharge" # 单笔累充活动
 OperationActionName_Turntable = "ActTurntable" # 转盘活动
-OperationActionName_HorsePetFeast = "ActHorsePetFeast" # 骑宠盛宴活动
-OperationActionName_GarbageSorting = "ActGarbageSorting" # 垃圾分类活动
-OperationActionName_XianXiaMJ = "ActXianXiaMJ" # 仙匣秘境活动
 OperationActionName_GodGift = "ActGodGift" # 天帝礼包活动
 OperationActionName_BuyOne = "ActBuyOne" # 买一送多活动
-OperationActionName_BossTrial = "ActBossTrial" # Boss历练
 OperationActionName_ActLoginNew = "ActLoginNew" # 登录活动-新
 OperationActionName_ActTask = "ActTask" # 活动任务
 OperationActionName_BuyCountGift = "ActBuyCountGift" # 购买次数礼包活动
 OperationActionName_FamilyCTGAssist = "ActFamilyCTGAssist" # 仙盟充值协助
-OperationActionName_Gubao = "ActGubao" # 古宝养成活动
-OperationActionName_HorsePetTrain = "ActHorsePetTrain" # 骑宠养成活动
 OperationActionName_Yunshi = "ActYunshi" # 运势活动
 OperationActionName_Lunhuidian = "ActLunhuidian" # 轮回殿活动
 #节日活动类型列表 - 该类型无视开服天,日期到了就开启
@@ -344,12 +338,12 @@
                            OperationActionName_NewFairyCeremony, OperationActionName_LuckyTreasure,
                            OperationActionName_DailyGiftbag, OperationActionName_SingleRecharge,
                            OperationActionName_CollectWords, OperationActionName_ManyDayRecharge,
-                           OperationActionName_Turntable, OperationActionName_HorsePetFeast, OperationActionName_GarbageSorting,
-                           OperationActionName_XianXiaMJ, OperationActionName_GodGift,
-                           OperationActionName_BuyOne, OperationActionName_BossTrial,
+                           OperationActionName_Turntable,
+                           OperationActionName_GodGift,
+                           OperationActionName_BuyOne,
                            OperationActionName_ActLoginNew, OperationActionName_ActTask,
                            OperationActionName_BuyCountGift, OperationActionName_FamilyCTGAssist,
-                           OperationActionName_Gubao, OperationActionName_HorsePetTrain, OperationActionName_Yunshi,
+                           OperationActionName_Yunshi,
                            OperationActionName_Lunhuidian,
                            ] + FeastOperationActionNameList
 #需要记录开启活动时的世界等级的运营活动
@@ -360,8 +354,8 @@
                                    OperationActionName_SpringSale, OperationActionName_LuckyTreasure,
                                    OperationActionName_DailyGiftbag, OperationActionName_GrowupBuy,
                                    OperationActionName_WeekParty, OperationActionName_Turntable,
-                                   OperationActionName_CollectWords, OperationActionName_GarbageSorting,
-                                   OperationActionName_FeastLogin, OperationActionName_XianXiaMJ,
+                                   OperationActionName_CollectWords,
+                                   OperationActionName_FeastLogin,
                                    OperationActionName_FeastWish, OperationActionName_FeastTravel,
                                    OperationActionName_ManyDayRecharge, OperationActionName_SingleRecharge,
                                    OperationActionName_GodGift,
@@ -372,12 +366,12 @@
                                    OperationActionName_FlashGiftbag, OperationActionName_CostRebate,
                                    OperationActionName_SpringSale, OperationActionName_FlashSale,
                                    OperationActionName_ManyDayRecharge, OperationActionName_SingleRecharge,
-                                   OperationActionName_Turntable, OperationActionName_HorsePetFeast, OperationActionName_GarbageSorting,
-                                   OperationActionName_XianXiaMJ, OperationActionName_GodGift,
-                                   OperationActionName_BuyOne, OperationActionName_BossTrial,
+                                   OperationActionName_Turntable,
+                                   OperationActionName_GodGift,
+                                   OperationActionName_BuyOne,
                                    OperationActionName_ActLoginNew, OperationActionName_ActTask,
                                    OperationActionName_BuyCountGift, OperationActionName_FamilyCTGAssist,
-                                   OperationActionName_Gubao, OperationActionName_HorsePetTrain, OperationActionName_Yunshi,
+                                   OperationActionName_Yunshi,
                                    OperationActionName_Lunhuidian,
                                    ]
 
@@ -385,16 +379,12 @@
 CrossActName_CTGBillboard = "CrossActCTGBillboard" # 充值排行榜
 CrossActName_AllRecharge = "CrossActAllRecharge" # 全民充值
 CrossActName_LuckyCloudBuy = "CrossActLuckyCloudBuy" # 幸运云购
-CrossActName_BossTrial = "CrossActBossTrial" # Boss历练 - 跨服
-CrossActName_XianXiaMJ = "CrossActXianXiaMJ" # 仙匣秘境 - 跨服
-CrossActName_Gubao = "CrossActGubao" # 古宝养成 - 跨服
-CrossActName_HorsePetTrain = "CrossActHorsePetTrain" # 骑宠养成 - 跨服
 CrossActName_Lianqi = "CrossActLianqi" # 炼器 - 跨服
 CrossActName_FamilyGCZ = "CrossActFamilyGCZ" # 仙盟攻城战
 
 #跨服运营活动列表
-CrossActNameList = [CrossActName_CTGBillboard, CrossActName_AllRecharge, CrossActName_LuckyCloudBuy, CrossActName_BossTrial, 
-                    CrossActName_XianXiaMJ, CrossActName_Gubao, CrossActName_HorsePetTrain, CrossActName_Lianqi, CrossActName_FamilyGCZ]
+CrossActNameList = [CrossActName_CTGBillboard, CrossActName_AllRecharge, CrossActName_LuckyCloudBuy, 
+                    CrossActName_Lianqi, CrossActName_FamilyGCZ]
 #需要锁定活动分区分配直到活动结束的跨服运营活动,即使热更分区配置,也不会改变正在活动中的分区设定,直到活动结束
 CrossActLockServerGroupIDList = [CrossActName_CTGBillboard, CrossActName_AllRecharge]
 
@@ -475,54 +465,8 @@
 #排行榜类型BillboardType
 #此地方改动需要通知修改ChConfig.Def_BT_Cnt, ChConfig.Def_BT_SaveType
 BillboardTypeList = (
-    Def_BT_FightPower,                        #个人战斗力 0
-    Def_BT_FightPower_Warrior,                #剑修战斗力
-    Def_BT_FightPower_Wizard,                 #道师战斗力
-    Def_BT_FightPower_Assassin,               #枪豪战斗力
-    Def_BT_LV,                                #个人等级榜
-    Def_BT_FightPower_Horse,                  #坐骑战斗力 5
-    Def_BT_FightPower_Pet,                    #宠物战斗力
-    Def_BT_TrialTower,                        #天神之塔榜
-    Def_BT_OffLineEfficient,                  #脱机效率榜
-    Def_BT_Realm,                             #境界榜
-    Def_BT_TotalRecharge,                     #充值排行榜 10
-    
-    Def_BT_Campaign_Plus,                     #强化战力(开服活动榜)
-    Def_BT_Campaign_Horse,                    #坐骑战力(开服活动榜)
-    Def_BT_Campaign_StoneLV,                  #宝石等级(开服活动榜)
-    Def_BT_Campaign_LV,                       #冲级排行(开服活动榜)
-    Def_BT_Campaign_RealmLV,                  #境界等级(开服活动榜) 15
-    Def_BT_Campaign_FightPower,               #战力排行(开服活动榜)
-    
-    Def_BT_FCCostGold,                        #消费排行榜(仙界盛典)
-    Def_BT_Campaign_RuneLV,                   #符印等级(开服活动榜)
-    Def_BT_19,
-    Def_BT_Campaign_GodWeaponLV,              #神兵等级(开服活动榜) 20
-    Def_BT_Campaign_Recharge,                 #累计充值(开服活动榜)
-    Def_BT_Campaign_PetLV,                    #灵宠等级(开服活动榜)
-    
-    Def_BT_NewFCCostGold,                     #消费排行榜(新仙界盛典)
-    Def_BT_Campaign_LingGen,                  #灵根总点(开服活动榜)
-    Def_BT_Campaign_StarLV,                   #升星等级(开服活动榜) 25
-    Def_BT_Campaign_Wash,                     #洗练战力(开服活动榜)
-    
-    Def_BT_SkyTower,                          #天星塔榜
-    Def_BT_Arena,                             #竞技场榜
-    Def_BT_Environment,                       #环保榜 (垃圾分类活动)
-    Def_BT_CharmTotal, #魅力总榜 30
-    Def_BT_CharmWeek, #魅力周榜
-    Def_BT_CharmDay, #魅力日榜
-    Def_BT_BossTrialSubmit,                   #提交boss凭证榜 (boss历练活动)
-    Def_BT_AlineInvade,                       #异兽入侵
-    Def_BT_BossTrialSubmitBak,                #提交boss凭证榜 (boss历练活动 - 上一期) 35
-    Def_BT_BossTrialSubmitFamily,             #提交boss凭证仙盟榜 (boss历练活动)
-    Def_BT_BossTrialSubmitFamilyBak,          #提交boss凭证仙盟榜 (boss历练活动 - 上一期)
-    Def_BT_XianXiaMJScore,                    #仙匣秘境积分榜 (仙匣秘境活动)
-    Def_BT_GubaoScore,                        #古宝养成积分榜 (古宝养成活动)
-    Def_BT_HorsePetTrainScore,                #骑宠养成积分榜 (骑宠养成活动) 40
-    
-    Def_BT_Max, #排行榜最大类型
-) = range(0, 40 + 2) 
+Def_BT_MainLevel,    # 主线关卡过关榜 0
+) = range(0, 1) 
 
 ''' 跨服排行榜类型, 从 150 开始,最大条数在功能配置表 CrossBillboardSet 配置,没配默认100
 与本服榜单存储的是不一样的数据库表格,理论上类型可以和本服榜单类型重复,为了做下区分防误导,跨服榜单从 150 开始
@@ -531,44 +475,15 @@
 '''
 CrossBillboardTypeList = (
 Def_CBT_ActCTG, # 跨服运营活动 - 充值榜 150
-Def_CBT_BattlefieldWJoin, # 跨服战场每周参与榜  151
-Def_CBT_BattlefieldWCall, # 跨服战场每周召集榜  152
-Def_CBT_BattlefieldWScore, # 跨服战场每周积分榜  153
-Def_CBT_BattlefieldWScoreLastWeek, # 跨服战场上周积分榜  154
-Def_CBT_YaomoBossHurt, # 跨服妖魔boss最新一次伤血排名  155
-Def_CBT_FamilyFlagwar, # 逐鹿万界 - 单场榜  156
-Def_CBT_FamilyFlagwarWeek, # 逐鹿万界 - 周总榜  157
-Def_CBT_BossTrialSubmit, # boss凭证 - 个人榜  158
-Def_CBT_BossTrialSubmitBak, # boss凭证 - 个人榜 上一期  159
-Def_CBT_BossTrialSubmitFamily, # boss凭证 - 仙盟榜  160
-Def_CBT_BossTrialSubmitFamilyBak, # boss凭证 - 仙盟榜 上一期  161
-Def_CBT_XianXiaMJScore, # 仙匣秘境积分 - 个人榜  162
-Def_CBT_GubaoScore, # 古宝养成积分 - 个人榜  163
-Def_CBT_HorsePetTrainScore, # 骑宠养成积分 - 个人榜  164
-Def_CBT_CrossRealmPK, # 跨服PK竞技场  165
-Def_CBT_LianqiScore, # 炼器积分 - 个人榜  166
-Def_CBT_FamilyGCZScore, # 仙盟攻城战 - 仙盟积分总榜  167 (zoneID, 0)
-Def_CBT_FamilyGCZPlayerHurt, # 仙盟攻城战 - 玩家伤害总榜  168 (zoneID, 0)
-Def_CBT_FamilyGCZRoundHurt, # 仙盟攻城战 - 本轮分组仙盟伤害榜  169 (zoneID, batType*100+groupNum)
-) = range(150, 169 + 1)
+) = range(150, 150 + 1)
 
 BillboardTypeAllList = BillboardTypeList + CrossBillboardTypeList
 
 #仙盟榜单类型
-FamilyBillboardList = [Def_BT_BossTrialSubmitFamily, Def_BT_BossTrialSubmitFamilyBak, Def_CBT_FamilyGCZScore, Def_CBT_FamilyGCZRoundHurt]
-
-#职业对应战力排行榜类型
-JobFightPowerBillboardDict = {
-                              PlayerJob_Warrior:Def_BT_FightPower_Warrior,
-                              PlayerJob_Wizard:Def_BT_FightPower_Wizard,
-                              PlayerJob_Assassin:Def_BT_FightPower_Assassin,
-                              }
+FamilyBillboardList = []
 
 #排行榜Value1存储境界信息的榜单列表
-BTValue1_OfficialRankList = [Def_BT_FightPower, Def_BT_FightPower_Warrior, Def_BT_FightPower_Wizard, Def_BT_FightPower_Assassin, 
-                             Def_BT_LV, Def_BT_FightPower_Horse, Def_BT_FightPower_Pet, Def_BT_TrialTower, Def_BT_OffLineEfficient,
-                             Def_BT_SkyTower, Def_BT_CharmTotal, Def_BT_CharmWeek, Def_BT_CharmDay
-                             ]
+BTValue1_OfficialRankList = [Def_BT_MainLevel]
 
 ##---比率---
 #百分率
@@ -788,11 +703,11 @@
 CDBPlayerRefresh_SuperDamPer, # 强化暴伤 259
 CDBPlayerRefresh_SuperDamPerDef, # 弱化暴伤 260
 CDBPlayerRefresh_Lingyu, # 灵玉 261
-CDBPlayerRefresh_BossTrial, # 凭证积分 262
+CDBPlayerRefresh_262, # 凭证积分 262
 CDBPlayerRefresh_GatherSoul, # 聚魂精华 263
 CDBPlayerRefresh_BossFinalHurtPer,  # Boss最终输出伤害百分比 264
-CDBPlayerRefresh_HorsePetTrainScore, # 骑宠养成积分 265
-CDBPlayerRefresh_GubaoTrainScore, # 古宝养成积分 266
+CDBPlayerRefresh_265, # 骑宠养成积分 265
+CDBPlayerRefresh_266, # 古宝养成积分 266
 CDBPlayerRefresh_TiandaoFruit, # 天道果 267
 CDBPlayerRefresh_Tuijinbi, # 推金币 268
 CDBPlayerRefresh_PayCoinDay, # 代币时效 269
@@ -843,10 +758,10 @@
 TYPE_Price_FamilyFlagWarPoint = 40    # 万界积分
 TYPE_Price_Xiantao = 41    # 仙桃/战锤
 TYPE_Price_Lingyu = 42    # 灵玉/将星玉髓
-TYPE_Price_BossTrial = 43    # boss历练凭证积分
+TYPE_Price_43 = 43    # boss历练凭证积分
 TYPE_Price_GatherSoul = 44    # 聚魂精华
-TYPE_Price_HorsePetTrainScore = 45    # 骑宠养成积分
-TYPE_Price_GubaoTrainScore = 46    # 古宝养成积分
+TYPE_Price_45 = 45    # 骑宠养成积分
+TYPE_Price_46 = 46    # 古宝养成积分
 TYPE_Price_TiandaoFruit = 47    # 天道果
 TYPE_Price_Tuijinbi = 48    # 推金币
 TYPE_Price_XianyuanScore = 49    # 仙缘积分
@@ -858,13 +773,17 @@
 
 #key可用于遍历所有货币,value仅GM相关会用到
 MoneyNameDict = {
-                 1:"仙玉", 2:"绑玉", 3:"铜钱", 6:"战盟贡献度", 10:"战盟仓库积分", 13:"境界修行点", 14:"符印融合石", 15:"仙盟活跃令", 
-                 16:"助战积分", 18:"荣誉", 19:"Boss积分", 23:"符印精华", 24:"符印碎片", 25:"寻宝积分", 26:"集市额度", 27:"丹精", 28:"魂尘", 
-                 29:"聚魂碎片", 30:"核心环", 31:"功能特权令", 32:"环保值", 33:"GM令", 34:"古神币", 35:"功德点", 
-                 39:"成就积分", 40:"万界积分", 41:"战锤", 42:"将星玉髓", 43:"凭证积分", 44:"聚魂精华", 45:"骑宠养成积分", 46:"古宝养成积分", 47:"天道果", 
-                 49:"仙缘积分", 50:"幻境阁积分", 51:"招募积分", 52:"淘金令",
+                 1:"金币", 41:"战锤", 42:"将星玉髓", 51:"招募积分", 52:"淘金令",
                  98:"代币时效", 99:"代币"
                  }
+#MoneyNameDict = {
+#                 1:"仙玉", 2:"绑玉", 3:"铜钱", 6:"战盟贡献度", 10:"战盟仓库积分", 13:"境界修行点", 14:"符印融合石", 15:"仙盟活跃令", 
+#                 16:"助战积分", 18:"荣誉", 19:"Boss积分", 23:"符印精华", 24:"符印碎片", 25:"寻宝积分", 26:"集市额度", 27:"丹精", 28:"魂尘", 
+#                 29:"聚魂碎片", 30:"核心环", 31:"功能特权令", 32:"环保值", 33:"GM令", 34:"古神币", 35:"功德点", 
+#                 39:"成就积分", 40:"万界积分", 41:"战锤", 42:"将星玉髓", 43:"凭证积分", 44:"聚魂精华", 46:"古宝养成积分", 47:"天道果", 
+#                 49:"仙缘积分", 50:"幻境阁积分", 51:"招募积分", 52:"淘金令",
+#                 98:"代币时效", 99:"代币"
+#                 }
 
 #需要记录累计消耗的货币类型
 UseTotalPriceTypeList = [TYPE_Price_TiandaoFruit]
@@ -900,10 +819,7 @@
                            TYPE_Price_Xiantao:CDBPlayerRefresh_Xiantao,
                            TYPE_Price_Lingyu:CDBPlayerRefresh_Lingyu,
                            TYPE_Price_FamilyFlagWarPoint:CDBPlayerRefresh_FamilyFlagWarPoint,
-                           TYPE_Price_BossTrial:CDBPlayerRefresh_BossTrial,
                            TYPE_Price_GatherSoul:CDBPlayerRefresh_GatherSoul,
-                           TYPE_Price_HorsePetTrainScore:CDBPlayerRefresh_HorsePetTrainScore,
-                           TYPE_Price_GubaoTrainScore:CDBPlayerRefresh_GubaoTrainScore,
                            TYPE_Price_TiandaoFruit:CDBPlayerRefresh_TiandaoFruit,
                            TYPE_Price_XianyuanScore:CDBPlayerRefresh_XianyuanScore,
                            TYPE_Price_HuanjinggeScore:CDBPlayerRefresh_HuanjinggeScore,
@@ -1010,16 +926,15 @@
 Def_WorshipTypeList = (
                        Def_WorshipType_ServerNaming, # 服务器冠名 1
                        Def_WorshipType_CrossChampionship, # 跨服排位冠军 2
-                       Def_WorshipType_CrossBossTrial, # 跨服boss凭证 3
-                       Def_WorshipType_CrossXianXiaMJ, # 跨服秘境寻宝 4
-                       Def_WorshipType_CrossHorsePetTrain, # 跨服骑宠养成 5
-                       Def_WorshipType_CrossGubaoTrain, # 跨服古宝养成 6
+                       Def_WorshipType_3, # 跨服boss凭证 3
+                       Def_WorshipType_4, # 跨服秘境寻宝 4
+                       Def_WorshipType_5, # 跨服骑宠养成 5
+                       Def_WorshipType_6, # 跨服古宝养成 6
                        Def_WorshipType_FamilyGCZ, # 仙盟攻城战 7
                        ) = range(1, 1 + 7)
 
 #跨服膜拜类型
-Def_WorshipTypeCross = [Def_WorshipType_CrossChampionship, Def_WorshipType_CrossBossTrial, Def_WorshipType_CrossXianXiaMJ, 
-                        Def_WorshipType_CrossHorsePetTrain, Def_WorshipType_CrossGubaoTrain, Def_WorshipType_FamilyGCZ,
+Def_WorshipTypeCross = [Def_WorshipType_CrossChampionship, Def_WorshipType_FamilyGCZ,
                         ]
 
 #玩家记录类型
@@ -1147,7 +1062,7 @@
                       Def_ActionType_XXX10,    #10
                       Def_ActionType_OfficerModelEquip,    #记录家族有职位的成员模型装备信息11
                       Def_ActionType_FamilyEvent,    #记录家族事件12
-                      Def_ActionType_BossTrialSubmit,    #boss凭证提交 13
+                      Def_ActionType_13,    #boss凭证提交 13
                       Def_ActionType_FamilyCTGAssist,    #仙盟充值协助活动 14
                       Def_ActionType_FamilyEmblem,    #仙盟时效徽章信息 15
                       Def_ActionType_Zhenbaoge,    #珍宝阁 16
@@ -1220,19 +1135,6 @@
 
 # 活动类型对应的奖励排行榜{活动类型:排行榜, ...}
 Def_Campaign_Billboard_Dict = {
-                               Def_Campaign_Type_Plus:Def_BT_Campaign_Plus,
-                               Def_Campaign_Type_Horse:Def_BT_Campaign_Horse,
-                               Def_Campaign_Type_StoneLV:Def_BT_Campaign_StoneLV,
-                               Def_Campaign_Type_LV:Def_BT_Campaign_LV,
-                               Def_Campaign_Type_RealmLV:Def_BT_Campaign_RealmLV,
-                               Def_Campaign_Type_FightPower:Def_BT_Campaign_FightPower,
-                               Def_Campaign_Type_RuneLV:Def_BT_Campaign_RuneLV,
-                               Def_Campaign_Type_GodWeaponLV:Def_BT_Campaign_GodWeaponLV,
-                               Def_Campaign_Type_Recharge:Def_BT_Campaign_Recharge,
-                               Def_Campaign_Type_PetLV:Def_BT_Campaign_PetLV,
-                               Def_Campaign_Type_LingGen:Def_BT_Campaign_LingGen,
-                               Def_Campaign_Type_StarLV:Def_BT_Campaign_StarLV,
-                               Def_Campaign_Type_Wash:Def_BT_Campaign_Wash,
                                }
 
 #队伍最大人数
@@ -1300,7 +1202,6 @@
 CrossServerMsg_CrossDailyActionState = "CrossDailyActionState" # 跨服日常任务状态信息
 CrossServerMsg_CrossYaomoBossHurtInfo = "CrossYaomoBossHurtInfo" # 跨服妖魔boss玩家伤害信息
 CrossServerMsg_FamilyFlagwarOver = "FamilyFlagwarOver"  # 逐鹿万界结算信息
-CrossServerMsg_CrossBossTrialFamilyAward = "CrossBossTrialFamilyAward"  # 跨服boss历练仙盟奖励结算
 CrossServerMsg_Worship = "Worship"  # 膜拜信息
 CrossServerMsg_Xiangong = "Xiangong"  # 仙宫信息
 CrossServerMsg_FuncTeamInfo = "FuncTeamInfo"  # 功能队伍信息同步
@@ -1347,14 +1248,10 @@
 ClientServerMsg_ChampionshipWorship = "ChampionshipWorship" # 跨服排位膜拜
 ClientServerMsg_ActAllRechargeValue = "ActAllRechargeValue" # 跨服全民充值额度
 ClientServerMsg_CrossYaomoBossHurtAward = "CrossYaomoBossHurtAward" # 跨服妖魔boss玩家伤害领奖
-ClientServerMsg_BossTrialSubmit = "BossTrialSubmit" # boss凭证提交
-ClientServerMsg_XianXiaMJScore = "XianXiaMJScore" # 仙匣秘境积分
 ClientServerMsg_CreateFuncTeam = "CreateFuncTeam"   # 创建功能队伍
 ClientServerMsg_ChangeFuncTeam = "ChangeFuncTeam"   # 修改功能队伍
 ClientServerMsg_FuncTeamMemOP = "FuncTeamMemOP"   # 功能队伍成员操作
 ClientServerMsg_QueryFuncTeam = "QueryFuncTeam"   # 查询功能队伍
-ClientServerMsg_GubaoScore = "GubaoScore" # 古宝养成积分
-ClientServerMsg_HorsePetTrainScore = "HorsePetTrainScore" # 骑宠养成积分
 ClientServerMsg_QueryXiangong = "QueryXiangong" # 查看仙宫仙名录
 ClientServerMsg_LianqiScore = "LianqiScore" # 炼器积分
 ClientServerMsg_SyncFamilyInfo = "SyncFamilyInfo" # 仙盟信息同步

--
Gitblit v1.8.0