From 4c8a4908e7e0ab1575e6e9a0093f54bd63d85b6f Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期三, 04 二月 2026 21:07:17 +0800
Subject: [PATCH] 16 卡牌服务端(删除无用跨服管理模块、跨服功能、其他废弃代码;)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/ExitFB.py                     |    7 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/FunctionNPCShopBuyCheck.py |    3 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBLogic.py                 |   33 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py                       |   39 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script.ini                                       |   21 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py                            |  719 ------
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py                        | 3616 --------------------------------
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTreasure.py                  |    6 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBillboard.py                 |    4 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py                             |    6 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/EnterFB.py                    |    6 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuffEffMng.py                |    6 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActFamilyGCZ.py              |    9 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerDogz.py                      |    3 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py                          |  740 ------
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BaseAttack.py                      |    3 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py                        |  122 -
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCoin.py                      |   27 
 PySysDB/PySysDBPY.h                                                                                           |  290 --
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventShell.py                       |   11 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/GameWorldProcess.py        |   11 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py                   |  125 -
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTalk.py                      |    4 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py                            |  125 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCAI/AICommon.py                     |   38 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFlashGiftbag.py              |    2 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py        |   18 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerPrestigeSys.py               |    2 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py                     |    5 
 /dev/null                                                                                                     |   34 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/Item_Chests.py               |    7 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActLianqi.py                 |   11 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/BuffSkill.py                        |    4 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini                                    |  192 -
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/ClearFirstGold.py             |   10 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/PrintSkill.py                 |   13 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/DataRecordPack.py                         |   17 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py                          |   23 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py              |   60 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillCommon.py           |    7 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py                               |  176 -
 41 files changed, 58 insertions(+), 6,497 deletions(-)

diff --git a/PySysDB/PySysDBPY.h b/PySysDB/PySysDBPY.h
index ff3fd56..9f3c012 100644
--- a/PySysDB/PySysDBPY.h
+++ b/PySysDB/PySysDBPY.h
@@ -811,16 +811,6 @@
 	DWORD		PlusLVUPTotalExp;	//升级所需累计熟练度总值
 };
 
-//符印表
-
-struct tagRune
-{
-	DWORD		_ID;	//编号ID
-	list		AttrType;	//属性类型
-	DWORD		TowerID;	//解锁符印塔编号
-};
-
-
 //洗练表 #tagEquipWash
 
 struct	tagEquipWash
@@ -860,52 +850,6 @@
 	DWORD		FightPowerEx;	//附加战斗力
 };
 
-
-//灵兽表
-
-struct tagPetInfo
-{
-	DWORD		_ID;	//灵兽NPCID
-	BYTE		Quality;	//品质
-	char		UnlockSys;	//解锁广播提示
-	DWORD		UnLockNeedItemID;	//解锁灵兽物品ID
-	BYTE		UnLockNeedItemCnt;	//解锁所需物品数量
-	DWORD		DecomposeExp;	//分解单个解锁物品可获得升阶经验
-	BYTE		InitRank;	//灵兽初始阶数
-	WORD		MaxRank;	//灵兽最高阶数
-	WORD		UseNeedRank;	//多少阶可切换外观
-	list		SkillID;	//灵兽技能ID
-	list		SkillUnLock;	//灵兽技能解锁需要阶数
-	list		SkillUnLockSys;	//灵兽技能解锁提示
-	DWORD		InitFightPower;	//初始战力
-};
-
-//灵宠升星表
-
-struct tagPetStarUp
-{
-	DWORD		_PetNPCID;	//灵兽NPCID
-	BYTE		_PetStar;	//灵兽星级
-	list		StarUpNeedItemList;	//升下一星所需道具 [[物品ID,个数], ...]
-	list		StarAttrType;	//累计总属性类型
-	list		StarAttrValue;	//累计总属性值
-};
-
-//灵宠培养表
-
-struct tagPetTrain
-{
-	BYTE		_TrainType;	//培养类型
-	BYTE		_TrainLV;	//培养等阶
-	WORD		NeedRealmLV;	//培养所需境界
-	DWORD		EatCntTotal;	//升阶所需个数(非累计)
-	DWORD		EatCntEverytime;	//每次培养消耗x个
-	list		EatItemAttrTypeList;	//每X个培养丹增加属性类型=EatCntEverytime
-	list		EatItemAttrValueList;	//每X个培养丹增加属性值=EatCntEverytime
-	list		LVAttrTypeList;	//每级额外属性类(非累积)
-	list		LVAttrValueList;	//每级额外属性值(非累积)
-};
-
 //装备分解属性表
 
 struct tagEquipDecompose
@@ -913,28 +857,6 @@
 	WORD		_LV;	//等级
 	DWORD		UpNeedExp;	//升级所需经验数
 	dict		Attr;	//属性加成
-};
-
-
-//灵兽升阶消耗表
-
-struct tagPetClassCost
-{
-	DWORD		_PetID;	//灵兽NPCID
-	DWORD		_Class;	//灵兽阶数
-	DWORD		UpNeedExp;	//灵兽升阶所需经验数
-	DWORD		AtkAdd;	//每阶攻击力加成
-};
-
-
-//灵兽吸收装备表
-
-struct tagPetEatEquip
-{
-	BYTE		_EquipColor;	//装备品质
-	BYTE		_EquipClass;	//装备阶数
-	DWORD		Exp;	//获得灵兽升级经验
-	DWORD		FamilyStoreItemScore;	//仙盟宝库积分
 };
 
 //法器升级表
@@ -1180,22 +1102,6 @@
 	dict		AttrExDict;	//特殊属性值字典 {attrKey:value, ...}
 };
 
-//符印塔表
-
-struct tagRuneTower
-{
-	DWORD		_ID;	//塔编号
-	DWORD		RunePoint;	//过关给符印精华
-	DWORD		Ysog;	//过关给魔精
-	DWORD		NPCID;	//npcid
-	BYTE		IsNotify;	//是否广播
-	list		FixEndAward;	//固定结算奖励
-	dict		GoodDrop;	//珍稀符印通关掉落概率
-	DWORD		SweepRunePoint;	//扫荡符印精华
-	DWORD		SweepYsog;	//扫荡魔精
-	dict		SweepGoodDrop;	//扫荡珍稀符印
-};
-
 //地图表格
 
 struct tagChinMap
@@ -1293,28 +1199,6 @@
 	DWORD		NeedCnt;	//需要数量
 	list		Condition;	//辅助条件
 	list		AwardItemList;	//奖励物品列表
-};
-
-//通天令等级表
-
-struct tagTongTianLV
-{
-	WORD		_TTLV;	//通天令等级
-	WORD		LVUPPoint;	//升级所需积分(0不可升级)
-	list		CommAwardItemList;	//常规奖励物品列表 [[物品ID,个数,是否拍品], ...]
-	list		XianAwardItemList;	//仙品奖励物品列表 [[物品ID,个数,是否拍品], ...]
-	list		NotifyItemIDList;	//需要广播的物品ID列表
-};
-
-//通天令任务表
-
-struct tagTongTianTask
-{
-	WORD		_TTTaskID;	//通天任务ID(确定后不可修改)
-	BYTE		TTTaskType;	//通天任务类型
-	BYTE		IsDailyTask;	//是否每日任务
-	DWORD		FinishNeedValue;	//任务完成所需值
-	DWORD		TaskPoint;	//任务积分点奖励
 };
 
 //法宝表
@@ -1478,15 +1362,6 @@
 	BYTE		TotalMaxCount;	//所有点总怪物数
 	BYTE		RefreshSeconds;	//刷怪间隔秒
 	BYTE		RefreshPerMinutes;	//每整X分刷怪
-};
-
-//符印合成表
-
-struct tagRuneCompound
-{
-	DWORD		_TagItemID;	//合成的符印物品ID
-	list		NeedItem; //需要的物品ID
-	WORD		NeedMJ;	//需要的魔精数量
 };
 
 //资源找回表
@@ -1788,29 +1663,6 @@
 	DWORD		AddExpRate;	//经验倍率加成,万分率
 };
 
-//消费返利活动表
-
-struct tagActCostRebate
-{
-	DWORD		_CfgID;	//配置ID
-	char		StartDate;	//开启日期
-	char		EndDate;	//结束日期
-	WORD		LVLimit;	//限制等级
-	BYTE		IsDayReset;	//是否每天重置
-	list		TemplateIDList;	//模板ID列表
-};
-
-//消费返利模板表
-
-struct tagCostRebateTemplate
-{
-	DWORD		_TemplateID;	//模板ID
-	DWORD		NeedCostGold;	//需要消费仙玉数
-	BYTE		AwardIndex;		//返利奖励索引0~31,同个模板中不重复
-	dict		AwardItemList;	//返利物品信息列表 {世界等级范围:[({职业:物品ID,..},个数,是否绑定), ...]}
-	char		NotifyKey;		//全服广播key,默认两个参数(玩家名, 档位额度)
-};
-
 //买一送多活动表
 
 struct tagActBuyOne
@@ -2045,28 +1897,6 @@
     DWORD		ExpireMinutes;	//时效分钟,0永久
 };
 
-//充值返利活动表
-
-struct tagActRechargePrize
-{
-	DWORD		_CfgID;	//配置ID
-	char		StartDate;	//开启日期
-	char		EndDate;	//结束日期
-	WORD		LVLimit;	//限制等级
-	BYTE		IsDayReset;	//是否每天重置
-	list		TemplateIDList;	//模板ID列表
-};
-
-//充值返利模板表
-
-struct tagRechargePrizeTemplate
-{
-	DWORD		_TemplateID;	//模板ID
-	WORD		CTGID;	//充值表充值ID
-	DWORD		GoldPrize;		//返利仙玉数
-	BYTE		PrizeCountLimit;	//最大赠送次数
-};
-
 //累计充值活动表
 
 struct tagActTotalRecharge
@@ -2090,28 +1920,6 @@
 	BYTE		AwardIndex;		//返利奖励索引0~31,同个模板中不重复
 	dict		AwardItem;	//返利物品信息列表 {职业:[(物品ID,个数,是否绑定),...]}
 	char		NotifyKey;		//全服广播key,默认两个参数(玩家名, 档位额度)
-};
-
-//累计充值返利仙玉活动表
-
-struct tagActRechargeRebateGold
-{
-	DWORD		_CfgID;	//配置ID
-	char		StartDate;	//开启日期
-	char		EndDate;	//结束日期
-	WORD		LVLimit;	//限制等级
-	BYTE		IsDayReset;	//是否每天重置
-	list		TemplateIDList;	//模板ID列表
-};
-
-//累计充值返利仙玉模板表
-
-struct tagRechargeRebateGoldTemplate
-{
-	DWORD		_TemplateID;	//模板ID
-	DWORD		RMBMin;	//充值RMB最小值
-	DWORD		RMBMax;	//充值RMB最大值
-	WORD		RebateRate;	//返利仙玉比例百分比
 };
 
 //成长必买活动表
@@ -2296,56 +2104,6 @@
 	BYTE		_CopyMapID;	//虚拟线路ID
 	WORD		PosX;	//坐标X
 	WORD		PosY;	//坐标Y
-};
-
-//时装表
-
-struct tagCoat
-{
-	DWORD		_CoatID;	//时装编号
-	BYTE		CostQuality;	//时装品质 0-普通;1-稀有;2-传说
-	list		EquipItemID;	//装备物品ID(按职业顺序)
-	DWORD		UnlockItemID;	//材料物品ID
-	DWORD		MaxLV;	//最大星级
-	list		CostItemCnt;	//材料数量
-	dict		StarAttr;	//属性
-	DWORD		InitFightPower;	//初始战力
-};
-
-//时装柜升级表
-
-struct tagCoatChestUp
-{
-	DWORD		_LV;	//等级
-	BYTE		NeedExp;	//升级所需经验
-	dict		AddAttr;	//属性
-};
-
-//周狂欢活动时间表
-
-struct tagActWeekParty
-{
-	DWORD		_CfgID;	//配置ID
-	char		StartDate;	//开启日期
-	char		EndDate;	//结束日期
-	WORD		AdvanceMinutes;	//前端提前X分钟展示活动
-	BYTE		IsDayReset;	//是否每天重置
-	BYTE		ResetType;	//重置类型,0-0点重置;1-5点重置
-	WORD		LVLimit;	//限制等级
-	list		TemplateID;	//模板编号
-	dict		PointAward;	//总积分奖励
-};
-
-//周狂欢表
-
-struct tagWeekParty
-{
-	BYTE		_TemplateID;	//模板ID
-	BYTE		ActionType;	//活动条目ID
-	DWORD		TotalTimes;	//可完成的总次数,0表示不限次数
-	WORD		SingleTimes;	//单次领奖需要的次数
-	eval		Reward;	//奖励物品
-	WORD		Point;	//积分
 };
 
 //运势活动时间表
@@ -2539,33 +2297,6 @@
 	char		WorldNotifyKey;	//全服广播key,参数(玩家名, 物品ID, 物品数据, 个数,)
 };
 
-//节日巡礼活动时间表
-
-struct tagActFeastWeekParty
-{
-	DWORD		_CfgID;	//配置ID
-	char		StartDate;	//开启日期
-	char		EndDate;	//结束日期
-	WORD		AdvanceMinutes;	//前端提前X分钟展示活动
-	BYTE		IsDayReset;	//是否每天重置
-	BYTE		ResetType;	//重置类型,0-0点重置;1-5点重置
-	WORD		LVLimit;	//限制等级
-	list		TemplateID;	//模板编号
-	dict		PointAward;	//总积分奖励
-};
-
-//节日巡礼模板表
-
-struct tagFeastWeekParty
-{
-	BYTE		_TemplateID;	//模板ID
-	BYTE		ActionType;	//活动条目ID
-	DWORD		TotalTimes;	//可完成的总次数,0表示不限次数
-	WORD		SingleTimes;	//单次领奖需要的次数
-	list		Reward;	//奖励物品
-	WORD		Point;	//积分
-};
-
 //新仙界盛典-全民来嗨表
 
 struct tagNewAllPeopleParty
@@ -2608,27 +2339,6 @@
 	WORD		ItemCnt;	//物品数量
 	BYTE		IsBind;	//是否绑定
 	DWORD		Weight;	//权重
-};
-
-//跨服充值排行模板达标奖励表
-
-struct tagCrossActCTGBillboardDabiao
-{
-	DWORD		_TemplateID;	//模板ID
-	float		CTGNeed;	//需充值RMB
-	BYTE		AwardIndex;	//奖励记录索引,从0开始,同个模板不可重复,不可变更
-	list		AwardItemList;	//奖励物品列表[[物品ID,个数,是否拍品], ...]
-};
-
-//跨服充值排行模板名次奖励表
-
-struct tagCrossActCTGBillboardOrder
-{
-	DWORD		_TemplateID;	//模板ID
-	WORD		OrderA;	//名次A
-	WORD		OrderB;	//至名次B
-	float		CTGAtleast;	//至少充值RMB
-	list		AwardItemList;	//奖励物品列表[[物品ID,个数,是否拍品], ...]
 };
 
 //装备位背包索引映射表
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
index 8c22e53..796029f 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
@@ -58,34 +58,6 @@
 PacketSubCMD_1=0x30
 PacketCallFunc_1=OnViewBillboard
 
-;功能组队
-[PlayerFuncTeam]
-ScriptName = Player\PlayerFuncTeam.py
-Writer = hxp
-Releaser = hxp
-RegType = 0
-RegisterPackCount = 5
-
-PacketCMD_1=0xB9
-PacketSubCMD_1=0x20
-PacketCallFunc_1=OnCreateFuncTeam
-
-PacketCMD_2=0xB9
-PacketSubCMD_2=0x21
-PacketCallFunc_2=OnChangeFuncTeam
-
-PacketCMD_3=0xB9
-PacketSubCMD_3=0x22
-PacketCallFunc_3=OnFuncTeamMemOP
-
-PacketCMD_4=0xB9
-PacketSubCMD_4=0x23
-PacketCallFunc_4=OnQueryFuncTeam
-
-PacketCMD_5=0xB9
-PacketSubCMD_5=0x24
-PacketCallFunc_5=OnQueryPlayerFuncTeam
-
 ;法器
 [PlayerFaQi]
 ScriptName = Player\PlayerFaQi.py
@@ -257,30 +229,6 @@
 PacketCMD_1=0xA6
 PacketSubCMD_1=0x13
 PacketCallFunc_1=OnFamilyTaofaOP
-
-;宠物
-[PlayerPet]
-ScriptName = Player\PlayerPet.py
-Writer = hxp
-Releaser = hxp
-RegType = 0
-RegisterPackCount = 4
-
-PacketCMD_1=0xA7
-PacketSubCMD_1=0x02
-PacketCallFunc_1=OnActivatePet
-
-PacketCMD_2=0xA7
-PacketSubCMD_2=0x04
-PacketCallFunc_2=PetClassUp
-
-PacketCMD_3=0xA7
-PacketSubCMD_3=0x05
-PacketCallFunc_3=OnPetTrain
-
-PacketCMD_4=0xA7
-PacketSubCMD_4=0x06
-PacketCallFunc_4=OnPetStarUp
 
 ;幻境阁
 [PlayerHJG]
@@ -538,106 +486,6 @@
 PacketSubCMD_1 = 0x01
 PacketCallFunc_1 = GetTotalLoginDayAward
 
-;符印
-[PlayerRune]
-ScriptName = Player\PlayerRune.py
-Writer = xdh
-Releaser = xdh
-RegType = 0
-RegisterPackCount = 5
-
-PacketCMD_1=0xA5
-PacketSubCMD_1=0x65
-PacketCallFunc_1=OnRuneUp
-
-PacketCMD_2=0xA5
-PacketSubCMD_2=0x66
-PacketCallFunc_2=OnRuneDecompose
-
-PacketCMD_3=0xA5
-PacketSubCMD_3=0x67
-PacketCallFunc_3=OnRuneLock
-
-PacketCMD_4=0xA5
-PacketSubCMD_4=0x78
-PacketCallFunc_4=OnRuneCompound
-
-PacketCMD_5=0xA5
-PacketSubCMD_5=0x13
-PacketCallFunc_5=OnUnlockRuneHole
-
-;跨服排位
-[PlayerCrossChampionship]
-ScriptName = Player\PlayerCrossChampionship.py
-Writer = hxp
-Releaser = hxp
-RegType = 0
-RegisterPackCount = 4
-
-PacketCMD_1=0xC1
-PacketSubCMD_1=0x20
-PacketCallFunc_1=OnChampionshipOfficialApply
-
-PacketCMD_2=0xC1
-PacketSubCMD_2=0x21
-PacketCallFunc_2=OnChampionshipOfficialChallenge
-
-PacketCMD_3=0xC1
-PacketSubCMD_3=0x22
-PacketCallFunc_3=OnChampionshipGuess
-
-PacketCMD_4=0xC1
-PacketSubCMD_4=0x23
-PacketCallFunc_4=OnChampionshipWorship
-
-;跨服PK竞技场
-[PlayerCrossRealmPK]
-ScriptName = Player\PlayerCrossRealmPK.py
-Writer = hxp
-Releaser = hxp
-RegType = 0
-RegisterPackCount = 4
-
-PacketCMD_1=0xC1
-PacketSubCMD_1=0x01
-PacketCallFunc_1=OnCrossRealmPKMatch
-
-PacketCMD_2=0xC1
-PacketSubCMD_2=0x02
-PacketCallFunc_2=OnCrossRealmPKBuy
-
-PacketCMD_3=0xC1
-PacketSubCMD_3=0x03
-PacketCallFunc_3=OnCrossRealmPKGetAward
-
-PacketCMD_4=0xC1
-PacketSubCMD_4=0x08
-PacketCallFunc_4=OnCrossRealmPKRobotOver
-
-;跨服玩家
-[CrossRealmPlayer]
-ScriptName = Player\CrossRealmPlayer.py
-Writer = hxp
-Releaser = hxp
-RegType = 0
-RegisterPackCount = 1
-
-PacketCMD_1=0xC1
-PacketSubCMD_1=0x04
-PacketCallFunc_1=OnExitCrossRealm
-
-;幸运云购
-[PlayerLuckyCloudBuy]
-ScriptName = Player\PlayerLuckyCloudBuy.py
-Writer = hxp
-Releaser = hxp
-RegType = 0
-RegisterPackCount = 1
-
-PacketCMD_1=0xC1
-PacketSubCMD_1=0x10
-PacketCallFunc_1=OnLuckyCloudBuy
-
 ;改名功能
 [UpdatePlayerName]
 ScriptName = Player\UpdatePlayerName.py
@@ -690,30 +538,6 @@
 PacketCMD_1=0xA2
 PacketSubCMD_1=0x12
 PacketCallFunc_1=OnCMViewPlayerInfo
-
-;通天令
-[PlayerTongTianLing]
-ScriptName = Player\PlayerTongTianLing
-Writer = hxp
-Releaser = hxp
-RegType = 0
-RegisterPackCount = 4
-
-PacketCMD_1=0xA5
-PacketSubCMD_1=0x43
-PacketCallFunc_1=OnGetTongTianTaskAward
-
-PacketCMD_2=0xA5
-PacketSubCMD_2=0x44
-PacketCallFunc_2=OnGetTongTianLVAward
-
-PacketCMD_3=0xA5
-PacketSubCMD_3=0x45
-PacketCallFunc_3=OnExchangeTongTianLVPoint
-
-PacketCMD_4=0xA5
-PacketSubCMD_4=0x46
-PacketCallFunc_4=OnBuyTongTianLing
 
 ;NPC
 [NPCCommon]
@@ -774,22 +598,6 @@
 PacketCMD_2=0xA5
 PacketSubCMD_2=0x69
 PacketCallFunc_2=OnTreasureWishSelect
-
-;时装
-[PlayerCoat]
-ScriptName = Player\PlayerCoat.py
-Writer = xdh
-Releaser = xdh
-RegType = 0
-RegisterPackCount = 2
-
-PacketCMD_1=0xA5
-PacketSubCMD_1=0x0B
-PacketCallFunc_1=OnPlayerCoatUp
-
-PacketCMD_2=0xA5
-PacketSubCMD_2=0x20
-PacketCallFunc_2=OnCoatDecompose
 
 ;新定义攻击
 [NewAttack]
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script.ini b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script.ini
index 5d4ccad..6dd53c1 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script.ini
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script.ini
@@ -156,14 +156,6 @@
 ClassName = DB_PushRecharge
 FuncName = PushRecharge
 
-[CrossPlayerData]
-ScriptName = Player\CrossPlayerData.py
-Writer = alee
-Releaser = alee
-RegType = 1
-ClassName = DM_MergePlayerData
-FuncName = OnMergePlayerData
-
 ;;;;;;;;;;;;;;;;;;;;;;类初始化
 [InitNPC]
 ScriptName = NPC\ChNPC.py
@@ -323,19 +315,6 @@
 PacketCMD_5=0x3
 PacketSubCMD_5=0x21
 PacketCallFunc_5=EnterFbGameEvent
-
-;宠物
-[Pet]
-ScriptName = Player\PlayerPet.py
-Writer = chenxuewei
-Releaser = chenxuewei
-RegType = 0
-
-RegisterPackCount = 1
-
-PacketCMD_1=0x16
-PacketSubCMD_1=0x3
-PacketCallFunc_1=PetStateChange
 
 ;技能
 [Skill]
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py
index ece7992..b0e4474 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py
@@ -33,13 +33,11 @@
 import SkillCommon
 import FBLogic
 import ReadChConfig
-import PetControl
 import GameMap
 import PassiveBuffEffMng
 import GameFuncComm
 import ShareDefine
 import SkillShell
-import FormulaControl
 import IpyGameDataPY
 import PyGameData
 import GameObj
@@ -47,7 +45,6 @@
 import PlayerState
 import ChPyNetSendPack
 import NetPackCommon
-import FBCommon
 import ChNPC
 import ChNetSendPack
 import TurnAttack
@@ -697,7 +694,7 @@
         
     # NPC打NPC
     elif atkObjType == IPY_GameWorld.gotNPC and defObjType == IPY_GameWorld.gotNPC:
-        if PetControl.IsPet(attacker) or attacker.GetGameNPCObjType()== IPY_GameWorld.gnotSummon:
+        if attacker.GetGameNPCObjType()== IPY_GameWorld.gnotSummon:
             ##击杀次数判断
             #if not CheckKillNPCByCnt(attacker, defender, False):
             #    ownerPlayer = GetAttackPlayer(attacker)[0]
@@ -882,12 +879,6 @@
                 # 召唤兽主人为玩家
                 if summonOwner and summonOwner.GetGameObjType() == IPY_GameWorld.gotPlayer:
                     return summonOwner, npcObjType
-            
-    # 判断宠物主人
-    elif npcObjType == IPY_GameWorld.gnotPet:
-        ownerPlayer = PetControl.GetPetOwner(atkObj)
-        if ownerPlayer != None:
-            return ownerPlayer, npcObjType
         
     return None, None
 
@@ -1603,8 +1594,7 @@
             
     elif defObjType == IPY_GameWorld.gotNPC:
         if defObj.GetGameNPCObjType() == IPY_GameWorld.gnotPet:
-            #设置宠物剩余血量
-            PetControl.SetPetHP(defObj, remainHP)
+            pass
             
         elif defObj.GetType() == ChConfig.ntHelpBattleRobot:
             remainHP = min(dHP, max(GameObj.GetMaxHP(defObj)/2, remainHP)) # 助战机器人剩余血量不能少于一半
@@ -2191,7 +2181,7 @@
 # @param None
 # @return 攻击形式字符串
 def GetAtkState(atkObj, defObj):
-    isPet = PetControl.IsPet(atkObj)
+    isPet = False
     if IsPVENPCObj(atkObj) or IsPVENPCObj(defObj):
         return 'PVE_%s' if not isPet else 'PetVE_%s'
     
@@ -2279,7 +2269,7 @@
     if atkObjType == IPY_GameWorld.gotNPC:
         #宠物回血
         if atkObj.GetGameNPCObjType() == IPY_GameWorld.gnotPet:
-            PetControl.SetPetHP(atkObj, remainHP)
+            pass
         #普通NPC回血
         else:
             GameObj.SetHP(atkObj, remainHP)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BaseAttack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BaseAttack.py
index bab8a5e..1db9771 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BaseAttack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BaseAttack.py
@@ -29,7 +29,6 @@
 import BuffSkill
 import FBLogic
 import SkillShell
-import PetControl
 import random
 import OperControlManager
 import DataRecordPack
@@ -1919,7 +1918,7 @@
     
     #宠物找到主人进入战斗状态,光环技能不进入
     if curNPC.GetGameNPCObjType() == IPY_GameWorld.gnotPet:
-        curPlayer = PetControl.GetPetOwner(curNPC)
+        curPlayer = None
         
         if curPlayer != None and GameObj.GetHP(curPlayer) > 0:
             if curSkill == None or curSkill.GetSkillType() not in ChConfig.Def_NoBattleState_List: 
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index 7100543..31fb91f 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -3153,8 +3153,8 @@
 Def_PDictType_Default,  # 默认
 Def_PDictType_FlashSale, #限时抢购
 Def_PDictType_LVAward,  # 等级奖励领取信息记录
-Def_PDictType_WeekParty, #周狂欢
-Def_PDictType_FeastWeekParty,    # 节日巡礼
+Def_PDictType_3,
+Def_PDictType_4,
 Def_PDictType_LoginAward,    # 登录奖励运营活动
 Def_PDictType_FB,    # 副本相关
 Def_PDictType_FlashSaleMix, #限时抢购 合服
@@ -3423,39 +3423,12 @@
 Def_PDict_FreeGoodsOpenTime = "FreeGoodsOpenTime" #极品白拿开启时间
 Def_PDict_FreeGoodsBuyState = "FreeGoodsBuyState_%s" #极品白拿购买状态,参数编号  0-未买 time值-购买时间 1-已返还
 
-#跨服充值排行活动
-Def_PDict_CA_CTGBillboardID = "CA_CTGBillboardID"  # 玩家身上的活动ID,唯一标识,取活动开始日期time值
-Def_PDict_CA_CTGBillboardTemplateID = "CA_CTGBillboardTemplateID"  # 玩家身上活动模板ID
-Def_PDict_CA_CTGBillboardRMB = "CA_CTGBillboardRMB"  # 活动累计充值RMB值
-Def_PDict_CA_CTGBillboardAward = "CA_CTGBillboardAward"  # 活动充值目标领奖状态,按二进制位存储
-
-#跨服全民充值活动
-Def_PDict_CA_AllRechargeID = "CA_AllRechargeID"  # 玩家身上的活动ID,唯一标识,取活动开始日期time值
-Def_PDict_CA_AllRechargeRMB = "CA_AllRechargeRMB"  # 活动累计充值RMB值
-Def_PDict_CA_AllRechargeAward = "CA_AllRechargeAward"  # 活动领奖状态,按二进制位存储
-
-#消费返利活动
-Def_PDict_CostRebateID = "CostRebateID_%s"  # 玩家身上的消费返利活动ID,唯一标识,取活动开始日期time值,参数(活动编号)
-Def_PDict_CostRebateTemplateID = "CostRebateTemplateID_%s"  # 玩家身上的消费返利模板ID,参数(活动编号)
-Def_PDict_CostRebateGold = "CostRebateGold_%s"  # 消费返利总累计消费仙玉,参数(活动编号)
-Def_PDict_CostRebateAwardRecord = "CostRebateAwardRecord_%s"  # 消费返利领奖记录,参数(活动编号)
-Def_PDict_CostRebateWorldLV = "CostRebateWorldLV_%s" #消费返利活动开启时世界等级,参数(活动编号)
-
 #累计充值活动
 Def_PDict_TotalRechargeID = "TotalRechargeID_%s"  # 玩家身上的累计充值活动ID,唯一标识,取活动开始日期time值,参数:(活动编号)
 Def_PDict_TotalRechargeTemplateID = "TotalRechargeTemplateID_%s"  # 玩家身上的累计充值模板ID,参数:(活动编号)
 Def_PDict_TotalRechargeGold = "TotalRechargeGold_%s"  # 消费返利总累计充值X元,参数:(活动编号)
 Def_PDict_TotalRechargeAwardRecord = "TotalRechargeAwardRecord_%s"  # 累计充值领奖记录,参数:(活动编号)
 Def_PDict_TotalRechargeWorldLV = "TotalRechargeWorldLV_%s" #累计充值活动开启时世界等级,参数:(活动编号)
-
-#累计充值返利仙玉活动
-Def_PDict_RechargeRebateGoldID = "RechargeRebateGoldID"  # 玩家身上的累计充值活动ID,唯一标识,取活动开始日期time值
-Def_PDict_RechargeRebateGoldTemplateID = "RechargeRebateGoldTempID"  # 玩家身上活动模板ID
-Def_PDict_RechargeRebateGoldRMB = "RechargeRebateGoldRMB"  # 活动累计充值RMB值
-
-#充值返利活动
-Def_PDict_RechargePrizeID = "RechargePrizeID"  # 玩家身上的重置返利活动ID,唯一标识,取活动开始日期time值
-Def_PDict_RechargePrizeCount = "RechargePrizeCount_%s"  # 返利奖励次数,参数(充值表充值ID)
 
 #成长必买活动
 Def_PDict_GrowupBuyID = "GrowupBuyID"  # 玩家身上的重置成长必买活动ID,唯一标识,取活动开始日期time值
@@ -3539,22 +3512,6 @@
 Def_PDict_TravelSceneryLVInfo = "TravelSceneryLVInfo"  # 景观等级信息,个位数-第1次升级成功与否,1-成功,2-失败;十位-第2次 ...
 Def_PDict_TravelGridInfo = "TravelGridInfo_%s_%s"  # 格子信息,参数(行, 列) 事件ID*100+是否双倍*10+开启状态
 Def_PDict_TravelState = "TravelState"  # 本盘游历记录,1-已领取景观奖励
-
-#周狂欢
-Def_PDict_WeekPartyActID = "WeekPartyActID"  # 玩家身上的活动ID,唯一标识,取活动开始日期time值
-Def_PDict_WeekPartyID = "WeekPartyID"  # 玩家身上的活动ID,配置ID,用于补发上次活动用
-Def_PDict_WeekPartyWorldLV = "WeekPartyWorldLV"  # 玩家身上的活动世界等级
-Def_PDict_WeekPartyCurTimes = "WeekPartyCurTimes_%s_%s" #当前完成次数 参数(第X天,模板ID)
-Def_PDict_WeekPartyGotTimes = "WeekPartyGotTimes_%s_%s" #当前已领次数 参数(第X天,模板ID)
-Def_PDict_WeekPartyAwardRecord = "WeekPartyAwardRecord_%s" #积分领奖记录  参数(第X天)
-Def_PDict_WeekPartyPoint = "WeekPartyPoint_%s" #当天积分  参数(第X天)
-
-#节日巡礼周狂欢
-Def_PDict_FeastWeekPartyID = "FeastWeekPartyID"  # 玩家身上的活动ID,唯一标识,取活动开始日期time值
-Def_PDict_FeastWeekPartyCurTimes = "FeastWPCurTimes_%s_%s" #当前完成次数 参数(第X天,模板ID)
-Def_PDict_FeastWeekPartyGotTimes = "FeastWPGotTimes_%s_%s" #当前已领次数 参数(第X天,模板ID)
-Def_PDict_FeastWeekPartyAwardRecord = "FeastWPAward_%s" #积分领奖记录  参数(第X天)
-Def_PDict_FeastWeekPartyPoint = "FeastWPPoint_%s" #当天积分  参数(第X天)
 
 #登录奖励运营活动
 Def_PDict_LoginAwardID = "LoginAwardID"  # 玩家身上的BOSS复活活动ID,唯一标识,取活动开始日期time值
@@ -3693,10 +3650,6 @@
 Def_PDict_HorseSkinEndTime = "HorseSkinEndTime_%s"  # 坐骑外观到期时间戳,0为永久,参数(外观ID)
 Def_PDict_HorseSkinStar = "HorseSkinStar_%s"  # 坐骑外观星级,参数(外观ID)
 
-# 符印
-Def_PDict_Rune_HoleOpenState = "Rune_HoleOpenState"  # 符印解锁状态
-Def_PDict_Rune_Data = "Rune_Data_%s"  # 符印镶嵌数据, 参数(第几孔)
-
 # 副本 Def_PDictType_FB
 Def_PDict_LastEnterFBPropertyID = "LastEnterFBPropertyID_%s"  # 上次进入副本的propertyID%s副本id
 Def_PDict_LastEnterFBTick = "LastEnterFBTick_%s"  # 上次进入副本的时间%s副本id
@@ -3713,46 +3666,6 @@
 # 开服庆典
 Def_PDict_OSACelebrationPoint = "OSACelebrationPoint" # 开服庆典累计积分
 Def_PDict_OSACelebrationAward = "OSACelebrationAward" # 开服庆典累计积分阶段奖励领奖状态,按积分排序后的索引位记录是否已领取
-
-# 通天令
-Def_PDict_TTL_StartTime = "TTL_StartTime" # 本轮通天令开始时间戳
-Def_PDict_TTL_LVInfo = "TTL_LVInfo" # 当前通天令等级激活信息 = 等级*10+是否已购买通天令
-Def_PDict_TTL_LVPoint = "TTL_LVPoint" # 当前通天令等级已获得积分点
-Def_PDict_TTL_CommAwardRecord = "TTL_CommAwardRecord_%s" # 通天令等级常规领奖记录,参数(key编号),按等级索引位存储0-未领,1-已领
-Def_PDict_TTL_XianAwardRecord = "TTL_XianAwardRecord_%s" # 通天令等级仙品领奖记录,参数(key编号),按等级索引位存储0-未领,1-已领
-Def_PDict_TTL_TaskValue = "TTL_TaskValue_%s_%s" # 通天任务当前进度值,参数(任务类型,是否每日重置)
-Def_PDict_TTL_TaskAwardRecord = "TTL_TaskAwardRecord_%s" # 通天任务领奖记录,参数(key编号),按索引位存储0-未领,1-已领
-Def_PDict_TTL_DailyTaskPointToday = "TTL_DailyTaskPointToday" # 每日通天任务每日可获得积分点上限
-
-# 跨服竞技场
-Def_PDict_CrossPK_TotalScore = "CrossPK_TotalScore" # 当前总积分
-Def_PDict_CrossPK_DanLV = "CrossPK_DanLV" # 当前段位
-Def_PDict_CrossPK_PKCount = "CrossPK_PKCount" # 当前总PK次数
-Def_PDict_CrossPK_WinCount = "CrossPK_WinCount" # 当前胜利次数
-Def_PDict_CrossPK_CWinCount = "CrossPK_CWinCount" # 当前连胜次数
-Def_PDict_CrossPK_CLoseCount = "CrossPK_CLoseCount" # 当前连败次数
-Def_PDict_CrossPK_TodayPKCount = "CrossPK_TodayPKCount" # 今日已PK次数
-Def_PDict_CrossPK_TodayWinCount = "CrossPK_TodayWinCount" # 今日已胜利次数
-Def_PDict_CrossPK_TodayBuyCount = "CrossPK_TodayBuyCount" # 今日已购买PK次数
-Def_PDict_CrossPK_ItemAddCount = "CrossPK_ItemAddCount" # 今日道具增加PK次数
-Def_PDict_CrossPK_RefreshCount = "CrossPK_RefreshCount" # 今日已刷新次数
-Def_PDict_CrossPK_DayPKCountAwardState = "CrossPK_DayPKCountAwardState" # 每日匹配次数奖励记录,二进制位存储是否已领取,按匹配次数升序排序索引代表奖励位
-Def_PDict_CrossPK_DayWinCountAwardState = "CrossPK_DayWinCountAwardState" # 每日胜利次数奖励记录,二进制位存储是否已领取,按胜利次数升序排序索引代表奖励位
-Def_PDict_CrossPK_DanLVAwardState = "CrossPK_DanLVAwardState" # 段位达标奖励记录,二进制位存储是否已领取,按段位代表奖励位
-Def_PDict_CrossPK_SeasonAwardState = "CrossPK_SeasonAwardState" # 赛季结算奖励是否已领取,优先排名奖励,未上榜可领段位奖励
-Def_PDict_CrossPK_ZoneID = "CrossPK_ZoneID" # 玩家上次参与的赛区ID
-Def_PDict_CrossPK_SeasonID = "CrossPK_SeasonID" # 玩家上次参与的赛季ID
-Def_PDict_CrossPK_SeasonDanLV = "CrossPK_SeasonDanLV_%s" # 历史赛季段位,参数,赛季ID
-Def_PDict_CrossPK_SeasonScore = "CrossPK_SeasonScore_%s" # 历史赛季积分,参数,赛季ID
-Def_PDict_CrossPK_SeasonOrder = "CrossPK_SeasonOrder_%s" # 历史赛季名次,参数,赛季ID
-Def_PDict_CrossPK_SeasonAwardLV = "CrossPK_SeasonAwardLV_%s" # 历史赛季奖励等级(一般是段位等级,排行奖励的在最高段位等级基础上增加),参数,赛季ID
-
-# 跨服排位
-Def_PDict_Championship_WorshipCount = "Championship_WorshipCount" # 今日已膜拜次数
-
-# 跨服幸运云购
-Def_PDict_LuckyCloudBuy_RoundID = "LuckyCloudBuy_RoundID" # 本轮标识ID
-Def_PDict_LuckyCloudBuy_BuyCount = "LuckyCloudBuy_BuyCount" # 本轮已购买份数
 
 #自动战斗设置记录
 Def_PDict_AutoFightSetting = "AFSetting_%s_%s"
@@ -4422,7 +4335,6 @@
 Def_Cost_BuyOrderInfo:"BuyOrderInfo",
 Def_Cost_ActGodGift:"ActGodGift",
 Def_Cost_CrossBattlefield:"CrossBattlefield",
-Def_Cost_TongTianLing:"TongTianLing",
 Def_Cost_LianTi:"LianTi",
 }
 ## -----------------------------------------------------
@@ -4883,13 +4795,13 @@
 Def_RewardType_OpenFunc, # 功能开启奖励17
 Def_RewardType_TotalRecharge, # 累计充值奖励18
 Def_RewardType_IceLodeStar, # 冰晶矿脉星级奖励19
-Def_RewardType_WeekPartyAct, # 领取周狂欢活动奖励20
-Def_RewardType_WeekPartyPoint, # 领取周狂欢积分奖励21
+Def_RewardType_20,
+Def_RewardType_21,
 Def_RewardType_ActLoginAwardAct, # 领取登录奖励活动奖励22
 Def_RewardType_NewFairyCRecharge, # 新仙界盛典充值大礼23
 Def_RewardType_NewFairyCParty, # 新仙界盛典全民来嗨24
-Def_RewardType_FeastWeekPartyAct, # 领取节日巡礼活动奖励25
-Def_RewardType_FeastWeekPartyPoint, # 领取节日巡礼积分奖励26
+Def_RewardType_25,
+Def_RewardType_26,
 Def_RewardType_FairyAdventuresAward, #缥缈奇遇领取27
 Def_RewardType_HistoryChargeAward, #历史累计充值领取28
 Def_RewardType_DayFreeGoldGift, #每日免费直购礼包29
@@ -4969,43 +4881,6 @@
 Def_PPAct_JSTreasure,  #绝世寻宝 17  
 ) = range(1, 17+1)
 
-#周狂欢活动定义(七天巡礼)
-WeekPartyActIDList = (
-Def_WPAct_RunTask, #仙盟任务 1
-Def_WPAct_XJMJ, #仙境秘境 2
-Def_WPAct_KirinHome, #麒麟之府 3
-Def_WPAct_QueenRelices, #娲皇遗迹 4
-Def_WPAct_IceLode, #冰晶矿脉 5
-Def_WPAct_Tower, #符印塔 6
-Def_WPAct_WorldBOSS, #世界boss 7
-Def_WPAct_BOSSHome, #boss之家 8
-Def_WPAct_FMT, #封魔坛 9
-Def_WPAct_GodArea, #古神禁地 10
-Def_WPAct_CrossPK, #跨服pk 11
-Def_WPAct_Recharge, #充值X仙玉 12
-Def_WPAct_GiftBag,  #购买限时礼包 13
-Def_WPAct_14, #骑宠争夺 14
-Def_WPAct_SWRH, #守卫人皇 15
-Def_WPAct_ElderBattlefield, #上古战场 16
-Def_WPAct_ChaosDemon, #混乱妖域 17
-Def_WPAct_XMZZ, #仙魔之争 18
-Def_WPAct_FamilyWar,  #仙魔联赛 19
-Def_WPAct_Login,  #每日登录 20
-Def_WPAct_21,  #激活某只坐骑 21
-Def_WPAct_Pet,  #激活某只灵宠 22
-Def_WPAct_Dogz,  #出战某只神兽 23
-Def_WPAct_Stone,  #宝石总等级 24
-Def_WPAct_25,  #神兵总等级 25
-Def_WPAct_Rune,  #穿戴某品质符印 26
-Def_WPAct_Pray,  #祈愿 27
-Def_WPAct_FamilyBoss,  #仙盟Boss 28
-Def_WPAct_FairyDomain,  #缥缈仙域 29    
-Def_WPAct_Plus,  #强化 30
-Def_WPAct_Star,  #升星 31
-Def_WPAct_FamilyChuanGong,  #传功 32
-Def_WPAct_Arena,  #竞技场 33
-) = range(1, 33+1)
-
 #登录奖励活动定义
 LoginAwardActIDList = (
 Def_LoginAct_Login,  #每日登录1
@@ -5027,23 +4902,6 @@
 Def_LoginAct_EquipPlus, #强化 17
 Def_LoginAct_EquipWash, #洗炼 18
 ) = range(1, 18+1)
-
-#垃圾分类 - 垃圾产出任务
-GarbageTaskList = (
-Def_GarbageTask_Activity, # 获得活跃值    1
-Def_GarbageTask_ActivityPlace, # 活跃修炼    2
-Def_GarbageTask_HelpBattle, # 助战登记    3
-Def_GarbageTask_KillNPC, # 击杀小怪    4
-Def_GarbageTask_RefineStove, # 炼丹    5
-Def_GarbageTask_KillBoss, # 打宝 - 本服    6
-Def_GarbageTask_CrossPK, # 跨服PK    7
-Def_GarbageTask_CrossBoss, # 跨服Boss    8
-Def_GarbageTask_CrossCollect, # 跨服采集宝箱    9
-Def_GarbageTask_EquipPlus, # 强化    10
-Def_GarbageTask_EquipWash, # 洗炼    11
-Def_GarbageTask_UseGold, # 消费仙玉    12
-Def_GarbageTask_CTG, # 充值仙玉    13
-) = range(1, 1 + 13)
 
 #任务活动 - 任务类型
 ActTaskTypeList = (
@@ -5125,28 +4983,6 @@
     PowerDownType_ResetTalent:'ResetTalent',
     PowerDownType_GatherSoul:'GatherSoul',
     }
-
-# 通天令任务类型定义
-TTLTaskTypeList = (
-TTLTaskType_Activity, # 获取日常活跃度x 1
-TTLTaskType_Plus, # 强化x次 2
-TTLTaskType_Star, # 升星x次 3
-TTLTaskType_Wash, # 洗练x次 4
-TTLTaskType_LoveFB, # 参与情缘副本x次 5
-TTLTaskType_LVUp, # 等级提升x级 6
-TTLTaskType_RealmUp, # 境界提升x阶 7
-TTLTaskType_WorldBoss, # 击杀世界boss x次 8
-TTLTaskType_Sign, # 签到x次 9
-TTLTaskType_Dice, # 天机骰子挑战x次 10
-TTLTaskType_CrossPK, # 跨服PK参与x次 11
-TTLTaskType_ChuanGong, # 仙盟传功x次 12
-TTLTaskType_SWRH, # 守卫人皇参与x次 13
-TTLTaskType_ElderBattlefield, # 上古战场参与x次 14
-TTLTaskType_HorsePetBoss, # 灵宠争夺参与x次 15
-TTLTaskType_FamilyBoss, # 仙盟boss参与x次 16
-TTLTaskType_FamilyPartyAnswerRight, # 仙盟答题答对x次 17
-TTLTaskType_CrossBoss, # 跨服boss击杀x次 18
-) = range(1, 1 + 18)
 
 # 每日任务类型
 DailyTaskList = (
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
index ec4969b..143ce97 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
@@ -4929,54 +4929,6 @@
 
 
 #------------------------------------------------------
-# A5 46 购买通天令 #tagCMBuyTongTianLing
-
-class  tagCMBuyTongTianLing(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA5
-        self.SubCmd = 0x46
-        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 = 0xA5
-        self.SubCmd = 0x46
-        return
-
-    def GetLength(self):
-        return sizeof(tagCMBuyTongTianLing)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// A5 46 购买通天令 //tagCMBuyTongTianLing:
-                                Cmd:%s,
-                                SubCmd:%s
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd
-                                )
-        return DumpString
-
-
-m_NAtagCMBuyTongTianLing=tagCMBuyTongTianLing()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMBuyTongTianLing.Cmd,m_NAtagCMBuyTongTianLing.SubCmd))] = m_NAtagCMBuyTongTianLing
-
-
-#------------------------------------------------------
 #A5 3B 请求领取补偿#tagCMRequestCompensation
 
 class  tagCMRequestCompensation(Structure):
@@ -5031,90 +4983,6 @@
 
 m_NAtagCMRequestCompensation=tagCMRequestCompensation()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMRequestCompensation.Head.Cmd,m_NAtagCMRequestCompensation.Head.SubCmd))] = m_NAtagCMRequestCompensation
-
-
-#------------------------------------------------------
-# A5 78 符印合成 #tagCMRuneCompound
-
-class  tagCMRuneCompound(Structure):
-    Head = tagHead()
-    Cnt = 0    #(BYTE Cnt)
-    PackList = list()    #(vector<BYTE> PackList)//所在位置 0-背包 1-符印孔
-    IndexList = list()    #(vector<BYTE> IndexList)//物品索引
-    TagItemID = 0    #(DWORD TagItemID)//合成目标物品ID
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xA5
-        self.Head.SubCmd = 0x78
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.Cnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.Cnt):
-            value,_pos=CommFunc.ReadBYTE(_lpData,_pos)
-            self.PackList.append(value)
-        for i in range(self.Cnt):
-            value,_pos=CommFunc.ReadBYTE(_lpData,_pos)
-            self.IndexList.append(value)
-        self.TagItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xA5
-        self.Head.SubCmd = 0x78
-        self.Cnt = 0
-        self.PackList = list()
-        self.IndexList = list()
-        self.TagItemID = 0
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        length += 1 * self.Cnt
-        length += 1 * self.Cnt
-        length += 4
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.Cnt)
-        for i in range(self.Cnt):
-            data = CommFunc.WriteBYTE(data, self.PackList[i])
-        for i in range(self.Cnt):
-            data = CommFunc.WriteBYTE(data, self.IndexList[i])
-        data = CommFunc.WriteDWORD(data, self.TagItemID)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                Cnt:%d,
-                                PackList:%s,
-                                IndexList:%s,
-                                TagItemID:%d
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.Cnt,
-                                "...",
-                                "...",
-                                self.TagItemID
-                                )
-        return DumpString
-
-
-m_NAtagCMRuneCompound=tagCMRuneCompound()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMRuneCompound.Head.Cmd,m_NAtagCMRuneCompound.Head.SubCmd))] = m_NAtagCMRuneCompound
 
 
 #------------------------------------------------------
@@ -5955,58 +5823,6 @@
 
 
 #------------------------------------------------------
-# A5 45 兑换通天令等级经验积分点 #tagCMExchangeTongTianLVPoint
-
-class  tagCMExchangeTongTianLVPoint(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("ExchangePoint", c_int),    # 兑换点数
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA5
-        self.SubCmd = 0x45
-        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 = 0xA5
-        self.SubCmd = 0x45
-        self.ExchangePoint = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagCMExchangeTongTianLVPoint)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// A5 45 兑换通天令等级经验积分点 //tagCMExchangeTongTianLVPoint:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                ExchangePoint:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.ExchangePoint
-                                )
-        return DumpString
-
-
-m_NAtagCMExchangeTongTianLVPoint=tagCMExchangeTongTianLVPoint()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMExchangeTongTianLVPoint.Cmd,m_NAtagCMExchangeTongTianLVPoint.SubCmd))] = m_NAtagCMExchangeTongTianLVPoint
-
-
-#------------------------------------------------------
 # A5 32 法器升级 #tagCMFaQiLVUp
 
 class  tagCMFaQiLVUp(Structure):
@@ -6116,114 +5932,6 @@
 
 m_NAtagCMGetInvestReward=tagCMGetInvestReward()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMGetInvestReward.Cmd,m_NAtagCMGetInvestReward.SubCmd))] = m_NAtagCMGetInvestReward
-
-
-#------------------------------------------------------
-# A5 44 通天令领取等级奖励 #tagCMGetTongTianLVAward
-
-class  tagCMGetTongTianLVAward(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("TTLV", c_ubyte),    # 领取对应等级奖励,发255为一键领取所有等级奖励,包含仙品奖励
-                  ("IsXian", c_ubyte),    # 是否领取仙品奖励,仅指定等级奖励有效
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA5
-        self.SubCmd = 0x44
-        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 = 0xA5
-        self.SubCmd = 0x44
-        self.TTLV = 0
-        self.IsXian = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagCMGetTongTianLVAward)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// A5 44 通天令领取等级奖励 //tagCMGetTongTianLVAward:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                TTLV:%d,
-                                IsXian:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.TTLV,
-                                self.IsXian
-                                )
-        return DumpString
-
-
-m_NAtagCMGetTongTianLVAward=tagCMGetTongTianLVAward()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMGetTongTianLVAward.Cmd,m_NAtagCMGetTongTianLVAward.SubCmd))] = m_NAtagCMGetTongTianLVAward
-
-
-#------------------------------------------------------
-# A5 43 通天令领取任务奖励 #tagCMGetTongTianTaskAward
-
-class  tagCMGetTongTianTaskAward(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("TaskID", c_ubyte),    # 任务ID
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA5
-        self.SubCmd = 0x43
-        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 = 0xA5
-        self.SubCmd = 0x43
-        self.TaskID = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagCMGetTongTianTaskAward)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// A5 43 通天令领取任务奖励 //tagCMGetTongTianTaskAward:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                TaskID:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.TaskID
-                                )
-        return DumpString
-
-
-m_NAtagCMGetTongTianTaskAward=tagCMGetTongTianTaskAward()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMGetTongTianTaskAward.Cmd,m_NAtagCMGetTongTianTaskAward.SubCmd))] = m_NAtagCMGetTongTianTaskAward
 
 
 #------------------------------------------------------
@@ -6737,227 +6445,6 @@
 
 
 #------------------------------------------------------
-# A5 66 符印分解 #tagCMRuneDecompose
-
-class  tagCMRuneDecompose(Structure):
-    Head = tagHead()
-    IsAll = 0    #(BYTE IsAll)// 是否全部分解,优先级最高,锁定除外
-    QualityCnt = 0    #(BYTE QualityCnt)// 按全部分解品质数
-    QualityList = list()    #(vector<BYTE> QualityList)// 全部分解的品质列表,发送的品质会全部分解,锁定除外
-    Count = 0    #(BYTE Count)// 指定批量分解数,最大不超过50个
-    PlaceIndexList = list()    #(vector<WORD> PlaceIndexList)// 批量分解位置索引列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xA5
-        self.Head.SubCmd = 0x66
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.IsAll,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.QualityCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.QualityCnt):
-            value,_pos=CommFunc.ReadBYTE(_lpData,_pos)
-            self.QualityList.append(value)
-        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.Count):
-            value,_pos=CommFunc.ReadWORD(_lpData,_pos)
-            self.PlaceIndexList.append(value)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xA5
-        self.Head.SubCmd = 0x66
-        self.IsAll = 0
-        self.QualityCnt = 0
-        self.QualityList = list()
-        self.Count = 0
-        self.PlaceIndexList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        length += 1
-        length += 1 * self.QualityCnt
-        length += 1
-        length += 2 * self.Count
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.IsAll)
-        data = CommFunc.WriteBYTE(data, self.QualityCnt)
-        for i in range(self.QualityCnt):
-            data = CommFunc.WriteBYTE(data, self.QualityList[i])
-        data = CommFunc.WriteBYTE(data, self.Count)
-        for i in range(self.Count):
-            data = CommFunc.WriteWORD(data, self.PlaceIndexList[i])
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                IsAll:%d,
-                                QualityCnt:%d,
-                                QualityList:%s,
-                                Count:%d,
-                                PlaceIndexList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.IsAll,
-                                self.QualityCnt,
-                                "...",
-                                self.Count,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagCMRuneDecompose=tagCMRuneDecompose()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMRuneDecompose.Head.Cmd,m_NAtagCMRuneDecompose.Head.SubCmd))] = m_NAtagCMRuneDecompose
-
-
-#------------------------------------------------------
-# A5 67 符印锁定状态变更 #tagCMRuneLock
-
-class  tagCMRuneLock(Structure):
-    Head = tagHead()
-    LockState = 0    #(BYTE LockState)// 锁定状态, 0-锁定,1-解锁
-    Count = 0    #(BYTE Count)// 批量操作数,最大不超过50个
-    PlaceIndexList = list()    #(vector<WORD> PlaceIndexList)// 批量操作位置索引列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xA5
-        self.Head.SubCmd = 0x67
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.LockState,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.Count):
-            value,_pos=CommFunc.ReadWORD(_lpData,_pos)
-            self.PlaceIndexList.append(value)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xA5
-        self.Head.SubCmd = 0x67
-        self.LockState = 0
-        self.Count = 0
-        self.PlaceIndexList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        length += 1
-        length += 2 * self.Count
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.LockState)
-        data = CommFunc.WriteBYTE(data, self.Count)
-        for i in range(self.Count):
-            data = CommFunc.WriteWORD(data, self.PlaceIndexList[i])
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                LockState:%d,
-                                Count:%d,
-                                PlaceIndexList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.LockState,
-                                self.Count,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagCMRuneLock=tagCMRuneLock()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMRuneLock.Head.Cmd,m_NAtagCMRuneLock.Head.SubCmd))] = m_NAtagCMRuneLock
-
-
-#------------------------------------------------------
-# A5 65 符印升级 #tagCMRuneUp
-
-class  tagCMRuneUp(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("PlaceType", c_ubyte),    # 位置类型;0-符印背包,1-符印孔
-                  ("PlaceIndex", c_ushort),    # 位置索引
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA5
-        self.SubCmd = 0x65
-        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 = 0xA5
-        self.SubCmd = 0x65
-        self.PlaceType = 0
-        self.PlaceIndex = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagCMRuneUp)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// A5 65 符印升级 //tagCMRuneUp:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                PlaceType:%d,
-                                PlaceIndex:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.PlaceType,
-                                self.PlaceIndex
-                                )
-        return DumpString
-
-
-m_NAtagCMRuneUp=tagCMRuneUp()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMRuneUp.Cmd,m_NAtagCMRuneUp.SubCmd))] = m_NAtagCMRuneUp
-
-
-#------------------------------------------------------
 # A5 16 选择技能五行专精 #tagCMSelectSkillElement
 
 class  tagCMSelectSkillElement(Structure):
@@ -7150,58 +6637,6 @@
 
 m_NAtagCSTreasureWishSelect=tagCSTreasureWishSelect()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCSTreasureWishSelect.Head.Cmd,m_NAtagCSTreasureWishSelect.Head.SubCmd))] = m_NAtagCSTreasureWishSelect
-
-
-#------------------------------------------------------
-# A5 13 解锁符印孔 #tagCMUnlockRuneHole
-
-class  tagCMUnlockRuneHole(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("HoleIndex", c_ubyte),    # 孔索引
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA5
-        self.SubCmd = 0x13
-        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 = 0xA5
-        self.SubCmd = 0x13
-        self.HoleIndex = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagCMUnlockRuneHole)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// A5 13 解锁符印孔 //tagCMUnlockRuneHole:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                HoleIndex:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.HoleIndex
-                                )
-        return DumpString
-
-
-m_NAtagCMUnlockRuneHole=tagCMUnlockRuneHole()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMUnlockRuneHole.Cmd,m_NAtagCMUnlockRuneHole.SubCmd))] = m_NAtagCMUnlockRuneHole
 
 
 #------------------------------------------------------
@@ -17163,106 +16598,6 @@
 
 
 #------------------------------------------------------
-# C0 06 查询幸运云购开奖记录 #tagCGQueryLuckyCloudBuyLotteryRec
-
-class  tagCGQueryLuckyCloudBuyLotteryRec(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("ZoneID", c_ubyte),    #查询分区ID
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xC0
-        self.SubCmd = 0x06
-        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 = 0xC0
-        self.SubCmd = 0x06
-        self.ZoneID = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagCGQueryLuckyCloudBuyLotteryRec)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// C0 06 查询幸运云购开奖记录 //tagCGQueryLuckyCloudBuyLotteryRec:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                ZoneID:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.ZoneID
-                                )
-        return DumpString
-
-
-m_NAtagCGQueryLuckyCloudBuyLotteryRec=tagCGQueryLuckyCloudBuyLotteryRec()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGQueryLuckyCloudBuyLotteryRec.Cmd,m_NAtagCGQueryLuckyCloudBuyLotteryRec.SubCmd))] = m_NAtagCGQueryLuckyCloudBuyLotteryRec
-
-
-#------------------------------------------------------
-# C0 05 查询幸运云购购买号码记录 #tagCGQueryLuckyCloudBuyNumRec
-
-class  tagCGQueryLuckyCloudBuyNumRec(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xC0
-        self.SubCmd = 0x05
-        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 = 0xC0
-        self.SubCmd = 0x05
-        return
-
-    def GetLength(self):
-        return sizeof(tagCGQueryLuckyCloudBuyNumRec)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// C0 05 查询幸运云购购买号码记录 //tagCGQueryLuckyCloudBuyNumRec:
-                                Cmd:%s,
-                                SubCmd:%s
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd
-                                )
-        return DumpString
-
-
-m_NAtagCGQueryLuckyCloudBuyNumRec=tagCGQueryLuckyCloudBuyNumRec()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGQueryLuckyCloudBuyNumRec.Cmd,m_NAtagCGQueryLuckyCloudBuyNumRec.SubCmd))] = m_NAtagCGQueryLuckyCloudBuyNumRec
-
-
-#------------------------------------------------------
 # C0 04 查看跨服排行榜 #tagCGViewCrossBillboard
 
 class  tagCGViewCrossBillboard(Structure):
@@ -18310,56 +17645,4 @@
 
 
 m_NAtagCMFamilyGCZSQ=tagCMFamilyGCZSQ()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMFamilyGCZSQ.Cmd,m_NAtagCMFamilyGCZSQ.SubCmd))] = m_NAtagCMFamilyGCZSQ
-
-
-#------------------------------------------------------
-# C1 10 幸运云购购买 #tagCMLuckyCloudBuy
-
-class  tagCMLuckyCloudBuy(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("BuyCount", c_ushort),    # 购买份数
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xC1
-        self.SubCmd = 0x10
-        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 = 0xC1
-        self.SubCmd = 0x10
-        self.BuyCount = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagCMLuckyCloudBuy)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// C1 10 幸运云购购买 //tagCMLuckyCloudBuy:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                BuyCount:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.BuyCount
-                                )
-        return DumpString
-
-
-m_NAtagCMLuckyCloudBuy=tagCMLuckyCloudBuy()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMLuckyCloudBuy.Cmd,m_NAtagCMLuckyCloudBuy.SubCmd))] = m_NAtagCMLuckyCloudBuy
\ No newline at end of file
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMFamilyGCZSQ.Cmd,m_NAtagCMFamilyGCZSQ.SubCmd))] = m_NAtagCMFamilyGCZSQ
\ No newline at end of file
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
index c146402..1068d12 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -7419,80 +7419,6 @@
 
 
 #------------------------------------------------------
-# A3 1F 玩家符印信息 #tagMCRuneInfo
-
-class  tagMCRuneInfo(Structure):
-    Head = tagHead()
-    RuneHoleOpenState = 0    #(DWORD RuneHoleOpenState)//符印孔状态, 按索引表示激活状态
-    Count = 0    #(BYTE Count)// 符印孔信息数
-    RuneDataList = list()    #(vector<DWORD> RuneDataList)// 符印孔数据信息, 数据与背包数据相同
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xA3
-        self.Head.SubCmd = 0x1F
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.RuneHoleOpenState,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.Count):
-            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
-            self.RuneDataList.append(value)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xA3
-        self.Head.SubCmd = 0x1F
-        self.RuneHoleOpenState = 0
-        self.Count = 0
-        self.RuneDataList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 4
-        length += 1
-        length += 4 * self.Count
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteDWORD(data, self.RuneHoleOpenState)
-        data = CommFunc.WriteBYTE(data, self.Count)
-        for i in range(self.Count):
-            data = CommFunc.WriteDWORD(data, self.RuneDataList[i])
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                RuneHoleOpenState:%d,
-                                Count:%d,
-                                RuneDataList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.RuneHoleOpenState,
-                                self.Count,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagMCRuneInfo=tagMCRuneInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCRuneInfo.Head.Cmd,m_NAtagMCRuneInfo.Head.SubCmd))] = m_NAtagMCRuneInfo
-
-
-#------------------------------------------------------
 # A3 44 当日累计充值多选一礼包信息 #tagMCSingleGoldGift
 
 class  tagMCSingleGoldGift(Structure):
@@ -8388,290 +8314,6 @@
 
 m_NAtagMCSyncRealmInfo=tagMCSyncRealmInfo()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCSyncRealmInfo.Head.Cmd,m_NAtagMCSyncRealmInfo.Head.SubCmd))] = m_NAtagMCSyncRealmInfo
-
-
-#------------------------------------------------------
-# A3 56 通天令信息 #tagMCTongTianLingInfo
-
-class  tagMCTongTianLingInfo(Structure):
-    Head = tagHead()
-    TTLBuyState = 0    #(BYTE TTLBuyState)//通天令是否已购买
-    TTLLV = 0    #(BYTE TTLLV)//通天令等级,从0开始
-    CurPoint = 0    #(DWORD CurPoint)//通天令当前等级经验积分点
-    AwardStateCount = 0    #(BYTE AwardStateCount)//等级领奖记录值数,每个值存31个记录   0-30, 31-61, ...
-    CommAwardStateList = list()    #(vector<DWORD> CommAwardStateList)//常规奖励领奖记录,按等级二进制位存储是否领奖
-    XianAwardStateList = list()    #(vector<DWORD> XianAwardStateList)//仙品奖励领奖记录,按等级二进制位存储是否领奖
-    StartTime = 0    #(DWORD StartTime)//通天令本轮开始时间戳,秒
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xA3
-        self.Head.SubCmd = 0x56
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.TTLBuyState,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.TTLLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.CurPoint,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.AwardStateCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.AwardStateCount):
-            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
-            self.CommAwardStateList.append(value)
-        for i in range(self.AwardStateCount):
-            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
-            self.XianAwardStateList.append(value)
-        self.StartTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xA3
-        self.Head.SubCmd = 0x56
-        self.TTLBuyState = 0
-        self.TTLLV = 0
-        self.CurPoint = 0
-        self.AwardStateCount = 0
-        self.CommAwardStateList = list()
-        self.XianAwardStateList = list()
-        self.StartTime = 0
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        length += 1
-        length += 4
-        length += 1
-        length += 4 * self.AwardStateCount
-        length += 4 * self.AwardStateCount
-        length += 4
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.TTLBuyState)
-        data = CommFunc.WriteBYTE(data, self.TTLLV)
-        data = CommFunc.WriteDWORD(data, self.CurPoint)
-        data = CommFunc.WriteBYTE(data, self.AwardStateCount)
-        for i in range(self.AwardStateCount):
-            data = CommFunc.WriteDWORD(data, self.CommAwardStateList[i])
-        for i in range(self.AwardStateCount):
-            data = CommFunc.WriteDWORD(data, self.XianAwardStateList[i])
-        data = CommFunc.WriteDWORD(data, self.StartTime)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                TTLBuyState:%d,
-                                TTLLV:%d,
-                                CurPoint:%d,
-                                AwardStateCount:%d,
-                                CommAwardStateList:%s,
-                                XianAwardStateList:%s,
-                                StartTime:%d
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.TTLBuyState,
-                                self.TTLLV,
-                                self.CurPoint,
-                                self.AwardStateCount,
-                                "...",
-                                "...",
-                                self.StartTime
-                                )
-        return DumpString
-
-
-m_NAtagMCTongTianLingInfo=tagMCTongTianLingInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCTongTianLingInfo.Head.Cmd,m_NAtagMCTongTianLingInfo.Head.SubCmd))] = m_NAtagMCTongTianLingInfo
-
-
-#------------------------------------------------------
-# A3 58 通天令任务奖励信息 #tagMCTongTianLingTaskAwardInfo
-
-class  tagMCTongTianLingTaskAwardInfo(Structure):
-    Head = tagHead()
-    AwardStateCount = 0    #(BYTE AwardStateCount)
-    TaskAwardStateList = list()    #(vector<DWORD> TaskAwardStateList)//任务领奖记录值个数,按任务ID二进制位存储是否已领取,每个值存31个记录   0-30, 31-61, ...
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xA3
-        self.Head.SubCmd = 0x58
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.AwardStateCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.AwardStateCount):
-            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
-            self.TaskAwardStateList.append(value)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xA3
-        self.Head.SubCmd = 0x58
-        self.AwardStateCount = 0
-        self.TaskAwardStateList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        length += 4 * self.AwardStateCount
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.AwardStateCount)
-        for i in range(self.AwardStateCount):
-            data = CommFunc.WriteDWORD(data, self.TaskAwardStateList[i])
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                AwardStateCount:%d,
-                                TaskAwardStateList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.AwardStateCount,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagMCTongTianLingTaskAwardInfo=tagMCTongTianLingTaskAwardInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCTongTianLingTaskAwardInfo.Head.Cmd,m_NAtagMCTongTianLingTaskAwardInfo.Head.SubCmd))] = m_NAtagMCTongTianLingTaskAwardInfo
-
-
-#------------------------------------------------------
-# A3 57 通天令任务进度信息 #tagMCTongTianLingTaskValueInfo
-
-class  tagMCTongTianLingTaskValue(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("TaskType", c_ubyte),    #成就类型
-                  ("IsDaily", c_ubyte),    #是否每日任务
-                  ("TaskValue", c_int),    #当前完成进度值
-                  ]
-
-    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.TaskType = 0
-        self.IsDaily = 0
-        self.TaskValue = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCTongTianLingTaskValue)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// A3 57 通天令任务进度信息 //tagMCTongTianLingTaskValueInfo:
-                                TaskType:%d,
-                                IsDaily:%d,
-                                TaskValue:%d
-                                '''\
-                                %(
-                                self.TaskType,
-                                self.IsDaily,
-                                self.TaskValue
-                                )
-        return DumpString
-
-
-class  tagMCTongTianLingTaskValueInfo(Structure):
-    Head = tagHead()
-    Count = 0    #(BYTE Count)//信息个数
-    TaskValueList = list()    #(vector<tagMCTongTianLingTaskValue> TaskValueList)
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xA3
-        self.Head.SubCmd = 0x57
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.Count):
-            temTaskValueList = tagMCTongTianLingTaskValue()
-            _pos = temTaskValueList.ReadData(_lpData, _pos)
-            self.TaskValueList.append(temTaskValueList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xA3
-        self.Head.SubCmd = 0x57
-        self.Count = 0
-        self.TaskValueList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        for i in range(self.Count):
-            length += self.TaskValueList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.Count)
-        for i in range(self.Count):
-            data = CommFunc.WriteString(data, self.TaskValueList[i].GetLength(), self.TaskValueList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                Count:%d,
-                                TaskValueList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.Count,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagMCTongTianLingTaskValueInfo=tagMCTongTianLingTaskValueInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCTongTianLingTaskValueInfo.Head.Cmd,m_NAtagMCTongTianLingTaskValueInfo.Head.SubCmd))] = m_NAtagMCTongTianLingTaskValueInfo
 
 
 #------------------------------------------------------
@@ -21368,386 +21010,6 @@
 
 
 #------------------------------------------------------
-# AA 27 充值返利活动信息 #tagMCActRechargePrizeInfo
-
-class  tagMCActRechargePrize(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("CTGID", c_ushort),    # 对应充值表充值ID
-                  ("GoldPrize", c_int),    #返利仙玉数
-                  ("PrizeCountLimit", 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.CTGID = 0
-        self.GoldPrize = 0
-        self.PrizeCountLimit = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCActRechargePrize)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// AA 27 充值返利活动信息 //tagMCActRechargePrizeInfo:
-                                CTGID:%d,
-                                GoldPrize:%d,
-                                PrizeCountLimit:%d
-                                '''\
-                                %(
-                                self.CTGID,
-                                self.GoldPrize,
-                                self.PrizeCountLimit
-                                )
-        return DumpString
-
-
-class  tagMCActRechargePrizeDay(Structure):
-    Prizes = 0    #(BYTE Prizes)// 返利档数
-    PrizeInfo = list()    #(vector<tagMCActRechargePrize> PrizeInfo)// 返利档信息
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.Prizes,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.Prizes):
-            temPrizeInfo = tagMCActRechargePrize()
-            _pos = temPrizeInfo.ReadData(_lpData, _pos)
-            self.PrizeInfo.append(temPrizeInfo)
-        return _pos
-
-    def Clear(self):
-        self.Prizes = 0
-        self.PrizeInfo = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 1
-        for i in range(self.Prizes):
-            length += self.PrizeInfo[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteBYTE(data, self.Prizes)
-        for i in range(self.Prizes):
-            data = CommFunc.WriteString(data, self.PrizeInfo[i].GetLength(), self.PrizeInfo[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Prizes:%d,
-                                PrizeInfo:%s
-                                '''\
-                                %(
-                                self.Prizes,
-                                "..."
-                                )
-        return DumpString
-
-
-class  tagMCActRechargePrizeInfo(Structure):
-    Head = tagHead()
-    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
-    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
-    LimitLV = 0    #(WORD LimitLV)// 限制等级
-    IsDayReset = 0    #(BYTE IsDayReset)//是否每天重置
-    PrizeDays = 0    #(BYTE PrizeDays)
-    PrizeDayInfo = list()    #(vector<tagMCActRechargePrizeDay> PrizeDayInfo)//每天对应信息; 如果只有一天,但是活动有多天,则代表每天奖励都一样
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xAA
-        self.Head.SubCmd = 0x27
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
-        self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
-        self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.IsDayReset,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.PrizeDays,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.PrizeDays):
-            temPrizeDayInfo = tagMCActRechargePrizeDay()
-            _pos = temPrizeDayInfo.ReadData(_lpData, _pos)
-            self.PrizeDayInfo.append(temPrizeDayInfo)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xAA
-        self.Head.SubCmd = 0x27
-        self.StartDate = ""
-        self.EndtDate = ""
-        self.LimitLV = 0
-        self.IsDayReset = 0
-        self.PrizeDays = 0
-        self.PrizeDayInfo = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 10
-        length += 10
-        length += 2
-        length += 1
-        length += 1
-        for i in range(self.PrizeDays):
-            length += self.PrizeDayInfo[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteString(data, 10, self.StartDate)
-        data = CommFunc.WriteString(data, 10, self.EndtDate)
-        data = CommFunc.WriteWORD(data, self.LimitLV)
-        data = CommFunc.WriteBYTE(data, self.IsDayReset)
-        data = CommFunc.WriteBYTE(data, self.PrizeDays)
-        for i in range(self.PrizeDays):
-            data = CommFunc.WriteString(data, self.PrizeDayInfo[i].GetLength(), self.PrizeDayInfo[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                StartDate:%s,
-                                EndtDate:%s,
-                                LimitLV:%d,
-                                IsDayReset:%d,
-                                PrizeDays:%d,
-                                PrizeDayInfo:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.StartDate,
-                                self.EndtDate,
-                                self.LimitLV,
-                                self.IsDayReset,
-                                self.PrizeDays,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagMCActRechargePrizeInfo=tagMCActRechargePrizeInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActRechargePrizeInfo.Head.Cmd,m_NAtagMCActRechargePrizeInfo.Head.SubCmd))] = m_NAtagMCActRechargePrizeInfo
-
-
-#------------------------------------------------------
-# AA 29 累计充值返利仙玉活动信息 #tagMCActRechargeRebateGoldInfo
-
-class  tagMCActRechargeRebate(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("RMBMin", c_int),    # 充值RMB最小值
-                  ("RMBMax", c_int),    # 充值RMB最大值,0代表无上限
-                  ("RebateRate", c_ushort),    # 返利仙玉比例百分比
-                  ]
-
-    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.RMBMin = 0
-        self.RMBMax = 0
-        self.RebateRate = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCActRechargeRebate)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// AA 29 累计充值返利仙玉活动信息 //tagMCActRechargeRebateGoldInfo:
-                                RMBMin:%d,
-                                RMBMax:%d,
-                                RebateRate:%d
-                                '''\
-                                %(
-                                self.RMBMin,
-                                self.RMBMax,
-                                self.RebateRate
-                                )
-        return DumpString
-
-
-class  tagMCActRechargeRebateDay(Structure):
-    Rebates = 0    #(BYTE Rebates)// 返利档数
-    RebateInfo = list()    #(vector<tagMCActRechargeRebate> RebateInfo)// 返利档信息
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.Rebates,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.Rebates):
-            temRebateInfo = tagMCActRechargeRebate()
-            _pos = temRebateInfo.ReadData(_lpData, _pos)
-            self.RebateInfo.append(temRebateInfo)
-        return _pos
-
-    def Clear(self):
-        self.Rebates = 0
-        self.RebateInfo = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 1
-        for i in range(self.Rebates):
-            length += self.RebateInfo[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteBYTE(data, self.Rebates)
-        for i in range(self.Rebates):
-            data = CommFunc.WriteString(data, self.RebateInfo[i].GetLength(), self.RebateInfo[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Rebates:%d,
-                                RebateInfo:%s
-                                '''\
-                                %(
-                                self.Rebates,
-                                "..."
-                                )
-        return DumpString
-
-
-class  tagMCActRechargeRebateGoldInfo(Structure):
-    Head = tagHead()
-    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
-    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
-    LimitLV = 0    #(WORD LimitLV)// 限制等级
-    IsDayReset = 0    #(BYTE IsDayReset)//是否每天重置
-    RebateDays = 0    #(BYTE RebateDays)
-    RebateDayInfo = list()    #(vector<tagMCActRechargeRebateDay> RebateDayInfo)//每天对应信息; 如果只有一天,但是活动有多天,则代表每天奖励都一样
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xAA
-        self.Head.SubCmd = 0x29
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
-        self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
-        self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.IsDayReset,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.RebateDays,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.RebateDays):
-            temRebateDayInfo = tagMCActRechargeRebateDay()
-            _pos = temRebateDayInfo.ReadData(_lpData, _pos)
-            self.RebateDayInfo.append(temRebateDayInfo)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xAA
-        self.Head.SubCmd = 0x29
-        self.StartDate = ""
-        self.EndtDate = ""
-        self.LimitLV = 0
-        self.IsDayReset = 0
-        self.RebateDays = 0
-        self.RebateDayInfo = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 10
-        length += 10
-        length += 2
-        length += 1
-        length += 1
-        for i in range(self.RebateDays):
-            length += self.RebateDayInfo[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteString(data, 10, self.StartDate)
-        data = CommFunc.WriteString(data, 10, self.EndtDate)
-        data = CommFunc.WriteWORD(data, self.LimitLV)
-        data = CommFunc.WriteBYTE(data, self.IsDayReset)
-        data = CommFunc.WriteBYTE(data, self.RebateDays)
-        for i in range(self.RebateDays):
-            data = CommFunc.WriteString(data, self.RebateDayInfo[i].GetLength(), self.RebateDayInfo[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                StartDate:%s,
-                                EndtDate:%s,
-                                LimitLV:%d,
-                                IsDayReset:%d,
-                                RebateDays:%d,
-                                RebateDayInfo:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.StartDate,
-                                self.EndtDate,
-                                self.LimitLV,
-                                self.IsDayReset,
-                                self.RebateDays,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagMCActRechargeRebateGoldInfo=tagMCActRechargeRebateGoldInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActRechargeRebateGoldInfo.Head.Cmd,m_NAtagMCActRechargeRebateGoldInfo.Head.SubCmd))] = m_NAtagMCActRechargeRebateGoldInfo
-
-
-#------------------------------------------------------
 # AA 50 单笔累充活动信息 #tagMCActSingleRechargeInfo
 
 class  tagMCActSingleRechargeAwardItem(Structure):
@@ -23758,804 +23020,6 @@
 
 
 #------------------------------------------------------
-# AA 32 跨服充值排行活动信息 #tagMCCACTGBillboardInfo
-
-class  tagMCCACTGBillboardAwardItem(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(tagMCCACTGBillboardAwardItem)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// AA 32 跨服充值排行活动信息 //tagMCCACTGBillboardInfo:
-                                ItemID:%d,
-                                ItemCount:%d,
-                                IsBind:%d
-                                '''\
-                                %(
-                                self.ItemID,
-                                self.ItemCount,
-                                self.IsBind
-                                )
-        return DumpString
-
-
-class  tagMCCACTGBillboardDabiao(Structure):
-    AwardIndex = 0    #(BYTE AwardIndex)// 奖励索引 0~31
-    NeedRMB = 0    #(DWORD NeedRMB)// 所需充值RMB
-    AwardItemCount = 0    #(BYTE AwardItemCount)// 奖励物品数
-    AwardItemList = list()    #(vector<tagMCCACTGBillboardAwardItem> AwardItemList)// 奖励物品信息
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.AwardIndex,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.NeedRMB,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.AwardItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.AwardItemCount):
-            temAwardItemList = tagMCCACTGBillboardAwardItem()
-            _pos = temAwardItemList.ReadData(_lpData, _pos)
-            self.AwardItemList.append(temAwardItemList)
-        return _pos
-
-    def Clear(self):
-        self.AwardIndex = 0
-        self.NeedRMB = 0
-        self.AwardItemCount = 0
-        self.AwardItemList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 1
-        length += 4
-        length += 1
-        for i in range(self.AwardItemCount):
-            length += self.AwardItemList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteBYTE(data, self.AwardIndex)
-        data = CommFunc.WriteDWORD(data, self.NeedRMB)
-        data = CommFunc.WriteBYTE(data, self.AwardItemCount)
-        for i in range(self.AwardItemCount):
-            data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                AwardIndex:%d,
-                                NeedRMB:%d,
-                                AwardItemCount:%d,
-                                AwardItemList:%s
-                                '''\
-                                %(
-                                self.AwardIndex,
-                                self.NeedRMB,
-                                self.AwardItemCount,
-                                "..."
-                                )
-        return DumpString
-
-
-class  tagMCCACTGBillboardOrder(Structure):
-    OrderA = 0    #(BYTE OrderA)// 名次A
-    OrderB = 0    #(BYTE OrderB)// 至名次B
-    NeedRMB = 0    #(DWORD NeedRMB)// 所需充值RMB,未达标的该名次空,排名后面的玩家向下顺延
-    AwardItemCount = 0    #(BYTE AwardItemCount)// 奖励物品数
-    AwardItemList = list()    #(vector<tagMCCACTGBillboardAwardItem> AwardItemList)// 奖励物品信息
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.OrderA,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.OrderB,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.NeedRMB,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.AwardItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.AwardItemCount):
-            temAwardItemList = tagMCCACTGBillboardAwardItem()
-            _pos = temAwardItemList.ReadData(_lpData, _pos)
-            self.AwardItemList.append(temAwardItemList)
-        return _pos
-
-    def Clear(self):
-        self.OrderA = 0
-        self.OrderB = 0
-        self.NeedRMB = 0
-        self.AwardItemCount = 0
-        self.AwardItemList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 1
-        length += 1
-        length += 4
-        length += 1
-        for i in range(self.AwardItemCount):
-            length += self.AwardItemList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteBYTE(data, self.OrderA)
-        data = CommFunc.WriteBYTE(data, self.OrderB)
-        data = CommFunc.WriteDWORD(data, self.NeedRMB)
-        data = CommFunc.WriteBYTE(data, self.AwardItemCount)
-        for i in range(self.AwardItemCount):
-            data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                OrderA:%d,
-                                OrderB:%d,
-                                NeedRMB:%d,
-                                AwardItemCount:%d,
-                                AwardItemList:%s
-                                '''\
-                                %(
-                                self.OrderA,
-                                self.OrderB,
-                                self.NeedRMB,
-                                self.AwardItemCount,
-                                "..."
-                                )
-        return DumpString
-
-
-class  tagMCCACTGBillboardTempInfo(Structure):
-    TemplateID = 0    #(BYTE TemplateID)// 活动模板ID
-    DabiaoAwardCount = 0    #(BYTE DabiaoAwardCount)// 达标奖励档数
-    DabiaoAwardInfo = list()    #(vector<tagMCCACTGBillboardDabiao> DabiaoAwardInfo)// 达标奖励信息
-    OrderAwardCount = 0    #(BYTE OrderAwardCount)// 排行奖励档数
-    OrderAwardInfo = list()    #(vector<tagMCCACTGBillboardOrder> OrderAwardInfo)// 排行奖励信息
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.TemplateID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.DabiaoAwardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.DabiaoAwardCount):
-            temDabiaoAwardInfo = tagMCCACTGBillboardDabiao()
-            _pos = temDabiaoAwardInfo.ReadData(_lpData, _pos)
-            self.DabiaoAwardInfo.append(temDabiaoAwardInfo)
-        self.OrderAwardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.OrderAwardCount):
-            temOrderAwardInfo = tagMCCACTGBillboardOrder()
-            _pos = temOrderAwardInfo.ReadData(_lpData, _pos)
-            self.OrderAwardInfo.append(temOrderAwardInfo)
-        return _pos
-
-    def Clear(self):
-        self.TemplateID = 0
-        self.DabiaoAwardCount = 0
-        self.DabiaoAwardInfo = list()
-        self.OrderAwardCount = 0
-        self.OrderAwardInfo = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 1
-        length += 1
-        for i in range(self.DabiaoAwardCount):
-            length += self.DabiaoAwardInfo[i].GetLength()
-        length += 1
-        for i in range(self.OrderAwardCount):
-            length += self.OrderAwardInfo[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteBYTE(data, self.TemplateID)
-        data = CommFunc.WriteBYTE(data, self.DabiaoAwardCount)
-        for i in range(self.DabiaoAwardCount):
-            data = CommFunc.WriteString(data, self.DabiaoAwardInfo[i].GetLength(), self.DabiaoAwardInfo[i].GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.OrderAwardCount)
-        for i in range(self.OrderAwardCount):
-            data = CommFunc.WriteString(data, self.OrderAwardInfo[i].GetLength(), self.OrderAwardInfo[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                TemplateID:%d,
-                                DabiaoAwardCount:%d,
-                                DabiaoAwardInfo:%s,
-                                OrderAwardCount:%d,
-                                OrderAwardInfo:%s
-                                '''\
-                                %(
-                                self.TemplateID,
-                                self.DabiaoAwardCount,
-                                "...",
-                                self.OrderAwardCount,
-                                "..."
-                                )
-        return DumpString
-
-
-class  tagMCCACTGBillboardInfo(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
-    TemplateID = 0    #(BYTE TemplateID)// 当前活动模板ID
-    TemplateCount = 0    #(BYTE TemplateCount)
-    TempInfo = list()    #(vector<tagMCCACTGBillboardTempInfo> TempInfo)// 模板信息
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xAA
-        self.Head.SubCmd = 0x32
-        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.TemplateID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.TemplateCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.TemplateCount):
-            temTempInfo = tagMCCACTGBillboardTempInfo()
-            _pos = temTempInfo.ReadData(_lpData, _pos)
-            self.TempInfo.append(temTempInfo)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xAA
-        self.Head.SubCmd = 0x32
-        self.ServerInfoLen = 0
-        self.ServerIDRangeInfo = ""
-        self.GroupValue1 = 0
-        self.StartDate = ""
-        self.EndtDate = ""
-        self.TemplateID = 0
-        self.TemplateCount = 0
-        self.TempInfo = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        length += len(self.ServerIDRangeInfo)
-        length += 1
-        length += 10
-        length += 10
-        length += 1
-        length += 1
-        for i in range(self.TemplateCount):
-            length += self.TempInfo[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.WriteBYTE(data, self.TemplateID)
-        data = CommFunc.WriteBYTE(data, self.TemplateCount)
-        for i in range(self.TemplateCount):
-            data = CommFunc.WriteString(data, self.TempInfo[i].GetLength(), self.TempInfo[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                ServerInfoLen:%d,
-                                ServerIDRangeInfo:%s,
-                                GroupValue1:%d,
-                                StartDate:%s,
-                                EndtDate:%s,
-                                TemplateID:%d,
-                                TemplateCount:%d,
-                                TempInfo:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.ServerInfoLen,
-                                self.ServerIDRangeInfo,
-                                self.GroupValue1,
-                                self.StartDate,
-                                self.EndtDate,
-                                self.TemplateID,
-                                self.TemplateCount,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagMCCACTGBillboardInfo=tagMCCACTGBillboardInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCACTGBillboardInfo.Head.Cmd,m_NAtagMCCACTGBillboardInfo.Head.SubCmd))] = m_NAtagMCCACTGBillboardInfo
-
-
-#------------------------------------------------------
-# AA 33 跨服充值排行活动玩家信息 #tagMCCACTGBillboardPlayerInfo
-
-class  tagMCCACTGBillboardPlayerInfo(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("CTGRMBTotal", c_int),    # 活动已累计充值RMB
-                  ("DabiaoAwardRecord", c_int),    # 达标奖励记录,与达标奖励索引位或运算判断是否已领取
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xAA
-        self.SubCmd = 0x33
-        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 = 0x33
-        self.CTGRMBTotal = 0
-        self.DabiaoAwardRecord = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCCACTGBillboardPlayerInfo)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// AA 33 跨服充值排行活动玩家信息 //tagMCCACTGBillboardPlayerInfo:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                CTGRMBTotal:%d,
-                                DabiaoAwardRecord:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.CTGRMBTotal,
-                                self.DabiaoAwardRecord
-                                )
-        return DumpString
-
-
-m_NAtagMCCACTGBillboardPlayerInfo=tagMCCACTGBillboardPlayerInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCACTGBillboardPlayerInfo.Cmd,m_NAtagMCCACTGBillboardPlayerInfo.SubCmd))] = m_NAtagMCCACTGBillboardPlayerInfo
-
-
-#------------------------------------------------------
-# AA 09 消费返利活动信息 #tagMCCostRebateInfo
-
-class  tagMCCostRebateAwardItem(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("ItemID", c_int),    
-                  ("ItemCount", c_int),    
-                  ("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(tagMCCostRebateAwardItem)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// AA 09 消费返利活动信息 //tagMCCostRebateInfo:
-                                ItemID:%d,
-                                ItemCount:%d,
-                                IsBind:%d
-                                '''\
-                                %(
-                                self.ItemID,
-                                self.ItemCount,
-                                self.IsBind
-                                )
-        return DumpString
-
-
-class  tagMCCostRebateAward(Structure):
-    AwardIndex = 0    #(BYTE AwardIndex)// 奖励索引 0~31
-    NeedGold = 0    #(DWORD NeedGold)// 所需仙玉数
-    AwardItemCount = 0    #(BYTE AwardItemCount)// 奖励物品数
-    AwardItem = list()    #(vector<tagMCCostRebateAwardItem> AwardItem)// 奖励物品信息
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.AwardIndex,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.NeedGold,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.AwardItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.AwardItemCount):
-            temAwardItem = tagMCCostRebateAwardItem()
-            _pos = temAwardItem.ReadData(_lpData, _pos)
-            self.AwardItem.append(temAwardItem)
-        return _pos
-
-    def Clear(self):
-        self.AwardIndex = 0
-        self.NeedGold = 0
-        self.AwardItemCount = 0
-        self.AwardItem = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 1
-        length += 4
-        length += 1
-        for i in range(self.AwardItemCount):
-            length += self.AwardItem[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteBYTE(data, self.AwardIndex)
-        data = CommFunc.WriteDWORD(data, self.NeedGold)
-        data = CommFunc.WriteBYTE(data, self.AwardItemCount)
-        for i in range(self.AwardItemCount):
-            data = CommFunc.WriteString(data, self.AwardItem[i].GetLength(), self.AwardItem[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                AwardIndex:%d,
-                                NeedGold:%d,
-                                AwardItemCount:%d,
-                                AwardItem:%s
-                                '''\
-                                %(
-                                self.AwardIndex,
-                                self.NeedGold,
-                                self.AwardItemCount,
-                                "..."
-                                )
-        return DumpString
-
-
-class  tagMCCostRebateAwardDay(Structure):
-    AwardCount = 0    #(BYTE AwardCount)// 奖励档数
-    AwardInfo = list()    #(vector<tagMCCostRebateAward> AwardInfo)// 奖励档信息
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.AwardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.AwardCount):
-            temAwardInfo = tagMCCostRebateAward()
-            _pos = temAwardInfo.ReadData(_lpData, _pos)
-            self.AwardInfo.append(temAwardInfo)
-        return _pos
-
-    def Clear(self):
-        self.AwardCount = 0
-        self.AwardInfo = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 1
-        for i in range(self.AwardCount):
-            length += self.AwardInfo[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteBYTE(data, self.AwardCount)
-        for i in range(self.AwardCount):
-            data = CommFunc.WriteString(data, self.AwardInfo[i].GetLength(), self.AwardInfo[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                AwardCount:%d,
-                                AwardInfo:%s
-                                '''\
-                                %(
-                                self.AwardCount,
-                                "..."
-                                )
-        return DumpString
-
-
-class  tagMCCostRebateInfo(Structure):
-    Head = tagHead()
-    ActNum = 0    #(BYTE ActNum)//活动编号
-    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
-    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
-    IsDayReset = 0    #(BYTE IsDayReset)//是否每天重置
-    LimitLV = 0    #(WORD LimitLV)// 限制等级
-    AwardDays = 0    #(BYTE AwardDays)
-    AwardDayInfo = list()    #(vector<tagMCCostRebateAwardDay> AwardDayInfo)//每天对应返利信息; 如果只有一天,但是活动有多天,则代表每天奖励都一样
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xAA
-        self.Head.SubCmd = 0x09
-        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.IsDayReset,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.AwardDays,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.AwardDays):
-            temAwardDayInfo = tagMCCostRebateAwardDay()
-            _pos = temAwardDayInfo.ReadData(_lpData, _pos)
-            self.AwardDayInfo.append(temAwardDayInfo)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xAA
-        self.Head.SubCmd = 0x09
-        self.ActNum = 0
-        self.StartDate = ""
-        self.EndtDate = ""
-        self.IsDayReset = 0
-        self.LimitLV = 0
-        self.AwardDays = 0
-        self.AwardDayInfo = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        length += 10
-        length += 10
-        length += 1
-        length += 2
-        length += 1
-        for i in range(self.AwardDays):
-            length += self.AwardDayInfo[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.WriteBYTE(data, self.IsDayReset)
-        data = CommFunc.WriteWORD(data, self.LimitLV)
-        data = CommFunc.WriteBYTE(data, self.AwardDays)
-        for i in range(self.AwardDays):
-            data = CommFunc.WriteString(data, self.AwardDayInfo[i].GetLength(), self.AwardDayInfo[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                ActNum:%d,
-                                StartDate:%s,
-                                EndtDate:%s,
-                                IsDayReset:%d,
-                                LimitLV:%d,
-                                AwardDays:%d,
-                                AwardDayInfo:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.ActNum,
-                                self.StartDate,
-                                self.EndtDate,
-                                self.IsDayReset,
-                                self.LimitLV,
-                                self.AwardDays,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagMCCostRebateInfo=tagMCCostRebateInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCostRebateInfo.Head.Cmd,m_NAtagMCCostRebateInfo.Head.SubCmd))] = m_NAtagMCCostRebateInfo
-
-
-#------------------------------------------------------
-# AA 10 消费返利玩家活动信息 #tagMCCostRebatePlayerInfo
-
-class  tagMCCostRebatePlayerInfo(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("ActNum", c_ubyte),    #活动编号
-                  ("CostGoldTotal", c_int),    #本次活动已累计消费仙玉数
-                  ("AwardRecord", c_int),    #返利奖励领奖记录,按奖励索引二进制位存储是否已领取
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xAA
-        self.SubCmd = 0x10
-        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 = 0x10
-        self.ActNum = 0
-        self.CostGoldTotal = 0
-        self.AwardRecord = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCCostRebatePlayerInfo)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// AA 10 消费返利玩家活动信息 //tagMCCostRebatePlayerInfo:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                ActNum:%d,
-                                CostGoldTotal:%d,
-                                AwardRecord:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.ActNum,
-                                self.CostGoldTotal,
-                                self.AwardRecord
-                                )
-        return DumpString
-
-
-m_NAtagMCCostRebatePlayerInfo=tagMCCostRebatePlayerInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCostRebatePlayerInfo.Cmd,m_NAtagMCCostRebatePlayerInfo.SubCmd))] = m_NAtagMCCostRebatePlayerInfo
-
-
-#------------------------------------------------------
-# AA 34 跨服全民充值活动玩家信息 #tagMCCrossActAllRechargePlayerInfo
-
-class  tagMCCrossActAllRechargePlayerInfo(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("CTGRMBTotal", c_int),    # 活动已累计充值RMB
-                  ("AwardRecord", c_int),    # 奖励记录,根据奖励索引位或运算判断是否已领取
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xAA
-        self.SubCmd = 0x34
-        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 = 0x34
-        self.CTGRMBTotal = 0
-        self.AwardRecord = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCCrossActAllRechargePlayerInfo)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// AA 34 跨服全民充值活动玩家信息 //tagMCCrossActAllRechargePlayerInfo:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                CTGRMBTotal:%d,
-                                AwardRecord:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.CTGRMBTotal,
-                                self.AwardRecord
-                                )
-        return DumpString
-
-
-m_NAtagMCCrossActAllRechargePlayerInfo=tagMCCrossActAllRechargePlayerInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCrossActAllRechargePlayerInfo.Cmd,m_NAtagMCCrossActAllRechargePlayerInfo.SubCmd))] = m_NAtagMCCrossActAllRechargePlayerInfo
-
-
-#------------------------------------------------------
 # AA 90 炼器跨服活动信息 #tagMCCrossActLianqiInfo
 
 class  tagMCCrossActLianqiItem(Structure):
@@ -25678,518 +24142,6 @@
 
 m_NAtagMCFeastLoginPlayerInfo=tagMCFeastLoginPlayerInfo()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFeastLoginPlayerInfo.Cmd,m_NAtagMCFeastLoginPlayerInfo.SubCmd))] = m_NAtagMCFeastLoginPlayerInfo
-
-
-#------------------------------------------------------
-# AA 20 节日巡礼活动信息 #tagMCFeastWeekPartyInfo
-
-class  tagMCFeastWeekPartyItem(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("NeedPoint", c_ushort),    # 领奖需要积分
-                  ("ItemID", c_int),    # 物品ID
-                  ("ItemCnt", 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.NeedPoint = 0
-        self.ItemID = 0
-        self.ItemCnt = 0
-        self.IsBind = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCFeastWeekPartyItem)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// AA 20 节日巡礼活动信息 //tagMCFeastWeekPartyInfo:
-                                NeedPoint:%d,
-                                ItemID:%d,
-                                ItemCnt:%d,
-                                IsBind:%d
-                                '''\
-                                %(
-                                self.NeedPoint,
-                                self.ItemID,
-                                self.ItemCnt,
-                                self.IsBind
-                                )
-        return DumpString
-
-
-class  tagMCFeastWeekPartyAction(Structure):
-    TemplateID = 0    #(DWORD TemplateID)// 模板ID
-    ActionType = 0    #(WORD ActionType)// 活动类别
-    TotalTimes = 0    #(DWORD TotalTimes)// 可完成的总次数,0表示不限次数
-    SingleTimes = 0    #(DWORD SingleTimes)// 单次领奖需要的次数
-    Point = 0    #(DWORD Point)// 单次领奖积分
-    Count = 0    #(BYTE Count)// 物品数
-    ItemInfo = list()    #(vector<tagMCFeastWeekPartyItem> ItemInfo)// 物品信息
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.TemplateID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.ActionType,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.TotalTimes,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.SingleTimes,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Point,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.Count):
-            temItemInfo = tagMCFeastWeekPartyItem()
-            _pos = temItemInfo.ReadData(_lpData, _pos)
-            self.ItemInfo.append(temItemInfo)
-        return _pos
-
-    def Clear(self):
-        self.TemplateID = 0
-        self.ActionType = 0
-        self.TotalTimes = 0
-        self.SingleTimes = 0
-        self.Point = 0
-        self.Count = 0
-        self.ItemInfo = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 4
-        length += 2
-        length += 4
-        length += 4
-        length += 4
-        length += 1
-        for i in range(self.Count):
-            length += self.ItemInfo[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteDWORD(data, self.TemplateID)
-        data = CommFunc.WriteWORD(data, self.ActionType)
-        data = CommFunc.WriteDWORD(data, self.TotalTimes)
-        data = CommFunc.WriteDWORD(data, self.SingleTimes)
-        data = CommFunc.WriteDWORD(data, self.Point)
-        data = CommFunc.WriteBYTE(data, self.Count)
-        for i in range(self.Count):
-            data = CommFunc.WriteString(data, self.ItemInfo[i].GetLength(), self.ItemInfo[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                TemplateID:%d,
-                                ActionType:%d,
-                                TotalTimes:%d,
-                                SingleTimes:%d,
-                                Point:%d,
-                                Count:%d,
-                                ItemInfo:%s
-                                '''\
-                                %(
-                                self.TemplateID,
-                                self.ActionType,
-                                self.TotalTimes,
-                                self.SingleTimes,
-                                self.Point,
-                                self.Count,
-                                "..."
-                                )
-        return DumpString
-
-
-class  tagMCFeastWeekPartyDayInfo(Structure):
-    ActCnt = 0    #(BYTE ActCnt)// 数量
-    TemplateList = list()    #(vector<WORD> TemplateList)// 模板列表
-    PCount = 0    #(BYTE PCount)// 物品数
-    PItemInfo = list()    #(vector<tagMCFeastWeekPartyItem> PItemInfo)// 物品信息
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.ActCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.ActCnt):
-            value,_pos=CommFunc.ReadWORD(_lpData,_pos)
-            self.TemplateList.append(value)
-        self.PCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.PCount):
-            temPItemInfo = tagMCFeastWeekPartyItem()
-            _pos = temPItemInfo.ReadData(_lpData, _pos)
-            self.PItemInfo.append(temPItemInfo)
-        return _pos
-
-    def Clear(self):
-        self.ActCnt = 0
-        self.TemplateList = list()
-        self.PCount = 0
-        self.PItemInfo = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 1
-        length += 2 * self.ActCnt
-        length += 1
-        for i in range(self.PCount):
-            length += self.PItemInfo[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteBYTE(data, self.ActCnt)
-        for i in range(self.ActCnt):
-            data = CommFunc.WriteWORD(data, self.TemplateList[i])
-        data = CommFunc.WriteBYTE(data, self.PCount)
-        for i in range(self.PCount):
-            data = CommFunc.WriteString(data, self.PItemInfo[i].GetLength(), self.PItemInfo[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                ActCnt:%d,
-                                TemplateList:%s,
-                                PCount:%d,
-                                PItemInfo:%s
-                                '''\
-                                %(
-                                self.ActCnt,
-                                "...",
-                                self.PCount,
-                                "..."
-                                )
-        return DumpString
-
-
-class  tagMCFeastWeekPartyInfo(Structure):
-    Head = tagHead()
-    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
-    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
-    AdvanceMinutes = 0    #(WORD AdvanceMinutes)// 提前显示分钟
-    IsDayReset = 0    #(BYTE IsDayReset)//是否每天重置
-    ResetType = 0    #(BYTE ResetType)// 重置类型,0-0点重置;1-5点重置
-    LimitLV = 0    #(WORD LimitLV)// 限制等级
-    DayCnt = 0    #(BYTE DayCnt)// 天数
-    DayInfoList = list()    #(vector<tagMCFeastWeekPartyDayInfo> DayInfoList)// 每天模板
-    TCount = 0    #(BYTE TCount)// 模板数
-    ActionInfo = list()    #(vector<tagMCFeastWeekPartyAction> ActionInfo)// 活动模板信息
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xAA
-        self.Head.SubCmd = 0x20
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
-        self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
-        self.AdvanceMinutes,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.IsDayReset,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.ResetType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.DayCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.DayCnt):
-            temDayInfoList = tagMCFeastWeekPartyDayInfo()
-            _pos = temDayInfoList.ReadData(_lpData, _pos)
-            self.DayInfoList.append(temDayInfoList)
-        self.TCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.TCount):
-            temActionInfo = tagMCFeastWeekPartyAction()
-            _pos = temActionInfo.ReadData(_lpData, _pos)
-            self.ActionInfo.append(temActionInfo)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xAA
-        self.Head.SubCmd = 0x20
-        self.StartDate = ""
-        self.EndtDate = ""
-        self.AdvanceMinutes = 0
-        self.IsDayReset = 0
-        self.ResetType = 0
-        self.LimitLV = 0
-        self.DayCnt = 0
-        self.DayInfoList = list()
-        self.TCount = 0
-        self.ActionInfo = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 10
-        length += 10
-        length += 2
-        length += 1
-        length += 1
-        length += 2
-        length += 1
-        for i in range(self.DayCnt):
-            length += self.DayInfoList[i].GetLength()
-        length += 1
-        for i in range(self.TCount):
-            length += self.ActionInfo[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteString(data, 10, self.StartDate)
-        data = CommFunc.WriteString(data, 10, self.EndtDate)
-        data = CommFunc.WriteWORD(data, self.AdvanceMinutes)
-        data = CommFunc.WriteBYTE(data, self.IsDayReset)
-        data = CommFunc.WriteBYTE(data, self.ResetType)
-        data = CommFunc.WriteWORD(data, self.LimitLV)
-        data = CommFunc.WriteBYTE(data, self.DayCnt)
-        for i in range(self.DayCnt):
-            data = CommFunc.WriteString(data, self.DayInfoList[i].GetLength(), self.DayInfoList[i].GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.TCount)
-        for i in range(self.TCount):
-            data = CommFunc.WriteString(data, self.ActionInfo[i].GetLength(), self.ActionInfo[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                StartDate:%s,
-                                EndtDate:%s,
-                                AdvanceMinutes:%d,
-                                IsDayReset:%d,
-                                ResetType:%d,
-                                LimitLV:%d,
-                                DayCnt:%d,
-                                DayInfoList:%s,
-                                TCount:%d,
-                                ActionInfo:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.StartDate,
-                                self.EndtDate,
-                                self.AdvanceMinutes,
-                                self.IsDayReset,
-                                self.ResetType,
-                                self.LimitLV,
-                                self.DayCnt,
-                                "...",
-                                self.TCount,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagMCFeastWeekPartyInfo=tagMCFeastWeekPartyInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFeastWeekPartyInfo.Head.Cmd,m_NAtagMCFeastWeekPartyInfo.Head.SubCmd))] = m_NAtagMCFeastWeekPartyInfo
-
-
-#------------------------------------------------------
-# AA 21 节日巡礼玩家活动信息 #tagMCFeastWeekPartyPlayerInfo
-
-class  tagMCFeastWeekPartyTaskInfo(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("TemplateID", c_ushort),    # 模板ID
-                  ("CurTimes", c_int),    #已完成次数
-                  ("GotTimes", c_int),    #已领取次数
-                  ]
-
-    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.TemplateID = 0
-        self.CurTimes = 0
-        self.GotTimes = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCFeastWeekPartyTaskInfo)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// AA 21 节日巡礼玩家活动信息 //tagMCFeastWeekPartyPlayerInfo:
-                                TemplateID:%d,
-                                CurTimes:%d,
-                                GotTimes:%d
-                                '''\
-                                %(
-                                self.TemplateID,
-                                self.CurTimes,
-                                self.GotTimes
-                                )
-        return DumpString
-
-
-class  tagMCFeastWeekPartyDayPlayerInfo(Structure):
-    DayIndex = 0    #(DWORD DayIndex)//第X天
-    Point = 0    #(DWORD Point)//积分
-    AwardRecord = 0    #(DWORD AwardRecord)//积分领奖记录
-    ACount = 0    #(DWORD ACount)//任务条目数
-    TaskList = list()    #(vector<tagMCFeastWeekPartyTaskInfo> TaskList)//活动完成次数信息
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.DayIndex,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Point,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.AwardRecord,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.ACount,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        for i in range(self.ACount):
-            temTaskList = tagMCFeastWeekPartyTaskInfo()
-            _pos = temTaskList.ReadData(_lpData, _pos)
-            self.TaskList.append(temTaskList)
-        return _pos
-
-    def Clear(self):
-        self.DayIndex = 0
-        self.Point = 0
-        self.AwardRecord = 0
-        self.ACount = 0
-        self.TaskList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        for i in range(self.ACount):
-            length += self.TaskList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteDWORD(data, self.DayIndex)
-        data = CommFunc.WriteDWORD(data, self.Point)
-        data = CommFunc.WriteDWORD(data, self.AwardRecord)
-        data = CommFunc.WriteDWORD(data, self.ACount)
-        for i in range(self.ACount):
-            data = CommFunc.WriteString(data, self.TaskList[i].GetLength(), self.TaskList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                DayIndex:%d,
-                                Point:%d,
-                                AwardRecord:%d,
-                                ACount:%d,
-                                TaskList:%s
-                                '''\
-                                %(
-                                self.DayIndex,
-                                self.Point,
-                                self.AwardRecord,
-                                self.ACount,
-                                "..."
-                                )
-        return DumpString
-
-
-class  tagMCFeastWeekPartyPlayerInfo(Structure):
-    Head = tagHead()
-    Count = 0    #(BYTE Count)
-    DayInfoList = list()    #(vector<tagMCFeastWeekPartyDayPlayerInfo> DayInfoList)//活动完成次数信息
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xAA
-        self.Head.SubCmd = 0x21
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.Count):
-            temDayInfoList = tagMCFeastWeekPartyDayPlayerInfo()
-            _pos = temDayInfoList.ReadData(_lpData, _pos)
-            self.DayInfoList.append(temDayInfoList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xAA
-        self.Head.SubCmd = 0x21
-        self.Count = 0
-        self.DayInfoList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        for i in range(self.Count):
-            length += self.DayInfoList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.Count)
-        for i in range(self.Count):
-            data = CommFunc.WriteString(data, self.DayInfoList[i].GetLength(), self.DayInfoList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                Count:%d,
-                                DayInfoList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.Count,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagMCFeastWeekPartyPlayerInfo=tagMCFeastWeekPartyPlayerInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFeastWeekPartyPlayerInfo.Head.Cmd,m_NAtagMCFeastWeekPartyPlayerInfo.Head.SubCmd))] = m_NAtagMCFeastWeekPartyPlayerInfo
 
 
 #------------------------------------------------------
@@ -28016,166 +25968,6 @@
 
 
 #------------------------------------------------------
-# AA 28 充值返利玩家活动信息 #tagMCRechargePrizePlayerInfo
-
-class  tagMCRechargePrizeInfo(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("CTGID", c_ushort),    # 对应充值表充值ID
-                  ("PrizeCount", 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.CTGID = 0
-        self.PrizeCount = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCRechargePrizeInfo)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// AA 28 充值返利玩家活动信息 //tagMCRechargePrizePlayerInfo:
-                                CTGID:%d,
-                                PrizeCount:%d
-                                '''\
-                                %(
-                                self.CTGID,
-                                self.PrizeCount
-                                )
-        return DumpString
-
-
-class  tagMCRechargePrizePlayerInfo(Structure):
-    Head = tagHead()
-    Count = 0    #(BYTE Count)
-    PlayerInfoList = list()    #(vector<tagMCRechargePrizeInfo> PlayerInfoList)//玩家返利信息列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xAA
-        self.Head.SubCmd = 0x28
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.Count):
-            temPlayerInfoList = tagMCRechargePrizeInfo()
-            _pos = temPlayerInfoList.ReadData(_lpData, _pos)
-            self.PlayerInfoList.append(temPlayerInfoList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xAA
-        self.Head.SubCmd = 0x28
-        self.Count = 0
-        self.PlayerInfoList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        for i in range(self.Count):
-            length += self.PlayerInfoList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.Count)
-        for i in range(self.Count):
-            data = CommFunc.WriteString(data, self.PlayerInfoList[i].GetLength(), self.PlayerInfoList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                Count:%d,
-                                PlayerInfoList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.Count,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagMCRechargePrizePlayerInfo=tagMCRechargePrizePlayerInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCRechargePrizePlayerInfo.Head.Cmd,m_NAtagMCRechargePrizePlayerInfo.Head.SubCmd))] = m_NAtagMCRechargePrizePlayerInfo
-
-
-#------------------------------------------------------
-# AA 30 累计充值返利仙玉玩家活动信息 #tagMCRechargeRebateGoldPlayerInfo
-
-class  tagMCRechargeRebateGoldPlayerInfo(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("RechargeRMBTotal", c_int),    # 活动已累计充值RMB
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xAA
-        self.SubCmd = 0x30
-        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 = 0x30
-        self.RechargeRMBTotal = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCRechargeRebateGoldPlayerInfo)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// AA 30 累计充值返利仙玉玩家活动信息 //tagMCRechargeRebateGoldPlayerInfo:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                RechargeRMBTotal:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.RechargeRMBTotal
-                                )
-        return DumpString
-
-
-m_NAtagMCRechargeRebateGoldPlayerInfo=tagMCRechargeRebateGoldPlayerInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCRechargeRebateGoldPlayerInfo.Cmd,m_NAtagMCRechargeRebateGoldPlayerInfo.SubCmd))] = m_NAtagMCRechargeRebateGoldPlayerInfo
-
-
-#------------------------------------------------------
 # AA 11 限时特惠活动信息 #tagMCSpringSaleInfo
 
 class  tagMCSpringSaleItem(Structure):
@@ -28701,518 +26493,6 @@
 
 
 #------------------------------------------------------
-# AA 0A 周狂欢活动信息 #tagMCWeekPartyInfo
-
-class  tagMCWeekPartyItem(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("NeedPoint", c_ushort),    # 领奖需要积分
-                  ("ItemID", c_int),    # 物品ID
-                  ("ItemCnt", 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.NeedPoint = 0
-        self.ItemID = 0
-        self.ItemCnt = 0
-        self.IsBind = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCWeekPartyItem)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// AA 0A 周狂欢活动信息 //tagMCWeekPartyInfo:
-                                NeedPoint:%d,
-                                ItemID:%d,
-                                ItemCnt:%d,
-                                IsBind:%d
-                                '''\
-                                %(
-                                self.NeedPoint,
-                                self.ItemID,
-                                self.ItemCnt,
-                                self.IsBind
-                                )
-        return DumpString
-
-
-class  tagMCWeekPartyAction(Structure):
-    TemplateID = 0    #(DWORD TemplateID)// 模板ID
-    ActionType = 0    #(WORD ActionType)// 活动类别
-    TotalTimes = 0    #(DWORD TotalTimes)// 可完成的总次数,0表示不限次数
-    SingleTimes = 0    #(DWORD SingleTimes)// 单次领奖需要的次数
-    Point = 0    #(DWORD Point)// 单次领奖积分
-    Count = 0    #(BYTE Count)// 物品数
-    ItemInfo = list()    #(vector<tagMCWeekPartyItem> ItemInfo)// 物品信息
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.TemplateID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.ActionType,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.TotalTimes,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.SingleTimes,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Point,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.Count):
-            temItemInfo = tagMCWeekPartyItem()
-            _pos = temItemInfo.ReadData(_lpData, _pos)
-            self.ItemInfo.append(temItemInfo)
-        return _pos
-
-    def Clear(self):
-        self.TemplateID = 0
-        self.ActionType = 0
-        self.TotalTimes = 0
-        self.SingleTimes = 0
-        self.Point = 0
-        self.Count = 0
-        self.ItemInfo = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 4
-        length += 2
-        length += 4
-        length += 4
-        length += 4
-        length += 1
-        for i in range(self.Count):
-            length += self.ItemInfo[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteDWORD(data, self.TemplateID)
-        data = CommFunc.WriteWORD(data, self.ActionType)
-        data = CommFunc.WriteDWORD(data, self.TotalTimes)
-        data = CommFunc.WriteDWORD(data, self.SingleTimes)
-        data = CommFunc.WriteDWORD(data, self.Point)
-        data = CommFunc.WriteBYTE(data, self.Count)
-        for i in range(self.Count):
-            data = CommFunc.WriteString(data, self.ItemInfo[i].GetLength(), self.ItemInfo[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                TemplateID:%d,
-                                ActionType:%d,
-                                TotalTimes:%d,
-                                SingleTimes:%d,
-                                Point:%d,
-                                Count:%d,
-                                ItemInfo:%s
-                                '''\
-                                %(
-                                self.TemplateID,
-                                self.ActionType,
-                                self.TotalTimes,
-                                self.SingleTimes,
-                                self.Point,
-                                self.Count,
-                                "..."
-                                )
-        return DumpString
-
-
-class  tagMCWeekPartyDayInfo(Structure):
-    ActCnt = 0    #(BYTE ActCnt)// 数量
-    TemplateList = list()    #(vector<WORD> TemplateList)// 模板列表
-    PCount = 0    #(BYTE PCount)// 物品数
-    PItemInfo = list()    #(vector<tagMCWeekPartyItem> PItemInfo)// 物品信息
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.ActCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.ActCnt):
-            value,_pos=CommFunc.ReadWORD(_lpData,_pos)
-            self.TemplateList.append(value)
-        self.PCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.PCount):
-            temPItemInfo = tagMCWeekPartyItem()
-            _pos = temPItemInfo.ReadData(_lpData, _pos)
-            self.PItemInfo.append(temPItemInfo)
-        return _pos
-
-    def Clear(self):
-        self.ActCnt = 0
-        self.TemplateList = list()
-        self.PCount = 0
-        self.PItemInfo = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 1
-        length += 2 * self.ActCnt
-        length += 1
-        for i in range(self.PCount):
-            length += self.PItemInfo[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteBYTE(data, self.ActCnt)
-        for i in range(self.ActCnt):
-            data = CommFunc.WriteWORD(data, self.TemplateList[i])
-        data = CommFunc.WriteBYTE(data, self.PCount)
-        for i in range(self.PCount):
-            data = CommFunc.WriteString(data, self.PItemInfo[i].GetLength(), self.PItemInfo[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                ActCnt:%d,
-                                TemplateList:%s,
-                                PCount:%d,
-                                PItemInfo:%s
-                                '''\
-                                %(
-                                self.ActCnt,
-                                "...",
-                                self.PCount,
-                                "..."
-                                )
-        return DumpString
-
-
-class  tagMCWeekPartyInfo(Structure):
-    Head = tagHead()
-    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
-    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
-    AdvanceMinutes = 0    #(WORD AdvanceMinutes)// 提前显示分钟
-    IsDayReset = 0    #(BYTE IsDayReset)//是否每天重置
-    ResetType = 0    #(BYTE ResetType)// 重置类型,0-0点重置;1-5点重置
-    LimitLV = 0    #(WORD LimitLV)// 限制等级
-    DayCnt = 0    #(BYTE DayCnt)// 天数
-    DayInfoList = list()    #(vector<tagMCWeekPartyDayInfo> DayInfoList)// 每天模板
-    TCount = 0    #(BYTE TCount)// 模板数
-    ActionInfo = list()    #(vector<tagMCWeekPartyAction> ActionInfo)// 活动模板信息
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xAA
-        self.Head.SubCmd = 0x0A
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
-        self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
-        self.AdvanceMinutes,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.IsDayReset,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.ResetType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.DayCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.DayCnt):
-            temDayInfoList = tagMCWeekPartyDayInfo()
-            _pos = temDayInfoList.ReadData(_lpData, _pos)
-            self.DayInfoList.append(temDayInfoList)
-        self.TCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.TCount):
-            temActionInfo = tagMCWeekPartyAction()
-            _pos = temActionInfo.ReadData(_lpData, _pos)
-            self.ActionInfo.append(temActionInfo)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xAA
-        self.Head.SubCmd = 0x0A
-        self.StartDate = ""
-        self.EndtDate = ""
-        self.AdvanceMinutes = 0
-        self.IsDayReset = 0
-        self.ResetType = 0
-        self.LimitLV = 0
-        self.DayCnt = 0
-        self.DayInfoList = list()
-        self.TCount = 0
-        self.ActionInfo = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 10
-        length += 10
-        length += 2
-        length += 1
-        length += 1
-        length += 2
-        length += 1
-        for i in range(self.DayCnt):
-            length += self.DayInfoList[i].GetLength()
-        length += 1
-        for i in range(self.TCount):
-            length += self.ActionInfo[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteString(data, 10, self.StartDate)
-        data = CommFunc.WriteString(data, 10, self.EndtDate)
-        data = CommFunc.WriteWORD(data, self.AdvanceMinutes)
-        data = CommFunc.WriteBYTE(data, self.IsDayReset)
-        data = CommFunc.WriteBYTE(data, self.ResetType)
-        data = CommFunc.WriteWORD(data, self.LimitLV)
-        data = CommFunc.WriteBYTE(data, self.DayCnt)
-        for i in range(self.DayCnt):
-            data = CommFunc.WriteString(data, self.DayInfoList[i].GetLength(), self.DayInfoList[i].GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.TCount)
-        for i in range(self.TCount):
-            data = CommFunc.WriteString(data, self.ActionInfo[i].GetLength(), self.ActionInfo[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                StartDate:%s,
-                                EndtDate:%s,
-                                AdvanceMinutes:%d,
-                                IsDayReset:%d,
-                                ResetType:%d,
-                                LimitLV:%d,
-                                DayCnt:%d,
-                                DayInfoList:%s,
-                                TCount:%d,
-                                ActionInfo:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.StartDate,
-                                self.EndtDate,
-                                self.AdvanceMinutes,
-                                self.IsDayReset,
-                                self.ResetType,
-                                self.LimitLV,
-                                self.DayCnt,
-                                "...",
-                                self.TCount,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagMCWeekPartyInfo=tagMCWeekPartyInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCWeekPartyInfo.Head.Cmd,m_NAtagMCWeekPartyInfo.Head.SubCmd))] = m_NAtagMCWeekPartyInfo
-
-
-#------------------------------------------------------
-# AA 0B 周狂欢玩家活动信息 #tagMCWeekPartyPlayerInfo
-
-class  tagMCWeekPartyTaskInfo(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("TemplateID", c_ushort),    # 模板ID
-                  ("CurTimes", c_int),    #已完成次数
-                  ("GotTimes", c_int),    #已领取次数
-                  ]
-
-    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.TemplateID = 0
-        self.CurTimes = 0
-        self.GotTimes = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCWeekPartyTaskInfo)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// AA 0B 周狂欢玩家活动信息 //tagMCWeekPartyPlayerInfo:
-                                TemplateID:%d,
-                                CurTimes:%d,
-                                GotTimes:%d
-                                '''\
-                                %(
-                                self.TemplateID,
-                                self.CurTimes,
-                                self.GotTimes
-                                )
-        return DumpString
-
-
-class  tagMCWeekPartyDayPlayerInfo(Structure):
-    DayIndex = 0    #(DWORD DayIndex)//第X天
-    Point = 0    #(DWORD Point)//积分
-    AwardRecord = 0    #(DWORD AwardRecord)//积分领奖记录
-    ACount = 0    #(DWORD ACount)//任务条目数
-    TaskList = list()    #(vector<tagMCWeekPartyTaskInfo> TaskList)//活动完成次数信息
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.DayIndex,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Point,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.AwardRecord,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.ACount,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        for i in range(self.ACount):
-            temTaskList = tagMCWeekPartyTaskInfo()
-            _pos = temTaskList.ReadData(_lpData, _pos)
-            self.TaskList.append(temTaskList)
-        return _pos
-
-    def Clear(self):
-        self.DayIndex = 0
-        self.Point = 0
-        self.AwardRecord = 0
-        self.ACount = 0
-        self.TaskList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        for i in range(self.ACount):
-            length += self.TaskList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteDWORD(data, self.DayIndex)
-        data = CommFunc.WriteDWORD(data, self.Point)
-        data = CommFunc.WriteDWORD(data, self.AwardRecord)
-        data = CommFunc.WriteDWORD(data, self.ACount)
-        for i in range(self.ACount):
-            data = CommFunc.WriteString(data, self.TaskList[i].GetLength(), self.TaskList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                DayIndex:%d,
-                                Point:%d,
-                                AwardRecord:%d,
-                                ACount:%d,
-                                TaskList:%s
-                                '''\
-                                %(
-                                self.DayIndex,
-                                self.Point,
-                                self.AwardRecord,
-                                self.ACount,
-                                "..."
-                                )
-        return DumpString
-
-
-class  tagMCWeekPartyPlayerInfo(Structure):
-    Head = tagHead()
-    Count = 0    #(BYTE Count)
-    DayInfoList = list()    #(vector<tagMCWeekPartyDayPlayerInfo> DayInfoList)//活动完成次数信息
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xAA
-        self.Head.SubCmd = 0x0B
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.Count):
-            temDayInfoList = tagMCWeekPartyDayPlayerInfo()
-            _pos = temDayInfoList.ReadData(_lpData, _pos)
-            self.DayInfoList.append(temDayInfoList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xAA
-        self.Head.SubCmd = 0x0B
-        self.Count = 0
-        self.DayInfoList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        for i in range(self.Count):
-            length += self.DayInfoList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.Count)
-        for i in range(self.Count):
-            data = CommFunc.WriteString(data, self.DayInfoList[i].GetLength(), self.DayInfoList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                Count:%d,
-                                DayInfoList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.Count,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagMCWeekPartyPlayerInfo=tagMCWeekPartyPlayerInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCWeekPartyPlayerInfo.Head.Cmd,m_NAtagMCWeekPartyPlayerInfo.Head.SubCmd))] = m_NAtagMCWeekPartyPlayerInfo
-
-
-#------------------------------------------------------
 # AA 14 仙界盛典充值大礼 #tagMCXJSDRecharge
 
 class  tagMCXJSDRecharge(Structure):
@@ -29330,224 +26610,6 @@
 
 m_NAtagSCOSACelebrationInfo=tagSCOSACelebrationInfo()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagSCOSACelebrationInfo.Cmd,m_NAtagSCOSACelebrationInfo.SubCmd))] = m_NAtagSCOSACelebrationInfo
-
-
-#------------------------------------------------------
-# AC 13 跨服全民充值活动信息 #tagGCCrossActAllRechargeInfo
-
-class  tagGCCrossActAllRechargeItem(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(tagGCCrossActAllRechargeItem)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// AC 13 跨服全民充值活动信息 //tagGCCrossActAllRechargeInfo:
-                                ItemID:%d,
-                                ItemCount:%d,
-                                IsBind:%d
-                                '''\
-                                %(
-                                self.ItemID,
-                                self.ItemCount,
-                                self.IsBind
-                                )
-        return DumpString
-
-
-class  tagGCCrossActAllRechargeAward(Structure):
-    AwardIndex = 0    #(BYTE AwardIndex)// 奖励索引 0~31
-    NeedRMB = 0    #(DWORD NeedRMB)// 所需全民充值RMB
-    NeedPlayerCount = 0    #(WORD NeedPlayerCount)// 所需充值达到该档玩家数
-    NowPlayerCount = 0    #(WORD NowPlayerCount)// 当前充值达到该档玩家数
-    AwardItemCount = 0    #(BYTE AwardItemCount)// 奖励物品数
-    AwardItemList = list()    #(vector<tagGCCrossActAllRechargeItem> AwardItemList)// 奖励物品信息
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.AwardIndex,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.NeedRMB,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.NeedPlayerCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.NowPlayerCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.AwardItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.AwardItemCount):
-            temAwardItemList = tagGCCrossActAllRechargeItem()
-            _pos = temAwardItemList.ReadData(_lpData, _pos)
-            self.AwardItemList.append(temAwardItemList)
-        return _pos
-
-    def Clear(self):
-        self.AwardIndex = 0
-        self.NeedRMB = 0
-        self.NeedPlayerCount = 0
-        self.NowPlayerCount = 0
-        self.AwardItemCount = 0
-        self.AwardItemList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 1
-        length += 4
-        length += 2
-        length += 2
-        length += 1
-        for i in range(self.AwardItemCount):
-            length += self.AwardItemList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteBYTE(data, self.AwardIndex)
-        data = CommFunc.WriteDWORD(data, self.NeedRMB)
-        data = CommFunc.WriteWORD(data, self.NeedPlayerCount)
-        data = CommFunc.WriteWORD(data, self.NowPlayerCount)
-        data = CommFunc.WriteBYTE(data, self.AwardItemCount)
-        for i in range(self.AwardItemCount):
-            data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                AwardIndex:%d,
-                                NeedRMB:%d,
-                                NeedPlayerCount:%d,
-                                NowPlayerCount:%d,
-                                AwardItemCount:%d,
-                                AwardItemList:%s
-                                '''\
-                                %(
-                                self.AwardIndex,
-                                self.NeedRMB,
-                                self.NeedPlayerCount,
-                                self.NowPlayerCount,
-                                self.AwardItemCount,
-                                "..."
-                                )
-        return DumpString
-
-
-class  tagGCCrossActAllRechargeInfo(Structure):
-    Head = tagHead()
-    ServerInfoLen = 0    #(BYTE ServerInfoLen)
-    ServerIDRangeInfo = ""    #(String ServerIDRangeInfo)//开放该活动的服务器ID范围列表,json格式 [[IDA, IDB], ...], [] 为全服
-    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
-    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
-    AwardCount = 0    #(BYTE AwardCount)
-    AwardList = list()    #(vector<tagGCCrossActAllRechargeAward> AwardList)// 奖励档次信息
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xAC
-        self.Head.SubCmd = 0x13
-        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.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
-        self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
-        self.AwardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.AwardCount):
-            temAwardList = tagGCCrossActAllRechargeAward()
-            _pos = temAwardList.ReadData(_lpData, _pos)
-            self.AwardList.append(temAwardList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xAC
-        self.Head.SubCmd = 0x13
-        self.ServerInfoLen = 0
-        self.ServerIDRangeInfo = ""
-        self.StartDate = ""
-        self.EndtDate = ""
-        self.AwardCount = 0
-        self.AwardList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        length += len(self.ServerIDRangeInfo)
-        length += 10
-        length += 10
-        length += 1
-        for i in range(self.AwardCount):
-            length += self.AwardList[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.WriteString(data, 10, self.StartDate)
-        data = CommFunc.WriteString(data, 10, self.EndtDate)
-        data = CommFunc.WriteBYTE(data, self.AwardCount)
-        for i in range(self.AwardCount):
-            data = CommFunc.WriteString(data, self.AwardList[i].GetLength(), self.AwardList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                ServerInfoLen:%d,
-                                ServerIDRangeInfo:%s,
-                                StartDate:%s,
-                                EndtDate:%s,
-                                AwardCount:%d,
-                                AwardList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.ServerInfoLen,
-                                self.ServerIDRangeInfo,
-                                self.StartDate,
-                                self.EndtDate,
-                                self.AwardCount,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagGCCrossActAllRechargeInfo=tagGCCrossActAllRechargeInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossActAllRechargeInfo.Head.Cmd,m_NAtagGCCrossActAllRechargeInfo.Head.SubCmd))] = m_NAtagGCCrossActAllRechargeInfo
 
 
 #------------------------------------------------------
@@ -45813,66 +42875,6 @@
 
 
 #------------------------------------------------------
-# C0 11 跨服妖魔boss玩家伤害信息 #tagGCCrossYaomoBossPlayerHurtInfo
-
-class  tagGCCrossYaomoBossPlayerHurtInfo(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("HurtTotal", c_int),    # 总伤害值,小于亿部分
-                  ("HurtTotalEx", c_int),    # 总伤害值,整除亿部分
-                  ("AwardState", c_int),    # 伤害目标值领奖状态,按奖励记录索引位运算判断是否已领取
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xC0
-        self.SubCmd = 0x11
-        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 = 0xC0
-        self.SubCmd = 0x11
-        self.HurtTotal = 0
-        self.HurtTotalEx = 0
-        self.AwardState = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagGCCrossYaomoBossPlayerHurtInfo)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// C0 11 跨服妖魔boss玩家伤害信息 //tagGCCrossYaomoBossPlayerHurtInfo:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                HurtTotal:%d,
-                                HurtTotalEx:%d,
-                                AwardState:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.HurtTotal,
-                                self.HurtTotalEx,
-                                self.AwardState
-                                )
-        return DumpString
-
-
-m_NAtagGCCrossYaomoBossPlayerHurtInfo=tagGCCrossYaomoBossPlayerHurtInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossYaomoBossPlayerHurtInfo.Cmd,m_NAtagGCCrossYaomoBossPlayerHurtInfo.SubCmd))] = m_NAtagGCCrossYaomoBossPlayerHurtInfo
-
-
-#------------------------------------------------------
 # C0 10 跨服所属分区信息 #tagGCCrossZoneInfo
 
 class  tagGCCrossZoneInfo(Structure):
@@ -47750,572 +44752,6 @@
 
 
 #------------------------------------------------------
-# C0 14 幸运云购开奖记录 #tagGCLuckyCloudBuyLotteryRecInfo
-
-class  tagGCLuckyCloudBuyLotteryRec(Structure):
-    SuperItemID = 0    #(DWORD SuperItemID)// 大奖物品ID
-    SuperItemCount = 0    #(BYTE SuperItemCount)// 大奖物品个数
-    NameLen = 0    #(BYTE NameLen)
-    PlayerName = ""    #(String PlayerName)// 中奖玩家名
-    LotteryNum = 0    #(WORD LotteryNum)// 开奖号码
-    LotteryTime = 0    #(DWORD LotteryTime)// 开奖时间戳,秒
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.SuperItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.SuperItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
-        self.LotteryNum,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.LotteryTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        return _pos
-
-    def Clear(self):
-        self.SuperItemID = 0
-        self.SuperItemCount = 0
-        self.NameLen = 0
-        self.PlayerName = ""
-        self.LotteryNum = 0
-        self.LotteryTime = 0
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 4
-        length += 1
-        length += 1
-        length += len(self.PlayerName)
-        length += 2
-        length += 4
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteDWORD(data, self.SuperItemID)
-        data = CommFunc.WriteBYTE(data, self.SuperItemCount)
-        data = CommFunc.WriteBYTE(data, self.NameLen)
-        data = CommFunc.WriteString(data, self.NameLen, self.PlayerName)
-        data = CommFunc.WriteWORD(data, self.LotteryNum)
-        data = CommFunc.WriteDWORD(data, self.LotteryTime)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                SuperItemID:%d,
-                                SuperItemCount:%d,
-                                NameLen:%d,
-                                PlayerName:%s,
-                                LotteryNum:%d,
-                                LotteryTime:%d
-                                '''\
-                                %(
-                                self.SuperItemID,
-                                self.SuperItemCount,
-                                self.NameLen,
-                                self.PlayerName,
-                                self.LotteryNum,
-                                self.LotteryTime
-                                )
-        return DumpString
-
-
-class  tagGCLuckyCloudBuyLotteryRecInfo(Structure):
-    Head = tagHead()
-    ZoneCount = 0    #(BYTE ZoneCount)// 分区数
-    ZoneIDList = list()    #(vector<BYTE> ZoneIDList)// 所有分区ID列表
-    ZoneID = 0    #(BYTE ZoneID)// 返回记录分区ID
-    Count = 0    #(WORD Count)
-    LotteryRecList = list()    #(vector<tagGCLuckyCloudBuyLotteryRec> LotteryRecList)
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xC0
-        self.Head.SubCmd = 0x14
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.ZoneCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.ZoneCount):
-            value,_pos=CommFunc.ReadBYTE(_lpData,_pos)
-            self.ZoneIDList.append(value)
-        self.ZoneID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        for i in range(self.Count):
-            temLotteryRecList = tagGCLuckyCloudBuyLotteryRec()
-            _pos = temLotteryRecList.ReadData(_lpData, _pos)
-            self.LotteryRecList.append(temLotteryRecList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xC0
-        self.Head.SubCmd = 0x14
-        self.ZoneCount = 0
-        self.ZoneIDList = list()
-        self.ZoneID = 0
-        self.Count = 0
-        self.LotteryRecList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        length += 1 * self.ZoneCount
-        length += 1
-        length += 2
-        for i in range(self.Count):
-            length += self.LotteryRecList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.ZoneCount)
-        for i in range(self.ZoneCount):
-            data = CommFunc.WriteBYTE(data, self.ZoneIDList[i])
-        data = CommFunc.WriteBYTE(data, self.ZoneID)
-        data = CommFunc.WriteWORD(data, self.Count)
-        for i in range(self.Count):
-            data = CommFunc.WriteString(data, self.LotteryRecList[i].GetLength(), self.LotteryRecList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                ZoneCount:%d,
-                                ZoneIDList:%s,
-                                ZoneID:%d,
-                                Count:%d,
-                                LotteryRecList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.ZoneCount,
-                                "...",
-                                self.ZoneID,
-                                self.Count,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagGCLuckyCloudBuyLotteryRecInfo=tagGCLuckyCloudBuyLotteryRecInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCLuckyCloudBuyLotteryRecInfo.Head.Cmd,m_NAtagGCLuckyCloudBuyLotteryRecInfo.Head.SubCmd))] = m_NAtagGCLuckyCloudBuyLotteryRecInfo
-
-
-#------------------------------------------------------
-# C0 13 幸运云购购买号码记录 #tagGCLuckyCloudBuyNumRecInfo
-
-class  tagGCLuckyCloudBuyNumRec(Structure):
-    NameLen = 0    #(BYTE NameLen)
-    PlayerName = ""    #(String PlayerName)
-    BuyNum = 0    #(WORD BuyNum)
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
-        self.BuyNum,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        return _pos
-
-    def Clear(self):
-        self.NameLen = 0
-        self.PlayerName = ""
-        self.BuyNum = 0
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 1
-        length += len(self.PlayerName)
-        length += 2
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteBYTE(data, self.NameLen)
-        data = CommFunc.WriteString(data, self.NameLen, self.PlayerName)
-        data = CommFunc.WriteWORD(data, self.BuyNum)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                NameLen:%d,
-                                PlayerName:%s,
-                                BuyNum:%d
-                                '''\
-                                %(
-                                self.NameLen,
-                                self.PlayerName,
-                                self.BuyNum
-                                )
-        return DumpString
-
-
-class  tagGCLuckyCloudBuyNumRecInfo(Structure):
-    Head = tagHead()
-    RemainCount = 0    #(WORD RemainCount)// 开奖剩余份数
-    Count = 0    #(WORD Count)
-    BuyNumRecList = list()    #(vector<tagGCLuckyCloudBuyNumRec> BuyNumRecList)
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xC0
-        self.Head.SubCmd = 0x13
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.RemainCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        for i in range(self.Count):
-            temBuyNumRecList = tagGCLuckyCloudBuyNumRec()
-            _pos = temBuyNumRecList.ReadData(_lpData, _pos)
-            self.BuyNumRecList.append(temBuyNumRecList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xC0
-        self.Head.SubCmd = 0x13
-        self.RemainCount = 0
-        self.Count = 0
-        self.BuyNumRecList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 2
-        length += 2
-        for i in range(self.Count):
-            length += self.BuyNumRecList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteWORD(data, self.RemainCount)
-        data = CommFunc.WriteWORD(data, self.Count)
-        for i in range(self.Count):
-            data = CommFunc.WriteString(data, self.BuyNumRecList[i].GetLength(), self.BuyNumRecList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                RemainCount:%d,
-                                Count:%d,
-                                BuyNumRecList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.RemainCount,
-                                self.Count,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagGCLuckyCloudBuyNumRecInfo=tagGCLuckyCloudBuyNumRecInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCLuckyCloudBuyNumRecInfo.Head.Cmd,m_NAtagGCLuckyCloudBuyNumRecInfo.Head.SubCmd))] = m_NAtagGCLuckyCloudBuyNumRecInfo
-
-
-#------------------------------------------------------
-# C0 12 幸运云购轮次信息 #tagGCLuckyCloudBuyRoundInfo
-
-class  tagGCLuckyCloudBuyRoundItem(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(tagGCLuckyCloudBuyRoundItem)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// C0 12 幸运云购轮次信息 //tagGCLuckyCloudBuyRoundInfo:
-                                ItemID:%d,
-                                ItemCount:%d,
-                                IsBind:%d
-                                '''\
-                                %(
-                                self.ItemID,
-                                self.ItemCount,
-                                self.IsBind
-                                )
-        return DumpString
-
-
-class  tagGCLuckyCloudBuyRoundTime(Structure):
-    StartTime = ""    #(char StartTime[5])// 开始时间 H:M
-    EndtTime = ""    #(char EndtTime[5])// 结束时间 H:M
-    RoundMax = 0    #(BYTE RoundMax)// 本时段最大轮次
-    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)
-        self.RoundMax,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        return _pos
-
-    def Clear(self):
-        self.StartTime = ""
-        self.EndtTime = ""
-        self.RoundMax = 0
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 5
-        length += 5
-        length += 1
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, 5, self.StartTime)
-        data = CommFunc.WriteString(data, 5, self.EndtTime)
-        data = CommFunc.WriteBYTE(data, self.RoundMax)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                StartTime:%s,
-                                EndtTime:%s,
-                                RoundMax:%d
-                                '''\
-                                %(
-                                self.StartTime,
-                                self.EndtTime,
-                                self.RoundMax
-                                )
-        return DumpString
-
-
-class  tagGCLuckyCloudBuyRoundInfo(Structure):
-    Head = tagHead()
-    ZoneID = 0    #(BYTE ZoneID)// 所属分区ID
-    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
-    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
-    RoundTimeCount = 0    #(BYTE RoundTimeCount)
-    RoundTimeList = list()    #(vector<tagGCLuckyCloudBuyRoundTime> RoundTimeList)//轮次时间段
-    RoundID = 0    #(DWORD RoundID)// 轮次唯一ID标识,当收到的轮次ID变更时,前端需清空购买号码记录缓存
-    RoundNum = 0    #(BYTE RoundNum)// 当前时段第几轮
-    SuperItemID = 0    #(DWORD SuperItemID)// 大奖物品ID
-    SuperItemCount = 0    #(BYTE SuperItemCount)// 大奖物品个数
-    SuperItemMoneyType = 0    #(BYTE SuperItemMoneyType)// 大奖价值货币类型
-    SuperItemMoneyValue = 0    #(DWORD SuperItemMoneyValue)// 大奖价值
-    LVLimit = 0    #(WORD LVLimit)//开启等级
-    BaseItemCount = 0    #(BYTE BaseItemCount)// 每次购买固定奖励物品数
-    BaseItemList = list()    #(vector<tagGCLuckyCloudBuyRoundItem> BaseItemList)// 每次购买固定奖励物品信息
-    RandItemCount = 0    #(BYTE RandItemCount)// 每次购买随机奖励物品数
-    RandItemList = list()    #(vector<tagGCLuckyCloudBuyRoundItem> RandItemList)// 每次购买随机奖励物品信息
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xC0
-        self.Head.SubCmd = 0x12
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.ZoneID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
-        self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
-        self.RoundTimeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.RoundTimeCount):
-            temRoundTimeList = tagGCLuckyCloudBuyRoundTime()
-            _pos = temRoundTimeList.ReadData(_lpData, _pos)
-            self.RoundTimeList.append(temRoundTimeList)
-        self.RoundID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.RoundNum,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.SuperItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.SuperItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.SuperItemMoneyType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.SuperItemMoneyValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.LVLimit,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.BaseItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.BaseItemCount):
-            temBaseItemList = tagGCLuckyCloudBuyRoundItem()
-            _pos = temBaseItemList.ReadData(_lpData, _pos)
-            self.BaseItemList.append(temBaseItemList)
-        self.RandItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.RandItemCount):
-            temRandItemList = tagGCLuckyCloudBuyRoundItem()
-            _pos = temRandItemList.ReadData(_lpData, _pos)
-            self.RandItemList.append(temRandItemList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xC0
-        self.Head.SubCmd = 0x12
-        self.ZoneID = 0
-        self.StartDate = ""
-        self.EndtDate = ""
-        self.RoundTimeCount = 0
-        self.RoundTimeList = list()
-        self.RoundID = 0
-        self.RoundNum = 0
-        self.SuperItemID = 0
-        self.SuperItemCount = 0
-        self.SuperItemMoneyType = 0
-        self.SuperItemMoneyValue = 0
-        self.LVLimit = 0
-        self.BaseItemCount = 0
-        self.BaseItemList = list()
-        self.RandItemCount = 0
-        self.RandItemList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        length += 10
-        length += 10
-        length += 1
-        for i in range(self.RoundTimeCount):
-            length += self.RoundTimeList[i].GetLength()
-        length += 4
-        length += 1
-        length += 4
-        length += 1
-        length += 1
-        length += 4
-        length += 2
-        length += 1
-        for i in range(self.BaseItemCount):
-            length += self.BaseItemList[i].GetLength()
-        length += 1
-        for i in range(self.RandItemCount):
-            length += self.RandItemList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.ZoneID)
-        data = CommFunc.WriteString(data, 10, self.StartDate)
-        data = CommFunc.WriteString(data, 10, self.EndtDate)
-        data = CommFunc.WriteBYTE(data, self.RoundTimeCount)
-        for i in range(self.RoundTimeCount):
-            data = CommFunc.WriteString(data, self.RoundTimeList[i].GetLength(), self.RoundTimeList[i].GetBuffer())
-        data = CommFunc.WriteDWORD(data, self.RoundID)
-        data = CommFunc.WriteBYTE(data, self.RoundNum)
-        data = CommFunc.WriteDWORD(data, self.SuperItemID)
-        data = CommFunc.WriteBYTE(data, self.SuperItemCount)
-        data = CommFunc.WriteBYTE(data, self.SuperItemMoneyType)
-        data = CommFunc.WriteDWORD(data, self.SuperItemMoneyValue)
-        data = CommFunc.WriteWORD(data, self.LVLimit)
-        data = CommFunc.WriteBYTE(data, self.BaseItemCount)
-        for i in range(self.BaseItemCount):
-            data = CommFunc.WriteString(data, self.BaseItemList[i].GetLength(), self.BaseItemList[i].GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.RandItemCount)
-        for i in range(self.RandItemCount):
-            data = CommFunc.WriteString(data, self.RandItemList[i].GetLength(), self.RandItemList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                ZoneID:%d,
-                                StartDate:%s,
-                                EndtDate:%s,
-                                RoundTimeCount:%d,
-                                RoundTimeList:%s,
-                                RoundID:%d,
-                                RoundNum:%d,
-                                SuperItemID:%d,
-                                SuperItemCount:%d,
-                                SuperItemMoneyType:%d,
-                                SuperItemMoneyValue:%d,
-                                LVLimit:%d,
-                                BaseItemCount:%d,
-                                BaseItemList:%s,
-                                RandItemCount:%d,
-                                RandItemList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.ZoneID,
-                                self.StartDate,
-                                self.EndtDate,
-                                self.RoundTimeCount,
-                                "...",
-                                self.RoundID,
-                                self.RoundNum,
-                                self.SuperItemID,
-                                self.SuperItemCount,
-                                self.SuperItemMoneyType,
-                                self.SuperItemMoneyValue,
-                                self.LVLimit,
-                                self.BaseItemCount,
-                                "...",
-                                self.RandItemCount,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagGCLuckyCloudBuyRoundInfo=tagGCLuckyCloudBuyRoundInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCLuckyCloudBuyRoundInfo.Head.Cmd,m_NAtagGCLuckyCloudBuyRoundInfo.Head.SubCmd))] = m_NAtagGCLuckyCloudBuyRoundInfo
-
-
-#------------------------------------------------------
 # C1 09 跨服排位玩家信息 #tagMCChampionshipPlayerInfo
 
 class  tagMCChampionshipPlayerInfo(Structure):
@@ -48868,58 +45304,6 @@
 
 m_NAtagMCFamilyGCZSQInfo=tagMCFamilyGCZSQInfo()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFamilyGCZSQInfo.Head.Cmd,m_NAtagMCFamilyGCZSQInfo.Head.SubCmd))] = m_NAtagMCFamilyGCZSQInfo
-
-
-#------------------------------------------------------
-# C1 08 幸运云购玩家信息 #tagMCLuckyCloudBuyPlayerInfo
-
-class  tagMCLuckyCloudBuyPlayerInfo(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("BuyCount", c_ushort),    # 本轮已购买份数
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xC1
-        self.SubCmd = 0x08
-        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 = 0xC1
-        self.SubCmd = 0x08
-        self.BuyCount = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCLuckyCloudBuyPlayerInfo)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// C1 08 幸运云购玩家信息 //tagMCLuckyCloudBuyPlayerInfo:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                BuyCount:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.BuyCount
-                                )
-        return DumpString
-
-
-m_NAtagMCLuckyCloudBuyPlayerInfo=tagMCLuckyCloudBuyPlayerInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCLuckyCloudBuyPlayerInfo.Cmd,m_NAtagMCLuckyCloudBuyPlayerInfo.SubCmd))] = m_NAtagMCLuckyCloudBuyPlayerInfo
 
 
 #------------------------------------------------------
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/DataRecordPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/DataRecordPack.py
index 93d6805..2740e30 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/DataRecordPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/DataRecordPack.py
@@ -628,23 +628,6 @@
     SendEventPack("FightPowerChangeInfo", dataDict, curPlayer)
     return
 
-## 玩家周狂欢(七天巡礼)
-#  @return
-def DR_WeekPartyPoint(curPlayer, dayIndex, point):
-    dataDict = {'PlayerID':curPlayer.GetPlayerID(), 
-                'AccID':curPlayer.GetAccID(), 'dayIndex':dayIndex, 'point':point}
-    
-    #发送封包
-    SendEventPack("WeekPartyPoint", dataDict, curPlayer)
-    return
-def DR_FeastWeekPartyPoint(curPlayer, dayIndex, point):
-    ##节日巡礼
-    dataDict = {'PlayerID':curPlayer.GetPlayerID(), 
-                'AccID':curPlayer.GetAccID(), 'dayIndex':dayIndex, 'point':point}
-    #发送封包
-    SendEventPack("FeastWeekPartyPoint", dataDict, curPlayer)
-    return
-
 def DR_MailSend(playerID, GUID, addDict={}):
     ## 邮件发送流向
     dataDict = {'PlayerID':playerID, 'GUID':GUID} 
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventShell.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventShell.py
index 716838c..c243a52 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventShell.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventShell.py
@@ -77,8 +77,6 @@
 import ItemControler
 import ItemCommon
 import ShareDefine
-import PlayerCoat
-import PlayerRune
 import IpyGameDataPY
 import NPCCommon
 
@@ -369,15 +367,6 @@
     pack_DesBackPack = sendPack.GetDesBackPack()
     pack_SrcIndex = sendPack.GetSrcIndex()
     pack_DestIndex = sendPack.GetDestIndex()
-    
-    # 符印交换
-    if PlayerRune.SwitchRune(curPlayer, pack_SrcBackpack, pack_DesBackPack, pack_SrcIndex, pack_DestIndex):
-        return
-    
-    #时装
-    if PlayerCoat.SwitchCoat(curPlayer, pack_SrcBackpack, pack_DesBackPack, pack_SrcIndex, pack_DestIndex):
-        return
-    
     #FunctionNPCCommon.PackItemExchange(curPlayer, pack_SrcBackpack, pack_DesBackPack, 
     #                                      pack_SrcIndex, pack_DestIndex, tick)
     return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/FunctionNPCShopBuyCheck.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/FunctionNPCShopBuyCheck.py
index f0a0442..b722825 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/FunctionNPCShopBuyCheck.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/FunctionNPCShopBuyCheck.py
@@ -17,7 +17,6 @@
 """Version = 2014-10-23 16:00"""
 
 import PlayerControl
-import PlayerRune
 #import GameWorld
 #import ChConfig
 
@@ -78,7 +77,7 @@
 # @param limitValue: 限制值
 # @return: 满足条件与否
 def CheckByNPC_2_100(curPlayer, itemID, limitValue):
-    return not PlayerRune.GetIsOpenByRuneID(curPlayer, itemID)
+    return False
     
 
 ## 判断返回
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/ActivePet.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/ActivePet.py
deleted file mode 100644
index d93547b..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/ActivePet.py
+++ /dev/null
@@ -1,46 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-#-------------------------------------------------------------------------------
-#
-##@package GM.Commands.ActivePet
-#
-# @todo:激活宠物
-# @author xdh
-# @date 2015-3-22
-# @version 1.0
-#
-# 详细描述: 激活宠物
-#
-#---------------------------------------------------------------------
-"""Version = 2015-03-22 23:00"""
-#---------------------------------------------------------------------
-
-
-import ShareDefine
-import GameWorld
-import OpenFunc
-import PlayerPet
-
-
-#---------------------------------------------------------------------
-#逻辑实现
-
-## GM命令执行入口
-#  @param curPlayer 当前玩家
-#  @param msgList 参数列表
-#  @return None
-#  @remarks 函数详细说明.
-def OnExec(curPlayer, msgList):
-    if len(msgList) not in [1,2]:
-        GameWorld.DebugAnswer(curPlayer, "ActivePet 第几只灵宠 阶级")
-        return
-    
-    OpenFunc.DoGMOpenFunc(curPlayer, ShareDefine.GameFuncID_Pet)
-    index = msgList[0]
-    classlv = msgList[1] if len(msgList) == 2 else 1
-    PlayerPet.DoPetActivate(curPlayer, index, classlv)
-    return
-
-
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Boss.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Boss.py
deleted file mode 100644
index 42a7959..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Boss.py
+++ /dev/null
@@ -1,97 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#
-##@package Boss
-# 复活地图中,已经死亡的普通NPC( 布怪器布的 )
-#
-# @author Mark
-# @date 2010-4-21
-# @version 1.2
-#
-# 修改时间 修改人 修改内容
-# @change: "2013-01-16 19:00" wdb 防范死亡的召唤兽被reborn
-# @change: "2014-10-29 23:30" hxp 增加可刷新标识点刷新的世界boss
-#------------------------------------------------------------------------------ 
-#"""Version = 2014-10-29 23:30"""
-#---------------------------------------------------------------------
-# 模块详细说明
-
-#导入
-import GameWorld
-import ChConfig
-import IPY_GameWorld
-import NPCCommon
-import ShareDefine
-import IpyGameDataPY
-import CrossRealmPlayer
-#---------------------------------------------------------------------
-#全局变量
-#---------------------------------------------------------------------
-
-#---------------------------------------------------------------------
-#逻辑实现
-
-## GM命令执行入口
-#  @param curPlayer 当前玩家
-#  @param msgList 参数列表 []
-#  @return None
-#  @remarks 函数详细说明.
-def OnExec( curPlayer, msgList ):
-    # 刷新标识点刷新的boss重生
-    mapID = GameWorld.GetMap().GetMapID()
-
-    dataList = IpyGameDataPY.GetIpyGameDataByCondition('BOSSInfo', {"MapID":mapID}, returnList=True)
-    if dataList:
-        for ipyData in dataList:
-            bossID = ipyData.GetNPCID()
-            if not bossID:
-                continue
-            
-            if mapID in ChConfig.Def_CrossZoneMapTableName:
-                tableName = ChConfig.Def_CrossZoneMapTableName[mapID]
-                realMapID = GameWorld.GetGameWorld().GetRealMapID()
-                copyMapID = GameWorld.GetGameWorld().GetCopyMapID()
-                zoneIpyData = IpyGameDataPY.GetIpyGameData(tableName, realMapID, mapID, copyMapID)
-                if not zoneIpyData:
-                    continue
-                zoneID = zoneIpyData.GetZoneID()
-                key = ShareDefine.Def_Notify_WorldKey_GameWorldBossRebornCross % (zoneID, bossID)
-            else:
-                key = ShareDefine.Def_Notify_WorldKey_GameWorldBossReborn % bossID
-            GameWorld.GetGameWorld().SetGameWorldDict(key, 1)
-            
-            bossKey = ChConfig.Map_NPC_WorldBossLastReBornTick % bossID
-            GameWorld.GetGameFB().SetGameFBDict(bossKey, 0)
-            
-            bossKey = ChConfig.Map_NPC_WorldBossLastReBornTick % ipyData.GetStoneNPCID()
-            GameWorld.GetGameFB().SetGameFBDict(bossKey, 0)
-            
-            GameWorld.GetGameFB().SetGameFBDict(ChConfig.Map_NPC_ActBossLastRebornSign % ipyData.GetRefreshMark(), 0)
-        
-    gameNPCManager = GameWorld.GetNPCManager()
-    tick = GameWorld.GetGameWorld().GetTick()
-    
-    for index in range( 0, gameNPCManager.GetNPCCount() ):
-        curNPC = gameNPCManager.GetNPCByIndex( index )
-        
-        if not curNPC.GetID() or not curNPC.GetNPCID():
-            return
-        
-        if not ChConfig.IsGameBoss(curNPC):
-            continue
-        
-        #已经死亡的NPC
-        if curNPC.GetCurAction() == IPY_GameWorld.laNPCDie or not curNPC.IsAlive():
-            npcControl = NPCCommon.NPCControl(curNPC)
-            npcControl.DoNPCReborn( tick )
-        
-    return
-
-## 给予客户端DEBUG提示
-#  @param curPlayer 当前玩家
-#  @param msg log信息
-#  @return None
-#  @remarks 函数详细说明.
-def Log( curPlayer, msg ):
-    GameWorld.DebugAnswer(curPlayer,  msg )
-    return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/ClearFirstGold.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/ClearFirstGold.py
index d99150a..5591966 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/ClearFirstGold.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/ClearFirstGold.py
@@ -20,10 +20,6 @@
 import PlayerControl
 import IpyGameDataPY
 import PlayerCoin
-import PlayerActRechargePrize
-import PyGameData
-import ShareDefine
-
 
 #逻辑实现
 ## GM命令执行入口
@@ -53,12 +49,6 @@
         PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MonthCTGCount % recordID, 0)
     if syncRecordIDList:
         PlayerCoin.Sync_CoinToGoldCountInfo(curPlayer, syncRecordIDList)
-        
-    # 重置充值返利活动
-    actInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_RechargePrize, {})
-    if actInfo.get(ShareDefine.ActKey_State, 0):
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RechargePrizeID, 0)
-        PlayerActRechargePrize.__CheckPlayerRechargePrizeAction(curPlayer)
         
     PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CTGRealToday, 0)
     PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CTGRealTotal, 0)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/EnterFB.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/EnterFB.py
index 61f4bf7..784d472 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/EnterFB.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/EnterFB.py
@@ -19,7 +19,6 @@
 import PlayerControl
 import FBCommon
 import ChConfig
-import PlayerFB
 
 
 ## GM命令执行入口
@@ -39,9 +38,6 @@
     if FBCommon.GetFBPDictValue(curPlayer, ChConfig.Def_PDict_LastEnterFBTick % mapID):
         FBCommon.SetFBPDictValue(curPlayer, ChConfig.Def_PDict_LastEnterFBTick % mapID, 0)
         
-    if mapID in ChConfig.Def_CrossMapIDList:
-        PlayerControl.PlayerEnterCrossServer(curPlayer, mapID, lineID)
-    else:
-        PlayerControl.PlayerEnterFB(curPlayer, mapID, lineID, posX, posY)
+    PlayerControl.PlayerEnterFB(curPlayer, mapID, lineID, posX, posY)
     return
 
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/ExitFB.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/ExitFB.py
index ce9a5f7..da94809 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/ExitFB.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/ExitFB.py
@@ -17,9 +17,6 @@
 
 import GameWorld
 import ChPlayer
-import PlayerControl
-import PlayerFB
-import CrossRealmPlayer
 
 ## GM命令执行入口
 #  @param curPlayer 当前玩家
@@ -28,10 +25,6 @@
 #  @remarks 函数详细说明.
 def OnExec(curPlayer, paramList):
     tick = GameWorld.GetGameWorld().GetTick()
-    
-    if GameWorld.IsCrossServer():
-        CrossRealmPlayer.PlayerExitCrossServer(curPlayer)
-        return
     
     isAll = paramList[0] if paramList else 0
     if isAll:
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/GetPlayerPet.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/GetPlayerPet.py
deleted file mode 100644
index 9f8b077..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/GetPlayerPet.py
+++ /dev/null
@@ -1,130 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#
-#
-##@package GetPlayerPet
-# @todo: 获得玩家所有宠物ID
-#
-# @author chenxuewei
-# @date 2010-06-22
-# @version 1.5
-#
-# @change: "2010-06-26 14:30" chenxuewei 增加该GM命令输出信息
-# @change: "2010-06-28 16:38" panwei 增加该GM命令输出信息
-# @change: "2010-08-04 15:20" panwei 新增宠物元素属性输出
-# @change: "2010-08-30 17:50" panwei 新增裸体属性输出
-# @change: "2012-04-06 12:00" wdb 新增命中,闪避输出
-#---------------------------------------------------------------------
-"""Version = 2012-04-06 12:00"""
-#---------------------------------------------------------------------
-import GameWorld
-import GameObj
-## GM命令执行入口
-#  @param curPlayer 当前玩家
-#  @param list 参数列表 [tagID,ExpValue]
-#  @return None
-#  @remarks 函数详细说明.
-def OnExec(curPlayer, list):
-    
-    petMgr = curPlayer.GetPetMgr()
-    petCount = petMgr.PetList_Cnt()
-    
-    if petCount <= 0:
-        GameWorld.DebugAnswer(curPlayer, '玩家无宠物')
-        return
-    
-    GameWorld.DebugAnswer(curPlayer, '玩家一共有%s只宠物'%(petCount))
-    
-    for i in range(petCount):
-        petObj = petMgr.PetList_At(i)
-        
-        if petObj == None:
-            continue
-        
-        petStruct = petObj.GetRolePet()
-        
-        petID = petStruct.PetID
-        petName = petStruct.Name
-        GameWorld.DebugAnswer(curPlayer, '------------------')
-        GameWorld.DebugAnswer(curPlayer, '玩家第%s只宠物信息如下:'%(i + 1))
-        
-        GameWorld.DebugAnswer(curPlayer, '宠物ID = %s,名字 = %s, 亲密度 = %s'%(petID, petName, petStruct.Friendliness))
-        
-        GameWorld.DebugAnswer(curPlayer, '剩余属性点数 = %s, 本日训练次数 = %s, 剩余训练时间 = %s, 造化丹使用次数 = %s'%(
-                                petObj.GetLeftPoints(), petStruct.DailyTrainCnt, 
-                                petStruct.RemainTrainTime, petStruct.UseCreatorDrugCnt))
-        
-        
-        GameWorld.DebugAnswer(curPlayer, "裸力量 = %s, 裸真元 = %s, 裸筋骨 = %s, 裸体质 = %s"%(
-                                petStruct.STR, petStruct.PNE, 
-                                petStruct.PHY, petStruct.CON))
-        
-        
-        #获得宠物战斗结构体(变化的) -> tagIPY_PetBattleProp
-        rolePetBattleStruct = petObj.GetBattleProp()
-        
-        GameWorld.DebugAnswer(curPlayer, "加上Buff后, 总力量 = %s,总真元 = %s, 总筋骨 = %s, 总体质 = %s"%(
-                                rolePetBattleStruct.STR, rolePetBattleStruct.PNE, 
-                                rolePetBattleStruct.PHY, rolePetBattleStruct.CON))
-        curHP = GameObj.GetHP(petObj)
-        curMaxHP = GameObj.GetMaxHP(petObj)
-        
-        curMaxAtk = petObj.GetMaxAtk()
-        curMAtkMax = petObj.GetMAtkMax()
-        
-        curDef = petObj.GetDef()
-        curMDef = petObj.GetMDef()
-        
-        isSummon = petObj.GetIsSummon()
-        
-        curMiss = petObj.GetMiss()
-        curHit = petObj.GetHit()
-        
-        GameWorld.DebugAnswer(curPlayer, "是否出战 = %s,血量 = %s,最大血量 = %s"%(isSummon, curHP, curMaxHP))
-        GameWorld.DebugAnswer(curPlayer, "物理攻击 = %s,剑气伤害 = %s"%(curMaxAtk, curMAtkMax))
-        GameWorld.DebugAnswer(curPlayer, "物理防御 = %s,剑气防御 = %s"%(curDef, curMDef))
-        GameWorld.DebugAnswer(curPlayer, "命中 = %s, 闪避 = %s"%(curHit, curMiss))
-        #---元素属性
-        GameWorld.DebugAnswer(curPlayer, "毒攻%s / 毒抗%s"%(petObj.GetPoisionAtk(), petObj.GetPoisionDef()))
-        GameWorld.DebugAnswer(curPlayer, "火攻%s / 火抗%s"%(petObj.GetFireAtk(), petObj.GetFireDef()))
-        GameWorld.DebugAnswer(curPlayer, "冰攻%s / 冰抗%s"%(petObj.GetIceAtk(), petObj.GetIceDef()))
-        GameWorld.DebugAnswer(curPlayer, "雷攻%s / 雷抗%s"%(petObj.GetThunderAtk(), petObj.GetThunderDef()))
-        GameWorld.DebugAnswer(curPlayer, "风攻%s / 风防%s"%(petObj.GetWindAtk(), petObj.GetWindDef()))
-        #---资质
-        hpTalent = petStruct.HPTalent
-        physicAtkTalent = petStruct.PhysicAtkTalent
-        physicDefTalent = petStruct.PhysicDefTalent
-        magicAtkTalent = petStruct.MagicAtkTalent
-        magicDefTalent = petStruct.MagicDefTalent
-        #评分加成
-        petGrade = GameWorld.GetGameData().GetPetGradeByGrade(petObj.GetGrade())
-        gradePercent = petGrade.GetIncPercent()
-        #亲密加成
-        petFriendliness = GameWorld.GetGameData().GetPetFriendlinessByFriendliness(petStruct.Friendliness)
-        friendlinessPercent = petFriendliness.GetIncPercent() 
-        
-        GameWorld.DebugAnswer(curPlayer, "气血资质=%s,攻击资质=%s,防御资质=%s,剑气资质=%s,剑防资质=%s"%(
-                                    hpTalent, physicAtkTalent, physicDefTalent, magicAtkTalent, magicDefTalent))
-        
-        GameWorld.DebugAnswer(curPlayer, '评分加成 = %s, 亲密加成 = %s'%(gradePercent, friendlinessPercent))
-        #---技能
-        petData = petObj.GetPetData()
-        maxSkillCount = petData.GetMaxSkillCount()
-        
-        rolePetSkillManager = petObj.GetSkillManager()
-        learnSkillCount = rolePetSkillManager.GetSkillCount()
-        
-        GameWorld.DebugAnswer(curPlayer, "宠物最多拥有技能总数 = %s, 当前拥有技能数 = %s"%(
-                                maxSkillCount, learnSkillCount))
-        
-        
-        for i in range(0, learnSkillCount):
-            #learnSkill -> IPY_Skill
-            learnSkill = rolePetSkillManager.GetSkillByIndex(i)
-            GameWorld.DebugAnswer(curPlayer, "已学技能 = %s, ID = %s"%(i + 1, learnSkill.GetSkillID()))
-
-        GameWorld.DebugAnswer(curPlayer, '------------------')
-        
-        
-        
-        
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/LuckyCloudBuy.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/LuckyCloudBuy.py
deleted file mode 100644
index 9e51d5f..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/LuckyCloudBuy.py
+++ /dev/null
@@ -1,55 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-##@package GM.Commands.LuckyCloudBuy
-#
-# @todo:幸运云购
-# @author hxp
-# @date 2021-10-21
-# @version 1.0
-#
-# 详细描述: 幸运云购
-#
-#-------------------------------------------------------------------------------
-#"""Version = 2021-10-21 17:00"""
-#-------------------------------------------------------------------------------
-
-import GameWorld
-import PlayerControl
-import PlayerLuckyCloudBuy
-import ChConfig
-
-## GM命令执行入口
-#  @param curPlayer 当前玩家
-#  @param msgList 参数列表 [addSkillID]
-#  @return None
-#  @remarks 函数详细说明.
-def OnExec(curPlayer, msgList):
-    
-    if not msgList:
-        GameWorld.DebugAnswer(curPlayer, "重置所有数据: LuckyCloudBuy 0")
-        GameWorld.DebugAnswer(curPlayer, "重置本人数据: LuckyCloudBuy 0 1")
-        GameWorld.DebugAnswer(curPlayer, "添加云购记录: LuckyCloudBuy 1 份数")
-        return
-    
-    isSendGameServer = False
-    value1 = msgList[0]
-    if value1 == 0:
-        # 重置所有
-        if len(msgList) == 1:
-            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_LuckyCloudBuy_RoundID, 0)
-            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_LuckyCloudBuy_BuyCount, 0)
-            isSendGameServer = True
-            
-        # 重置本人数据
-        elif len(msgList) == 2 and msgList[1] == 1:
-            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_LuckyCloudBuy_RoundID, 0)
-            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_LuckyCloudBuy_BuyCount, 0)
-            
-    elif value1 == 1:
-        isSendGameServer = True
-        return isSendGameServer
-    
-    PlayerLuckyCloudBuy.Sync_LuckyCloudBuyPlayerInfo(curPlayer)
-    return isSendGameServer
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Pet.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Pet.py
deleted file mode 100644
index 7484a3f..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Pet.py
+++ /dev/null
@@ -1,166 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-##@package GM.Commands.Pet
-#
-# @todo:宠物
-# @author hxp
-# @date 2021-07-02
-# @version 1.0
-#
-# 详细描述: 宠物
-#
-#-------------------------------------------------------------------------------
-#"""Version = 2021-07-02 19:30"""
-#-------------------------------------------------------------------------------
-
-import ChConfig
-import GameWorld
-import PlayerControl
-import IpyGameDataPY
-import ShareDefine
-import PetControl
-import PlayerPet
-import OpenFunc
-
-
-def __Help(curPlayer, petNumNameDict):
-    GameWorld.DebugAnswer(curPlayer, "------------------")
-    GameWorld.DebugAnswer(curPlayer, "重置灵宠: Pet 0 [可选第几只]")
-    GameWorld.DebugAnswer(curPlayer, "激活所有: Pet 99 [可选是否满阶]")
-    GameWorld.DebugAnswer(curPlayer, "激活指定: Pet 第几只 阶级")
-    GameWorld.DebugAnswer(curPlayer, "培养灵宠: Pet 培养类型 等阶 丹数")
-    GameWorld.DebugAnswer(curPlayer, "注:重置灵宠需重登")
-    
-    petNumList = petNumNameDict.keys()
-    petNameNumInfo = ""
-    for i, petNum in enumerate(petNumList, 1):
-        petNameNumInfo += "%s-%s;" % (petNumNameDict[petNum], petNum)
-        if petNum % 3 == 0 or i == len(petNumList):
-            GameWorld.DebugAnswer(curPlayer, petNameNumInfo)
-            petNameNumInfo = ""
-            
-    return
-
-## GM命令执行入口
-#  @param curPlayer 当前玩家
-#  @param msgList 参数列表
-#  @return None
-#  @remarks 函数详细说明.
-def OnExec(curPlayer, msgList):
-    
-    petNumNameDict = {}
-    petNPCIDNumDict = {}
-    ipyDataMgr = IpyGameDataPY.IPY_Data()
-    for index in xrange(ipyDataMgr.GetPetInfoCount()):
-        ipyData = ipyDataMgr.GetPetInfoByIndex(index)
-        needItemID = ipyData.GetUnLockNeedItemID()
-        curItem = GameWorld.GetGameData().GetItemByTypeID(needItemID)
-        if not curItem:
-            continue
-        itemName = curItem.GetName()
-        petName = itemName.replace("灵宠:", "")
-        petNum = index + 1
-        
-        petNPCID = ipyData.GetID()
-        petNPCIDNumDict[petNPCID] = petNum
-        petNumNameDict[petNum] = petName
-    petNumList = sorted(petNumNameDict.keys())
-    
-    if not msgList:
-        __Help(curPlayer, petNumNameDict)
-        return
-    
-        
-    # 重置灵宠
-    if msgList[0] == 0:
-        clearNumList = msgList[1:] if len(msgList) > 1 else None
-        clearOKList = __ClearPet(curPlayer, petNPCIDNumDict, clearNumList)
-        
-        for trainType in xrange(1, PlayerPet.GetPetTrainTypes() + 1):
-            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_PetTrainLV % trainType, 1)
-            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_PetTrainItemCount % trainType, 0)
-            
-        GameWorld.DebugAnswer(curPlayer, "重置灵宠编号:%s" % sorted(clearOKList))
-        
-    # 激活所有
-    elif msgList[0] == 99:
-        isFullLV = msgList[1] if len(msgList) > 1 else None
-        classLV = 999 if isFullLV else None
-        OpenFunc.DoGMOpenFunc(curPlayer, ShareDefine.GameFuncID_Pet)
-        activeOKList = []
-        petNumList = petNPCIDNumDict.values()
-        for i, petNum in enumerate(petNumList):
-            index = msgList[0]
-            refresh = i >= (len(petNumList) - 1)
-            if PlayerPet.DoPetActivate(curPlayer, petNum, classLV, refresh=refresh):
-                activeOKList.append(petNum)
-                
-        GameWorld.DebugAnswer(curPlayer, "激活灵宠编号:%s" % sorted(activeOKList))
-        
-    # 激活指定
-    elif len(msgList) == 2:
-        petNum = msgList[0]
-        classLV = msgList[1]
-        OpenFunc.DoGMOpenFunc(curPlayer, ShareDefine.GameFuncID_Pet)
-        if PlayerPet.DoPetActivate(curPlayer, petNum, classLV):
-            GameWorld.DebugAnswer(curPlayer, "激活灵宠: %s(%s), %s阶" % (petNumNameDict.get(petNum, petNum), petNum, classLV))
-            
-    # 培养灵宠
-    elif len(msgList) == 3:
-        trainType, trainLV, eatItemCount = msgList
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_PetTrainLV % trainType, trainLV)
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_PetTrainItemCount % trainType, eatItemCount)
-        
-    else:
-        __Help(curPlayer, petNumNameDict)
-        return
-    
-    PlayerPet.RefreshPetItemAddAttr(curPlayer, True)
-    PlayerPet.OnPlayerPetLogin(curPlayer)
-    return
-
-def __ClearPet(curPlayer, petNPCIDNumDict, clearNumList=None):
-    
-    clearOKList = []
-    #获得战斗的宠物
-    fightPetNPCID = 0
-    curPetMgr = curPlayer.GetPetMgr()
-    fightPet = curPetMgr.GetFightPet()
-    if fightPet != None:
-        fightPetNPCID = fightPet.GetRolePet().NPCID
-        
-    fightPetNum = petNPCIDNumDict.get(fightPetNPCID)
-    #---如果有出战中的宠物需要先召回---
-    if not clearNumList or fightPetNum in clearNumList:
-        PetControl.ReCallFightPet(curPlayer)
-        
-    #获得玩家宠物信息
-    petList = []
-    petListCount = curPetMgr.PetList_Cnt()        
-    for i in range(petListCount):
-        pet = curPetMgr.PetList_At(i)
-        petNPCID = pet.GetRolePet().NPCID
-        petNum = petNPCIDNumDict.get(petNPCID)
-        if not clearNumList or petNum in clearNumList:
-            petList.append(pet)
-            
-    for pet in petList:
-        curPetMgr.PetList_SetFree(pet.GetRolePet().PetID)
-        
-    # 宠物数据物品背包清除
-    petPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptPet)
-    for i in range(petPack.GetCount())[::-1]:
-        petItem = petPack.GetAt(i)
-        
-        if not petItem or petItem.IsEmpty():
-            continue
-        
-        petNPCID = petItem.GetUserAttr(ShareDefine.Def_IudetPet_NPCID)
-        petNum = petNPCIDNumDict.get(petNPCID)
-        if not clearNumList or petNum in clearNumList:
-            petItem.Clear()
-            clearOKList.append(petNum)
-            
-    return clearOKList
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/PetClear.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/PetClear.py
deleted file mode 100644
index 2eb11be..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/PetClear.py
+++ /dev/null
@@ -1,61 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#---------------------------------------------------------------------
-#
-#---------------------------------------------------------------------
-##@package PetClear
-# @todo: 放生玩家所有宠物
-#
-# @author: panwei
-# @date 2010-06-22
-# @version 1.1
-# @change: 2010-07-15 16:00 adaws 修复BUG出战宠物没有召回,在C++会存一个出战宠物的实例导致使用GM命令后
-# 不能出战其它的宠物,并且如果此时角色死亡的话服务器会挂掉
-# @note: 
-#---------------------------------------------------------------------
-import ShareDefine
-import PetControl
-import PlayerPet
-import PlayerControl
-import ChConfig
-import GameWorld
-#------------------------------------------------------------------------------ 
-##放生玩家所有宠物
-# @param curPlayer 玩家实例
-# @param cmdList 参数列表
-# @return 返回值无意义
-# @remarks 放生玩家所有宠物
-def OnExec(curPlayer, cmdList):
-    
-    #---如果有出战中的宠物需要先召回---
-    PetControl.ReCallFightPet(curPlayer)
-        
-    #获得玩家宠物信息
-    curPetMgr = curPlayer.GetPetMgr()
-    petListCount = curPetMgr.PetList_Cnt()
-
-    #---For中删除, 需构建Python临时列表---
-    petList = []
-        
-    for i in range(0, petListCount):
-        pet = curPetMgr.PetList_At(i)
-        petList.append(pet)
-    
-    for rolePet in petList:
-        curPetMgr.PetList_SetFree(rolePet.GetRolePet().PetID)
-    
-    # 宠物数据物品背包清除
-    petPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptPet)
-    for i in range(petPack.GetCount()):
-        petItem = petPack.GetAt(i)
-        
-        if not petItem or petItem.IsEmpty():
-            continue
-        
-        petItem.Clear()
-    
-
-
-    #isOK = GameFuncComm.DoGMOpenFunc(curPlayer, ShareDefine.GameFuncID_Pet)
-    GameWorld.DebugAnswer(curPlayer, "宠物功能是否开启!")
-    return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/PrintPet.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/PrintPet.py
deleted file mode 100644
index 2f4c47a..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/PrintPet.py
+++ /dev/null
@@ -1,72 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-##@package GM.Commands.PrintPet
-#
-# @todo:显示玩家所有宠物
-# @author hxp
-# @date 2016-4-29
-# @version 1.0
-#
-# 详细描述: 显示玩家所有宠物
-#
-#-------------------------------------------------------------------------------
-#"""Version = 2016-4-29 18:00"""
-#-------------------------------------------------------------------------------
-
-import ShareDefine
-import GameWorld
-
-
-## GM命令执行入口
-#  @param curPlayer 当前玩家
-#  @param list 参数列表 [tagID,ExpValue]
-#  @return None
-#  @remarks 函数详细说明.
-def OnExec(curPlayer, list):
-
-    petDataPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptPet)
-    petCnt = petDataPack.GetCount()
-    if petCnt <= 0:
-        GameWorld.DebugAnswer(curPlayer, '玩家无宠物')
-        return
-
-    showDataInfo = [
-                    [ShareDefine.Def_IudetPet_ClassLV, "阶级"],
-                    [ShareDefine.Def_IudetPet_State, "状态"],
-                    [ShareDefine.Def_IudetPet_Skill, "技能"],
-                   ]
-    
-    showPetCnt = 0
-    for petIndex in range(petDataPack.GetCount()):
-        petItem = petDataPack.GetAt(petIndex)
-        if petItem.IsEmpty():
-            continue
-        
-        showPetCnt += 1
-        petNPCID = petItem.GetUserAttr(ShareDefine.Def_IudetPet_NPCID)
-        petNPCData = GameWorld.GetGameData().FindNPCDataByID(petNPCID)
-        petName = petNPCData.GetName()
-        GameWorld.DebugAnswer(curPlayer, '--第%s只: 索引=%s,npcID=%s,name=%s' % (showPetCnt, petIndex, petNPCID, petName))
-    
-        infoStr = ""
-        for dataNum, dataName in showDataInfo:
-            if dataNum % 2 == 0:
-                value = petItem.GetUserAttr(dataNum)
-                infoStr += " %s:%s" % (dataName, value)
-            else:
-                dataCnt = petItem.GetUserAttrCount(dataNum)
-                valueList = []
-                for i in xrange(dataCnt):
-                    value = petItem.GetUserAttrByIndex(dataNum, i)
-                    valueList.append(value)
-                infoStr += " %s:%s" % (dataName, str(valueList))
-        
-        GameWorld.DebugAnswer(curPlayer, "%s" % infoStr)
-                
-    GameWorld.DebugAnswer(curPlayer, '------总宠物数: %s -------' % showPetCnt)
-    return
-        
-        
-        
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/PrintSkill.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/PrintSkill.py
index 1f6dbe1..8cd5e53 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/PrintSkill.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/PrintSkill.py
@@ -14,7 +14,6 @@
 #---------------------------------------------------------------------
 import GameWorld
 import PassiveBuffEffMng
-import PlayerPet
 import IpyGameDataPY
 import SkillCommon
 
@@ -107,18 +106,6 @@
     GameWorld.DebugAnswer(curPlayer, "被动BUFF效果 :%s" % passiveEff.AffectBuffDict)
     
     GameWorld.DebugAnswer(curPlayer, "神兽被动效果 :%s" % passiveEff.AffectDogzSkillDict)
-    
-    
-    
-    fightPet = curPlayer.GetPetMgr().GetFightPet()
-    if fightPet:
-        GameWorld.DebugAnswer(curPlayer, "出战宠物技能%s-%s" % PlayerPet.GetPetLearnSkill(curPlayer))
-        passiveEff = PassiveBuffEffMng.GetPassiveEffManager().GetPassiveEff(fightPet)
-        if not passiveEff:
-            return
-        GameWorld.DebugAnswer(curPlayer, "宠物被动效果 :%s" % passiveEff.AffectSkillDict)
-        
-        GameWorld.DebugAnswer(curPlayer, "宠物被动BUFF效果 :%s" % passiveEff.AffectBuffDict)
         
 #===============================================================================
 # (Def_SkillFuncType_Common, #0为通用技能
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetCrossPK.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetCrossPK.py
deleted file mode 100644
index 92e7667..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetCrossPK.py
+++ /dev/null
@@ -1,162 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-##@package GM.Commands.SetCrossPK
-#
-# @todo:设置玩家跨服PK活动数据
-# @author hxp
-# @date 2018-12-25
-# @version 1.0
-#
-# 详细描述: 设置玩家跨服PK活动数据
-#
-#-------------------------------------------------------------------------------
-#"""Version = 2018-12-25 21:30"""
-#-------------------------------------------------------------------------------
-
-import GameWorld
-import PlayerControl
-import PlayerCrossRealmPK
-import IpyGameDataPY
-import ShareDefine
-import ChConfig
-
-#---------------------------------------------------------------------
-#逻辑实现
-## GM命令执行入口
-#  @param curPlayer 当前玩家
-#  @param list 参数列表 [npcID]
-#  @return None
-#  @remarks 函数详细说明.
-def OnExec(curPlayer, msgList):
-    
-    if not msgList:
-        __PrintHelp(curPlayer)
-        return
-    
-    if msgList[0] == "m":
-        gmMatchIDList = msgList[1:]
-        dataMsg = {
-                   "requestType":1,
-                   "seasonID":GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_CrossPKSeasonID), # 赛季ID
-                   "zoneID":GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_CrossPKZoneID), # PK赛区
-                   "playerID":curPlayer.GetPlayerID(),
-                   "fightPower":PlayerControl.GetFightPower(curPlayer),
-                   "gmMatchIDList":gmMatchIDList,
-                   }
-        GameWorld.SendMsgToCrossServer(ShareDefine.ClientServerMsg_PKMatch, dataMsg)
-        return
-    
-    if msgList[0] == "b":        
-        zoneID = msgList[1] if len(msgList) > 1 else 0
-        seasonID = msgList[2] if len(msgList) > 2 else 0
-        danLV = msgList[3] if len(msgList) > 3 else 0
-        pkScore = msgList[4] if len(msgList) > 4 else 0
-        cWinCount = msgList[5] if len(msgList) > 5 else None
-        danIpyData = IpyGameDataPY.GetIpyGameData("CrossRealmPKDan", danLV)
-        if not danIpyData:
-            GameWorld.DebugAnswer(curPlayer, "不存在该段位:%s" % danLV)
-            return
-        if pkScore <= 0:
-            pkScore = danIpyData.GetLVUpScore()
-        errorMsg = PlayerCrossRealmPK.GMSetPlayerCrossPKData(curPlayer, danLV, pkScore, cWinCount, zoneID=zoneID, seasonID=seasonID)
-        if errorMsg:
-            GameWorld.DebugAnswer(curPlayer, "分区赛季异常!")
-        else:
-            GameWorld.DebugAnswer(curPlayer, "设置上榜分区:%s,赛季:%s,段位:%s,积分:%s" % (zoneID, seasonID, danLV, pkScore))
-        return
-    
-    if len(msgList) == 1:
-        if msgList[0] != 0:
-            __PrintHelp(curPlayer)
-            return
-        
-        # 重置数据
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_TotalScore, 0)
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_DanLV, 0)
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_PKCount, 0)
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_WinCount, 0)
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_CWinCount, 0)
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_CLoseCount, 0)
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_TodayPKCount, 0)
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_TodayWinCount, 0)
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_TodayBuyCount, 0)
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_RefreshCount, 0)
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_DayPKCountAwardState, 0)
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_DayWinCountAwardState, 0)
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_DanLVAwardState, 0)
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_SeasonAwardState, 0)
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_ZoneID, 0)
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_SeasonID, 0)
-        for i in xrange(1, 20):
-            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_SeasonDanLV % i, 0)
-            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_SeasonScore % i, 0)
-            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_SeasonOrder % i, 0)
-            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_SeasonAwardLV % i, 0)
-            
-        GameWorld.DebugAnswer(curPlayer, "重置跨服PK数据OK!")
-        PlayerCrossRealmPK.SyncCrossRealmPKPlayerInfo(curPlayer)
-        PlayerCrossRealmPK.SyncCrossRealmPKAwardState(curPlayer)
-        PlayerCrossRealmPK.SyncCrossRealmPKHisSeasonInfo(curPlayer)
-        return
-    
-    if len(msgList) == 2 or len(msgList) % 2 == 0:
-        setTypeDict = {0:[ChConfig.Def_PDict_CrossPK_TotalScore, "积分"],
-                       2:[ChConfig.Def_PDict_CrossPK_DanLV, "段位"],
-                       3:[ChConfig.Def_PDict_CrossPK_PKCount, "PK次数"],
-                       4:[ChConfig.Def_PDict_CrossPK_WinCount, "胜利次数"],
-                       5:[ChConfig.Def_PDict_CrossPK_CWinCount, "连胜次数"],
-                       6:[ChConfig.Def_PDict_CrossPK_CLoseCount, "连败次数"],
-                       7:[ChConfig.Def_PDict_CrossPK_TodayPKCount, "今日PK次数"],
-                       8:[ChConfig.Def_PDict_CrossPK_TodayWinCount, "今日胜利次数"],
-                       9:[ChConfig.Def_PDict_CrossPK_TodayBuyCount, "今日购买次数"],
-                       10:[ChConfig.Def_PDict_CrossPK_RefreshCount, "今日刷新次数"],
-                       }
-        indexList = range(len(msgList))
-        for i in indexList[::2]:
-            setType, value = msgList[i:i+2]
-            if setType not in setTypeDict:
-                continue
-            dictName, chName = setTypeDict[setType]
-            PlayerControl.NomalDictSetProperty(curPlayer, dictName, value)
-            GameWorld.DebugAnswer(curPlayer, "设置%s: %s" % (chName, value))
-            
-        mapZoneID = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_CrossPKZoneID)
-        mapSeasonID = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_CrossPKSeasonID)
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_ZoneID, mapZoneID)
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_SeasonID, mapSeasonID)
-        PlayerCrossRealmPK.SyncCrossRealmPKPlayerInfo(curPlayer)
-        return
-    
-    if len(msgList) == 3:
-        seasonID, setType, value = msgList
-        setTypeDict = {0:[ChConfig.Def_PDict_CrossPK_SeasonDanLV, "段位"],
-                       1:[ChConfig.Def_PDict_CrossPK_SeasonOrder, "名次"],
-                       2:[ChConfig.Def_PDict_CrossPK_SeasonScore, "积分"],
-                       3:[ChConfig.Def_PDict_CrossPK_SeasonAwardLV, "奖励等级"],
-                       }
-        if setType not in setTypeDict:
-            __PrintHelp(curPlayer)
-            return
-        dictName, chName = setTypeDict[setType]
-        PlayerControl.NomalDictSetProperty(curPlayer, dictName % seasonID, value)
-        GameWorld.DebugAnswer(curPlayer, "设置赛季%s%s: %s" % (seasonID, chName, value))
-        return
-    
-    __PrintHelp(curPlayer)
-    return
-
-def __PrintHelp(curPlayer):
-    GameWorld.DebugAnswer(curPlayer, "重置数据: SetCrossPK 0")
-    GameWorld.DebugAnswer(curPlayer, "设置数据: SetCrossPK 类型  值")
-    GameWorld.DebugAnswer(curPlayer, "类型:0-积分,2-段位,3-PK次数,4-胜利次数,5-连胜次数,6-连败次数")
-    GameWorld.DebugAnswer(curPlayer, "7-今日PK次数,8-今日胜利次数,9-今日购买次数,10-今日刷新次数")
-    GameWorld.DebugAnswer(curPlayer, "设置历史: SetCrossPK 赛季ID 类型 数值")
-    GameWorld.DebugAnswer(curPlayer, "类型:0-段位,1-名次,2-积分,3-奖励等级")
-    GameWorld.DebugAnswer(curPlayer, "当前连败次数: %s" % curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_CLoseCount))
-    GameWorld.DebugAnswer(curPlayer, "设置上榜: SetCrossPK b 分区 赛季 段位 [积分 连胜]")
-    GameWorld.DebugAnswer(curPlayer, "指定匹配: SetCrossPK m [playerID ...]")
-    return
-
-
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetPetInfo.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetPetInfo.py
deleted file mode 100644
index 4720b6a..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetPetInfo.py
+++ /dev/null
@@ -1,58 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-##@package GM.Commands.SetPetInfo
-#
-# @todo:设置宠物属性
-# @author hxp
-# @date 2017-03-09
-# @version 1.0
-#
-# 详细描述: 设置宠物属性
-#
-#-------------------------------------------------------------------------------
-#"""Version = 2017-03-09 12:00"""
-#-------------------------------------------------------------------------------
-
-import ShareDefine
-import PlayerPet
-import GameWorld
-#---------------------------------------------------------------------
-##设置宠物状态.
-# @param curPlayer 玩家实例
-# @param cmdList 参数列表
-# @return 返回值无意义
-# @remarks 设置宠物状态
-def OnExec(curPlayer, cmdList):
-    
-    if len(cmdList) != 3:
-        GameWorld.DebugAnswer(curPlayer, '设置宠物阶级: SetPetInfo %s 宠物ID 阶级' % ShareDefine.Def_IudetPet_ClassLV)
-        return
-    
-    petDataPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptPet)
-    petCnt = petDataPack.GetCount()
-    if petCnt <= 0:
-        GameWorld.DebugAnswer(curPlayer, '玩家无宠物')
-        return
-    
-    infoType, petNPCID, value = cmdList
-    for petIndex in range(petDataPack.GetCount()):
-        petItem = petDataPack.GetAt(petIndex)
-        if petItem.IsEmpty():
-            continue
-        
-        if petNPCID != petItem.GetUserAttr(ShareDefine.Def_IudetPet_NPCID):
-            continue
-        
-        if infoType == ShareDefine.Def_IudetPet_ClassLV:
-            petItem.SetUserAttr(ShareDefine.Def_IudetPet_ClassLV, value)
-            
-        PlayerPet.RefreshPetItemAddAttr(curPlayer, True)
-        GameWorld.DebugAnswer(curPlayer, '设置宠物属性OK!')
-        return
-    
-    GameWorld.DebugAnswer(curPlayer, '玩家未激活该宠物ID: %s' % petNPCID)
-    return
-    
-    
\ No newline at end of file
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/TTL.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/TTL.py
deleted file mode 100644
index 9edfd1c..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/TTL.py
+++ /dev/null
@@ -1,107 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-##@package GM.Commands.TTL
-#
-# @todo:通天令
-# @author hxp
-# @date 2022-01-17
-# @version 1.0
-#
-# 详细描述: 通天令
-#
-#-------------------------------------------------------------------------------
-#"""Version = 2022-01-17 19:00"""
-#-------------------------------------------------------------------------------
-
-import GameWorld
-import PlayerControl
-import PlayerTongTianLing
-import IpyGameDataPY
-import ChConfig
-import time
-
-#---------------------------------------------------------------------
-#逻辑实现
-## GM命令执行入口
-#  @param curPlayer 当前玩家
-#  @param paramList 参数列表
-#  @return None
-#  @remarks 函数详细说明.
-def OnExec(curPlayer, paramList):
-    
-    if not paramList:
-        GameWorld.DebugAnswer(curPlayer, "重置通天所有: TTL 0")
-        GameWorld.DebugAnswer(curPlayer, "重置通天等级: TTL 0 1")
-        GameWorld.DebugAnswer(curPlayer, "重置通天任务: TTL 0 2")
-        GameWorld.DebugAnswer(curPlayer, "设置通天等级: TTL 1 等级 经验 是否激活通天令")
-        GameWorld.DebugAnswer(curPlayer, "增加通天任务: TTL 2 任务类型 增加进度值")
-        return
-    
-    value = paramList[0]
-    if not value:
-        value1 = paramList[1] if len(paramList) > 1 else 0
-        if value1 == 1:
-            resetTTLV(curPlayer)
-            GameWorld.DebugAnswer(curPlayer, "重置通天等级OK!")
-        elif value1 == 2:
-            resetTTTask(curPlayer)
-            GameWorld.DebugAnswer(curPlayer, "重置通天任务OK!")
-        else:
-            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TTL_StartTime, int(time.time()))
-            resetTTLV(curPlayer)
-            resetTTTask(curPlayer)
-            GameWorld.DebugAnswer(curPlayer, "重置通天所有OK!")
-            
-        return
-    
-    if value == 1:
-        ttLV, ttState = PlayerTongTianLing.GetTongTianLingLVInfo(curPlayer)
-        ttLV = paramList[1] if len(paramList) > 1 else ttLV
-        setPoint = paramList[2] if len(paramList) > 2 else 0
-        setState = paramList[3] if len(paramList) > 3 else ttState
-        
-        ttLV = min(ttLV, IpyGameDataPY.IPY_Data().GetTongTianLVCount() - 1)
-        ttState = 1 if setState else 0
-        PlayerTongTianLing.SetTongTianLingLVInfo(curPlayer, ttLV, ttState)
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TTL_LVPoint, setPoint)
-        GameWorld.DebugAnswer(curPlayer, "设置通天等级: LV=%s,expPoint=%s,state=%s" % (ttLV, setPoint, ttState))
-        PlayerTongTianLing.SyncTongTianLVInfo(curPlayer)
-        
-    elif value == 2:
-        ttTaskType = paramList[1] if len(paramList) > 1 else 0
-        addValue = paramList[2] if len(paramList) > 2 else 0
-        GameWorld.DebugAnswer(curPlayer, "增加通天任务进度: taskType=%s,addVlue=%s" % (ttTaskType, addValue))
-        PlayerTongTianLing.AddTongTianTaskValue(curPlayer, ttTaskType, addValue)
-        
-    return
-
-def resetTTTask(curPlayer):
-    
-    for i in xrange(PlayerTongTianLing.TTL_TaskAwardKeyCount):
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TTL_TaskAwardRecord % i, 0)
-        
-    syncTaskInfoList = []
-    for ttTaskType in ChConfig.TTLTaskTypeList:
-        for isDailyTask in [0, 1]:
-            curValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TTL_TaskValue % (ttTaskType, isDailyTask))
-            if not curValue:
-                continue
-            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TTL_TaskValue % (ttTaskType, isDailyTask), 0)
-            syncTaskInfoList.append([ttTaskType, isDailyTask])
-    PlayerTongTianLing.SyncTongTianTaskInfo(curPlayer, syncTaskInfoList)
-    PlayerTongTianLing.SyncTongTianTaskAward(curPlayer)
-    return
-
-def resetTTLV(curPlayer):
-    for i in xrange(PlayerTongTianLing.TTL_LVAwardKeyCount):
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TTL_CommAwardRecord % i, 0)
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TTL_XianAwardRecord % i, 0)
-    PlayerTongTianLing.SetTongTianLingLVInfo(curPlayer, 0, 0)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TTL_LVPoint, 0)
-    PlayerTongTianLing.SyncTongTianLVInfo(curPlayer)
-    return
-
-
-
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBLogic.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBLogic.py
index a105e8b..d62bc5b 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBLogic.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBLogic.py
@@ -18,11 +18,8 @@
 import IPY_GameWorld
 import PlayerControl
 import GameWorldProcess
-import CrossRealmPlayer
 import DataRecordPack
 import ReadChConfig
-import ShareDefine
-import PyGameData
 import FBCommon
 import GameObj
 
@@ -482,36 +479,6 @@
 def DoEnterFBLogic(curPlayer, tick):
     curPlayerID = curPlayer.GetID()
     
-    if GameWorld.IsCrossServer():
-        mapID = GameWorld.GetMap().GetMapID()
-        mapID = FBCommon.GetRecordMapID(mapID)
-        gameWorld = GameWorld.GetGameWorld()
-        copyMapID = gameWorld.GetCopyMapID()
-        dataDict = {"PlayerID":curPlayer.GetPlayerID(), "PlayerName":curPlayer.GetPlayerName(), "AccID":curPlayer.GetAccID(), 
-                    "recordMapID":mapID, "mapID":GameWorld.GetMap().GetMapID(), "realMapID":gameWorld.GetRealMapID(), "copyMapID":copyMapID}
-        if mapID in ChConfig.Def_CrossDynamicLineMap:
-            fbZoneID = FBCommon.GetCrossDynamicLineMapZoneID()
-            fbFuncLineID = FBCommon.GetCrossDynamicLineMapFuncLineID()
-            playerZoneID = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_ReqCrossFBZoneID)
-            playerFuncLineID = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_ReqCrossFBFuncLine)
-            # 跨服排位分区与玩家分区可能不一样
-            if (fbZoneID != playerZoneID or fbFuncLineID != playerFuncLineID) and mapID not in []:
-                GameWorld.ErrLog("DoEnterFB 玩家与当前副本线路所属分区或功能分线不同,踢出玩家!fbZoneID=%s,playerZoneID=%s,fbFuncLineID=%s,playerFuncLineID=%s" 
-                                 % (fbZoneID, playerZoneID, fbFuncLineID, playerFuncLineID), curPlayerID)
-                CrossRealmPlayer.PlayerExitCrossServer(curPlayer)
-                dataDict.update({"Error":"zoneLineIDError"})
-                DataRecordPack.SendEventPack("CrossFBEnter", dataDict, curPlayer)
-                return
-            GameWorld.Log("玩家进入跨服副本动态分配的线路: fbZoneID=%s,playerZoneID=%s,fbFuncLineID=%s,playerFuncLineID=%s" 
-                          % (fbZoneID, playerZoneID, fbFuncLineID, playerFuncLineID), curPlayerID)
-            dataDict.update({"fbZoneID":fbZoneID, "fbFuncLineID":fbFuncLineID, "playerZoneID":playerZoneID, "playerFuncLineID":playerFuncLineID})
-            
-        if copyMapID not in PyGameData.g_crossPlayerServerGroupIDInfo:
-            PyGameData.g_crossPlayerServerGroupIDInfo[copyMapID] = {}
-        playerServerGroupIDDict = PyGameData.g_crossPlayerServerGroupIDInfo[copyMapID]
-        playerServerGroupIDDict[curPlayerID] = PlayerControl.GetPlayerServerGroupID(curPlayer)
-        DataRecordPack.SendEventPack("CrossFBEnter", dataDict, curPlayer)
-        
     # 自伸缩副本根据玩家进入开启,主动调用一次,避免间隔调用时机未触发导致逻辑错乱
     GameWorldProcess.EnterOpenFB(tick)
     
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/GameWorldProcess.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/GameWorldProcess.py
index f337264..ab7d2db 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/GameWorldProcess.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/GameWorldProcess.py
@@ -150,16 +150,10 @@
         
     #发送未拾取的物品给玩家
     if mapID in ChConfig.Def_SendUnPickItemMailMapIDList and unPickItemDict:
-        isCrossServer = GameWorld.IsCrossServer()
-        playerServerGroupIDDict = PyGameData.g_crossPlayerServerGroupIDInfo.get(copyMapID, {})
         for ownerID, mailItemList in unPickItemDict.items():
             GameWorld.Log("发送未拾取的物品给玩家: %s" % mailItemList, ownerID)
-            if isCrossServer:
-                serverGroupID = playerServerGroupIDDict.get(ownerID, 0)
-                # 删除旧版发送邮件,如果功能还有需要,可使用新版本发送邮件 PlayerMail
-            else:
-                PlayerControl.SendMailByKey("ItemNoPickUp", [ownerID], mailItemList, [gameWorld.GetMapID()])
-        
+            PlayerControl.SendMailByKey("ItemNoPickUp", [ownerID], mailItemList, [gameWorld.GetMapID()])
+            
     playerManager = gameWorld.GetMapCopyPlayerManager()
     
     GameServer_DynamicLineMapStateChange(gameWorld, IPY_GameWorld.fbosClosed)
@@ -176,7 +170,6 @@
     FreeOrClearFBByAutoSize(gameWorld)
     
     gameWorld.SetPropertyID(0)
-    PyGameData.g_crossPlayerServerGroupIDInfo.pop(copyMapID, None)
     return
 
 def GameServer_DynamicLineMapStateChange(gameWorld, state):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
index 1aa6ea4..75121d5 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -689,12 +689,6 @@
                         ("DWORD", "PlusLVUPTotalExp", 0),
                         ),
 
-                "Rune":(
-                        ("DWORD", "ID", 1),
-                        ("list", "AttrType", 0),
-                        ("DWORD", "TowerID", 0),
-                        ),
-
                 "EquipWash":(
                         ("BYTE", "WashType", 1),
                         ("BYTE", "WashLV", 1),
@@ -727,60 +721,10 @@
                         ("DWORD", "FightPowerEx", 0),
                         ),
 
-                "PetInfo":(
-                        ("DWORD", "ID", 1),
-                        ("BYTE", "Quality", 0),
-                        ("char", "UnlockSys", 0),
-                        ("DWORD", "UnLockNeedItemID", 0),
-                        ("BYTE", "UnLockNeedItemCnt", 0),
-                        ("DWORD", "DecomposeExp", 0),
-                        ("BYTE", "InitRank", 0),
-                        ("WORD", "MaxRank", 0),
-                        ("WORD", "UseNeedRank", 0),
-                        ("list", "SkillID", 0),
-                        ("list", "SkillUnLock", 0),
-                        ("list", "SkillUnLockSys", 0),
-                        ("DWORD", "InitFightPower", 0),
-                        ),
-
-                "PetStarUp":(
-                        ("DWORD", "PetNPCID", 1),
-                        ("BYTE", "PetStar", 1),
-                        ("list", "StarUpNeedItemList", 0),
-                        ("list", "StarAttrType", 0),
-                        ("list", "StarAttrValue", 0),
-                        ),
-
-                "PetTrain":(
-                        ("BYTE", "TrainType", 1),
-                        ("BYTE", "TrainLV", 1),
-                        ("WORD", "NeedRealmLV", 0),
-                        ("DWORD", "EatCntTotal", 0),
-                        ("DWORD", "EatCntEverytime", 0),
-                        ("list", "EatItemAttrTypeList", 0),
-                        ("list", "EatItemAttrValueList", 0),
-                        ("list", "LVAttrTypeList", 0),
-                        ("list", "LVAttrValueList", 0),
-                        ),
-
                 "EquipDecompose":(
                         ("WORD", "LV", 1),
                         ("DWORD", "UpNeedExp", 0),
                         ("dict", "Attr", 0),
-                        ),
-
-                "PetClassCost":(
-                        ("DWORD", "PetID", 1),
-                        ("DWORD", "Class", 1),
-                        ("DWORD", "UpNeedExp", 0),
-                        ("DWORD", "AtkAdd", 0),
-                        ),
-
-                "PetEatEquip":(
-                        ("BYTE", "EquipColor", 1),
-                        ("BYTE", "EquipClass", 1),
-                        ("DWORD", "Exp", 0),
-                        ("DWORD", "FamilyStoreItemScore", 0),
                         ),
 
                 "FaQiLVUp":(
@@ -972,19 +916,6 @@
                         ("dict", "AttrExDict", 0),
                         ),
 
-                "RuneTower":(
-                        ("DWORD", "ID", 1),
-                        ("DWORD", "RunePoint", 0),
-                        ("DWORD", "Ysog", 0),
-                        ("DWORD", "NPCID", 0),
-                        ("BYTE", "IsNotify", 0),
-                        ("list", "FixEndAward", 0),
-                        ("dict", "GoodDrop", 0),
-                        ("DWORD", "SweepRunePoint", 0),
-                        ("DWORD", "SweepYsog", 0),
-                        ("dict", "SweepGoodDrop", 0),
-                        ),
-
                 "ChinMap":(
                         ("DWORD", "MapID", 1),
                         ("BYTE", "CanRide", 0),
@@ -1057,22 +988,6 @@
                         ("DWORD", "NeedCnt", 0),
                         ("list", "Condition", 0),
                         ("list", "AwardItemList", 0),
-                        ),
-
-                "TongTianLV":(
-                        ("WORD", "TTLV", 1),
-                        ("WORD", "LVUPPoint", 0),
-                        ("list", "CommAwardItemList", 0),
-                        ("list", "XianAwardItemList", 0),
-                        ("list", "NotifyItemIDList", 0),
-                        ),
-
-                "TongTianTask":(
-                        ("WORD", "TTTaskID", 1),
-                        ("BYTE", "TTTaskType", 0),
-                        ("BYTE", "IsDailyTask", 0),
-                        ("DWORD", "FinishNeedValue", 0),
-                        ("DWORD", "TaskPoint", 0),
                         ),
 
                 "Treasure":(
@@ -1200,12 +1115,6 @@
                         ("BYTE", "TotalMaxCount", 0),
                         ("BYTE", "RefreshSeconds", 0),
                         ("BYTE", "RefreshPerMinutes", 0),
-                        ),
-
-                "RuneCompound":(
-                        ("DWORD", "TagItemID", 1),
-                        ("list", "NeedItem", 0),
-                        ("WORD", "NeedMJ", 0),
                         ),
 
                 "ResourcesBack":(
@@ -1444,23 +1353,6 @@
                         ("DWORD", "AddExpRate", 0),
                         ),
 
-                "ActCostRebate":(
-                        ("DWORD", "CfgID", 1),
-                        ("char", "StartDate", 0),
-                        ("char", "EndDate", 0),
-                        ("WORD", "LVLimit", 0),
-                        ("BYTE", "IsDayReset", 0),
-                        ("list", "TemplateIDList", 0),
-                        ),
-
-                "CostRebateTemplate":(
-                        ("DWORD", "TemplateID", 1),
-                        ("DWORD", "NeedCostGold", 0),
-                        ("BYTE", "AwardIndex", 0),
-                        ("dict", "AwardItemList", 0),
-                        ("char", "NotifyKey", 0),
-                        ),
-
                 "ActBuyOne":(
                         ("DWORD", "CfgID", 1),
                         ("char", "StartDate", 0),
@@ -1638,22 +1530,6 @@
                         ("DWORD", "ExpireMinutes", 0),
                         ),
 
-                "ActRechargePrize":(
-                        ("DWORD", "CfgID", 1),
-                        ("char", "StartDate", 0),
-                        ("char", "EndDate", 0),
-                        ("WORD", "LVLimit", 0),
-                        ("BYTE", "IsDayReset", 0),
-                        ("list", "TemplateIDList", 0),
-                        ),
-
-                "RechargePrizeTemplate":(
-                        ("DWORD", "TemplateID", 1),
-                        ("WORD", "CTGID", 0),
-                        ("DWORD", "GoldPrize", 0),
-                        ("BYTE", "PrizeCountLimit", 0),
-                        ),
-
                 "ActTotalRecharge":(
                         ("DWORD", "CfgID", 1),
                         ("char", "StartDate", 0),
@@ -1671,22 +1547,6 @@
                         ("BYTE", "AwardIndex", 0),
                         ("dict", "AwardItem", 0),
                         ("char", "NotifyKey", 0),
-                        ),
-
-                "ActRechargeRebateGold":(
-                        ("DWORD", "CfgID", 1),
-                        ("char", "StartDate", 0),
-                        ("char", "EndDate", 0),
-                        ("WORD", "LVLimit", 0),
-                        ("BYTE", "IsDayReset", 0),
-                        ("list", "TemplateIDList", 0),
-                        ),
-
-                "RechargeRebateGoldTemplate":(
-                        ("DWORD", "TemplateID", 1),
-                        ("DWORD", "RMBMin", 0),
-                        ("DWORD", "RMBMax", 0),
-                        ("WORD", "RebateRate", 0),
                         ),
 
                 "ActGrowupBuy":(
@@ -1822,44 +1682,6 @@
                         ("BYTE", "CopyMapID", 1),
                         ("WORD", "PosX", 0),
                         ("WORD", "PosY", 0),
-                        ),
-
-                "Coat":(
-                        ("DWORD", "CoatID", 1),
-                        ("BYTE", "CostQuality", 0),
-                        ("list", "EquipItemID", 0),
-                        ("DWORD", "UnlockItemID", 0),
-                        ("DWORD", "MaxLV", 0),
-                        ("list", "CostItemCnt", 0),
-                        ("dict", "StarAttr", 0),
-                        ("DWORD", "InitFightPower", 0),
-                        ),
-
-                "CoatChestUp":(
-                        ("DWORD", "LV", 1),
-                        ("BYTE", "NeedExp", 0),
-                        ("dict", "AddAttr", 0),
-                        ),
-
-                "ActWeekParty":(
-                        ("DWORD", "CfgID", 1),
-                        ("char", "StartDate", 0),
-                        ("char", "EndDate", 0),
-                        ("WORD", "AdvanceMinutes", 0),
-                        ("BYTE", "IsDayReset", 0),
-                        ("BYTE", "ResetType", 0),
-                        ("WORD", "LVLimit", 0),
-                        ("list", "TemplateID", 0),
-                        ("dict", "PointAward", 0),
-                        ),
-
-                "WeekParty":(
-                        ("BYTE", "TemplateID", 1),
-                        ("BYTE", "ActionType", 0),
-                        ("DWORD", "TotalTimes", 0),
-                        ("WORD", "SingleTimes", 0),
-                        ("eval", "Reward", 0),
-                        ("WORD", "Point", 0),
                         ),
 
                 "ActYunshi":(
@@ -2008,27 +1830,6 @@
                         ("char", "WorldNotifyKey", 0),
                         ),
 
-                "ActFeastWeekParty":(
-                        ("DWORD", "CfgID", 1),
-                        ("char", "StartDate", 0),
-                        ("char", "EndDate", 0),
-                        ("WORD", "AdvanceMinutes", 0),
-                        ("BYTE", "IsDayReset", 0),
-                        ("BYTE", "ResetType", 0),
-                        ("WORD", "LVLimit", 0),
-                        ("list", "TemplateID", 0),
-                        ("dict", "PointAward", 0),
-                        ),
-
-                "FeastWeekParty":(
-                        ("BYTE", "TemplateID", 1),
-                        ("BYTE", "ActionType", 0),
-                        ("DWORD", "TotalTimes", 0),
-                        ("WORD", "SingleTimes", 0),
-                        ("list", "Reward", 0),
-                        ("WORD", "Point", 0),
-                        ),
-
                 "NewAllPeopleParty":(
                         ("BYTE", "ID", 1),
                         ("WORD", "TotalTimes", 0),
@@ -2059,21 +1860,6 @@
                         ("WORD", "ItemCnt", 0),
                         ("BYTE", "IsBind", 0),
                         ("DWORD", "Weight", 0),
-                        ),
-
-                "CrossActCTGBillboardDabiao":(
-                        ("DWORD", "TemplateID", 1),
-                        ("float", "CTGNeed", 0),
-                        ("BYTE", "AwardIndex", 0),
-                        ("list", "AwardItemList", 0),
-                        ),
-
-                "CrossActCTGBillboardOrder":(
-                        ("DWORD", "TemplateID", 1),
-                        ("WORD", "OrderA", 0),
-                        ("WORD", "OrderB", 0),
-                        ("float", "CTGAtleast", 0),
-                        ("list", "AwardItemList", 0),
                         ),
 
                 "EquipPlaceIndexMap":(
@@ -3266,17 +3052,6 @@
     def GetPlusAttrValues(self): return self.attrTuple[3] # 强化属性值列表 list
     def GetPlusLVUPTotalExp(self): return self.attrTuple[4] # 升级所需累计熟练度总值 DWORD
 
-# 符印表
-class IPY_Rune():
-    
-    def __init__(self):
-        self.attrTuple = None
-        return
-        
-    def GetID(self): return self.attrTuple[0] # 编号ID DWORD
-    def GetAttrType(self): return self.attrTuple[1] # 属性类型 list
-    def GetTowerID(self): return self.attrTuple[2] # 解锁符印塔编号 DWORD
-
 # 洗练表
 class IPY_EquipWash():
     
@@ -3319,57 +3094,6 @@
     def GetRecycleMoney(self): return self.attrTuple[4] # 回收货币值 WORD
     def GetFightPowerEx(self): return self.attrTuple[5] # 附加战斗力 DWORD
 
-# 灵兽表
-class IPY_PetInfo():
-    
-    def __init__(self):
-        self.attrTuple = None
-        return
-        
-    def GetID(self): return self.attrTuple[0] # 灵兽NPCID DWORD
-    def GetQuality(self): return self.attrTuple[1] # 品质 BYTE
-    def GetUnlockSys(self): return self.attrTuple[2] # 解锁广播提示 char
-    def GetUnLockNeedItemID(self): return self.attrTuple[3] # 解锁灵兽物品ID DWORD
-    def GetUnLockNeedItemCnt(self): return self.attrTuple[4] # 解锁所需物品数量 BYTE
-    def GetDecomposeExp(self): return self.attrTuple[5] # 分解单个解锁物品可获得升阶经验 DWORD
-    def GetInitRank(self): return self.attrTuple[6] # 灵兽初始阶数 BYTE
-    def GetMaxRank(self): return self.attrTuple[7] # 灵兽最高阶数 WORD
-    def GetUseNeedRank(self): return self.attrTuple[8] # 多少阶可切换外观 WORD
-    def GetSkillID(self): return self.attrTuple[9] # 灵兽技能ID list
-    def GetSkillUnLock(self): return self.attrTuple[10] # 灵兽技能解锁需要阶数 list
-    def GetSkillUnLockSys(self): return self.attrTuple[11] # 灵兽技能解锁提示 list
-    def GetInitFightPower(self): return self.attrTuple[12] # 初始战力 DWORD
-
-# 灵宠升星表
-class IPY_PetStarUp():
-    
-    def __init__(self):
-        self.attrTuple = None
-        return
-        
-    def GetPetNPCID(self): return self.attrTuple[0] # 灵兽NPCID DWORD
-    def GetPetStar(self): return self.attrTuple[1] # 灵兽星级 BYTE
-    def GetStarUpNeedItemList(self): return self.attrTuple[2] # 升下一星所需道具 [[物品ID,个数], ...] list
-    def GetStarAttrType(self): return self.attrTuple[3] # 累计总属性类型 list
-    def GetStarAttrValue(self): return self.attrTuple[4] # 累计总属性值 list
-
-# 灵宠培养表
-class IPY_PetTrain():
-    
-    def __init__(self):
-        self.attrTuple = None
-        return
-        
-    def GetTrainType(self): return self.attrTuple[0] # 培养类型 BYTE
-    def GetTrainLV(self): return self.attrTuple[1] # 培养等阶 BYTE
-    def GetNeedRealmLV(self): return self.attrTuple[2] # 培养所需境界 WORD
-    def GetEatCntTotal(self): return self.attrTuple[3] # 升阶所需个数(非累计) DWORD
-    def GetEatCntEverytime(self): return self.attrTuple[4] # 每次培养消耗x个 DWORD
-    def GetEatItemAttrTypeList(self): return self.attrTuple[5] # 每X个培养丹增加属性类型=EatCntEverytime list
-    def GetEatItemAttrValueList(self): return self.attrTuple[6] # 每X个培养丹增加属性值=EatCntEverytime list
-    def GetLVAttrTypeList(self): return self.attrTuple[7] # 每级额外属性类(非累积) list
-    def GetLVAttrValueList(self): return self.attrTuple[8] # 每级额外属性值(非累积) list
-
 # 装备分解属性表
 class IPY_EquipDecompose():
     
@@ -3380,30 +3104,6 @@
     def GetLV(self): return self.attrTuple[0] # 等级 WORD
     def GetUpNeedExp(self): return self.attrTuple[1] # 升级所需经验数 DWORD
     def GetAttr(self): return self.attrTuple[2] # 属性加成 dict
-
-# 灵兽升阶消耗表
-class IPY_PetClassCost():
-    
-    def __init__(self):
-        self.attrTuple = None
-        return
-        
-    def GetPetID(self): return self.attrTuple[0] # 灵兽NPCID DWORD
-    def GetClass(self): return self.attrTuple[1] # 灵兽阶数 DWORD
-    def GetUpNeedExp(self): return self.attrTuple[2] # 灵兽升阶所需经验数 DWORD
-    def GetAtkAdd(self): return self.attrTuple[3] # 每阶攻击力加成 DWORD
-
-# 灵兽吸收装备表
-class IPY_PetEatEquip():
-    
-    def __init__(self):
-        self.attrTuple = None
-        return
-        
-    def GetEquipColor(self): return self.attrTuple[0] # 装备品质 BYTE
-    def GetEquipClass(self): return self.attrTuple[1] # 装备阶数 BYTE
-    def GetExp(self): return self.attrTuple[2] # 获得灵兽升级经验 DWORD
-    def GetFamilyStoreItemScore(self): return self.attrTuple[3] # 仙盟宝库积分 DWORD
 
 # 法器升级表
 class IPY_FaQiLVUp():
@@ -3684,24 +3384,6 @@
     def GetAttrSpecDict(self): return self.attrTuple[6] # 特殊属性值字典 {attrKey:value, ...} dict
     def GetAttrExDict(self): return self.attrTuple[7] # 特殊属性值字典 {attrKey:value, ...} dict
 
-# 符印塔表
-class IPY_RuneTower():
-    
-    def __init__(self):
-        self.attrTuple = None
-        return
-        
-    def GetID(self): return self.attrTuple[0] # 塔编号 DWORD
-    def GetRunePoint(self): return self.attrTuple[1] # 过关给符印精华 DWORD
-    def GetYsog(self): return self.attrTuple[2] # 过关给魔精 DWORD
-    def GetNPCID(self): return self.attrTuple[3] # npcid DWORD
-    def GetIsNotify(self): return self.attrTuple[4] # 是否广播 BYTE
-    def GetFixEndAward(self): return self.attrTuple[5] # 固定结算奖励 list
-    def GetGoodDrop(self): return self.attrTuple[6] # 珍稀符印通关掉落概率 dict
-    def GetSweepRunePoint(self): return self.attrTuple[7] # 扫荡符印精华 DWORD
-    def GetSweepYsog(self): return self.attrTuple[8] # 扫荡魔精 DWORD
-    def GetSweepGoodDrop(self): return self.attrTuple[9] # 扫荡珍稀符印 dict
-
 # 地图表格
 class IPY_ChinMap():
     
@@ -3820,32 +3502,6 @@
     def GetNeedCnt(self): return self.attrTuple[2] # 需要数量 DWORD
     def GetCondition(self): return self.attrTuple[3] # 辅助条件 list
     def GetAwardItemList(self): return self.attrTuple[4] # 奖励物品列表 list
-
-# 通天令等级表
-class IPY_TongTianLV():
-    
-    def __init__(self):
-        self.attrTuple = None
-        return
-        
-    def GetTTLV(self): return self.attrTuple[0] # 通天令等级 WORD
-    def GetLVUPPoint(self): return self.attrTuple[1] # 升级所需积分(0不可升级) WORD
-    def GetCommAwardItemList(self): return self.attrTuple[2] # 常规奖励物品列表 [[物品ID,个数,是否拍品], ...] list
-    def GetXianAwardItemList(self): return self.attrTuple[3] # 仙品奖励物品列表 [[物品ID,个数,是否拍品], ...] list
-    def GetNotifyItemIDList(self): return self.attrTuple[4] # 需要广播的物品ID列表 list
-
-# 通天令任务表
-class IPY_TongTianTask():
-    
-    def __init__(self):
-        self.attrTuple = None
-        return
-        
-    def GetTTTaskID(self): return self.attrTuple[0] # 通天任务ID(确定后不可修改) WORD
-    def GetTTTaskType(self): return self.attrTuple[1] # 通天任务类型 BYTE
-    def GetIsDailyTask(self): return self.attrTuple[2] # 是否每日任务 BYTE
-    def GetFinishNeedValue(self): return self.attrTuple[3] # 任务完成所需值 DWORD
-    def GetTaskPoint(self): return self.attrTuple[4] # 任务积分点奖励 DWORD
 
 # 法宝表
 class IPY_Treasure():
@@ -4033,17 +3689,6 @@
     def GetTotalMaxCount(self): return self.attrTuple[5] # 所有点总怪物数 BYTE
     def GetRefreshSeconds(self): return self.attrTuple[6] # 刷怪间隔秒 BYTE
     def GetRefreshPerMinutes(self): return self.attrTuple[7] # 每整X分刷怪 BYTE
-
-# 符印合成表
-class IPY_RuneCompound():
-    
-    def __init__(self):
-        self.attrTuple = None
-        return
-        
-    def GetTagItemID(self): return self.attrTuple[0] # 合成的符印物品ID DWORD
-    def GetNeedItem(self): return self.attrTuple[1] # 需要的物品ID list
-    def GetNeedMJ(self): return self.attrTuple[2] # 需要的魔精数量 WORD
 
 # 资源找回表
 class IPY_ResourcesBack():
@@ -4386,33 +4031,6 @@
     def GetLVLimit(self): return self.attrTuple[1] # 限制等级 WORD
     def GetAddExpRate(self): return self.attrTuple[2] # 经验倍率加成,万分率 DWORD
 
-# 消费返利活动表
-class IPY_ActCostRebate():
-    
-    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 GetLVLimit(self): return self.attrTuple[3] # 限制等级 WORD
-    def GetIsDayReset(self): return self.attrTuple[4] # 是否每天重置 BYTE
-    def GetTemplateIDList(self): return self.attrTuple[5] # 模板ID列表 list
-
-# 消费返利模板表
-class IPY_CostRebateTemplate():
-    
-    def __init__(self):
-        self.attrTuple = None
-        return
-        
-    def GetTemplateID(self): return self.attrTuple[0] # 模板ID DWORD
-    def GetNeedCostGold(self): return self.attrTuple[1] # 需要消费仙玉数 DWORD
-    def GetAwardIndex(self): return self.attrTuple[2] # 返利奖励索引0~31,同个模板中不重复 BYTE
-    def GetAwardItemList(self): return self.attrTuple[3] # 返利物品信息列表 {世界等级范围:[({职业:物品ID,..},个数,是否绑定), ...]} dict
-    def GetNotifyKey(self): return self.attrTuple[4] # 全服广播key,默认两个参数(玩家名, 档位额度) char
-
 # 买一送多活动表
 class IPY_ActBuyOne():
     
@@ -4685,32 +4303,6 @@
     def GetUnlockDefault(self): return self.attrTuple[1] # 是否默认激活 BYTE
     def GetExpireMinutes(self): return self.attrTuple[2] # 时效分钟,0永久 DWORD
 
-# 充值返利活动表
-class IPY_ActRechargePrize():
-    
-    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 GetLVLimit(self): return self.attrTuple[3] # 限制等级 WORD
-    def GetIsDayReset(self): return self.attrTuple[4] # 是否每天重置 BYTE
-    def GetTemplateIDList(self): return self.attrTuple[5] # 模板ID列表 list
-
-# 充值返利模板表
-class IPY_RechargePrizeTemplate():
-    
-    def __init__(self):
-        self.attrTuple = None
-        return
-        
-    def GetTemplateID(self): return self.attrTuple[0] # 模板ID DWORD
-    def GetCTGID(self): return self.attrTuple[1] # 充值表充值ID WORD
-    def GetGoldPrize(self): return self.attrTuple[2] # 返利仙玉数 DWORD
-    def GetPrizeCountLimit(self): return self.attrTuple[3] # 最大赠送次数 BYTE
-
 # 累计充值活动表
 class IPY_ActTotalRecharge():
     
@@ -4739,32 +4331,6 @@
     def GetAwardIndex(self): return self.attrTuple[2] # 返利奖励索引0~31,同个模板中不重复 BYTE
     def GetAwardItem(self): return self.attrTuple[3] # 返利物品信息列表 {职业:[(物品ID,个数,是否绑定),...]} dict
     def GetNotifyKey(self): return self.attrTuple[4] # 全服广播key,默认两个参数(玩家名, 档位额度) char
-
-# 累计充值返利仙玉活动表
-class IPY_ActRechargeRebateGold():
-    
-    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 GetLVLimit(self): return self.attrTuple[3] # 限制等级 WORD
-    def GetIsDayReset(self): return self.attrTuple[4] # 是否每天重置 BYTE
-    def GetTemplateIDList(self): return self.attrTuple[5] # 模板ID列表 list
-
-# 累计充值返利仙玉模板表
-class IPY_RechargeRebateGoldTemplate():
-    
-    def __init__(self):
-        self.attrTuple = None
-        return
-        
-    def GetTemplateID(self): return self.attrTuple[0] # 模板ID DWORD
-    def GetRMBMin(self): return self.attrTuple[1] # 充值RMB最小值 DWORD
-    def GetRMBMax(self): return self.attrTuple[2] # 充值RMB最大值 DWORD
-    def GetRebateRate(self): return self.attrTuple[3] # 返利仙玉比例百分比 WORD
 
 # 成长必买活动表
 class IPY_ActGrowupBuy():
@@ -4980,64 +4546,6 @@
     def GetCopyMapID(self): return self.attrTuple[3] # 虚拟线路ID BYTE
     def GetPosX(self): return self.attrTuple[4] # 坐标X WORD
     def GetPosY(self): return self.attrTuple[5] # 坐标Y WORD
-
-# 时装表
-class IPY_Coat():
-    
-    def __init__(self):
-        self.attrTuple = None
-        return
-        
-    def GetCoatID(self): return self.attrTuple[0] # 时装编号 DWORD
-    def GetCostQuality(self): return self.attrTuple[1] # 时装品质 0-普通;1-稀有;2-传说 BYTE
-    def GetEquipItemID(self): return self.attrTuple[2] # 装备物品ID(按职业顺序) list
-    def GetUnlockItemID(self): return self.attrTuple[3] # 材料物品ID DWORD
-    def GetMaxLV(self): return self.attrTuple[4] # 最大星级 DWORD
-    def GetCostItemCnt(self): return self.attrTuple[5] # 材料数量 list
-    def GetStarAttr(self): return self.attrTuple[6] # 属性 dict
-    def GetInitFightPower(self): return self.attrTuple[7] # 初始战力 DWORD
-
-# 时装柜升级表
-class IPY_CoatChestUp():
-    
-    def __init__(self):
-        self.attrTuple = None
-        return
-        
-    def GetLV(self): return self.attrTuple[0] # 等级 DWORD
-    def GetNeedExp(self): return self.attrTuple[1] # 升级所需经验 BYTE
-    def GetAddAttr(self): return self.attrTuple[2] # 属性 dict
-
-# 周狂欢活动时间表
-class IPY_ActWeekParty():
-    
-    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 GetAdvanceMinutes(self): return self.attrTuple[3] # 前端提前X分钟展示活动 WORD
-    def GetIsDayReset(self): return self.attrTuple[4] # 是否每天重置 BYTE
-    def GetResetType(self): return self.attrTuple[5] # 重置类型,0-0点重置;1-5点重置 BYTE
-    def GetLVLimit(self): return self.attrTuple[6] # 限制等级 WORD
-    def GetTemplateID(self): return self.attrTuple[7] # 模板编号 list
-    def GetPointAward(self): return self.attrTuple[8] # 总积分奖励 dict
-
-# 周狂欢表
-class IPY_WeekParty():
-    
-    def __init__(self):
-        self.attrTuple = None
-        return
-        
-    def GetTemplateID(self): return self.attrTuple[0] # 模板ID BYTE
-    def GetActionType(self): return self.attrTuple[1] # 活动条目ID BYTE
-    def GetTotalTimes(self): return self.attrTuple[2] # 可完成的总次数,0表示不限次数 DWORD
-    def GetSingleTimes(self): return self.attrTuple[3] # 单次领奖需要的次数 WORD
-    def GetReward(self): return self.attrTuple[4] # 奖励物品 eval
-    def GetPoint(self): return self.attrTuple[5] # 积分 WORD
 
 # 运势活动时间表
 class IPY_ActYunshi():
@@ -5260,37 +4768,6 @@
     def GetGoodItemIDList(self): return self.attrTuple[3] # 需要广播的物品ID列表 [物品ID, ...] list
     def GetWorldNotifyKey(self): return self.attrTuple[4] # 全服广播key,参数(玩家名, 物品ID, 物品数据, 个数,) char
 
-# 节日巡礼活动时间表
-class IPY_ActFeastWeekParty():
-    
-    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 GetAdvanceMinutes(self): return self.attrTuple[3] # 前端提前X分钟展示活动 WORD
-    def GetIsDayReset(self): return self.attrTuple[4] # 是否每天重置 BYTE
-    def GetResetType(self): return self.attrTuple[5] # 重置类型,0-0点重置;1-5点重置 BYTE
-    def GetLVLimit(self): return self.attrTuple[6] # 限制等级 WORD
-    def GetTemplateID(self): return self.attrTuple[7] # 模板编号 list
-    def GetPointAward(self): return self.attrTuple[8] # 总积分奖励 dict
-
-# 节日巡礼模板表
-class IPY_FeastWeekParty():
-    
-    def __init__(self):
-        self.attrTuple = None
-        return
-        
-    def GetTemplateID(self): return self.attrTuple[0] # 模板ID BYTE
-    def GetActionType(self): return self.attrTuple[1] # 活动条目ID BYTE
-    def GetTotalTimes(self): return self.attrTuple[2] # 可完成的总次数,0表示不限次数 DWORD
-    def GetSingleTimes(self): return self.attrTuple[3] # 单次领奖需要的次数 WORD
-    def GetReward(self): return self.attrTuple[4] # 奖励物品 list
-    def GetPoint(self): return self.attrTuple[5] # 积分 WORD
-
 # 新仙界盛典-全民来嗨表
 class IPY_NewAllPeopleParty():
     
@@ -5342,31 +4819,6 @@
     def GetItemCnt(self): return self.attrTuple[3] # 物品数量 WORD
     def GetIsBind(self): return self.attrTuple[4] # 是否绑定 BYTE
     def GetWeight(self): return self.attrTuple[5] # 权重 DWORD
-
-# 跨服充值排行模板达标奖励表
-class IPY_CrossActCTGBillboardDabiao():
-    
-    def __init__(self):
-        self.attrTuple = None
-        return
-        
-    def GetTemplateID(self): return self.attrTuple[0] # 模板ID DWORD
-    def GetCTGNeed(self): return self.attrTuple[1] # 需充值RMB float
-    def GetAwardIndex(self): return self.attrTuple[2] # 奖励记录索引,从0开始,同个模板不可重复,不可变更 BYTE
-    def GetAwardItemList(self): return self.attrTuple[3] # 奖励物品列表[[物品ID,个数,是否拍品], ...] list
-
-# 跨服充值排行模板名次奖励表
-class IPY_CrossActCTGBillboardOrder():
-    
-    def __init__(self):
-        self.attrTuple = None
-        return
-        
-    def GetTemplateID(self): return self.attrTuple[0] # 模板ID DWORD
-    def GetOrderA(self): return self.attrTuple[1] # 名次A WORD
-    def GetOrderB(self): return self.attrTuple[2] # 至名次B WORD
-    def GetCTGAtleast(self): return self.attrTuple[3] # 至少充值RMB float
-    def GetAwardItemList(self): return self.attrTuple[4] # 奖励物品列表[[物品ID,个数,是否拍品], ...] list
 
 # 装备位背包索引映射表
 class IPY_EquipPlaceIndexMap():
@@ -5872,15 +5324,9 @@
         self.__LoadFileData("EquipLegendAttrValue", onlyCheck)
         self.__LoadFileData("Dogz", onlyCheck)
         self.__LoadFileData("DogzEquipPlus", onlyCheck)
-        self.__LoadFileData("Rune", onlyCheck)
         self.__LoadFileData("EquipWash", onlyCheck)
         self.__LoadFileData("AttrFruit", onlyCheck)
-        self.__LoadFileData("PetInfo", onlyCheck)
-        self.__LoadFileData("PetStarUp", onlyCheck)
-        self.__LoadFileData("PetTrain", onlyCheck)
         self.__LoadFileData("EquipDecompose", onlyCheck)
-        self.__LoadFileData("PetClassCost", onlyCheck)
-        self.__LoadFileData("PetEatEquip", onlyCheck)
         self.__LoadFileData("FaQiLVUp", onlyCheck)
         self.__LoadFileData("HorseClass", onlyCheck)
         self.__LoadFileData("HorseSkin", onlyCheck)
@@ -5899,7 +5345,6 @@
         self.__LoadFileData("LVReValue", onlyCheck)
         self.__LoadFileData("SpecMapPlayerAttrFormat", onlyCheck)
         self.__LoadFileData("GMAttr", onlyCheck)
-        self.__LoadFileData("RuneTower", onlyCheck)
         self.__LoadFileData("ChinMap", onlyCheck)
         self.__LoadFileData("FBFunc", onlyCheck)
         self.__LoadFileData("FBLine", onlyCheck)
@@ -5909,8 +5354,6 @@
         self.__LoadFileData("FBDJGEffect", onlyCheck)
         self.__LoadFileData("ADAward", onlyCheck)
         self.__LoadFileData("Success", onlyCheck)
-        self.__LoadFileData("TongTianLV", onlyCheck)
-        self.__LoadFileData("TongTianTask", onlyCheck)
         self.__LoadFileData("Treasure", onlyCheck)
         self.__LoadFileData("TreasureUp", onlyCheck)
         self.__LoadFileData("SignIn", onlyCheck)
@@ -5923,7 +5366,6 @@
         self.__LoadFileData("BOSSInfo", onlyCheck)
         self.__LoadFileData("NPCShow", onlyCheck)
         self.__LoadFileData("MapRefreshNPC", onlyCheck)
-        self.__LoadFileData("RuneCompound", onlyCheck)
         self.__LoadFileData("ResourcesBack", onlyCheck)
         self.__LoadFileData("CollectNPC", onlyCheck)
         self.__LoadFileData("Chests", onlyCheck)
@@ -5945,8 +5387,6 @@
         self.__LoadFileData("ActDailyGiftbag", onlyCheck)
         self.__LoadFileData("DailyGiftbag", onlyCheck)
         self.__LoadFileData("ActExpRate", onlyCheck)
-        self.__LoadFileData("ActCostRebate", onlyCheck)
-        self.__LoadFileData("CostRebateTemplate", onlyCheck)
         self.__LoadFileData("ActBuyOne", onlyCheck)
         self.__LoadFileData("ActBuyOneTemplate", onlyCheck)
         self.__LoadFileData("ActFamilyCTGAssist", onlyCheck)
@@ -5966,12 +5406,8 @@
         self.__LoadFileData("ActWishingWell", onlyCheck)
         self.__LoadFileData("WishingWell", onlyCheck)
         self.__LoadFileData("EmojiPack", onlyCheck)
-        self.__LoadFileData("ActRechargePrize", onlyCheck)
-        self.__LoadFileData("RechargePrizeTemplate", onlyCheck)
         self.__LoadFileData("ActTotalRecharge", onlyCheck)
         self.__LoadFileData("TotalRechargeTemplate", onlyCheck)
-        self.__LoadFileData("ActRechargeRebateGold", onlyCheck)
-        self.__LoadFileData("RechargeRebateGoldTemplate", onlyCheck)
         self.__LoadFileData("ActGrowupBuy", onlyCheck)
         self.__LoadFileData("ActManyDayRecharge", onlyCheck)
         self.__LoadFileData("ActManyDayRechargeAward", onlyCheck)
@@ -5988,10 +5424,6 @@
         self.__LoadFileData("CrossPenglaiZoneMap", onlyCheck)
         self.__LoadFileData("CrossDemonLandZoneMap", onlyCheck)
         self.__LoadFileData("CrossFamilyFlagwarZoneMap", onlyCheck)
-        self.__LoadFileData("Coat", onlyCheck)
-        self.__LoadFileData("CoatChestUp", onlyCheck)
-        self.__LoadFileData("ActWeekParty", onlyCheck)
-        self.__LoadFileData("WeekParty", onlyCheck)
         self.__LoadFileData("ActYunshi", onlyCheck)
         self.__LoadFileData("ActLunhuidian", onlyCheck)
         self.__LoadFileData("ActLunhuidianAward", onlyCheck)
@@ -6007,14 +5439,10 @@
         self.__LoadFileData("ActFeastWish", onlyCheck)
         self.__LoadFileData("ActFeastWishBottle", onlyCheck)
         self.__LoadFileData("ActFeastWishPool", onlyCheck)
-        self.__LoadFileData("ActFeastWeekParty", onlyCheck)
-        self.__LoadFileData("FeastWeekParty", onlyCheck)
         self.__LoadFileData("NewAllPeopleParty", onlyCheck)
         self.__LoadFileData("NewAllPeoplePartyAward", onlyCheck)
         self.__LoadFileData("ActLuckyTreasure", onlyCheck)
         self.__LoadFileData("LuckyTreasureTemplate", onlyCheck)
-        self.__LoadFileData("CrossActCTGBillboardDabiao", onlyCheck)
-        self.__LoadFileData("CrossActCTGBillboardOrder", onlyCheck)
         self.__LoadFileData("EquipPlaceIndexMap", onlyCheck)
         self.__LoadFileData("EquipShenAttr", onlyCheck)
         self.__LoadFileData("EquipShenEvolve", onlyCheck)
@@ -6684,13 +6112,6 @@
         self.CheckLoadData("DogzEquipPlus")
         return self.ipyDogzEquipPlusCache[index]
 
-    def GetRuneCount(self):
-        self.CheckLoadData("Rune")
-        return self.ipyRuneLen
-    def GetRuneByIndex(self, index):
-        self.CheckLoadData("Rune")
-        return self.ipyRuneCache[index]
-
     def GetEquipWashCount(self):
         self.CheckLoadData("EquipWash")
         return self.ipyEquipWashLen
@@ -6705,47 +6126,12 @@
         self.CheckLoadData("AttrFruit")
         return self.ipyAttrFruitCache[index]
 
-    def GetPetInfoCount(self):
-        self.CheckLoadData("PetInfo")
-        return self.ipyPetInfoLen
-    def GetPetInfoByIndex(self, index):
-        self.CheckLoadData("PetInfo")
-        return self.ipyPetInfoCache[index]
-
-    def GetPetStarUpCount(self):
-        self.CheckLoadData("PetStarUp")
-        return self.ipyPetStarUpLen
-    def GetPetStarUpByIndex(self, index):
-        self.CheckLoadData("PetStarUp")
-        return self.ipyPetStarUpCache[index]
-
-    def GetPetTrainCount(self):
-        self.CheckLoadData("PetTrain")
-        return self.ipyPetTrainLen
-    def GetPetTrainByIndex(self, index):
-        self.CheckLoadData("PetTrain")
-        return self.ipyPetTrainCache[index]
-
     def GetEquipDecomposeCount(self):
         self.CheckLoadData("EquipDecompose")
         return self.ipyEquipDecomposeLen
     def GetEquipDecomposeByIndex(self, index):
         self.CheckLoadData("EquipDecompose")
         return self.ipyEquipDecomposeCache[index]
-
-    def GetPetClassCostCount(self):
-        self.CheckLoadData("PetClassCost")
-        return self.ipyPetClassCostLen
-    def GetPetClassCostByIndex(self, index):
-        self.CheckLoadData("PetClassCost")
-        return self.ipyPetClassCostCache[index]
-
-    def GetPetEatEquipCount(self):
-        self.CheckLoadData("PetEatEquip")
-        return self.ipyPetEatEquipLen
-    def GetPetEatEquipByIndex(self, index):
-        self.CheckLoadData("PetEatEquip")
-        return self.ipyPetEatEquipCache[index]
 
     def GetFaQiLVUpCount(self):
         self.CheckLoadData("FaQiLVUp")
@@ -6873,13 +6259,6 @@
         self.CheckLoadData("GMAttr")
         return self.ipyGMAttrCache[index]
 
-    def GetRuneTowerCount(self):
-        self.CheckLoadData("RuneTower")
-        return self.ipyRuneTowerLen
-    def GetRuneTowerByIndex(self, index):
-        self.CheckLoadData("RuneTower")
-        return self.ipyRuneTowerCache[index]
-
     def GetChinMapCount(self):
         self.CheckLoadData("ChinMap")
         return self.ipyChinMapLen
@@ -6942,20 +6321,6 @@
     def GetSuccessByIndex(self, index):
         self.CheckLoadData("Success")
         return self.ipySuccessCache[index]
-
-    def GetTongTianLVCount(self):
-        self.CheckLoadData("TongTianLV")
-        return self.ipyTongTianLVLen
-    def GetTongTianLVByIndex(self, index):
-        self.CheckLoadData("TongTianLV")
-        return self.ipyTongTianLVCache[index]
-
-    def GetTongTianTaskCount(self):
-        self.CheckLoadData("TongTianTask")
-        return self.ipyTongTianTaskLen
-    def GetTongTianTaskByIndex(self, index):
-        self.CheckLoadData("TongTianTask")
-        return self.ipyTongTianTaskCache[index]
 
     def GetTreasureCount(self):
         self.CheckLoadData("Treasure")
@@ -7040,13 +6405,6 @@
     def GetMapRefreshNPCByIndex(self, index):
         self.CheckLoadData("MapRefreshNPC")
         return self.ipyMapRefreshNPCCache[index]
-
-    def GetRuneCompoundCount(self):
-        self.CheckLoadData("RuneCompound")
-        return self.ipyRuneCompoundLen
-    def GetRuneCompoundByIndex(self, index):
-        self.CheckLoadData("RuneCompound")
-        return self.ipyRuneCompoundCache[index]
 
     def GetResourcesBackCount(self):
         self.CheckLoadData("ResourcesBack")
@@ -7195,20 +6553,6 @@
         self.CheckLoadData("ActExpRate")
         return self.ipyActExpRateCache[index]
 
-    def GetActCostRebateCount(self):
-        self.CheckLoadData("ActCostRebate")
-        return self.ipyActCostRebateLen
-    def GetActCostRebateByIndex(self, index):
-        self.CheckLoadData("ActCostRebate")
-        return self.ipyActCostRebateCache[index]
-
-    def GetCostRebateTemplateCount(self):
-        self.CheckLoadData("CostRebateTemplate")
-        return self.ipyCostRebateTemplateLen
-    def GetCostRebateTemplateByIndex(self, index):
-        self.CheckLoadData("CostRebateTemplate")
-        return self.ipyCostRebateTemplateCache[index]
-
     def GetActBuyOneCount(self):
         self.CheckLoadData("ActBuyOne")
         return self.ipyActBuyOneLen
@@ -7342,20 +6686,6 @@
         self.CheckLoadData("EmojiPack")
         return self.ipyEmojiPackCache[index]
 
-    def GetActRechargePrizeCount(self):
-        self.CheckLoadData("ActRechargePrize")
-        return self.ipyActRechargePrizeLen
-    def GetActRechargePrizeByIndex(self, index):
-        self.CheckLoadData("ActRechargePrize")
-        return self.ipyActRechargePrizeCache[index]
-
-    def GetRechargePrizeTemplateCount(self):
-        self.CheckLoadData("RechargePrizeTemplate")
-        return self.ipyRechargePrizeTemplateLen
-    def GetRechargePrizeTemplateByIndex(self, index):
-        self.CheckLoadData("RechargePrizeTemplate")
-        return self.ipyRechargePrizeTemplateCache[index]
-
     def GetActTotalRechargeCount(self):
         self.CheckLoadData("ActTotalRecharge")
         return self.ipyActTotalRechargeLen
@@ -7369,20 +6699,6 @@
     def GetTotalRechargeTemplateByIndex(self, index):
         self.CheckLoadData("TotalRechargeTemplate")
         return self.ipyTotalRechargeTemplateCache[index]
-
-    def GetActRechargeRebateGoldCount(self):
-        self.CheckLoadData("ActRechargeRebateGold")
-        return self.ipyActRechargeRebateGoldLen
-    def GetActRechargeRebateGoldByIndex(self, index):
-        self.CheckLoadData("ActRechargeRebateGold")
-        return self.ipyActRechargeRebateGoldCache[index]
-
-    def GetRechargeRebateGoldTemplateCount(self):
-        self.CheckLoadData("RechargeRebateGoldTemplate")
-        return self.ipyRechargeRebateGoldTemplateLen
-    def GetRechargeRebateGoldTemplateByIndex(self, index):
-        self.CheckLoadData("RechargeRebateGoldTemplate")
-        return self.ipyRechargeRebateGoldTemplateCache[index]
 
     def GetActGrowupBuyCount(self):
         self.CheckLoadData("ActGrowupBuy")
@@ -7496,34 +6812,6 @@
         self.CheckLoadData("CrossFamilyFlagwarZoneMap")
         return self.ipyCrossFamilyFlagwarZoneMapCache[index]
 
-    def GetCoatCount(self):
-        self.CheckLoadData("Coat")
-        return self.ipyCoatLen
-    def GetCoatByIndex(self, index):
-        self.CheckLoadData("Coat")
-        return self.ipyCoatCache[index]
-
-    def GetCoatChestUpCount(self):
-        self.CheckLoadData("CoatChestUp")
-        return self.ipyCoatChestUpLen
-    def GetCoatChestUpByIndex(self, index):
-        self.CheckLoadData("CoatChestUp")
-        return self.ipyCoatChestUpCache[index]
-
-    def GetActWeekPartyCount(self):
-        self.CheckLoadData("ActWeekParty")
-        return self.ipyActWeekPartyLen
-    def GetActWeekPartyByIndex(self, index):
-        self.CheckLoadData("ActWeekParty")
-        return self.ipyActWeekPartyCache[index]
-
-    def GetWeekPartyCount(self):
-        self.CheckLoadData("WeekParty")
-        return self.ipyWeekPartyLen
-    def GetWeekPartyByIndex(self, index):
-        self.CheckLoadData("WeekParty")
-        return self.ipyWeekPartyCache[index]
-
     def GetActYunshiCount(self):
         self.CheckLoadData("ActYunshi")
         return self.ipyActYunshiLen
@@ -7629,20 +6917,6 @@
         self.CheckLoadData("ActFeastWishPool")
         return self.ipyActFeastWishPoolCache[index]
 
-    def GetActFeastWeekPartyCount(self):
-        self.CheckLoadData("ActFeastWeekParty")
-        return self.ipyActFeastWeekPartyLen
-    def GetActFeastWeekPartyByIndex(self, index):
-        self.CheckLoadData("ActFeastWeekParty")
-        return self.ipyActFeastWeekPartyCache[index]
-
-    def GetFeastWeekPartyCount(self):
-        self.CheckLoadData("FeastWeekParty")
-        return self.ipyFeastWeekPartyLen
-    def GetFeastWeekPartyByIndex(self, index):
-        self.CheckLoadData("FeastWeekParty")
-        return self.ipyFeastWeekPartyCache[index]
-
     def GetNewAllPeoplePartyCount(self):
         self.CheckLoadData("NewAllPeopleParty")
         return self.ipyNewAllPeoplePartyLen
@@ -7670,20 +6944,6 @@
     def GetLuckyTreasureTemplateByIndex(self, index):
         self.CheckLoadData("LuckyTreasureTemplate")
         return self.ipyLuckyTreasureTemplateCache[index]
-
-    def GetCrossActCTGBillboardDabiaoCount(self):
-        self.CheckLoadData("CrossActCTGBillboardDabiao")
-        return self.ipyCrossActCTGBillboardDabiaoLen
-    def GetCrossActCTGBillboardDabiaoByIndex(self, index):
-        self.CheckLoadData("CrossActCTGBillboardDabiao")
-        return self.ipyCrossActCTGBillboardDabiaoCache[index]
-
-    def GetCrossActCTGBillboardOrderCount(self):
-        self.CheckLoadData("CrossActCTGBillboardOrder")
-        return self.ipyCrossActCTGBillboardOrderLen
-    def GetCrossActCTGBillboardOrderByIndex(self, index):
-        self.CheckLoadData("CrossActCTGBillboardOrder")
-        return self.ipyCrossActCTGBillboardOrderCache[index]
 
     def GetEquipPlaceIndexMapCount(self):
         self.CheckLoadData("EquipPlaceIndexMap")
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/Item_Chests.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/Item_Chests.py
index ab9923a..8cd26bc 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/Item_Chests.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/Item_Chests.py
@@ -20,13 +20,10 @@
 import ItemCommon
 import PlayerControl
 import IpyGameDataPY
-import IPY_GameWorld
 import ItemControler
-import PlayerRune
 import NPCCommon
 import ChConfig
 import ChEquip
-import ChItem
 
 import random
 import math
@@ -266,10 +263,6 @@
                 return False
             
             # 符印判断是否已经解锁
-            if itemData.GetType() == ChConfig.Def_ItemType_Rune:
-                if not PlayerRune.GetIsOpenByRuneID(curPlayer, itemID):
-                    GameWorld.DebugLog("此符印未解锁无法开出! chestsItemID=%s,itemID=%s" % (chestsItemID, itemID))
-                    continue
             
         curRate = rate if i == 0 else (rate - randItemList[i - 1][0])
         preRate = 0 if not resetRandItemList else resetRandItemList[-1][0]
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCAI/AICommon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCAI/AICommon.py
index c71773f..72d8ac6 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCAI/AICommon.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCAI/AICommon.py
@@ -28,7 +28,6 @@
 import OperControlManager
 import SkillCommon
 import SkillShell
-import PetControl
 import ReadChConfig
 import GameObj
 import FBLogic
@@ -335,22 +334,6 @@
             SkillCommon.SetSkillRemainTime(curNPCSkill, 0, tick, curNPC)
         useSkill = changeSkill
         #GameWorld.DebugLog("----随机技能 %s"%useSkill.GetSkillID())
-      
-    #===========================================================================
-    # 改成被动触发
-    # if PetControl.IsPet(curNPC):
-    #    petOwner = PetControl.GetPetOwner(curNPC)
-    #    
-    #    if petOwner == None:
-    #        GameWorld.ErrLog("宠物(%s)找不到主人"%curNPC.GetRolePet().PetID)
-    #        return False
-    #    
-    #    #血量条件判定
-    #    effect = SkillCommon.GetSkillEffectByEffectID(useSkill, ChConfig.Def_Skill_Effect_HPPerLimit)
-    #    if effect:
-    #        if GameObj.GetHP(petOwner)*ChConfig.Def_MaxRateValue/GameObj.GetMaxHP(petOwner) >= effect.GetEffectValue(0):
-    #            return False
-    #===========================================================================
     
     skillTag = SkillShell.GetSkillAffectTag(useSkill)
     skillAim = SkillShell.GetSkillFireAim(useSkill)
@@ -360,22 +343,8 @@
         #释放自身类技能
         return SkillShell.NPCUseSkill(curNPC, useSkill, tick)
     
-    #---对宠物主人释放---
-    if skillTag == ChConfig.Def_UseSkillTag_PetMaster:
-        if not PetControl.IsPet(curNPC):
-            GameWorld.ErrLog("该NPC非宠物,无法获得主人释放技能")
-            return False
-        
-        petOwner = PetControl.GetPetOwner(curNPC)
-        
-        if petOwner == None:
-            GameWorld.ErrLog("宠物(%s)对主人释放技能,找不到主人"%curNPC.GetRolePet().PetID)
-            return False
-        
-        curTag = petOwner
-        
     # 召唤兽对主人释放技能
-    elif skillTag == ChConfig.Def_UseSkillTag_SummonMaster:
+    if skillTag == ChConfig.Def_UseSkillTag_SummonMaster:
         if not NPCCommon.IsSummonNPC(curNPC):
             GameWorld.ErrLog("该NPC非召唤兽,无法获得主人释放技能")
             return False
@@ -449,9 +418,8 @@
 def DoAutoUseSkill(curNPC, curTag, tagDist, tick):
     #攻击僵持中
     if tick - curNPC.GetAttackTick() < curNPC.GetAtkInterval():
-        if not PetControl.IsPet(curNPC):
-            #GameWorld.Log('攻击僵持中')
-            return False
+        #GameWorld.Log('攻击僵持中')
+        return False
     
     npcID = curNPC.GetNPCID()
     npcAITrigger = ReadChConfig.GetEvalChConfig("NPCLogic_AI186_Trigger")
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCAI/AIType_104.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCAI/AIType_104.py
deleted file mode 100644
index 7456a30..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCAI/AIType_104.py
+++ /dev/null
@@ -1,267 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#
-#
-##@package AIType_104
-# @todo: 宠物AI
-#
-# @author chenxuewei
-# @date 2010-06-26
-# @version 2.2
-#
-# @change: "2010-06-28 20:56" panwei 宠物空闲时按表格数值回血
-# @change: "2010-07-02 13:40" chenxuewei 宠物跟随主人攻击,在攻击前清空其自身所有仇恨值。
-# @change: "2010-07-13 19:30" panwei 修改宠物AI
-# @change: "2010-07-14 18:10" panwei 修改宠物AI
-# @change: "2010-07-29 17:00" panwei 宠物验证逻辑提到入口处
-
-# @change: "2010-08-04 15:20" panwei 宠物新增自动释放技能逻辑
-# @change: "2010-09-02 16:15" panwei 宠物移动方式修改
-# @change: "2010-09-09 13:50" panwei 宠物停止矫正坐标函数修改
-# @change: "2010-09-26 16:45" panwei 宠物移动逻辑判定修改
-# @change: "2010-10-21 17:45" Alee 宠物添加AI模式,跟随AI
-# @change: "2011-07-01 12:40" Alee 防沉迷限制
-# @change: "2017-02-15 10:00" xdh 和主人在同一个位置时,宠物跑开
-#------------------------------------------------------------------------------ 
-"""Version = 2017-02-15 10:00"""
-#---------------------------------------------------------------------
-#导入
-import IPY_GameWorld
-import GameWorld
-import NPCCommon
-import BaseAttack
-import ChConfig
-import AICommon
-import SkillShell
-import SkillCommon
-import PetControl
-import GameMap
-import GameObj
-#---------------------------------------------------------------------
-## 初始化
-#  @param rolePet 宠物实例
-#  @return None
-#  @remarks 初始化
-def DoInit(rolePet):
-    rolePet.GetNPCAngry().Init(ChConfig.Def_Pet_Angry_Count)
-    return
-#---------------------------------------------------------------------
-## 执行AI
-#  @param rolePet 宠物实例
-#  @param tick 当前时间
-#  @return None
-#  @remarks 执行AI
-def ProcessAI(rolePet, tick):
-    #---查找宠物主人---
-    curPlayer = NPCCommon.GetSummonNPCOwner(IPY_GameWorld.gotPlayer, rolePet)
-
-    if curPlayer == None:
-        GameWorld.ErrLog('宠物 = %s无法查找主人, AI执行失败'%(rolePet.GetID()))
-        return
-    
-    #---刷新宠物的Buff---
-    rolePetControl = NPCCommon.NPCControl(rolePet)
-    rolePetControl.RefreshBuffState(tick)
-    if GameObj.GetHP(rolePet) == 0 :
-        # BUFF刷新中可能会导致NPC死亡
-        return
-    
-    #---宠物移动中---
-    if rolePet.GetCurAction() == IPY_GameWorld.laNPCMove and \
-        __SummonOutRefreshArea(curPlayer, rolePet, rolePetControl):
-        return
-    
-    #---AI模式是 战斗模式---
-    if rolePet.GetAIMode() == IPY_GameWorld.pamAttack:
-        
-        #防沉迷
-        if curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_Wallow_LV) > ChConfig.Def_GameWallow_LV_First:
-            return
-        
-        #---优先攻击主人打的对象---
-        masterAttackObj = AICommon.PlayerSummonAkObj(rolePet, tick, False)
-        
-        if masterAttackObj != None:
-            __NPCFight(curPlayer, rolePet, masterAttackObj.GetID(), masterAttackObj.GetGameObjType(), tick)
-            return
-        
-        #---攻击自己仇恨列表中的对象---
-        #刷新自己仇恨度列表
-        rolePetControl.RefreshAngryList(tick)
-        
-        curAngry = rolePetControl.GetMaxAngryTag()
-        
-        if curAngry != None:
-            __NPCFight(curPlayer, rolePet, curAngry.GetObjID(), curAngry.GetObjType(), tick)
-            return
-    
-    #---无仇恨目标逻辑处理---
-    curNPCAction = rolePet.GetCurAction()
-    
-    #空闲状态处理
-    if curNPCAction == IPY_GameWorld.laNPCNull:
-        #宠物空闲状态下回血
-        RestoreHP(rolePet, tick)
-
-        #执行跟随移动逻辑
-        if __SummonMove(curPlayer, rolePet, rolePetControl):
-            return
-
-        #宠物不需要移动, 修正宠物的位置, 不让重叠
-        rolePetControl.FixTagPos(rolePet.GetPosX(), rolePet.GetPosY(), 1)
-        return
-
-    #攻击状态处理
-    if curNPCAction == IPY_GameWorld.laNPCAttack:
-        rolePet.SetCurAction(IPY_GameWorld.laNPCNull)
-
-    return
-    
-#---------------------------------------------------------------------
-## 战斗
-#  @param curPlayer 玩家实例
-#  @param rolePet 宠物实例
-#  @param tagID 攻击目标ID
-#  @param tagType 攻击目标类型
-#  @param tick 当前时间
-#  @return None
-#  @remarks 战斗
-def __NPCFight(curPlayer, rolePet, tagID, tagType, tick):
-    rolePetControl = NPCCommon.NPCControl(rolePet)
-    
-    #追击返回
-    if __SummonOutRefreshArea(curPlayer, rolePet, rolePetControl):
-        return
-    
-    #开始攻击
-    curTag = GameWorld.GetObj(tagID, tagType)
-    
-    if curTag == None or GameObj.GetHP(curTag) <= 0:
-        return
-    
-    tagDist = GameWorld.GetDist(rolePet.GetPosX(), rolePet.GetPosY(), curTag.GetPosX(), curTag.GetPosY())
-    
-    #---优先释放技能---
-    if AICommon.DoAutoUseSkill(rolePet, curTag, tagDist, tick):
-        return
-
-    #---释放普通攻击---
-    if tagDist > rolePet.GetAtkDist():
-        rolePetControl.MoveToObj_Detel(curTag)
-        return
-    
-    #攻击逻辑
-    if tick - rolePet.GetAttackTick() < rolePet.GetAtkInterval():
-        #攻击间隔没有到, 返回
-        return
-    
-    if rolePetControl.FixTagPos(curTag.GetPosX(), curTag.GetPosY()):
-        #修正这个NPC的站立位置
-        return
-    
-    #普通攻击
-    BaseAttack.Attack(rolePet, curTag, None, tick)
-    return
-#---------------------------------------------------------------------
-## 召唤兽移动
-#  @param rolePet 宠物实例
-#  @param curPlayer 当前玩家
-#  @param rolePetControl 宠物控制器
-#  @return 布尔值
-#  @remarks 召唤兽移动
-def __SummonMove(curPlayer, rolePet, rolePetControl):
-    dist = GameWorld.GetDist(rolePet.GetPosX(), rolePet.GetPosY(), curPlayer.GetPosX(), curPlayer.GetPosY())
-    #停止距离
-    stopDist = 3
-    #跟随距离
-    followDist = ChConfig.Def_Screen_Area
-    
-    if dist <=0: #和主人在同一个位置时,宠物跑开
-        resultPos = GameMap.GetEmptyPlaceInArea(rolePet.GetPosX(), rolePet.GetPosY(), 2)
-        moveDestX = resultPos.GetPosX()
-        moveDestY = resultPos.GetPosY()
-        
-        if moveDestX != rolePet.GetPosX() or moveDestY != rolePet.GetPosY():
-            #切换至快速移动状态
-            NPCCommon.ChangeNPCMoveType(rolePet, IPY_GameWorld.mtRun)
-            #NPC开始移动
-            rolePet.Move(moveDestX, moveDestY)
-            return True
-        
-    if dist < stopDist:
-        return False
-    
-    if dist < followDist:
-        rolePetControl.MoveToObj_Detel(curPlayer, 1)
-    else:
-        #瞬间移动
-        __SummonResetPos(curPlayer, rolePet, rolePetControl)
-    
-    return True
-#---------------------------------------------------------------------
-## 召唤兽超过区间
-#  @param curPlayer 玩家实例
-#  @param rolePet 宠物实例
-#  @param npcControl npc控制类
-#  @return 布尔值
-#  @remarks 召唤兽超过区间
-def __SummonOutRefreshArea(curPlayer, rolePet, npcControl):
-    dist = GameWorld.GetDist(rolePet.GetPosX(), rolePet.GetPosY(), curPlayer.GetPosX(), curPlayer.GetPosY())
-    
-    if dist < ChConfig.Def_PlayerSight_Default:
-        return False
-    
-    #重置位置
-    __SummonResetPos(curPlayer, rolePet, npcControl)
-    return True
-
-#---------------------------------------------------------------------
-## 重置位置
-#  @param curPlayer 当前对象
-#  @param rolePet 宠物实例
-#  @param rolePetControl 宠物控制器
-#  @return None
-#  @remarks 重置位置
-def __SummonResetPos(curPlayer, rolePet, rolePetControl):
-    #清空仇恨,清空伤血列表
-    rolePetControl.ClearNPCAngry()
-    rolePetControl.ClearNPCHurtList()
-    
-    #重置坐标
-    moveDestX, moveDestY = rolePetControl.GetMoveNearPos(curPlayer.GetPosX(), curPlayer.GetPosY(), 1)
-    rolePet.ResetPos(moveDestX, moveDestY)
-    
-    #重置NPC为空闲状态
-    rolePet.SetCurAction(IPY_GameWorld.laNPCNull)
-    return
-
-#---------------------------------------------------------------------
-##宠物空闲状态回血
-# @param curNPC NPC实例
-# @param tick 时间戳
-# @return 返回值无意义
-# @remarks 宠物空闲状态回血
-def RestoreHP(rolePet, tick):
-    curHP = GameObj.GetHP(rolePet)
-    maxHP = GameObj.GetMaxHP(rolePet)
-    
-    if curHP == maxHP:
-        #满血了
-        return
-    
-    if tick - rolePet.GetRestoreTime() < ChConfig.Def_Pet_ProcessHP_Tick:
-        #恢复时间未到
-        return
-    
-    #设置当前时间为恢复起始时间
-    rolePet.SetRestoreTime(tick)
-    
-    #--设置回血
-    hpRestore = rolePet.GetHPRestore()
-    
-    if hpRestore == 0:
-        return
-    
-    PetControl.AddPetHP(rolePet, hpRestore)
-    return
-
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCAI/AIType_105.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCAI/AIType_105.py
deleted file mode 100644
index c62bf78..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCAI/AIType_105.py
+++ /dev/null
@@ -1,90 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#
-# @todo: 宠物AI
-#
-# @author: Alee
-# @date 2017-11-25 下午05:33:43
-# @version 1.0
-#
-# @note: 宠物同时跟随人物移动和战斗
-#
-#---------------------------------------------------------------------
-#导入
-import NPCCommon
-import IPY_GameWorld
-import GameWorld
-import SkillCommon
-import AICommon
-import ChConfig
-import GameObj
-import PetControl
-
-Def_LastAI1ProTick = "LastAI1ProTick" # 最后一次执行tick
-
-#---------------------------------------------------------------------
-## 初始化
-#  @param rolePet 宠物实例
-#  @return None
-#  @remarks 初始化
-def DoInit(rolePet):
-    rolePet.GetNPCAngry().Init(1)
-    return
-#---------------------------------------------------------------------
-## 执行AI
-#  @param rolePet 宠物实例
-#  @param tick 当前时间
-#  @return None
-#  @remarks 执行AI
-def ProcessAI(rolePet, tick):
-    #===========================================================================
-    # ## 执行频率, 根据人数降低---------------------------
-    # if tick - rolePet.GetDictByKey(Def_LastAI1ProTick) < 3000:
-    #    return
-    # rolePet.SetDict(Def_LastAI1ProTick, tick)
-    # #-------------------------------------------------------
-    #===========================================================================
-    
-    curPlayer = NPCCommon.GetSummonNPCOwner(IPY_GameWorld.gotPlayer, rolePet)
-
-    if curPlayer == None:
-        GameWorld.ErrLog('宠物 = %s无法查找主人, AI执行失败'%(rolePet.GetID()))
-        return
-    
-    rolePetControl = NPCCommon.NPCControl(rolePet)
-    rolePetControl.RefreshBuffState(tick)
-    
-    dist = GameWorld.GetDist(curPlayer.GetPosX(), curPlayer.GetPosY(), rolePet.GetPosX(), rolePet.GetPosY())
-    if dist > 12:
-        # 发生传送等情况导致距离突然过远
-        petControl = NPCCommon.NPCControl(rolePet)
-        posX, posY = petControl.GetMoveNearPos(curPlayer.GetPosX(), curPlayer.GetPosY(), 1)
-        rolePet.ResetPos(posX, posY)
-    
-    
-    if tick - rolePet.GetAttackTick() >= rolePet.GetAtkInterval():
-        PetControl.PetFight(curPlayer, tick)
-        
-    #===========================================================================
-    # skillManager = rolePet.GetSkillManager()
-    # for index in range(0, skillManager.GetSkillCount()):
-    #    useSkill = skillManager.GetSkillByIndex(index)
-    #    #已经到尾部了
-    #    if not useSkill or useSkill.GetSkillTypeID() == 0:
-    #        break
-    #    
-    #    if SkillCommon.isPassiveSkill(useSkill):
-    #        #GameWorld.Log('被动技能不释放不释放 = %s'%(useSkill.GetSkillName()))
-    #        continue
-    #    
-    #    effect = SkillCommon.GetSkillEffectByEffectID(useSkill, ChConfig.Def_Skill_Effect_HPPerLimit)
-    #    if not effect:
-    #        continue
-    #    
-    #    if GameObj.GetHP(curPlayer)*ChConfig.Def_MaxRateValue/GameObj.GetMaxHP(curPlayer) >= effect.GetEffectValue(0):
-    #        continue
-    #    
-    #    AICommon.DoNPCUseSkill(rolePet, curPlayer, useSkill, 0, tick)
-    #===========================================================================
-    return
-
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 fcd8663..b5fde3d 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py
@@ -23,14 +23,12 @@
 import SkillShell
 import BuffSkill
 import BaseAttack
-import ChNetSendPack
 import SkillCommon
 import AttackCommon
 import ItemControler
 import ItemCommon
 import FBLogic
 import ReadChConfig
-import PetControl
 import NPCAI
 import OperControlManager
 import ShareDefine
@@ -40,21 +38,11 @@
 import DataRecordPack
 import NetPackCommon
 import FBCommon
-import PlayerPrestigeSys
 import FormulaControl
-import PlayerCrossYaomoBoss
-import PlayerActCollectWords
-import PlayerTongTianLing
-import CrossPlayerData
-import PlayerFeastWish
-import PlayerWeekParty
 import NPCRealmRefresh
-import PlayerActLogin
 import PlayerActTask
-#import PlayerZhanling
 import IpyGameDataPY
 import PlayerState
-import TurnAttack
 import PyGameData
 import GameObj
 import ChNPC
@@ -331,8 +319,7 @@
         ownerDetail = GetSummonOwnerDetel(npcObj)
         
     elif npcObjType == IPY_GameWorld.gnotPet:
-        #查找宠物主人
-        ownerDetail = PetControl.GetPetOwner(npcObj)  
+        pass
 
     return ownerDetail
 #---------------------------------------------------------------------
@@ -821,9 +808,6 @@
             
         ChNPC.OnNPCSetDead(curNPC)
         
-        if npcid == IpyGameDataPY.GetFuncCfg("CrossYaomoBoss", 1):
-            PlayerCrossYaomoBoss.OnCrossYaomoBossDead(curNPC)
-            
     # 清除队伍成员伤血列表
     AttackCommon.ClearTeamPlayerHurtValue(curNPC)
     if curNPC.GetType() == ChConfig.ntRobot:
@@ -2266,7 +2250,6 @@
     
         #宠物特殊处理
         if curNPC.GetGameNPCObjType() == IPY_GameWorld.gnotPet:
-            PetControl.RefurbishPetAttr(curNPC, canSyncClient)
             return
         
         DoNPCAttrStrengthen(curNPC, isReborn)
@@ -2504,7 +2487,6 @@
         
         #宠物死亡调用独立接口
         if curNPC_GameNPCObjType == IPY_GameWorld.gnotPet:
-            PetControl.SetPetDead(curNPC)
             return
         
         #---通用死亡逻辑---
@@ -3122,7 +3104,6 @@
         else:
             if GetNPCLV(curNPC) >= curPlayer.GetLV() - IpyGameDataPY.GetFuncCfg('DailyQuestKillMonster'):
                 PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_KillNPC)
-        #PlayerPrestigeSys.AddRealmTaskValue(curPlayer, PlayerPrestigeSys.RealmTaskType_KillNPC, 1)
         
         if ChConfig.IsGameBoss(curNPC):
             OnPlayerKillBoss(curPlayer, npcID, mapID, False)
@@ -4092,8 +4073,6 @@
         return
     # 增加购买次数
     PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_Boss_KillCntBuyCnt%killBossMark, hasBuyCnt + 1)
-    
-    CrossPlayerData.SendMergePlayerDataNow(curPlayer)
     return
 
 #// A2 23 NPC秀结束 #tagCMNPCShowEnd
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 a523967..2deb268 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
@@ -29,7 +29,6 @@
 import FunctionNPCCommon
 import PlayerGMOper
 import ReadChConfig
-import PetControl
 import OperControlManager
 import ShareDefine
 import NetPackCommon
@@ -39,7 +38,6 @@
 import PlayerLVAward
 import PlayerGoldGift
 import PlayerSignDay
-import PlayerPet
 import PlayerPrestigeSys
 import PlayerFamily
 import PlayerLoginDayAward
@@ -49,53 +47,38 @@
 import PlayerWishingWell
 import PlayerSuccess
 import PlayerFreeGoods
-import PlayerCrossRealmPK
-import PlayerCrossChampionship
 import GameFuncComm
 import PlayerFamilyTaofa
-import PlayerWeekParty
-import PlayerFeastWeekParty
 import PlayerFeastLogin
 import PlayerFeastWish
 import PlayerActLogin
 import PlayerTreasure
-import PlayerRune
 import IpyGameDataPY
 import EventReport
 import PassiveBuffEffMng
 import PlayerFlashSale
 import PlayerFlashGiftbag
 import PlayerDailyGiftbag
-import PlayerCostRebate
 import PlayerActBuyOne
 import PlayerActGrowupBuy
 import PlayerActCollectWords
 import PlayerActTotalRecharge
-import PlayerActRechargePrize
 import PlayerActLianqi
 import PlayerActGodGift
 import PlayerActFamilyCTGAssist
-import PlayerActRechargeRebateGold
 import PlayerActManyDayRecharge
 import PlayerActSingleRecharge
 import PlayerSpringSale
-import PlayerCrossYaomoBoss
-import PlayerLuckyCloudBuy
 import PlayerLuckyTreasure
-import CrossActCTGBillboard
-import CrossActAllRecharge
 import PlayerFuncSysPrivilege
 import PlayerActTurntable
-import PlayerTongTianLing
 import OpenServerActivity
-import CrossRealmPlayer
 import ChNetSendPack
 import PlayerArena
 import PyGameData
 import PlayerCoin
 import PlayerCharm
 import PlayerDogz
-import PlayerCoat
 import PlayerFB
 import PlayerFaQi
 import SkillShell
@@ -257,11 +240,6 @@
     __Sync_ClientBuff(curPlayer)
     
     PlayerState.Sync_PKBossState(curPlayer)
-    
-    if PlayerControl.GetCrossMapID(curPlayer):
-        CrossRealmPlayer.DoExitCrossRealm(curPlayer)
-        
-    PetControl.DoLogic_PetLoadMapOK(curPlayer)
     
     # 恢复视野,刷新自己的视野
     curPlayer.SetVisible(True)
@@ -457,8 +435,6 @@
         
         DataRecordPack.DR_PlayerLogin(curPlayer)
         EventReport.WriteEvent_login(curPlayer)
-        #---玩家上线, 宠物逻辑处理---
-        #PetControl.DoLogic_PetInfo_OnLogin(curPlayer, tick)
         return
     
     leaveServerSecond = PlayerControl.GetPlayerLeaveServerSecond(curPlayer)
@@ -514,10 +490,6 @@
     #PK模式
     #SyncPKModel(curPlayer)
     
-    #---玩家上线, 宠物逻辑处理---
-    #PetControl.DoLogic_PetInfo_OnLogin(curPlayer, tick)
-    #PlayerPet.OnPlayerPetLogin(curPlayer)
-    
     # 通知等级奖励领取记录
     PlayerLVAward.Sync_LVAwardGetRecordInfo(curPlayer)
     
@@ -568,16 +540,6 @@
     
     PlayerFamily.OnPlayerLogin(curPlayer, tick)
     
-    # 时装
-    PlayerCoat.OnLogin_Coat(curPlayer)
-    
-    # 跨服PK
-    PlayerCrossRealmPK.DoPlayerLogin(curPlayer)
-    PlayerCrossChampionship.DoPlayerLogin(curPlayer)
-    
-    # 幸运云购
-    PlayerLuckyCloudBuy.OnPlayerLogin(curPlayer)
-    
     # 竞技场
     PlayerArena.OnLogin(curPlayer)
     
@@ -586,19 +548,8 @@
     PlayerControl.NotifyUseMoneyTotal(curPlayer)
     #通知基础属性
     #NotifyPlayerBasePoint(curPlayer)
-    
-    #跨服充值排行
-    CrossActCTGBillboard.OnPlayerLogin(curPlayer)
-    #跨服全民充值
-    CrossActAllRecharge.OnPlayerLogin(curPlayer)
-    #消费返利
-    PlayerCostRebate.OnPlayerLogin(curPlayer)
     #累计充值
     PlayerActTotalRecharge.OnPlayerLogin(curPlayer)
-    #累计充值返利仙玉
-    PlayerActRechargeRebateGold.OnPlayerLogin(curPlayer)
-    #充值返利
-    PlayerActRechargePrize.OnPlayerLogin(curPlayer)
     #成长必买
     PlayerActGrowupBuy.OnPlayerLogin(curPlayer)
     #限时特惠
@@ -616,16 +567,12 @@
     #集字活动
     PlayerActCollectWords.OnPlayerLogin(curPlayer)
     ChItem.Sync_ItemDayUseCnt(curPlayer)
-    # 符印登录通知
-    PlayerRune.PlayerRuneLogin(curPlayer)
     # 商店物品购买次数登录通知
     FunctionNPCCommon.ShopItemOnLogin(curPlayer)
     # 通知设置的被动功法
     #PassiveBuffEffMng.OnLoginGFPassive(curPlayer)
     # 极品白拿
     PlayerFreeGoods.OnLogin(curPlayer)
-    # 周狂欢活动
-    PlayerWeekParty.OnLogin(curPlayer)
     # 购买次数礼包活动
     PlayerActBuyCountGift.OnPlayerLogin(curPlayer)
     # 任务活动
@@ -636,8 +583,6 @@
     PlayerActLunhuidian.OnPlayerLogin(curPlayer)
     # 登录活动
     PlayerActLoginNew.OnPlayerLogin(curPlayer)
-    # 节日巡礼活动
-    PlayerFeastWeekParty.OnLogin(curPlayer)
     # 节日登录活动
     PlayerFeastLogin.OnPlayerLogin(curPlayer)
     # 节日祝福活动
@@ -669,8 +614,6 @@
     PlayerFB.OnLogin(curPlayer)
     #技能专精信息
     #SkillShell.NotifyElementSkillInfo(curPlayer)
-    #通天令
-    PlayerTongTianLing.OnPlayerLogin(curPlayer)
     #创角奖励
     Sync_CreateRoleAwardInfo(curPlayer)
     #自定义奖励
@@ -1373,9 +1316,6 @@
     #    GameObj.SetHPFull(curSummon)
     #===========================================================================
     
-    #初始化宠物 通知客户端
-    PetControl.Sync_PetInfo_ChangeMap(curPlayer, tick)
-
     #通知GameServer自己现在的地图
     #curPlayer.Sync_GameServer_MapID()
     
@@ -1585,9 +1525,6 @@
     
     #如果登录的副本,执行进入副本逻辑, 因为有时间响应, 必须在EndLoadMap之后...
     FBLogic.DoEnterFBLogic(curPlayer, tick)
-    
-    #触发切换地图宠物逻辑
-    PetControl.DoLogic_PetLoadMapOK(curPlayer)
 
     #---检查是否卡障碍---
     curMap = GameWorld.GetMap()
@@ -1989,20 +1926,6 @@
     
     curPlayer.ChangePos(sendPack_DestX, sendPack_DestY)
     #curPlayer.SetClientMoveTick(sendPack_WorldTick)
-    
-    fightPet = curPlayer.GetPetMgr().GetFightPet()
-    #无出战宠物
-    if fightPet == None:
-        return
-    
-    if GameWorld.GetDist(fightPet.GetPosX(), fightPet.GetPosY(), sendPack_DestX, sendPack_DestY) <= 4:
-        #战斗中不频繁移动
-        return
-
-    #出战宠物同时移动
-    PetControl.FightPetFollowMove(curPlayer, sendPack_StartX, sendPack_StartY)
-    
-    
     return
 
 #---------------------------------------------------------------------
@@ -2076,9 +1999,6 @@
     # 在UpdatePos 调用间隔内多次调用move会使 m_StartMoveTick 重置,导致无法移动
     # 而在 CheckMovePos -> PlayerRefreshPos -> __FixPlayerPos -> ChangePos 造成移动的现象
     curPlayer.Move(client_DestX, client_DestY)
-
-    #出战宠物同时移动
-    #PetControl.FightPetFollowMove(curPlayer, client_DestX, client_DestY, client_StartX, client_StartY)
     return
 
 ##移动点检查, checkObj 是移动对象(在人镖合一状态下, 输入为骠车
@@ -2298,9 +2218,6 @@
     PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_RouteServerInitOK, 0)
     
     PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PlayerKey_CrossRegisterMap, 0)
-    
-    #下线召回宠物
-    PetControl.ReCallFightPet(curPlayer)
     
     #离线session
     EventReport.WriteEvent_session(curPlayer)
@@ -2953,8 +2870,6 @@
     elif rebornType == ChConfig.rebornType_MainCity:
         #直接取db中配置的复活点
         PlayerControl.PlayerResetWorldPos(curPlayer, gameMap.GetRebornMapID(), gameMap.GetRebornMapX(), gameMap.GetRebornMapY())
-    #重新召唤宠物
-    PlayerPet.AutoSummonPet(curPlayer)
     
     #复活成功,重置状态
     PlayerControl.ChangePlayerAction(curPlayer, IPY_GameWorld.paNull)
@@ -3014,8 +2929,7 @@
 #    WORD        LineID;
 #};
 def OnEnterCrossServer(index, clientData, tick):
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    PlayerControl.PlayerEnterCrossServer(curPlayer, clientData.DataMapID, clientData.LineID)
+    #curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
     return
     
 #===============================================================================
@@ -3423,9 +3337,6 @@
     # 领取极品白拿
     elif rewardType == ChConfig.Def_RewardType_FreeGoods:
         PlayerFreeGoods.OnGetFreeGoods(curPlayer, dataEx)
-    # 领取消费返利奖励
-    elif rewardType == ChConfig.Def_RewardType_CostRebate:
-        PlayerCostRebate.OnGetCostRebateAward(curPlayer, dataEx, dataExStr)
     # 领取累计充值奖励
     elif rewardType == ChConfig.Def_RewardType_TotalRecharge:
         PlayerActTotalRecharge.OnGetTotalRechargeAward(curPlayer, dataEx, dataExStr)
@@ -3438,21 +3349,9 @@
     # 领取许愿池奖励
     elif rewardType == ChConfig.Def_RewardType_WishingWell:
         PlayerWishingWell.DoGetWishingAward(curPlayer)
-    # 领取周狂欢活动奖励
-    elif rewardType == ChConfig.Def_RewardType_WeekPartyAct:
-        PlayerWeekParty.GetWeekPartyActionAward(curPlayer, dataEx, dataExStr)
-    # 领取周狂欢积分奖励
-    elif rewardType == ChConfig.Def_RewardType_WeekPartyPoint:
-        PlayerWeekParty.GetWeekPartyPointAward(curPlayer, dataEx, dataExStr)
     # 领取登录奖励活动奖励
     elif rewardType == ChConfig.Def_RewardType_ActLoginAwardAct:
         PlayerActLogin.GetLoginAwardActionAward(curPlayer, dataEx, dataExStr)
-    # 领取节日巡礼活动奖励
-    elif rewardType == ChConfig.Def_RewardType_FeastWeekPartyAct:
-        PlayerFeastWeekParty.GetFeastWeekPartyActionAward(curPlayer, dataEx, dataExStr)
-    # 领取节日巡礼积分奖励
-    elif rewardType == ChConfig.Def_RewardType_FeastWeekPartyPoint:
-        PlayerFeastWeekParty.GetFeastWeekPartyPointAward(curPlayer, dataEx, dataExStr)
     # 领取节日登录奖励
     elif rewardType == ChConfig.Def_RewardType_FeastLogin:
         PlayerFeastLogin.GetFeastLoginAward(curPlayer, dataEx)
@@ -3465,15 +3364,6 @@
     # 领取任务活动奖励
     elif rewardType == ChConfig.Def_RewardType_ActTask:
         PlayerActTask.OnGetActTaskAward(curPlayer, dataEx, dataExStr)
-    # 领取跨服充值排行活动达标奖励
-    elif rewardType == ChConfig.Def_RewardType_CACTGBillboardDabiao:
-        CrossActCTGBillboard.GetDabiaoAward(curPlayer, dataEx)
-    # 跨服全民充值奖励
-    elif rewardType == ChConfig.Def_RewardType_CAAllRecharge:
-        CrossActAllRecharge.GetCrossActAllRechargeAward(curPlayer, dataEx)
-    # 跨服妖魔boss伤害奖励
-    elif rewardType == ChConfig.Def_RewardType_CrossYaomoBossHurt:
-        PlayerCrossYaomoBoss.GetCrossYaomoBossHurtAward(curPlayer, dataEx, tick)
     # 买一送多活动免费奖励
     elif rewardType == ChConfig.Def_RewardType_BuyOne:
         PlayerActBuyOne.GetBuyOneFreeAward(curPlayer, dataEx, dataExStr)
@@ -4091,16 +3981,6 @@
     curPlayer.ChangePos(sendPack_SeverPosX, sendPack_SeverPosY)
     PyNotifyPlayerMove(curPlayer, moveDir, clientPosX, clientPosY, sendPack_SeverPosX, sendPack_SeverPosY, moveType)
     curPlayer.SetClientMoveTick(sendPack_WorldTick)
-    
-    # 后面必须返回True
-    fightPet = curPlayer.GetPetMgr().GetFightPet()
-    if fightPet:
-        #出战宠物同时移动
-        if moveType == 0 or tick - fightPet.GetActionTick() > 300:
-    
-            PetControl.FightPetFollowMove(curPlayer,sendPack_SeverPosX, sendPack_SeverPosY)
-            fightPet.SetCurAction(IPY_GameWorld.laNPCNull)
-            
     return True
 
 
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/CrossActAllRecharge.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/CrossActAllRecharge.py
deleted file mode 100644
index 43cd9fa..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/CrossActAllRecharge.py
+++ /dev/null
@@ -1,171 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-##@package Player.CrossActAllRecharge
-#
-# @todo:跨服全民充值
-# @author hxp
-# @date 2022-10-11
-# @version 1.0
-#
-# 详细描述: 跨服全民充值
-#
-#-------------------------------------------------------------------------------
-#"""Version = 2022-10-11 19:00"""
-#-------------------------------------------------------------------------------
-
-import ChConfig
-import ShareDefine
-import PlayerControl
-import NetPackCommon
-import CrossRealmPlayer
-import ChPyNetSendPack
-import ItemControler
-import IPY_GameWorld
-import GameWorld
-
-def OnPlayerLogin(curPlayer):
-    isReset = __CheckPlayerCrossActAllRecharge(curPlayer)
-    if not isReset:
-        actInfo = CrossRealmPlayer.GetPlayerCrossActInfo(curPlayer, ShareDefine.CrossActName_AllRecharge)
-        # 活动中同步活动信息
-        if actInfo.get(ShareDefine.ActKey_State):
-            Sync_CrossActAllRechargePlayerInfo(curPlayer)
-            if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CA_AllRechargeRMB):
-                SendGameServerActRechargeRMB(curPlayer, actInfo)
-    return
-
-def RefreshCrossActAllRechargeInfo():
-    ## 收到GameServer同步的活动信息,刷新活动信息
-    playerManager = GameWorld.GetPlayerManager()
-    for index in xrange(playerManager.GetPlayerCount()):
-        curPlayer = playerManager.GetPlayerByIndex(index)
-        if not GameWorld.IsNormalPlayer(curPlayer):
-            continue
-        __CheckPlayerCrossActAllRecharge(curPlayer)
-        
-    return
-
-def __CheckPlayerCrossActAllRecharge(curPlayer):
-    
-    playerID = curPlayer.GetPlayerID()
-    
-    actInfo = CrossRealmPlayer.GetPlayerCrossActInfo(curPlayer, ShareDefine.CrossActName_AllRecharge)
-    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_AllRechargeID) # 玩家身上的活动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)
-    
-    if not state:
-        CrossRealmPlayer.NotifyCrossActEnd(curPlayer, ShareDefine.CrossActName_AllRecharge)
-        
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CA_AllRechargeID, actID)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CA_AllRechargeRMB, 0)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CA_AllRechargeAward, 0)
-    
-    Sync_CrossActAllRechargePlayerInfo(curPlayer)
-    return True
-
-def GetCrossActAllRechargeAward(curPlayer, awardIndex):
-    ## 领奖
-    
-    actInfo = CrossRealmPlayer.GetPlayerCrossActInfo(curPlayer, ShareDefine.CrossActName_AllRecharge)
-    state = actInfo.get(ShareDefine.ActKey_State, 0)
-    if not state:
-        GameWorld.DebugLog("非活动中")
-        return
-    
-    cfgID = actInfo.get(ShareDefine.ActKey_CfgID)
-    ipyDataDict = actInfo.get(ShareDefine.ActKey_IpyDataInfo, {})
-    if not ipyDataDict:
-        return
-    zoneID = ipyDataDict.get("ZoneID", 0)
-    if not zoneID:
-        return
-    
-    awardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CA_AllRechargeAward)
-    if awardRecord & pow(2, awardIndex):
-        GameWorld.DebugLog("已领取过该奖励! awardIndex=%s" % awardIndex, curPlayer.GetPlayerID())
-        return
-    
-    sendMsg = str(["AllRechargeAward", [cfgID, zoneID, awardIndex]])
-    GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(curPlayer.GetID(), 0, 0, "CrossActAllRecharge", sendMsg, len(sendMsg))
-    return
-
-def GameServer_CrossActAllRecharge(curPlayer, msgList):
-    
-    msgType = msgList[0]
-    
-    if msgType == "AllRechargeAward":
-        awardIndex, awardItemList = msgList[1:]
-        
-        awardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CA_AllRechargeAward)
-        if awardRecord & pow(2, awardIndex):
-            GameWorld.DebugLog("已领取过该奖励! awardIndex=%s" % awardIndex, curPlayer.GetPlayerID())
-            return
-        
-        if not ItemControler.CheckPackSpaceEnough(curPlayer, awardItemList):
-            return
-        
-        updAwardRecord = awardRecord | pow(2, awardIndex)
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CA_AllRechargeAward, updAwardRecord)
-        GameWorld.Log("领取全民充值奖励: awardIndex=%s" % (awardIndex), curPlayer.GetPlayerID())
-        
-        Sync_CrossActAllRechargePlayerInfo(curPlayer)
-        
-        for itemID, itemCount, isAuctionItem in awardItemList:
-            ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, isAuctionItem, [IPY_GameWorld.rptItem], 
-                                         event=["CrossActAllRecharge", False, {}])
-    return
-
-def AddCTGRMB(curPlayer, addRMB):
-    ## 增加活动已累计充值RMB
-    
-    actInfo = CrossRealmPlayer.GetPlayerCrossActInfo(curPlayer, ShareDefine.CrossActName_AllRecharge) 
-    if not actInfo:
-        return
-    
-    if not actInfo.get(ShareDefine.ActKey_State):
-        GameWorld.DebugLog("跨服全民充值非活动中! playerServerID=%s" % GameWorld.GetPlayerServerID(curPlayer), curPlayer.GetPlayerID())
-        return
-    
-    totalRMB = min(curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CA_AllRechargeRMB) + addRMB, ChConfig.Def_UpperLimit_DWord)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CA_AllRechargeRMB, totalRMB)
-    
-    GameWorld.DebugLog("跨服全民充值活动增加玩家累计充值RMB: addRMB=%s,totalRMB=%s" % (addRMB, totalRMB), curPlayer.GetPlayerID())
-    Sync_CrossActAllRechargePlayerInfo(curPlayer)
-    SendGameServerActRechargeRMB(curPlayer, actInfo)
-    return
-
-def SendGameServerActRechargeRMB(curPlayer, actInfo):
-    cfgID = actInfo.get(ShareDefine.ActKey_CfgID)
-    ipyDataDict = actInfo.get(ShareDefine.ActKey_IpyDataInfo, {})
-    if not ipyDataDict:
-        return
-    zoneID = ipyDataDict.get("ZoneID", 0)
-    if not zoneID:
-        return
-    totalRMB = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CA_AllRechargeRMB)
-    sendMsg = str(["AllRechargeRMB", [cfgID, zoneID, totalRMB]])
-    GameWorld.Log("SendGameServerActRechargeRMB: %s" % sendMsg, curPlayer.GetPlayerID())
-    GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(curPlayer.GetID(), 0, 0, "CrossActAllRecharge", sendMsg, len(sendMsg))
-    return
-
-def Sync_CrossActAllRechargePlayerInfo(curPlayer):
-    ## 通知活动玩家数据信息
-    clientPack = ChPyNetSendPack.tagMCCrossActAllRechargePlayerInfo()
-    clientPack.CTGRMBTotal = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CA_AllRechargeRMB)
-    clientPack.AwardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CA_AllRechargeAward)
-    NetPackCommon.SendFakePack(curPlayer, clientPack)
-    return
-
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/CrossActCTGBillboard.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/CrossActCTGBillboard.py
deleted file mode 100644
index f8f3fa2..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/CrossActCTGBillboard.py
+++ /dev/null
@@ -1,309 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-##@package Player.CrossActCTGBillboard
-#
-# @todo:跨服运营活动 - 充值排行
-# @author hxp
-# @date 2020-01-13
-# @version 1.0
-#
-# 详细描述: 跨服运营活动 - 充值排行
-#
-#-------------------------------------------------------------------------------
-#"""Version = 2020-01-13 17:00"""
-#-------------------------------------------------------------------------------
-
-import ChConfig
-import ShareDefine
-import PlayerControl
-import NetPackCommon
-import PlayerBillboard
-import CrossRealmPlayer
-import ChPyNetSendPack
-import ItemControler
-import IPY_GameWorld
-import IpyGameDataPY
-import GameWorld
-import CommFunc
-
-def OnPlayerLogin(curPlayer):
-    isReset = __CheckPlayerCrossActCTGBillboard(curPlayer)
-    if not isReset:
-        actInfo = CrossRealmPlayer.GetPlayerCrossActInfo(curPlayer, ShareDefine.CrossActName_CTGBillboard)
-        # 活动中同步活动信息
-        if actInfo.get(ShareDefine.ActKey_State):
-            Sync_CrossActCTGBillboardInfo(curPlayer)
-            Sync_CrossActCTGBillboardPlayerInfo(curPlayer)
-            UpdateCTGRMBCrossBillboard(curPlayer, actInfo)
-    return
-
-def RefreshCrossActCTGBillboardInfo():
-    ## 收到GameServer同步的活动信息,刷新活动信息
-    playerManager = GameWorld.GetPlayerManager()
-    for index in xrange(playerManager.GetPlayerCount()):
-        curPlayer = playerManager.GetPlayerByIndex(index)
-        if not GameWorld.IsNormalPlayer(curPlayer):
-            continue
-        __CheckPlayerCrossActCTGBillboard(curPlayer)
-    return
-
-def __CheckPlayerCrossActCTGBillboard(curPlayer):
-    ## 检查玩家累计充值活动数据信息
-    
-    playerID = curPlayer.GetPlayerID()
-    
-    actInfo = CrossRealmPlayer.GetPlayerCrossActInfo(curPlayer, ShareDefine.CrossActName_CTGBillboard)
-    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)
-    templateID = actInfo.get(ShareDefine.ActKey_TemplateID, 0)
-    
-    playerActID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CA_CTGBillboardID) # 玩家身上的活动ID
-    playerTemplateID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CA_CTGBillboardTemplateID)
-    
-    # 活动ID 相同的话不处理
-    if actID == playerActID:
-        GameWorld.DebugLog("跨服充值排行活动ID不变,不处理!cfgID=%s,dayIndex=%s,templateID=%s" % (cfgID, dayIndex, templateID), playerID)
-        if state:
-            if playerTemplateID != templateID and templateID:
-                PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CA_CTGBillboardTemplateID, templateID)
-                GameWorld.DebugLog("    活动模板ID变更,更新玩家身上模板ID记录!playerTemplateID=%s,updTemplateID=%s" 
-                                   % (playerTemplateID, templateID), playerID)
-                Sync_CrossActCTGBillboardInfo(curPlayer)
-                
-        return
-    
-    GameWorld.DebugLog("跨服充值排行活动重置! cfgID=%s,actID=%s,playerActID=%s,state=%s" % (cfgID, actID, playerActID, state), playerID)
-    
-    if not state:
-        CrossRealmPlayer.NotifyCrossActEnd(curPlayer, ShareDefine.CrossActName_CTGBillboard)
-        
-    if playerActID and playerTemplateID:
-        __SendDabiaoAwardMail(curPlayer, playerTemplateID)
-        
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CA_CTGBillboardID, actID)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CA_CTGBillboardTemplateID, templateID)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CA_CTGBillboardRMB, 0)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CA_CTGBillboardAward, 0)
-    
-    Sync_CrossActCTGBillboardInfo(curPlayer)
-    Sync_CrossActCTGBillboardPlayerInfo(curPlayer)
-    return True
-
-def __SendDabiaoAwardMail(curPlayer, playerTemplateID):
-    ## 补发未领取的达标奖励
-    
-    totalRMB = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CA_CTGBillboardRMB)
-    if not totalRMB:
-        return
-    
-    ipyDataList = IpyGameDataPY.GetIpyGameDataList("CrossActCTGBillboardDabiao", playerTemplateID)
-    if not ipyDataList:
-        return
-    
-    playerID = curPlayer.GetPlayerID()
-    awardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CA_CTGBillboardAward)
-    batchPlayerIDList, batchAddItemList, batchParamList = [], [], []
-    for ipyData in ipyDataList:
-        ctgNeed = ipyData.GetCTGNeed()
-        awardIndex = ipyData.GetAwardIndex()
-        if totalRMB < CommFunc.RMBToCoin(ctgNeed):
-            continue
-        if awardRecord & pow(2, awardIndex):
-            continue
-        batchPlayerIDList.append([playerID])
-        batchAddItemList.append(ipyData.GetAwardItemList())
-        batchParamList.append([ctgNeed])
-        awardRecord = awardRecord | pow(2, awardIndex)
-        
-    if not batchPlayerIDList:
-        return
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CA_CTGBillboardAward, awardRecord)
-    
-    GameWorld.DebugLog("补发跨服充值排行活动未领取达标奖励!", playerID)
-    PlayerControl.SendMailBatch("CACTGBillboardDabiao", batchPlayerIDList, batchAddItemList, batchParamList)
-    return
-
-def GetDabiaoAward(curPlayer, awardIndex):
-    ## 手动领取达标奖励
-    
-    actInfo = CrossRealmPlayer.GetPlayerCrossActInfo(curPlayer, ShareDefine.CrossActName_CTGBillboard)
-    state = actInfo.get(ShareDefine.ActKey_State, 0)
-    if not state:
-        GameWorld.DebugLog("非活动中")
-        return
-    
-    totalRMB = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CA_CTGBillboardRMB)
-    awardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CA_CTGBillboardAward)
-    if awardRecord & pow(2, awardIndex):
-        GameWorld.DebugLog("已领取过该奖励! awardIndex=%s" % awardIndex)
-        return
-        
-    playerTemplateID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CA_CTGBillboardTemplateID)
-    ipyDataList = IpyGameDataPY.GetIpyGameDataList("CrossActCTGBillboardDabiao", playerTemplateID)
-    if not ipyDataList:
-        return
-    
-    awardItemList = []
-    for ipyData in ipyDataList:
-        ctgNeed = CommFunc.RMBToCoin(ipyData.GetCTGNeed())
-        if awardIndex == ipyData.GetAwardIndex():
-            if totalRMB < ctgNeed:
-                GameWorld.DebugLog("充值额度未达标,无法领取! awardIndex=%s,totalRMB=%s,ctgNeed=%s" 
-                                   % (awardIndex, totalRMB, ctgNeed))
-                return
-            awardItemList = ipyData.GetAwardItemList()
-            break
-        
-    GameWorld.DebugLog("领取跨服充值活动达标奖励!awardIndex=%s,awardItemList=%s" % (awardIndex, awardItemList))
-    if not awardItemList:
-        return
-    
-    if not ItemControler.CheckPackSpaceEnough(curPlayer, awardItemList):
-        return
-    
-    updAwardRecord = awardRecord | pow(2, awardIndex)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CA_CTGBillboardAward, updAwardRecord)
-    Sync_CrossActCTGBillboardPlayerInfo(curPlayer)
-    
-    for itemID, itemCount, isAuctionItem in awardItemList:
-        ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, isAuctionItem, [IPY_GameWorld.rptItem], 
-                                     event=["CrossActCTGBillboard", False, {}])
-        
-    return
-
-def AddCTGRMB(curPlayer, addRMB):
-    ## 增加活动已累计充值RMB
-    actInfo = CrossRealmPlayer.GetPlayerCrossActInfo(curPlayer, ShareDefine.CrossActName_CTGBillboard) 
-    if not actInfo:
-        return
-    
-    if not actInfo.get(ShareDefine.ActKey_State):
-        GameWorld.DebugLog("玩家区服ID跨服充值排行非活动中!playerServerID=%s" % GameWorld.GetPlayerServerID(curPlayer))
-        return
-    
-    totalRMB = min(curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CA_CTGBillboardRMB) + addRMB, ChConfig.Def_UpperLimit_DWord)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CA_CTGBillboardRMB, totalRMB)
-    
-    GameWorld.DebugLog("跨服充值排行活动增加玩家累计充值RMB: addRMB=%s,totalRMB=%s" % (addRMB, totalRMB), curPlayer.GetPlayerID())
-    Sync_CrossActCTGBillboardPlayerInfo(curPlayer)
-    UpdateCTGRMBCrossBillboard(curPlayer, actInfo)
-    return
-
-def UpdateCTGRMBCrossBillboard(curPlayer, actInfo):
-    ## 更新跨服充值活动榜
-    totalRMB = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CA_CTGBillboardRMB)
-    if not totalRMB:
-        return
-    cfgID = actInfo.get(ShareDefine.ActKey_CfgID, 0)
-    if not cfgID:
-        return
-    
-    playerTemplateID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CA_CTGBillboardTemplateID)
-    orderIpyDataList = IpyGameDataPY.GetIpyGameDataList("CrossActCTGBillboardOrder", playerTemplateID)
-    if not orderIpyDataList:
-        return
-    
-    atleastRMBMin = None
-    for orderIpyData in orderIpyDataList:
-        atleastRMB = orderIpyData.GetCTGAtleast()
-        if atleastRMBMin == None or atleastRMBMin > atleastRMB:
-            atleastRMBMin = atleastRMB
-            
-    if atleastRMBMin == None:
-        return
-    
-    if totalRMB < atleastRMBMin:
-        GameWorld.DebugLog("跨服充值排行活动充值额度不足,无法上榜! totalRMB(%s) < atleastRMBMin(%s)" 
-                           % (totalRMB, atleastRMBMin), curPlayer.GetPlayerID())
-        return
-    
-    cmpValue = totalRMB
-    PlayerBillboard.UpdatePlayerCrossBillboard(curPlayer, ShareDefine.Def_CBT_ActCTG, cfgID, cmpValue)
-    return
-
-def Sync_CrossActCTGBillboardPlayerInfo(curPlayer):
-    ## 通知活动玩家数据信息
-    playerActInfo = ChPyNetSendPack.tagMCCACTGBillboardPlayerInfo()
-    playerActInfo.CTGRMBTotal = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CA_CTGBillboardRMB)
-    playerActInfo.DabiaoAwardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CA_CTGBillboardAward)
-    NetPackCommon.SendFakePack(curPlayer, playerActInfo)
-    return
-
-def Sync_CrossActCTGBillboardInfo(curPlayer):
-    ## 通知活动信息
-    
-    actInfo = CrossRealmPlayer.GetPlayerCrossActInfo(curPlayer, ShareDefine.CrossActName_CTGBillboard)
-    if not actInfo:
-        return
-    
-    if not actInfo.get(ShareDefine.ActKey_State):
-        return
-    
-    ipyDataDict = actInfo.get(ShareDefine.ActKey_IpyDataInfo, {})
-    if not ipyDataDict:
-        return 0
-    
-    templateIDList = ipyDataDict.get("TemplateIDList", [])
-    if not templateIDList:
-        return
-    
-    actPack = ChPyNetSendPack.tagMCCACTGBillboardInfo()
-    actPack.ServerIDRangeInfo = str(actInfo.get(ShareDefine.ActKey_ServerIDRangeList, []))
-    actPack.ServerInfoLen = len(actPack.ServerIDRangeInfo)
-    actPack.GroupValue1 = actInfo.get(ShareDefine.ActKey_CfgID, 0)
-    actPack.StartDate = ipyDataDict.get("StartDate", "")
-    actPack.EndtDate = ipyDataDict.get("EndDate", "")
-    actPack.TemplateID = actInfo.get(ShareDefine.ActKey_TemplateID, 0)
-    actPack.TempInfo = []
-    for templateID in templateIDList:
-        tempInfo = ChPyNetSendPack.tagMCCACTGBillboardTempInfo()
-        
-        # 达标
-        tempInfo.TemplateID = templateID
-        tempInfo.DabiaoAwardInfo = []
-        dabiaoIpyDataList = IpyGameDataPY.GetIpyGameDataList("CrossActCTGBillboardDabiao", templateID)
-        if dabiaoIpyDataList:
-            for dabiaoIpyData in dabiaoIpyDataList:
-                dabiaoInfo = ChPyNetSendPack.tagMCCACTGBillboardDabiao()
-                dabiaoInfo.NeedRMB = dabiaoIpyData.GetCTGNeed()
-                dabiaoInfo.AwardIndex = dabiaoIpyData.GetAwardIndex()
-                dabiaoInfo.AwardItemList = []
-                for itemID, itemCount, isBind in dabiaoIpyData.GetAwardItemList():
-                    itemInfo = ChPyNetSendPack.tagMCCACTGBillboardAwardItem()
-                    itemInfo.ItemID = itemID
-                    itemInfo.ItemCount = itemCount
-                    itemInfo.IsBind = isBind
-                    dabiaoInfo.AwardItemList.append(itemInfo)
-                dabiaoInfo.AwardItemCount = len(dabiaoInfo.AwardItemList)
-                tempInfo.DabiaoAwardInfo.append(dabiaoInfo)
-        tempInfo.DabiaoAwardCount = len(tempInfo.DabiaoAwardInfo)
-        
-        # 排行
-        tempInfo.OrderAwardInfo = []
-        orderIpyDataList = IpyGameDataPY.GetIpyGameDataList("CrossActCTGBillboardOrder", templateID)
-        if orderIpyDataList:
-            for orderIpyData in orderIpyDataList:
-                orderInfo = ChPyNetSendPack.tagMCCACTGBillboardOrder()
-                orderInfo.OrderA = orderIpyData.GetOrderA()
-                orderInfo.OrderB = orderIpyData.GetOrderB()
-                orderInfo.NeedRMB = orderIpyData.GetCTGAtleast()
-                orderInfo.AwardItemList = []
-                for itemID, itemCount, isBind in orderIpyData.GetAwardItemList():
-                    itemInfo = ChPyNetSendPack.tagMCCACTGBillboardAwardItem()
-                    itemInfo.ItemID = itemID
-                    itemInfo.ItemCount = itemCount
-                    itemInfo.IsBind = isBind
-                    orderInfo.AwardItemList.append(itemInfo)
-                orderInfo.AwardItemCount = len(orderInfo.AwardItemList)
-                tempInfo.OrderAwardInfo.append(orderInfo)
-        tempInfo.OrderAwardCount = len(tempInfo.OrderAwardInfo)
-        
-        actPack.TempInfo.append(tempInfo)
-        
-    actPack.TemplateCount = len(actPack.TempInfo)
-    NetPackCommon.SendFakePack(curPlayer, actPack)
-    return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/CrossPlayerData.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/CrossPlayerData.py
deleted file mode 100644
index 1eb6bd8..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/CrossPlayerData.py
+++ /dev/null
@@ -1,590 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#
-##@package
-#
-# @todo: 
-#
-# @author: Alee
-# @date 2019-1-14 下午11:30:12
-# @version 1.0
-#
-# @note: 
-#
-#---------------------------------------------------------------------
-import GameWorld
-import CommFunc
-import PlayerControl
-import IPY_GameWorld
-import BuffSkill
-import SkillCommon
-import base64
-import ChConfig
-import PyGameData
-import IpyGameDataPY
-import PlayerPet
-import traceback
-import ShareDefine
-import md5
-# 发送格式: 类型+(数量)+数据
-# 向跨服发送的数据类型
-(
-MergeData_Player,   # 对比处理
-MergeData_Item,     # 对比处理 只算属性的背包 装备 宠物 
-MergeData_Skill,    # 只处理ID
-MergeData_Buff,     # 即时发送
-CrossData_PetState, # 即时发送 宠物出战
-) = range(0, 5)
-
-## 写数据类型定义
-(
-WDT_BYTE,
-WDT_WORD,
-WDT_DWORD,
-WDT_String,
-) = range(4)
-
-CrossDataInfo = {
-                 CrossData_PetState:[[WDT_DWORD, WDT_BYTE, WDT_BYTE], lambda curObj, valueList:PlayerPet.CrossServer_DoChangePetState(curObj, valueList)],
-                 }
-
-# 影响跨服战力属性列表
-CrossFightPowerAttrList = [
-    [lambda curObj:curObj.GetBaseSTR(), lambda curObj, value:curObj.SetBaseSTR(value)], # 力量
-    [lambda curObj:curObj.GetBasePNE(), lambda curObj, value:curObj.SetBasePNE(value)], # 智力
-    [lambda curObj:curObj.GetBasePHY(), lambda curObj, value:curObj.SetBasePHY(value)], # 敏捷
-    [lambda curObj:curObj.GetBaseCON(), lambda curObj, value:curObj.SetBaseCON(value)], # 体质
-    [lambda curObj:curObj.GetLV(), lambda curObj, value:curObj.SetLV(value)], # 等级
-    [lambda curObj:curObj.GetOfficialRank(), lambda curObj, value:curObj.SetOfficialRank(value)], # 境界
-    [lambda curObj:curObj.GetVIPLv(), lambda curObj, value:curObj.SetVIPLv(value)], # VIP等级
-                           ]
-
-# 发送主服玩家数据给跨服
-def SendMergeData_Buff(curPlayer, buffID, plusValueList):
-    if buffID in [ChConfig.Def_SkillID_LimitSuperBuff]:
-        # 不需要处理的buff
-        return
-    if curPlayer.GetGameObjType() != IPY_GameWorld.gotPlayer:
-        return
-    
-    if GameWorld.IsCrossServer():
-        # 非主服
-        return
-    
-    if not PlayerControl.GetCrossMapID(curPlayer):
-        # 非跨服中
-        return
-
-    data = ''
-    data = CommFunc.WriteBYTE(data, MergeData_Buff)
-    data = CommFunc.WriteDWORD(data, buffID)
-    data = CommFunc.WriteBYTE(data, len(plusValueList))
-    for value in plusValueList:
-        data = CommFunc.WriteDWORD(data, value)
-
-    
-    #直接用字节流会报错
-    data = base64.b64encode(data)
-    curPlayer.SendMergePlayerData(data)
-    return
-
-
-# 接收子服玩家数据
-def OnMergePlayerData(index, tick):
-    if not GameWorld.IsCrossServer():
-        # 非跨服
-        return
-    
-    try:
-        # 跨服服务器处理
-        curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-        pdata = base64.b64decode(curPlayer.GetMergePlayerData())
-        if not pdata:
-            return
-        pos = 0
-        dataType, pos = CommFunc.ReadBYTE(pdata, pos)
-        if dataType == MergeData_Buff:
-            buffID, pos = CommFunc.ReadDWORD(pdata, pos)
-            curSkill = GameWorld.GetGameData().GetSkillBySkillID(buffID)
-            if not curSkill:
-                return
-            
-            plusValueList = []
-            cnt, pos = CommFunc.ReadBYTE(pdata, pos)
-            for i in range(cnt):
-                value, pos = CommFunc.ReadDWORD(pdata, pos)
-                plusValueList.append(value)
-                
-            buffType = SkillCommon.GetBuffType(curSkill)
-            BuffSkill.AddBuffNoRefreshState(curPlayer, buffType, curSkill, tick, plusValueList)
-            
-        elif dataType == MergeData_Player:
-            __ReadMainServerSyncPlayerData(curPlayer, curPlayer.GetMergePlayerData(), pos)
-            
-        else:
-            __ReadCrossData(curPlayer, dataType, curPlayer.GetMergePlayerData(), pos)
-            
-    except BaseException:
-        errorMsg = str(traceback.format_exc())
-        GameWorld.RaiseException('接收跨服变更玩家数据错误 \r\n%s' % errorMsg, curPlayer.GetPlayerID())
-    return
-
-## ----------------------------------------------------------------------------------------------
-
-def SendDataToCrossServer(curPlayer, dataType, dataList):
-    ## 通用的根据类型向跨服发送数据
-    if dataType not in CrossDataInfo:
-        return
-    
-    if not IsNeedProcessCrossPlayer(curPlayer):
-        return
-    
-    dataInfo = CrossDataInfo[dataType][0]
-    if len(dataList) != len(dataInfo):
-        return
-    
-    data = ''
-    data = CommFunc.WriteBYTE(data, dataType)
-    for i, wDType in enumerate(dataInfo):
-        value = dataList[i]
-        if wDType == WDT_BYTE:
-            data = CommFunc.WriteBYTE(data, value)
-        elif wDType == WDT_WORD:
-            data = CommFunc.WriteWORD(data, value)
-        elif wDType == WDT_DWORD:
-            data = CommFunc.WriteDWORD(data, value)
-        elif wDType == WDT_String:
-            sLen = len(value)
-            data = CommFunc.WriteBYTE(data, sLen)
-            data = CommFunc.WriteString(data, sLen, value)
-            
-    #直接用字节流会报错
-    data = base64.b64encode(data)
-    curPlayer.SendMergePlayerData(data)
-    GameWorld.DebugLog("发送数据到跨服服务器: dataType=%s,dataList=%s" % (dataType, dataList), curPlayer.GetPlayerID())
-    return
-
-def __ReadCrossData(curPlayer, dataType, pdata, pos):
-    if dataType not in CrossDataInfo:
-        return
-    dataInfo, callFunc = CrossDataInfo[dataType]
-    
-    if not callFunc:
-        return
-    
-    dataList = []
-    pdata = base64.b64decode(pdata)
-    
-    for wDType in dataInfo:
-        if wDType == WDT_BYTE:
-            value, pos = CommFunc.ReadBYTE(pdata, pos)
-        elif wDType == WDT_WORD:
-            value, pos = CommFunc.ReadWORD(pdata, pos)
-        elif wDType == WDT_DWORD:
-            value, pos = CommFunc.ReadDWORD(pdata, pos)
-        elif wDType == WDT_String:
-            sLen, pos = CommFunc.ReadBYTE(pdata, pos)
-            value, pos = CommFunc.ReadString(pdata, pos, sLen)
-        else:
-            continue
-        dataList.append(value)
-        
-    GameWorld.DebugLog("收到主服数据: dataType=%s,dataList=%s" % (dataType, dataList), curPlayer.GetPlayerID())
-    callFunc(curPlayer, dataList)
-    return
-
-def IsNeedProcessCrossPlayer(curPlayer):
-    ## 是否需要处理同步跨服中的玩家数据
-    if GameWorld.IsCrossServer():
-        return
-    
-    crossMapID = curPlayer.NomalDictGetProperty(ChConfig.Def_PlayerKey_CrossRegisterMap)
-    if not crossMapID:
-        crossMapID = PlayerControl.GetCrossMapID(curPlayer)
-    if not crossMapID or crossMapID not in ChConfig.Def_CrossMapIDList:
-        return
-    
-    # 不需要处理的跨服地图
-    if crossMapID in []:
-        return
-    
-    if not IpyGameDataPY.GetFuncCfg("CrossSyncPlayerData", 1):
-        return
-    
-    return True
-
-def ClearCrossSyncDataCache(curPlayer):
-    ## 清除同步跨服数据的临时缓存
-    playerID = curPlayer.GetPlayerID()
-    PyGameData.g_crossRegPlayerAttrDict.pop(playerID, None)
-    PyGameData.g_crossSyncTickDict.pop(playerID, None)
-    PyGameData.g_crossPlayerDictChangeInfo.pop(playerID, None)
-    PyGameData.g_crossPlayerItemsChangeInfo.pop(playerID, None)
-    PyGameData.g_crossPlayerSkillsChangeInfo.pop(playerID, None)
-    GameWorld.DebugLog("清除同步跨服数据的临时缓存", playerID)
-    return
-
-def OnPlayerCrossReg(curPlayer):
-    ## 玩家跨服数据注册
-    
-    if not IsNeedProcessCrossPlayer(curPlayer):
-        return
-    
-    ClearCrossSyncDataCache(curPlayer)
-    attrList = []
-    for attrInfo in CrossFightPowerAttrList:
-        attrList.append(attrInfo[0](curPlayer))
-    playerID = curPlayer.GetPlayerID()
-    PyGameData.g_crossRegPlayerAttrDict[playerID] = attrList
-    
-    OnPlayerCrossRegItems(curPlayer)     # 物品
-    OnPlayerCrossRegSkills(curPlayer)   # 技能
-    return
-
-# 物品数据更新
-def OnPlayerCrossRegItems(curPlayer):
-    # 影响战力的物品,新功能注意添加,下次需要加上诛仙塔
-    PyGameData.g_crossPlayerItemsChangeInfo[curPlayer.GetPlayerID()] = GetPlayerCrossRegItems(curPlayer)
-    
-    return
-
-def GetPlayerCrossRegItems(curPlayer):
-    itemsDict = {}
-    # 影响战力的物品,新功能注意添加,下次需要加上诛仙塔
-    
-    packList = [IPY_GameWorld.rptEquip, ShareDefine.rptPet, ShareDefine.rptDogzEquip]
-    for packIndex in packList:
-        curPack = curPlayer.GetItemManager().GetPack(packIndex)
-        for i in range(curPack.GetCount()):
-            curItem = curPack.GetAt(i)
-            if not curItem or curItem.IsEmpty():
-                continue
-            
-            itemMark = (curItem.GetItemPlaceType(), curItem.GetItemPlaceIndex())
-            itemsDict[itemMark] = md5.md5(curItem.GetB64ItemData()).hexdigest()
-    
-    return itemsDict
-
-# 技能数据更新
-def OnPlayerCrossRegSkills(curPlayer):
-    PyGameData.g_crossPlayerSkillsChangeInfo[curPlayer.GetPlayerID()] = GetPlayerCrossRegSkills(curPlayer)
-    
-def GetPlayerCrossRegSkills(curPlayer):
-    skills = []
-    skillManager = curPlayer.GetSkillManager()
-    for i in range(0 , skillManager.GetSkillCount()):
-        curSkill = skillManager.GetSkillByIndex(i)
-        skills.append(curSkill.GetSkillID())
-        
-    return skills
-#===============================================================================
-# def test(curPlayer):
-#    curPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip)
-#    curItem = curPack.GetAt(1)
-#    curItem.GetB64ItemData()
-#    curSingleItem = GameWorld.GetItemFactory().AddItem(curItem.GetB64ItemData())
-#    if not curSingleItem:
-#        return
-#    
-#    curItem2 = curPack.GetAt(2)
-#    curItem2.AssignItem(curSingleItem)
-#===============================================================================
-
-def OnPlayerFightPowerChange(curPlayer):
-    ## 玩家战力变更时
-    if not IsNeedProcessCrossPlayer(curPlayer):
-        return
-    playerID = curPlayer.GetPlayerID()
-    if playerID in PyGameData.g_crossSyncTickDict:
-        return
-    tick = GameWorld.GetGameWorld().GetTick()
-    PyGameData.g_crossSyncTickDict[playerID] = tick
-    #GameWorld.DebugLog("标记需要同步跨服玩家战力变更相关数据! tick=%s" % tick, curPlayer.GetPlayerID())
-    return
-
-def SendMergePlayerDataNow(curPlayer):
-    ## 马上同步一次玩家数据到跨服 MergeData_Player
-    GameWorld.DebugLog("SendMergePlayerDataNow")
-    ProcessCrossPlayer(curPlayer, 0)
-    return
-
-def ProcessCrossPlayer(curPlayer, tick):
-    ## 跨服状态的本服玩家处理
-    if not IsNeedProcessCrossPlayer(curPlayer):
-        return
-    
-    playerID = curPlayer.GetPlayerID()
-    # tick 传0时不检查CD,立即同步
-    if tick:
-        if playerID not in PyGameData.g_crossSyncTickDict:
-            return
-        setTick = PyGameData.g_crossSyncTickDict[playerID]
-        if tick - setTick < IpyGameDataPY.GetFuncCfg("CrossSyncPlayerData", 1) * 1000:
-            return
-    PyGameData.g_crossSyncTickDict.pop(playerID, None)
-    GameWorld.DebugLog("开始同步本服变更的属性...", playerID)
-    
-    try:
-        # 这里只做可能引起战力变化所需要同步的数据
-        data = ""
-        data = CommFunc.WriteBYTE(data, MergeData_Player)
-        data = __WriteSyncPlayerAttrData(curPlayer, data) # 玩家属性
-        data = __WriteSyncPlayerDictData(curPlayer, data) # 字典
-        data = __WriteSyncPlayerItems(curPlayer, data)# 物品
-        data = __WriteSyncPlayerSkills(curPlayer, data)# 技能
-        
-        #直接用字节流会报错
-        data = base64.b64encode(data)
-        curPlayer.SendMergePlayerData(data)
-    except BaseException:
-        errorMsg = str(traceback.format_exc())
-        GameWorld.ErrLog('打包跨服变更玩家数据错误 - > %s' % errorMsg, curPlayer.GetPlayerID())
-        if GameWorld.GetGameWorld().GetDebugLevel():
-            raise Exception(errorMsg)
-        
-    return
-
-
-
-def __ReadMainServerSyncPlayerData(curPlayer, pdata, pos):
-    ## 读取子服同步的玩家战力变更相关属性
-    
-    GameWorld.DebugLog("收到子服同步的玩家变更数据:", curPlayer.GetPlayerID())
-    
-    pos = __ReadSyncPlayerAttrData(curPlayer, pdata, pos) # 玩家属性
-    pos = __ReadSyncPlayerDictData(curPlayer, pdata, pos) # 字典
-    pos = __ReadSyncPlayerItems(curPlayer, pdata, pos)  # 物品
-    pos = __ReadSyncPlayerSkills(curPlayer, pdata, pos)# 技能
-    
-    # 强刷一次属性
-    PlayerControl.PlayerControl(curPlayer).ReCalcAllState()
-    return
-
-def __WriteSyncPlayerAttrData(curPlayer, data):
-    ## 写入需要同步的玩家属性
-    
-    playerID = curPlayer.GetPlayerID()
-    if playerID not in PyGameData.g_crossRegPlayerAttrDict:
-        return CommFunc.WriteBYTE(data, 0)
-    attrList = PyGameData.g_crossRegPlayerAttrDict[playerID]
-    
-    if len(attrList) != len(CrossFightPowerAttrList):
-        return CommFunc.WriteBYTE(data, 0)
-        
-    changeAttrList = []
-    for i, attrInfo in enumerate(CrossFightPowerAttrList):
-        befValue = attrList[i]
-        curValue = attrInfo[0](curPlayer)
-        if befValue == curValue:
-            continue
-        changeAttrList.append([i, curValue])
-        attrList[i] = curValue # 更新记录的值
-        
-    if not changeAttrList:
-        return CommFunc.WriteBYTE(data, 0)
-    
-    count = len(changeAttrList)
-    GameWorld.DebugLog("变更的玩家属性个数: %s" % count)
-    data = CommFunc.WriteBYTE(data, count)
-    for index, curValue in changeAttrList:
-        data = CommFunc.WriteBYTE(data, index)
-        data = CommFunc.WriteDWORD(data, curValue)
-        GameWorld.DebugLog("    index=%s,value=%s" % (index, curValue))
-        
-    return data
-
-def __ReadSyncPlayerAttrData(curPlayer, pdata, pos):
-    ## 读取同步的玩家属性
-    pdata = base64.b64decode(pdata)
-    count, pos = CommFunc.ReadBYTE(pdata, pos)
-    GameWorld.DebugLog("变更的玩家属性个数: %s" % count)
-    for _ in range(count):
-        index, pos = CommFunc.ReadBYTE(pdata, pos)
-        value, pos = CommFunc.ReadDWORD(pdata, pos)
-        if index >= len(CrossFightPowerAttrList):
-            break
-        CrossFightPowerAttrList[index][1](curPlayer, value) # 设置更新值
-        GameWorld.DebugLog("    index=%s,value=%s" % (index, value))
-        
-    return pos
-
-def __WriteSyncPlayerDictData(curPlayer, data):
-    ## 写入需要同步的玩家字典
-    playerID = curPlayer.GetPlayerID()
-    if playerID not in PyGameData.g_crossPlayerDictChangeInfo:
-        return CommFunc.WriteWORD(data, 0)
-    changeDict = PyGameData.g_crossPlayerDictChangeInfo.pop(playerID)
-    
-    count = len(changeDict)
-    GameWorld.DebugLog("变更的玩家字典个数: %s" % count)
-    data = CommFunc.WriteWORD(data, count)
-    for keyInfo, value in changeDict.items():
-        key, dType = keyInfo
-        keyLen = len(key)
-        data = CommFunc.WriteBYTE(data, keyLen)
-        data = CommFunc.WriteString(data, keyLen, key)
-        data = CommFunc.WriteDWORD(data, value)
-        data = CommFunc.WriteBYTE(data, dType)
-        GameWorld.DebugLog("    key=%s, value=%s, dType=%s" % (key, value, dType))
-    
-    return data
-
-def __ReadSyncPlayerDictData(curPlayer, pdata, pos):
-    ## 读取同步的玩家字典
-    pdata = base64.b64decode(pdata)
-    count, pos = CommFunc.ReadWORD(pdata, pos)
-    GameWorld.DebugLog("变更的玩家字典个数: %s" % count)
-    for _ in xrange(count):
-        keyLen, pos = CommFunc.ReadBYTE(pdata, pos)
-        key, pos = CommFunc.ReadString(pdata, pos, keyLen)
-        value, pos = CommFunc.ReadDWORD(pdata, pos)
-        dType, pos = CommFunc.ReadBYTE(pdata, pos)
-        PlayerControl.NomalDictSetProperty(curPlayer, key, value, dType)
-        GameWorld.DebugLog("    key=%s, value=%s, dType=%s" % (key, value, dType))
-        
-    return pos
-
-def __WriteSyncPlayerItems(curPlayer, data):
-    ## 写入需要同步的玩家物品,包含删除
-    playerID = curPlayer.GetPlayerID()
-    if playerID not in PyGameData.g_crossPlayerItemsChangeInfo:
-        data = CommFunc.WriteBYTE(data, 0)  # 删除
-        data = CommFunc.WriteBYTE(data, 0)  # 增改
-        return data
-    lastItems = PyGameData.g_crossPlayerItemsChangeInfo[playerID]
-    # 对比数据区分增改和删除
-    nowItems = GetPlayerCrossRegItems(curPlayer)
-    
-    delItems = []
-    addItems = []
-    # --删除物品
-    for indexs in lastItems:
-        if indexs not in nowItems:
-            delItems.append(indexs)
-    
-    data = CommFunc.WriteBYTE(data, len(delItems))  # 删除数量  
-    for indexs in delItems:
-        data = CommFunc.WriteBYTE(data, indexs[0])
-        data = CommFunc.WriteBYTE(data, indexs[1])
-        
-    # --添加修改物品
-    for indexs in nowItems:
-        if indexs not in lastItems:
-            addItems.append(indexs)
-        elif lastItems[indexs] != nowItems[indexs]:
-            addItems.append(indexs)
-            
-    tmpData = ""
-    cnt = 0
-    for indexs in addItems:
-        curPack = curPlayer.GetItemManager().GetPack(indexs[0])
-        curItem = curPack.GetAt(indexs[1])
-        if not curItem or curItem.IsEmpty():
-            continue
-        itemData = base64.b64decode(curItem.GetB64ItemData())
-        tmpData = CommFunc.WriteWORD(tmpData, len(itemData))    # 物品数据长度
-        tmpData = CommFunc.WriteString(tmpData, len(itemData), itemData)
-        cnt += 1
-    
-    data = CommFunc.WriteBYTE(data, cnt)  # 增改数量  
-    data += tmpData
-    
-    # 同步最新物品数据
-    PyGameData.g_crossPlayerItemsChangeInfo[playerID] = nowItems
-    return data
-
-def __ReadSyncPlayerItems(curPlayer, pdata, pos):
-    ## 读取同步的玩家物品
-    pdata = base64.b64decode(pdata)
-    count, pos = CommFunc.ReadBYTE(pdata, pos)
-    GameWorld.DebugLog("删除的玩家物品个数: %s" % count)
-    
-    # 删除物品
-    for _ in xrange(count):
-        packType, pos = CommFunc.ReadBYTE(pdata, pos)
-        itemIndex, pos = CommFunc.ReadBYTE(pdata, pos)
-        curPack = curPlayer.GetItemManager().GetPack(packType)
-        curItem = curPack.GetAt(itemIndex)
-        if not curItem or curItem.IsEmpty():
-            continue
-        curItem.Clear()
-        
-        
-    # 增改物品
-    count, pos = CommFunc.ReadBYTE(pdata, pos)
-    GameWorld.DebugLog("增改的玩家物品个数: %s" % count)
-    
-    for _ in xrange(count):
-        #def ReadString(buf, pos, _len):
-        itemDataLen, pos = CommFunc.ReadWORD(pdata, pos)
-        itemData, pos = CommFunc.ReadString(pdata, pos, itemDataLen)
-        curSingleItem = GameWorld.GetItemFactory().AddItem(base64.b64encode(itemData))
-        if not curSingleItem or curSingleItem.GetItemTypeID() == 0:
-            continue
-        
-        curPack = curPlayer.GetItemManager().GetPack(curSingleItem.GetItemPlaceType())
-        curItem = curPack.GetAt(curSingleItem.GetItemPlaceIndex())
-        curItem.AssignItem(curSingleItem)
-
-    return pos
-
-
-def __WriteSyncPlayerSkills(curPlayer, data):
-    ## 写入需要同步的玩家技能,包含删除
-    playerID = curPlayer.GetPlayerID()
-    if playerID not in PyGameData.g_crossPlayerSkillsChangeInfo:
-        data = CommFunc.WriteBYTE(data, 0)  # 删除
-        data = CommFunc.WriteBYTE(data, 0)  # 添加
-        return data
-    
-    # 对比数据区分添加和删除
-    lastSkills = PyGameData.g_crossPlayerSkillsChangeInfo[playerID]
-    nowSkills = GetPlayerCrossRegSkills(curPlayer)
-    
-    delSkills = []
-    # --删除物品
-    for skillID in lastSkills:
-        if skillID not in nowSkills:
-            delSkills.append(skillID)
-    
-    data = CommFunc.WriteBYTE(data, len(delSkills))  # 删除数量  
-    for skillID in delSkills:
-        data = CommFunc.WriteDWORD(data, skillID)
-        
-    # --添加修改物品
-    addSkills = []
-    for skillID in nowSkills:
-        if skillID not in lastSkills:
-            addSkills.append(skillID)
-            
-    data = CommFunc.WriteBYTE(data, len(addSkills))  # 增加数量  
-    for skillID in addSkills:
-        data = CommFunc.WriteDWORD(data, skillID)
-        
-    
-    # 同步最新技能数据
-    PyGameData.g_crossPlayerSkillsChangeInfo[playerID] = nowSkills
-    return data
-
-def __ReadSyncPlayerSkills(curPlayer, pdata, pos):
-    ## 读取同步的玩家技能
-    skillManager = curPlayer.GetSkillManager()
-    pdata = base64.b64decode(pdata)
-    count, pos = CommFunc.ReadBYTE(pdata, pos)
-    GameWorld.DebugLog("删除的玩家技能个数: %s" % count)
-    
-    # 删除技能
-    for _ in xrange(count):
-        skillID, pos = CommFunc.ReadDWORD(pdata, pos)
-        skillManager.DeleteSkillBySkillID(skillID, False)
-
-    count, pos = CommFunc.ReadBYTE(pdata, pos)
-    GameWorld.DebugLog("增加的玩家技能个数: %s" % count)
-    
-    # 添加技能
-    for _ in xrange(count):
-        skillID, pos = CommFunc.ReadDWORD(pdata, pos)
-        skillManager.LearnSkillByID(skillID, False)
-    
-    return pos
-
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/CrossRealmPlayer.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/CrossRealmPlayer.py
deleted file mode 100644
index 5bcb5c8..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/CrossRealmPlayer.py
+++ /dev/null
@@ -1,232 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-##@package Player.CrossRealmPlayer
-#
-# @todo:跨服玩家
-# @author hxp
-# @date 2018-12-21
-# @version 1.0
-#
-# 详细描述: 跨服玩家
-#
-#-------------------------------------------------------------------------------
-#"""Version = 2018-12-21 18:00"""
-#-------------------------------------------------------------------------------
-import GameWorld
-import PyGameData
-import ReadChConfig
-import PlayerControl
-import IpyGameDataPY
-import IPY_GameWorld
-import ChPyNetSendPack
-import NetPackCommon
-import ShareDefine
-import ChConfig
-import FBLogic
-
-def GetPlayerCrossPropDataShort(curPlayer):
-    ## 获取跨服玩家属性简短信息
-    PropData = {}
-    PropData["AccID"] = curPlayer.GetAccID()
-    PropData["LV"] = curPlayer.GetLV()
-    PropData["RealmLV"] = curPlayer.GetOfficialRank()
-    PropData["Job"] = curPlayer.GetJob()
-    PropData["Name"] = GetCrossPlayerName(curPlayer)
-    PropData["FightPower"] = PlayerControl.GetFightPower(curPlayer)
-    return PropData
-
-# 获取玩家跨服服务器上的名字
-def GetCrossPlayerName(curPlayer):
-    # 通过游戏账号中的平台标志获取名称,目前为spid
-    playerName = curPlayer.GetPlayerName()
-    
-    opName = ReadChConfig.GetPyMongoConfig("Merge", "OpName_%s_%s" % (GameWorld.GetPlayerPlatform(curPlayer), 
-                                           GameWorld.GetPlayerServerSID(curPlayer)))
-    
-    if not opName:
-        return playerName
-    
-    return opName.decode('gbk').encode(GameWorld.GetCharacterEncoding()) + playerName
-
-def GetCrossPlayerZoneID(curPlayer, mapID):
-    ## 获取玩家跨服功能所属分区
-    serverGroupID = PlayerControl.GetPlayerServerGroupID(curPlayer)
-    zoneIpyData = GetCrossZoneIpyDataByServerGroupID(mapID, serverGroupID)
-    if not zoneIpyData:
-        return 0
-    return zoneIpyData.GetZoneID()
-
-def GetCrossZoneIpyDataByServerGroupID(mapID, serverGroupID):
-    ## 获取跨服分区
-    zoneTypeName = ChConfig.Def_CrossZoneTypeName.get(mapID, "CrossZoneComm")
-    crossZoneName = "" #GameWorld.GetCrossZoneName()
-    ipyDataList = IpyGameDataPY.GetIpyGameDataByCondition(zoneTypeName, {"CrossZoneName":crossZoneName}, True)
-    if not ipyDataList:
-        return
-    for ipyData in ipyDataList:
-        serverGroupIDList = ipyData.GetServerGroupIDList()
-        for serverGroupIDInfo in serverGroupIDList:
-            if (isinstance(serverGroupIDInfo, tuple) and serverGroupIDInfo[0] <= serverGroupID <= serverGroupIDInfo[1]) \
-                or (isinstance(serverGroupIDInfo, int) and serverGroupIDInfo == serverGroupID):
-                return ipyData
-    GameWorld.ErrLog("没有找到跨服玩法对应分区! mapID=%s, serverGroupID=%s, zoneTypeName=%s" % (mapID, serverGroupID, zoneTypeName))
-    return
-
-def GetServerCrossZoneMapIpyData(zoneID, mapID):
-    ## 获取本服对应跨服玩法分区地图信息 - 仅适用于固定地图及虚拟分线的跨服玩法
-    if mapID not in ChConfig.Def_CrossZoneMapTableName:
-        return
-    tableName = ChConfig.Def_CrossZoneMapTableName[mapID]
-    return IpyGameDataPY.GetIpyGameDataByCondition(tableName, {"ZoneID":zoneID})
-
-def IsCrossServerOpen():
-    ## 跨服服务器是否开放中
-    return GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_CrossServerOpen)
-
-def SetCrossPlayerAttrValue(curPlayer, setDict, isDelay=True):
-    ''' 批量设置玩家属性值
-        @param setDict: 设置属性字典 {attrName:attrValue, ...}
-        @param isDelay: 是否延迟同步,比如OnDay更新的数值,可能多个玩家同时更新多个属性值,所以需要设置延迟统一同步,其他具体根据功能需要选择是否延迟
-    '''
-    if not setDict or not PlayerControl.GetCrossMapID(curPlayer):
-        return
-    playerID = curPlayer.GetPlayerID()
-    setType = "PlayerAttr"
-    msgList = str([playerID, setType, setDict, isDelay])
-    GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(0, 0, 0, "SetCrossPlayerAttrValue", msgList, len(msgList))
-    GameWorld.DebugLog("更新跨服玩家属性: isDelay=%s,%s" % (isDelay, setDict), playerID)
-    return
-
-def SetCrossPlayerNomalDict(curPlayer, setDict, isDelay=True):
-    ''' 批量设置玩家字典值
-        @param setDict: 设置字典, 无 dictType 信息时默认类型0 {dictKey:dictValue, dictKey:[dictValue, dictType], ...}
-        @param isDelay: 是否延迟同步,比如OnDay更新的数值,可能多个玩家同时更新多个属性值,所以需要设置延迟统一同步,其他具体根据功能需要选择是否延迟
-    '''
-    if not setDict or not PlayerControl.GetCrossMapID(curPlayer):
-        return
-    playerID = curPlayer.GetPlayerID()
-    setType = "PlayerDict"
-    msgList = str([playerID, setType, setDict, isDelay])
-    GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(0, 0, 0, "SetCrossPlayerAttrValue", msgList, len(msgList))
-    GameWorld.DebugLog("更新跨服玩家字典: isDelay=%s,%s" % (isDelay, setDict), playerID)
-    return
-
-def ClientServerMsg_SetPlayerAttrValue(curPlayer, playerSetInfoList):
-    ## 收到子服同步的设置跨服玩家属性值
-    playerID = curPlayer.GetPlayerID()
-    GameWorld.DebugLog("收到子服同步的设置跨服玩家属性值: %s" % playerSetInfoList, playerID)
-    for setType, setDict in playerSetInfoList:
-        if setType == "PlayerDict":
-            for dictKey, valeInfo in setDict.items():
-                if isinstance(valeInfo, int):
-                    dictValue, dictType = valeInfo, 0
-                else:                    
-                    dictValue, dictType = valeInfo
-                PlayerControl.NomalDictSetProperty(curPlayer, dictKey, dictValue, dictType)
-                GameWorld.DebugLog("    NomalDictSetProperty dictKey=%s, dictValue=%s, dictType=%s" % (dictKey, dictValue, dictType), playerID)
-        else:
-            for attrName, attrValue in setDict.items():
-                if hasattr(curPlayer, attrName):
-                    getattr(curPlayer, attrName)(attrValue)
-                    GameWorld.DebugLog("    curPlayer.%s(%s)" % (attrName, attrValue))
-                elif hasattr(PlayerControl, attrName):
-                    getattr(PlayerControl, attrName)(curPlayer, attrValue)
-                    GameWorld.DebugLog("    PlayerControl.%s(curPlayer, %s)" % (attrName, attrValue), playerID)
-    return
-
-#// C1 04 主动退出跨服 #tagCMExitCrossRealm
-#
-#struct    tagCMExitCrossRealm
-#{
-#    tagHead        Head;
-#};
-def OnExitCrossRealm(index, curPackData, tick):
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    
-    if not GameWorld.IsCrossServer():
-        return
-    
-    GameWorld.Log("玩家主动退出跨服", curPlayer.GetPlayerID())
-    
-    FBLogic.DoPlayerLeaveFB(curPlayer, tick)
-    
-    PlayerExitCrossServer(curPlayer)
-    return
-
-def PlayerExitCrossServer(curPlayer):
-    ## 玩家退出跨服服务器
-    
-    # 通知子服玩家退出跨服服务器
-    playerID = curPlayer.GetPlayerID()
-    serverGroupID = PlayerControl.GetPlayerServerGroupID(curPlayer)
-    GameWorld.SendMsgToClientServer(ShareDefine.CrossServerMsg_ExitCrossServer, playerID, [serverGroupID])
-    
-    # 设置非跨服状态,踢下线
-    PlayerControl.SetCrossMapID(curPlayer, 0)
-    curPlayer.Kick(IPY_GameWorld.disMapServerClose)
-    GameWorld.Log("PlayerExitCrossServer...", curPlayer.GetPlayerID())
-    return
-
-def DoEnterCrossRealm(curPlayer):
-    ## 玩家进入跨服处理,本服的逻辑处理
-    PlayerControl.SetPlayerSightLevel(curPlayer, curPlayer.GetID())
-    return
-
-def DoExitCrossRealm(curPlayer):
-    ## 玩家退出跨服处理,本服的逻辑处理
-    GameWorld.Log("DoExitCrossRealm...", curPlayer.GetPlayerID())
-    PlayerControl.SetPlayerSightLevel(curPlayer, 0)
-    if PlayerControl.GetCrossMapID(curPlayer):
-        PlayerControl.SetCrossMapID(curPlayer, 0)
-    return
-
-def GetPlayerCrossActInfo(curPlayer, actName):
-    ## 获取跨服玩家对应的跨服活动信息
-    actInfoDict = PyGameData.g_crossActInfoDict.get(actName, {})
-    if not actInfoDict:
-        return {}
-    playerServerID = GameWorld.GetPlayerServerID(curPlayer)
-    for actInfo in actInfoDict.values():
-        if not actInfo.get(ShareDefine.ActKey_State, 0):
-            continue
-        if ShareDefine.ActKey_ServerIDRangeList not in actInfo:
-            continue
-        serverIDRangeList = actInfo[ShareDefine.ActKey_ServerIDRangeList]
-        if not serverIDRangeList:
-            # 全服开启
-            return actInfo
-        for serverIDA, serverIDB in serverIDRangeList:
-            if serverIDA <= playerServerID <= serverIDB:
-                return actInfo
-    return {}
-
-def GetCrossActInfoByZoneID(actName, zoneID):
-    ## 根据分区获取跨服对应的跨服活动信息
-    actInfoDict = PyGameData.g_crossActInfoDict.get(actName, {})
-    if not actInfoDict:
-        return {}
-    for actInfo in actInfoDict.values():
-        if not actInfo.get(ShareDefine.ActKey_State, 0):
-            continue
-        ipyDataDict = actInfo.get(ShareDefine.ActKey_IpyDataInfo, {})
-        if zoneID == ipyDataDict.get("ZoneID", 0):
-            return actInfo
-    return {}
-
-def NotifyCrossActEnd(curPlayer, actName):
-    '''通知跨服运营活动结束
-                    防止跨服服务器与子服时间不一致导致可能出现活动实际已关闭
-                    但是前端根据本服服务器时间判断还未关闭,可能引起玩家误以为活动未关闭而引发的一系列问题
-                    前端跨服活动显隐规则:
-                    显示:根据通知的活动包 且 时间>=活动开始日期 才显示
-                    关闭:收到后端通知的活动结束包 或 时间>=活动结束日期 则直接关闭活动界面
-    '''
-    
-    clientPack = ChPyNetSendPack.tagGCCrossActEnd()
-    clientPack.ActName = actName
-    clientPack.ActNameLen = len(clientPack.ActName)
-    NetPackCommon.SendFakePack(curPlayer, clientPack)
-    return
-
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/GMTExec/CrossPK.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/GMTExec/CrossPK.py
deleted file mode 100644
index 96a7033..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/GMTExec/CrossPK.py
+++ /dev/null
@@ -1,53 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-##@package Script.Player.GMTExec.CrossPK
-#
-# @todo:设置跨服PK玩家数据
-# @author hxp
-# @date 2023-02-16
-# @version 1.0
-#
-# 详细描述: 设置跨服PK玩家数据
-#
-#-------------------------------------------------------------------------------
-#"""Version = 2023-02-16 18:30"""
-#-------------------------------------------------------------------------------
-
-def runMyTest(exec_locals):
-    ''' 运行命令函数
-    @param exec_locals: GY_Query_GMTExecfile 模块中的 DoLogic 函数 locals()
-    
-    import 其他模块需要写在此函数里,不然无法引用到
-    '''
-    import GameWorld
-    import PlayerCrossRealmPK
-    
-    orderId = exec_locals["orderId"]
-    cmdInfo = exec_locals["cmdInfo"]
-    curPlayer = exec_locals["curPlayer"]
-    resultDict = exec_locals["resultDict"] # 建议都进行更新结果字典记录详细处理信息,GY_Query_GMTExecfile 模块会统一写入流向
-    
-    # 以下为详细处理逻辑
-    #  ============================ 配置信息 ============================
-    '''设置后需要检查数据是否正确同步到跨服服务器
-    1. 后台返回如果有关键字 "errorMsg":"OK",代表本服设置成功;
-                    如果 errorMsg 是其他信息,代表本服就已经设置失败了,比如无赛季信息或赛季已结束是无法执行命令的;
-    2. 后台成功代表本服数据已成功设置,需要再检查是否成功同步跨服服务器;直接看榜单,如果已经更新证明同步成功;
-    3. 如果没看到榜单更新,检查跨服服务器日志,搜索 GMSetCrossPK, 看是否有相关错误日志;
-    4. 也可以直接看跨服流向 CrossPK_GMSet_xxx.txt,看是否有相关设置流向记录,有的话代表成功;
-          注:如果跨服数据没有成功同步,则需要后台重复执行命令直到成功
-    '''
-    danLV = 20 # 段位等级,需与所设置的积分所属段位匹配,参考 K.跨服竞技场段位表
-    pkScore = 32000 # 积分
-    cWinCount = 50 # 连胜
-    #  =================================================================
-    PlayerCrossRealmPK.GMSetPlayerCrossPKData(curPlayer, danLV, pkScore, cWinCount, resultDict)
-    GameWorld.Log("This is MameServer GMT_Execfile run %s. orderId=%s" % (cmdInfo, orderId), curPlayer.GetPlayerID())
-    return
-
-exec_locals = locals()
-if exec_locals.get("cmdInfo"):
-    runMyTest(exec_locals)
-    
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PetControl.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PetControl.py
deleted file mode 100644
index 818c5a2..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PetControl.py
+++ /dev/null
@@ -1,640 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-##@package Player.PetControl
-#
-# @todo:宠物控制器
-# @author hxp
-# @date 2016-4-29
-# @version 1.2
-#
-# @change: "2016-06-15 12:00" hxp 增加宠物守护状态
-# @change: "2016-07-02 16:30" hxp 宠物继承主人移动速度
-#
-# 详细描述: 宠物控制器
-#
-#-------------------------------------------------------------------------------
-#"""Version = 2016-07-02 16:30"""
-#-------------------------------------------------------------------------------
-#宠物C++接口:
-#curPlayer.GetPetMgr -> IPY_RolePetMgr; 
-#IPY_RolePetMgr.PetList_Find\GetFightPet\PetList_At -> IPY_RolePet;
-#IPY_RolePet.GetRolePet -> tagIPY_RolePet(结构体); 
-#IPY_RolePet.GetPetData -> IPY_Pet;
-#
-#
-#---------------------------------------------------------------------
-import IPY_GameWorld
-import ChConfig
-import GameWorld
-import BuffSkill
-import SkillShell
-import PlayerPet
-import PlayerControl
-import NPCCommon
-import SkillCommon
-import GameMap
-import OperControlManager
-import ShareDefine
-
-import random
-import copy
-import math
-import GameObj
-import AICommon
-import BaseAttack
-import PassiveBuffEffMng
-import ChNetSendPack
-import IpyGameDataPY
-import AttackCommon
-#---------------------------------------------------------------------
-
-DefPetRebornHPRate = 100  # 宠物死亡复活血量百分比
-
-#---------------------------------------------------------------------
-## 检查宠物是否出战中
-#  @param curPlayer 玩家对象
-#  @param curPetID 宠物ID
-#  @return True or False 是否出战中
-#  @remarks 检查宠物是否出战中
-def CheckPetIsFight(curPlayer, curPetID):
-    petMgr = curPlayer.GetPetMgr()
-    #出战的宠物对象
-    fightPetObj = petMgr.GetFightPet()  
-    
-    if fightPetObj == None:
-        return False
-    
-    if fightPetObj.GetRolePet().PetID == curPetID:
-        return True
-    
-    return False
-
-
-
-
-# 宠物跟随人物同时攻击
-def PetFight(curPlayer, tick):
-    
-    rolePet = curPlayer.GetPetMgr().GetFightPet()
-    #无出战宠物
-    if rolePet == None:
-        return
-    rolePetControl = NPCCommon.NPCControl(rolePet)
-    
-    useSkillTagID = curPlayer.GetUseSkillTagID()
-    useSkillTagType = curPlayer.GetUseSkillTagType()
-    
-    curTag = GameWorld.GetObj(useSkillTagID, useSkillTagType)
-    if not curTag or GameObj.GetHP(curTag) <= 0:
-        # 没有主目标就从仇恨中找
-        for i in range(curPlayer.GetAngryNPCCount()):
-            curTag = curPlayer.GetAngryNPCByIndex(i)
-            if not curTag or GameObj.GetHP(curTag) <= 0:
-                continue
-            
-        # 还没有就从视野中查找
-        if not curTag or GameObj.GetHP(curTag) <= 0:
-            seePlayerCount = rolePet.GetInSightObjCount()
-            for i in range(0, seePlayerCount):
-                seeObj = rolePet.GetInSightObjByIndex(i)
-                if seeObj == None:
-                    continue
-                seeObjID = seeObj.GetID()
-                seeObjType = seeObj.GetGameObjType()
-                # 只允许主动攻击NPC,且目标NPC是主动怪
-                if seeObjType != IPY_GameWorld.gotNPC:
-                    continue
-                seeObjDetail = GameWorld.GetObj(seeObjID, seeObjType)
-                if not seeObjDetail:
-                    continue
-                if seeObjDetail.GetAtkType() == 1:
-                    # 1为非主动怪
-                    continue
-                if not AttackCommon.CheckCanAttackTag(rolePet, seeObjDetail):
-                    continue
-                relation = BaseAttack.GetTagRelation(rolePet, seeObjDetail, None, tick)[0]
-                if relation != ChConfig.Type_Relation_Enemy:
-                    continue
-                curTag = seeObjDetail
-                break
-                
-    if not curTag or GameObj.GetHP(curTag) <= 0:
-        return
-    
-    #tagDist = GameWorld.GetDist(rolePet.GetPosX(), rolePet.GetPosY(), curTag.GetPosX(), curTag.GetPosY())
-    tagDist = 0
-    #---优先释放技能---
-    if AICommon.DoAutoUseSkill(rolePet, curTag, tagDist, tick):
-        return
-    
-    #---释放普通攻击--- 边走边攻击纠正一次位置
-    #if tagDist > rolePet.GetAtkDist():
-    #    rolePetControl.MoveToObj_Detel(curTag)
-    
-    #普通攻击
-    BaseAttack.Attack(rolePet, curTag, None, tick)
-    return
-
-
-#---------------------------------------------------------------------
-##出战宠物跟随移动
-# @param curPlayer 玩家实例
-# @param destPosX 移动目标X点
-# @param destPosY 移动目标Y点
-# @return 返回值无意义
-# @remarks 出战宠物跟随移动
-def FightPetFollowMove(curPlayer, destPosX, destPosY):
-    #主人在战斗中, 宠物不跟随移动
-
-    fightPet = curPlayer.GetPetMgr().GetFightPet()
-    #无出战宠物
-    if fightPet == None:
-        return
-
-    petControl = NPCCommon.NPCControl(fightPet)
-    movePosX, movePosY = petControl.GetMoveNearPos(destPosX, destPosY, 2)
-    # 执行一次重置位置,避免快速发包导致无法移动
-    fightPet.ChangePos(movePosX, movePosY)
-    
-    #movePosX, movePosY = petControl.GetMoveNearPos(destPosX, destPosY, 1)
-    PetMove(fightPet, movePosX, movePosY)
-    return
-
-
-def PetMove(fightPet, posX, posY):
-    
-    sendPack = ChNetSendPack.tagObjMove()
-    
-    sendPack.Clear()
-    sendPack.ObjID = fightPet.GetID()
-    sendPack.ObjType = IPY_GameWorld.gotNPC
-    sendPack.MoveType = IPY_GameWorld.mtNormal
-    sendPack.DestPosX = posX
-    sendPack.DestPosY = posY
-    sendPack.Speed = fightPet.GetSpeed()
-    sendPack.StartPosX = fightPet.GetPosX()
-    sendPack.StartPosY = fightPet.GetPosY()
-    
-    fightPet.NotifyAll(sendPack.GetBuffer(), sendPack.GetLength())
-    return
-#---------------------------------------------------------------------
-##清除出战宠物仇恨.
-# @param curPlayer 玩家实例
-# @return 返回值无意义
-# @remarks 清除出战宠物仇恨
-def ClearFightPetAngry(curPlayer):
-    fightPet = curPlayer.GetPetMgr().GetFightPet()
-    #无出战宠物
-    if fightPet == None:
-        return
-
-    petControl = NPCCommon.NPCControl(fightPet)
-    petControl.ClearNPCAngry()
-    return
-#---------------------------------------------------------------------
-
-##获得宠物的拥有者
-# @param curPet 宠物
-# @return 返回值, 宠物拥有者(实例) or None
-# @remarks 获得宠物的拥有者
-def GetPetOwner(curPet):
-    if curPet == None:
-        return
-    
-    curPlayerID = curPet.GetRolePet().PlayerID  # 宠物主人ID
-    
-    if curPlayerID <= 0:
-        return
-    
-    curObj = GameWorld.GetObj(curPlayerID, IPY_GameWorld.gotPlayer)
-    
-    #人物需要判断是否为空
-    if curObj != None and curObj.IsEmpty():
-        return
-    
-    return curObj
-#---------------------------------------------------------------------
-##是否是宠物
-# @param curObj 对象(NPC、召唤兽、宠物、玩家等)
-# @return 是否宠物
-# @remarks 通过传入的对象判断是否是宠物
-def IsPet(curObj):
-    curObjType = curObj.GetGameObjType()
-    
-    if curObjType != IPY_GameWorld.gotNPC:
-        return False
-    
-    npcObjType = curObj.GetGameNPCObjType()
-    
-    if npcObjType == IPY_GameWorld.gnotPet:  # 宠物      
-        return True
-    
-    return False
-#---------------------------------------------------------------------    
-##清空宠物身上所有buff
-# @param curPet 宠物对象
-# @return None
-# @remarks 清空宠物身上所有buff
-def ClearPetBuff(curPet):
-    buffRefreshList = NPCCommon.GetNPCBuffRefreshList(curPet, True)
-    
-    for buffState, canPileup in buffRefreshList:
-        buffState.Clear()
-    
-    return
-#---------------------------------------------------------------------    
-##召唤宠物
-# @param curPet 宠物对象
-# @param curPosX 宠物出身点位置
-# @param curPosY 宠物出身点位置
-# @return None
-# @remarks 召唤宠物,初始化宠物所有属性(C++处理)
-def SummonPet(curPet, curPosX, curPosY):
-    #出现(出战逻辑在C++, 将清空宠物的相关信息)
-    curPet.Summon(curPosX, curPosY)
-    #记录该宠物被召回
-    curPet.SetIsBattle(True)
-    #初始化宠物
-    InitRolePet(curPet)
-    PassiveBuffEffMng.GetPassiveEffManager().RegistPassiveEff(curPet)
-    return
-#---------------------------------------------------------------------
-##初始化宠物属性
-# @param rolePet 宠物实例
-# @param canSyncClient 是否通知客户端
-# @return 返回值无意义
-# @remarks 初始化宠物属性
-def InitRolePet(rolePet, canSyncClient=True):
-    #---初始化时钟---
-    NPCCommon.InitNPC(rolePet)
-    
-    #---初始化仇恨列表---
-    npcAngry = rolePet.GetNPCAngry()
-    if npcAngry.GetAngryCount() == 0:
-        npcAngry.Init(ChConfig.Def_Pet_Angry_Count)
-    else:
-        npcAngry.Clear()
-
-    #---初始化宠物属性---
-    petControl = NPCCommon.NPCControl(rolePet)
-    petControl.RefreshNPCState(canSyncClient)
-
-    #加一个防御措施, 如果宠物血为0, 不可召唤出来, 默认为宠物召回时候的血量
-    if GameObj.GetHP(rolePet) <= 0:
-        PetDead_ReStoreHP(rolePet, GameObj.GetMaxHP(rolePet))
-        GameWorld.ErrLog('宠物重生血量为0, PetID = %s' % (rolePet.GetRolePet().PetID))
-
-    return
-#---------------------------------------------------------------------
-##召回出战的宠物
-# @param curPlayer 玩家实例
-# @return 布尔值
-# @remarks 召回出战的宠物
-def ReCallFightPet(curPlayer):
-    rolePetMgr = curPlayer.GetPetMgr()
-    #获得战斗的宠物
-    fightPet = rolePetMgr.GetFightPet()
-    
-    if fightPet == None:
-        return False
-    
-    #清空宠物身上附加的buff
-    ClearPetBuff(fightPet)
-    #记录该宠物被召回
-    fightPet.SetIsBattle(False)
-    #此死亡接口(C++将重置所有战斗属性, 要在刷一次)
-    NPCCommon.SetDeadEx(fightPet)
-    #刷新宠物属性
-    petControl = NPCCommon.NPCControl(fightPet)
-    petControl.RefreshNPCState(canSyncClient=True)
-    
-    #宠物数据物品状态变更
-    petItemIndex = PlayerPet.GetPetObjItemIndex(fightPet)
-    petItem = PlayerPet.GetPetDataItemByIndex(curPlayer, petItemIndex)
-    if petItem:
-        petItem.SetUserAttr(ShareDefine.Def_IudetPet_State, ShareDefine.Def_PetState_Null)
-    
-    petID = fightPet.GetRolePet().PetID
-    npcID = fightPet.GetRolePet().NPCID
-    rolePetMgr.PetList_SetFree(petID) # 永恒召回后默认放生, 最多只存在一个出战宠物实例
-    GameWorld.DebugLog("随从召回后默认放生, petID=%s, npcID=%s" % (petID, npcID))
-    return True
-#---------------------------------------------------------------------
-## 设置宠物死亡
-#  @param curPet 宠物对象
-#  @return None
-#  @remarks 设置宠物死亡
-def SetPetDead(curPet):
-    #---执行死亡惩罚逻辑---
-    
-    #宠物主人
-    curPetOwner = GetPetOwner(curPet)
-    if not curPetOwner:
-        return
-    ReCallFightPet(curPetOwner)
-    return
-
-#---------------------------------------------------------------------
-##宠物死亡恢复血量
-# @param index 玩家索引
-# @param tick 时间戳
-# @return 返回值无意义
-# @remarks 宠物死亡恢复血量
-def PetDead_ReStoreHP(curPet, maxHP):
-    #设置宠物当前血量为其上限的30%
-    SetPetHP(curPet, int(maxHP * DefPetRebornHPRate / 100))
-    return
-#---------------------------------------------------------------------
-
-#---------------------------------------------------------------------
-##设置宠物HP
-# @param rolePet 玩家宠物
-# @param 值
-# @param canSyncClient是否通知客户端
-# @return 返回值无意义
-# @remarks 设置宠物HP
-def SetPetHP(rolePet, value, canSyncClient=True):
-    GameObj.SetHP(rolePet, value, canSyncClient)
-    
-    if not canSyncClient:
-        return
-    
-    #rolePet.Sync_RefreshProp(IPY_GameWorld.PetInfoRefresh_HP, value, True)
-    return
-#---------------------------------------------------------------------
-##增加宠物HP
-# @param rolePet 玩家宠物
-# @param 值
-# @return 返回值无意义
-# @remarks 加宠物HP
-def AddPetHP(rolePet, value):
-    remainValue = min(GameObj.GetHP(rolePet) + value, GameObj.GetMaxHP(rolePet))
-    SetPetHP(rolePet, remainValue)
-    return
-
-#---------------------------------------------------------------------
-##刷新宠物的属性
-# @param rolePet 玩家宠物
-# @param canSyncClient 是否通知客户端(默认为True)
-# @return 返回值无意义
-# @remarks 刷新宠物的属性
-def RefurbishPetAttr(rolePet, canSyncClient=True):
-    curPlayer = GetPetOwner(rolePet)
-    if not curPlayer:
-        return
-    
-    petDataItem = PlayerPet.GetPetDataItem(curPlayer, rolePet)
-    if not petDataItem:
-        return
-    
-    # 变更需要同步的信息配置, 客户端取宠物信息全部以宠物物品数据为准
-    syncList = [
-                [lambda petObj:petObj.GetMaxAtk(), IPY_GameWorld.PetInfoRefresh_PhysicAtk], #攻击
-                #[lambda petObj:petObj.GetQualityLV(), IPY_GameWorld.PetInfoRefresh_QualityLV], #品质
-                ]
-    beforeValueList = []
-    for syncInfo in syncList:
-        beforeValueList.append(syncInfo[0](rolePet))
-    
-    #添加Buff到宠物身上
-    #AddPlayerPetSkillBuff(rolePet)
-    
-    #计算Buff对基础属性的影响
-    #SkillShell.CalcBuffer_NPCBaseEffect(rolePet)
-    
-    #宠物不可被攻击, 命中与攻速直接继承主人攻击属性,攻击取等级阶级加成
-    #rolePet.SetMinAtk(PlayerControl.GetPetMinAtk(curPlayer))
-    #rolePet.SetMaxAtk(PlayerControl.GetPetMaxAtk(curPlayer))
-    #rolePet.SetSkillAtkRate(PlayerControl.GetPetSkillAtkRate(curPlayer))
-    GameObj.SetPetDamPer(rolePet, GameObj.GetPetDamPer(curPlayer))
-    #rolePet.SetMAtkMin(curPlayer.GetMAtkMin())
-    #rolePet.SetMAtkMax(curPlayer.GetMAtkMax())
-    rolePet.SetHit(curPlayer.GetHit())
-    rolePet.SetSpeed(curPlayer.GetSpeed())
-    
-    allAttrList = [{} for i in range(4)]
-    #计算技能对战斗属性的影响
-    PlayerPet.CalcSkill_PetBattleEffect(curPlayer, rolePet, allAttrList)
-    #计算Buff对战斗属性的影响
-    PlayerPet.CalcBuffer_PetBattleEffect(rolePet, allAttrList)
-    
-    GameWorld.DebugLog("RefurbishPetAttr ID=%s,npcID=%s,atk=%s,hit=%s,skillAtkRate=%s" 
-                       % (rolePet.GetID(), rolePet.GetNPCID(), rolePet.GetMaxAtk(), rolePet.GetHit(), rolePet.GetSkillAtkRate()))
-    
-    #是否需要通知客户端属性刷新
-    if not canSyncClient:
-        return
-    
-    #===========================================================================
-    # for i, syncInfo in enumerate(syncList):
-    #    nowValue = syncInfo[0](rolePet)
-    #    if beforeValueList[i] != nowValue:
-    #        rolePet.Sync_RefreshProp(syncInfo[1], nowValue, True)
-    #        #GameWorld.DebugLog("Sync_RefreshProp i=%s,befValue=%s,nowValue=%s,type=%s" % (i, beforeValueList[i], nowValue, syncInfo[1]))
-    #===========================================================================
-    return
-
-#---------------------------------------------------------------------
-##添加宠物技能Buff
-# @param rolePet 宠物实例
-# @return 返回值无意义
-# @remarks 添加宠物技能Buff
-#===============================================================================
-# def AddPlayerPetSkillBuff(rolePet):
-#    tick = GameWorld.GetGameWorld().GetTick()
-# 
-#    #---先清掉---
-#    passiveBuffManager = rolePet.GetPassiveBuf()
-#    passiveBuffManager.Clear()
-#    
-#    #---在加上---
-#    rolePetSkillManager = rolePet.GetSkillManager()
-#    
-#    for i in range(0, rolePetSkillManager.GetSkillCount()):
-#        learnSkill = rolePetSkillManager.GetSkillByIndex(i)
-#        #只添加被动技能
-#        if not SkillCommon.isPassiveBuffSkill(learnSkill):
-#            continue
-#        
-#        #加上buff不刷新状态
-#        BuffSkill.AddBuffNoRefreshState(rolePet, IPY_GameWorld.btPassiveBuf, learnSkill, tick)
-#    
-#    return
-#===============================================================================
-#---------------------------------------------------------------------
-def DoLogic_PlayerPetLearnSkillList(rolePet, learnSkillList):
-    #GameWorld.DebugLog("DoLogic_PlayerPetLearnSkillList----%s"%learnSkillList)
-    gameData = GameWorld.GetGameData()
-    
-    rolePetSkillManager = rolePet.GetSkillManager()
-    for leSkillID in learnSkillList:
-        learnSkillData = gameData.GetSkillBySkillID(leSkillID)
-        if not learnSkillData:
-            GameWorld.ErrLog('PlayerPetLearnSkillList LeanrSkillID = %s, noFindInTable' % leSkillID)
-            return
-        rolePetSkillManager.LearnSkillByID(leSkillID)
-        
-    PassiveBuffEffMng.GetPassiveEffManager().RegistPassiveEff(rolePet)
-    #rolePet.Sync_PetInfo()
-    #rolePet.Sync_SkillList()     
-    return
-
-#---------------------------------------------------------------------
-##检查当前指定宠物是否可出战
-# @param curPlayer 玩家实例
-# @param curPetObj 指定宠物实例
-# @return BOOL 是否可出战
-# @remarks 检查当前指定宠物是否可出战
-def CheckPetCanFight(curPlayer, curPetObj):
-    if not GetMapCanOutPet(curPlayer):
-        #Pet_liubo_314885 此地图禁止宠物
-        #PlayerControl.NotifyCode(curPlayer, "Pet_liubo_314885")
-        return False
-    
-    petData = curPetObj.GetPetData()
-    
-    #防沉迷
-    if curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_Wallow_LV) > ChConfig.Def_GameWallow_LV_First:
-        PlayerControl.NotifyCode(curPlayer, "AvoidSink09")
-        return False
-    
-    if GameObj.GetHP(curPlayer) <= 0:
-        #死亡状态无法出战宠物
-        return False
-    
-#    if curPlayer.GetLV() < petData.GetBringLV():
-#        #Pet_hgg_442426 对不起,您尚未到达该宠物的携带等级.
-#        PlayerControl.NotifyCode(curPlayer, "Pet_hgg_442426")
-#        return False
-#    
-#    if curPetObj.GetLV() - curPlayer.GetLV() > ChConfig.Def_PetRoleGapLVMax:
-#        #Pet_liubo_570355 对不起,您不能出战超过人物5级的宠物!
-#        PlayerControl.NotifyCode(curPlayer, "Pet_liubo_570355", [ChConfig.Def_PetRoleGapLVMax])
-#        return False
-    
-    #---是否已有宠物出战---
-    #fightPetObj = curPlayer.GetPetMgr().GetFightPet()  # 出战的宠物对象
-    
-    #if fightPetObj != None:
-    #    #Pet_hgg_892377 对不起,您只能同时出战一只宠物,请先召回出战的宠物!
-    #    PlayerControl.NotifyCode(curPlayer, "Pet_hgg_892377")
-    #    return False
-    
-    #GameWorld.Log('宠物血量:%s,宠物ID:%s'%(curPetStruct.HP,curPetStruct.PetID))
-    return True
-#---------------------------------------------------------------------
-
-#---------------------------------------------------------------------
-##玩家离开服务器通知宠物信息
-# @param curPlayer 玩家实例
-# @param tick 时间戳
-# @return 返回值无意义
-# @remarks 玩家离开服务器通知宠物信息
-def DoLogic_PetInfo_OnLeaveServer(curPlayer, tick):
-    return
-
-#---------------------------------------------------------------------
-##玩家登陆通知宠物信息
-# @param curPlayer 玩家实例
-# @param tick 时间戳
-# @return 返回值无意义
-# @remarks 玩家登陆通知宠物信息
-def DoLogic_PetInfo_OnLogin(curPlayer, tick):
-   
-    petMgr = curPlayer.GetPetMgr()
-    if GameWorld.IsCrossServer():
-        ''' 0435宠物出现包同步的ID是根据宠物的列表位置来的,比如在第2位发的就是2,而地图的可能是1,会导致ID不一致
-                            所以跨服服务器登录时先清除出战宠物列表,确保登录地图成功后都是从1开始的即可
-        '''
-        petList = []
-        for index in range(0, petMgr.PetList_Cnt()):
-            rolePet = petMgr.PetList_At(index)
-            petList.append(rolePet)
-        for rolePet in petList:
-            petMgr.PetList_SetFree(rolePet.GetRolePet().PetID)
-    else:
-        for index in range(0, petMgr.PetList_Cnt()):
-            rolePet = petMgr.PetList_At(index)
-            #刷新宠物信息并通知客户端
-            __RefreshAndSyncPetInfo(rolePet)
-            #自动出战宠物
-            __AutoSummonPet_OnLogin(curPlayer, rolePet)
-
-    return
-#---------------------------------------------------------------------
-##玩家上线, 自动出战宠物
-# @param curPlayer 玩家实例
-# @param tick 时间戳
-# @return 返回值无意义
-# @remarks 玩家上线, 自动出战宠物
-def __AutoSummonPet_OnLogin(curPlayer, rolePet):
-    #是否有出战标志
-    if not rolePet.GetIsBattle():
-        return
-    
-    if not GetMapCanOutPet(curPlayer):
-        #此地图禁止宠物
-        return
-    #召唤宠物出战
-    resultPos = GameMap.GetEmptyPlaceInArea(curPlayer.GetPosX(), curPlayer.GetPosY(), ChConfig.Def_SummonAppearDist)
-    
-    SummonPet(rolePet, resultPos.GetPosX(), resultPos.GetPosY())
-    return
-
-#---------------------------------------------------------------------
-##玩家切换地图通知宠物信息.
-# @param curPlayer 玩家实例
-# @param tick 时间戳
-# @return 返回值无意义
-# @remarks 玩家切换地图通知宠物信息.
-def Sync_PetInfo_ChangeMap(curPlayer, tick):
-    petMgr = curPlayer.GetPetMgr()
-    
-    for index in range(0, petMgr.PetList_Cnt()):
-        rolePet = petMgr.PetList_At(index)
-        #刷新宠物信息并通知客户端
-        __RefreshAndSyncPetInfo(rolePet)
-
-    return
-
-#---------------------------------------------------------------------
-##玩家携带宠物登陆地图
-# @param curPlayer 玩家实例
-# @return 返回值无意义
-# @remarks 
-def DoLogic_PetLoadMapOK(curPlayer):
-    
-    if GetMapCanOutPet(curPlayer):
-        #此地图宠物可以上
-        PlayerPet.AutoSummonPet(curPlayer)
-        return
-    
-    #此地图禁止宠物, 召回出战的宠物
-    if not ReCallFightPet(curPlayer):
-        return
-    
-    #Pet_liubo_314885 此地图禁止宠物
-    #PlayerControl.NotifyCode(curPlayer, "Pet_liubo_314885")
-    return
-
-def GetMapCanOutPet(curPlayer):
-    ## 检查本地图可否出战宠物
-    canOutPet = GameWorld.GetMap().GetMapCanOutPet()
-    return canOutPet
-
-#---------------------------------------------------------------------
-## 刷新宠物信息并通知客户端
-#  @param rolePet 宠物实例
-#  @return 无返回值
-#  @remarks 刷新宠物信息并通知客户端
-def __RefreshAndSyncPetInfo(rolePet):
-    #---刷新宠物信息(不通知客户端)---
-    InitRolePet(rolePet, False)
-
-    return
-
-#---------------------------------------------------------------------
-
-
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActFamilyGCZ.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActFamilyGCZ.py
index 64d3b20..5a1c3b4 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActFamilyGCZ.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActFamilyGCZ.py
@@ -20,7 +20,6 @@
 import ShareDefine
 import IpyGameDataPY
 import NetPackCommon
-import CrossRealmPlayer
 import ChPyNetSendPack
 import IPY_GameWorld
 import PlayerControl
@@ -105,7 +104,7 @@
     playerZoneID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FamilyGCZZoneID)
     playerRoundNum = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FamilyGCZRoundNum)
         
-    actInfo = CrossRealmPlayer.GetCrossActInfoByZoneID(ShareDefine.CrossActName_FamilyGCZ, playerZoneID)
+    actInfo = {}#CrossRealmPlayer.GetCrossActInfoByZoneID(ShareDefine.CrossActName_FamilyGCZ, playerZoneID)
     actID = actInfo.get(ShareDefine.ActKey_ID, 0)
     state = actInfo.get(ShareDefine.ActKey_State, 0)
     if not playerActID and not playerZoneID:
@@ -137,7 +136,7 @@
     playerID = curPlayer.GetPlayerID()
     zoneID, familyID = joinInfo
     
-    actInfo = CrossRealmPlayer.GetCrossActInfoByZoneID(ShareDefine.CrossActName_FamilyGCZ, zoneID)
+    actInfo = {}#CrossRealmPlayer.GetCrossActInfoByZoneID(ShareDefine.CrossActName_FamilyGCZ, zoneID)
     actID = actInfo.get(ShareDefine.ActKey_ID, 0)
     state = actInfo.get(ShareDefine.ActKey_State, 0)
     
@@ -346,7 +345,7 @@
     playerID = curPlayer.GetPlayerID()
     
     zoneID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FamilyGCZZoneID)
-    actInfo = CrossRealmPlayer.GetCrossActInfoByZoneID(ShareDefine.CrossActName_FamilyGCZ, zoneID)
+    actInfo = {}#CrossRealmPlayer.GetCrossActInfoByZoneID(ShareDefine.CrossActName_FamilyGCZ, zoneID)
     if not actInfo:
         return
     state = actInfo.get(ShareDefine.ActKey_State, 0)
@@ -483,7 +482,7 @@
         return
     
     zoneID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FamilyGCZZoneID)
-    actInfo = CrossRealmPlayer.GetCrossActInfoByZoneID(ShareDefine.CrossActName_FamilyGCZ, zoneID)
+    actInfo = {}#CrossRealmPlayer.GetCrossActInfoByZoneID(ShareDefine.CrossActName_FamilyGCZ, zoneID)
     if not actInfo:
         return
     state = actInfo.get(ShareDefine.ActKey_State, 0)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActLianqi.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActLianqi.py
index b03df1e..ddaf97f 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActLianqi.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActLianqi.py
@@ -20,7 +20,6 @@
 import IpyGameDataPY
 import NetPackCommon
 import ChPyNetSendPack
-import CrossRealmPlayer
 #import PlayerZhanling
 import ItemControler
 import ItemCommon
@@ -56,7 +55,7 @@
     
     playerID = curPlayer.GetPlayerID()
     
-    actInfo = CrossRealmPlayer.GetPlayerCrossActInfo(curPlayer, ShareDefine.CrossActName_Lianqi)
+    actInfo = {}#CrossRealmPlayer.GetPlayerCrossActInfo(curPlayer, ShareDefine.CrossActName_Lianqi)
     cfgID = actInfo.get(ShareDefine.ActKey_CfgID, 0)
     actID = actInfo.get(ShareDefine.ActKey_ID, 0)
     state = actInfo.get(ShareDefine.ActKey_State, 0)
@@ -90,8 +89,8 @@
         ReStartGame(curPlayer, isNotify=False)
         Sync_CrossActLianqiActionInfo(curPlayer)
         Sync_LianqiPlayerInfo(curPlayer)
-    else:
-        CrossRealmPlayer.NotifyCrossActEnd(curPlayer, ShareDefine.CrossActName_Lianqi)
+    #else:
+    #    CrossRealmPlayer.NotifyCrossActEnd(curPlayer, ShareDefine.CrossActName_Lianqi)
         
     return True
 
@@ -179,7 +178,7 @@
     OPValue3 = clientData.OPValue3
     
     if OPType not in [4]:
-        actInfo = CrossRealmPlayer.GetPlayerCrossActInfo(curPlayer, ShareDefine.CrossActName_Lianqi)
+        actInfo = {}#CrossRealmPlayer.GetPlayerCrossActInfo(curPlayer, ShareDefine.CrossActName_Lianqi)
         if not actInfo:
             GameWorld.DebugLog("非炼器活动中,无法操作! OPType=%s" % OPType, playerID)
             return
@@ -560,7 +559,7 @@
 
 def Sync_CrossActLianqiActionInfo(curPlayer):
     ## 通知活动信息
-    actInfo = CrossRealmPlayer.GetPlayerCrossActInfo(curPlayer, ShareDefine.CrossActName_Lianqi)
+    actInfo = {}#CrossRealmPlayer.GetPlayerCrossActInfo(curPlayer, ShareDefine.CrossActName_Lianqi)
     if not actInfo:
         return
     
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActRechargePrize.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActRechargePrize.py
deleted file mode 100644
index d51db44..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActRechargePrize.py
+++ /dev/null
@@ -1,196 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-##@package Player.PlayerActRechargePrize
-#
-# @todo:充值返利活动
-# @author hxp
-# @date 2020-09-23
-# @version 1.0
-#
-# 详细描述: 充值返利活动
-#
-#-------------------------------------------------------------------------------
-#"""Version = 2020-09-23 12:00"""
-#-------------------------------------------------------------------------------
-
-import PyGameData
-import ShareDefine
-import PlayerControl
-import IpyGameDataPY
-import ChPyNetSendPack
-import NetPackCommon
-import GameWorld
-import ChConfig
-
-def __GetActTemplateID(cfgID, dayIndex):
-    if cfgID == None or dayIndex == None:
-        return 0
-    ipyData = IpyGameDataPY.GetIpyGameData("ActRechargePrize", cfgID)
-    if not ipyData:
-        return 0
-    templateIDList = ipyData.GetTemplateIDList()
-    templateID = templateIDList[-1] if dayIndex >= len(templateIDList) else templateIDList[dayIndex]
-    return templateID
-
-def OnPlayerLogin(curPlayer):
-    isReset = __CheckPlayerRechargePrizeAction(curPlayer)
-    if not isReset:
-        actInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_RechargePrize, {})
-        # 活动中同步活动信息
-        if actInfo.get(ShareDefine.ActKey_State):
-            Sync_RechargePrizeActionInfo(curPlayer)
-            Sync_RechargePrizeInfo(curPlayer)
-    return
-
-def RefreshRechargePrizeActionInfo():
-    ## 收到GameServer同步的活动信息,刷新活动信息
-    playerManager = GameWorld.GetPlayerManager()
-    for index in xrange(playerManager.GetPlayerCount()):
-        curPlayer = playerManager.GetPlayerByIndex(index)
-        if not GameWorld.IsNormalPlayer(curPlayer):
-            continue
-        __CheckPlayerRechargePrizeAction(curPlayer)
-    return
-
-def __CheckPlayerRechargePrizeAction(curPlayer):
-    ## 检查玩家充值返利活动数据信息
-    
-    playerID = curPlayer.GetPlayerID()
-    
-    actInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_RechargePrize, {})
-    actID = actInfo.get(ShareDefine.ActKey_ID, 0)
-    state = actInfo.get(ShareDefine.ActKey_State, 0)
-    
-    playerActID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RechargePrizeID) # 玩家身上的活动ID
-    
-    # 活动ID 相同的话不处理
-    if actID == playerActID:
-        GameWorld.DebugLog("充值返利活动ID不变,不处理!", curPlayer.GetPlayerID())
-        return
-    GameWorld.DebugLog("充值返利重置! actID=%s,playerActID=%s,state=%s" % (actID, playerActID, state), playerID)
-    
-    templateID = __GetActTemplateID(actInfo.get(ShareDefine.ActKey_CfgID, 0), actInfo.get(ShareDefine.ActKey_DayIndex, 0))
-    
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RechargePrizeID, actID)
-    
-    ipyDataList = IpyGameDataPY.GetIpyGameDataList("RechargePrizeTemplate", templateID)
-    if ipyDataList:
-        for ipyData in ipyDataList:
-            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RechargePrizeCount % ipyData.GetCTGID(), 0)
-            
-    Sync_RechargePrizeActionInfo(curPlayer)
-    Sync_RechargePrizeInfo(curPlayer)
-    return True
-
-def DoAddPlayerActRechargePrizeCount(curPlayer, ctgID):
-    ## 执行增加玩家充值返利活动返利次数
-    # @return: 返利仙玉 数
-    actInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_RechargePrize, {})
-    if not actInfo:
-        GameWorld.DebugLog("无充值返利活动")
-        return
-    if not actInfo.get(ShareDefine.ActKey_State):
-        GameWorld.DebugLog("充值返利活动未开启")
-        return
-    templateID = __GetActTemplateID(actInfo.get(ShareDefine.ActKey_CfgID, 0), actInfo.get(ShareDefine.ActKey_DayIndex, 0))
-    actIpyData = None
-    ipyDataList = IpyGameDataPY.GetIpyGameDataList("RechargePrizeTemplate", templateID)
-    if ipyDataList:
-        for ipyData in ipyDataList:
-            if ctgID == ipyData.GetCTGID():
-                actIpyData = ipyData
-                break
-    if not actIpyData:
-        GameWorld.DebugLog("该充值ID无充值返利! ctgID=%s,templateID=%s" % (ctgID, templateID))
-        return
-    
-    prizeCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RechargePrizeCount % ctgID)
-    prizeCountLimit = actIpyData.GetPrizeCountLimit()
-    if prizeCount >= prizeCountLimit:
-        GameWorld.DebugLog("已达充值返利最大次数: ctgID=%s,prizeCount=%s" % (ctgID, prizeCount))
-        return
-    prizeCount += 1
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RechargePrizeCount % ctgID, prizeCount)
-    goldPrize = actIpyData.GetGoldPrize()
-    
-    Sync_RechargePrizeInfo(curPlayer, ctgID)
-    GameWorld.DebugLog("充值返利: ctgID=%s,goldPrize=%s,prizeCount=%s" % (ctgID, goldPrize, prizeCount))
-    return goldPrize
-
-def Sync_RechargePrizeInfo(curPlayer, ctgID=0):
-    ## 通知充值返利玩家数据信息
-    actInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_RechargePrize, {})
-    if not actInfo:
-        return
-    if not actInfo.get(ShareDefine.ActKey_State):
-        return
-    templateID = __GetActTemplateID(actInfo.get(ShareDefine.ActKey_CfgID, 0), actInfo.get(ShareDefine.ActKey_DayIndex, 0))
-    
-    if ctgID > 0:
-        syncCTGIDList = [ctgID]
-    else:
-        syncCTGIDList = []
-        ipyDataList = IpyGameDataPY.GetIpyGameDataList("RechargePrizeTemplate", templateID)
-        if ipyDataList:
-            for ipyData in ipyDataList:
-                syncCTGIDList.append(ipyData.GetCTGID())
-                
-    playerActInfo = ChPyNetSendPack.tagMCRechargePrizePlayerInfo()
-    playerActInfo.PlayerInfoList = []
-    for syncCTGID in syncCTGIDList:
-        prizeInfo = ChPyNetSendPack.tagMCRechargePrizeInfo()
-        prizeInfo.CTGID = syncCTGID
-        prizeInfo.PrizeCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RechargePrizeCount % syncCTGID)
-        playerActInfo.PlayerInfoList.append(prizeInfo)
-    playerActInfo.Count = len(playerActInfo.PlayerInfoList)
-    NetPackCommon.SendFakePack(curPlayer, playerActInfo)
-    return
-
-def Sync_RechargePrizeActionInfo(curPlayer):
-    ## 通知充值返利活动信息
-    actInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_RechargePrize, {})
-    if not actInfo:
-        return
-    
-    if not actInfo.get(ShareDefine.ActKey_State):
-        return
-    
-    cfgID = actInfo.get(ShareDefine.ActKey_CfgID)
-    ipyData = IpyGameDataPY.GetIpyGameData("ActRechargePrize", cfgID)
-    if not ipyData:
-        return
-    
-    templateIDList = ipyData.GetTemplateIDList()
-    if not templateIDList:
-        return
-    startDateStr, endDateStr = GameWorld.GetOperationActionDateStr(ipyData)
-    actInfo = ChPyNetSendPack.tagMCActRechargePrizeInfo()
-    actInfo.StartDate = startDateStr
-    actInfo.EndtDate = endDateStr
-    actInfo.LimitLV = ipyData.GetLVLimit()
-    actInfo.IsDayReset = ipyData.GetIsDayReset()
-    actInfo.PrizeDayInfo = []
-    for templateID in templateIDList:
-        ipyDataList = IpyGameDataPY.GetIpyGameDataList("RechargePrizeTemplate", templateID)
-        if not ipyDataList:
-            continue
-        
-        dayInfo = ChPyNetSendPack.tagMCActRechargePrizeDay()
-        dayInfo.PrizeInfo = []
-        for prizeData in ipyDataList:
-            prize = ChPyNetSendPack.tagMCActRechargePrize()
-            prize.CTGID = prizeData.GetCTGID()
-            prize.GoldPrize = prizeData.GetGoldPrize()
-            prize.PrizeCountLimit = prizeData.GetPrizeCountLimit()
-            dayInfo.PrizeInfo.append(prize)
-            
-        dayInfo.Prizes = len(dayInfo.PrizeInfo)
-        actInfo.PrizeDayInfo.append(dayInfo)
-        
-    actInfo.PrizeDays = len(actInfo.PrizeDayInfo)
-    NetPackCommon.SendFakePack(curPlayer, actInfo)
-    return
-
-
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActRechargeRebateGold.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActRechargeRebateGold.py
deleted file mode 100644
index 907c940..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActRechargeRebateGold.py
+++ /dev/null
@@ -1,193 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-##@package Player.PlayerActRechargeRebateGold
-#
-# @todo:累计充值返利仙玉活动
-# @author hxp
-# @date 2020-10-15
-# @version 1.0
-#
-# 详细描述: 累计充值返利仙玉活动(活动结束邮件发放,只算最高一档)
-#
-#-------------------------------------------------------------------------------
-#"""Version = 2020-10-15 12:00"""
-#-------------------------------------------------------------------------------
-
-import ChConfig
-import ShareDefine
-import PlayerControl
-import PyGameData
-import GameWorld
-import NetPackCommon
-import ChPyNetSendPack
-import IpyGameDataPY
-
-def OnPlayerLogin(curPlayer):
-    isReset = __CheckPlayerRechargeRebateGoldAction(curPlayer)
-    if not isReset:
-        actInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_RechargeRebateGold, {})
-        # 活动中同步活动信息
-        if actInfo.get(ShareDefine.ActKey_State):
-            Sync_RechargeRebateGoldActionInfo(curPlayer)
-            Sync_RechargeRebateGoldPlayerInfo(curPlayer)
-    return
-
-def RefreshRechargeRebateGoldActionInfo():
-    ## 收到GameServer同步的活动信息,刷新活动信息
-    playerManager = GameWorld.GetPlayerManager()
-    for index in xrange(playerManager.GetPlayerCount()):
-        curPlayer = playerManager.GetPlayerByIndex(index)
-        if not GameWorld.IsNormalPlayer(curPlayer):
-            continue
-        __CheckPlayerRechargeRebateGoldAction(curPlayer)
-    return
-
-def __CheckPlayerRechargeRebateGoldAction(curPlayer):
-    ## 检查玩家累计充值活动数据信息
-    
-    playerID = curPlayer.GetPlayerID()
-    
-    actInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_RechargeRebateGold, {})
-    actID = actInfo.get(ShareDefine.ActKey_ID, 0)
-    state = actInfo.get(ShareDefine.ActKey_State, 0)
-    
-    playerActID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RechargeRebateGoldID) # 玩家身上的活动ID
-    templateID = GetTemplateID(actInfo.get(ShareDefine.ActKey_CfgID, 0), actInfo.get(ShareDefine.ActKey_DayIndex, 0))
-    playerTemplateID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RechargeRebateGoldTemplateID)
-    
-    # 活动ID 相同的话不处理
-    if actID == playerActID:
-        GameWorld.DebugLog("累计充值返利仙玉活动ID不变,不处理!", playerID)
-        if state:
-            if playerTemplateID != templateID and templateID:
-                PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RechargeRebateGoldTemplateID, templateID)
-                GameWorld.DebugLog("    活动模板ID变更,更新玩家身上模板ID记录!playerTemplateID=%s,updTemplateID=%s" 
-                                   % (playerTemplateID, templateID), playerID)
-        return
-    
-    GameWorld.DebugLog("累计充值返利仙玉活动重置! actID=%s,playerActID=%s,state=%s" % (actID, playerActID, state), playerID)
-    
-    totalRMB = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RechargeRebateGoldRMB)
-    if playerActID and playerTemplateID and totalRMB > 0:
-        __SendRebateGoldMail(curPlayer, playerTemplateID, totalRMB)
-        
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RechargeRebateGoldID, actID)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RechargeRebateGoldTemplateID, templateID)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RechargeRebateGoldRMB, 0)
-    
-    Sync_RechargeRebateGoldActionInfo(curPlayer)
-    Sync_RechargeRebateGoldPlayerInfo(curPlayer)
-    return True
-
-def GetTemplateID(cfgID, dayIndex):
-    if cfgID == None or dayIndex == None:
-        return 0
-    ipyData = IpyGameDataPY.GetIpyGameData("ActRechargeRebateGold", cfgID)        
-    if not ipyData:
-        return 0
-    templateIDList = ipyData.GetTemplateIDList()
-    templateID = templateIDList[-1] if dayIndex >= len(templateIDList) else templateIDList[dayIndex]
-    return templateID
-
-def __SendRebateGoldMail(curPlayer, playerTemplateID, totalRMB):
-    ## 发送返利奖励邮件,取最大奖励档发奖励
-    
-    playerID = curPlayer.GetPlayerID()
-    GameWorld.DebugLog("累计充值返利仙玉发送奖励邮件! playerTemplateID=%s,totalRMB=%s" % (playerTemplateID, totalRMB), playerID)
-    
-    ipyDataList = IpyGameDataPY.GetIpyGameDataList("RechargeRebateGoldTemplate", playerTemplateID)
-    if not ipyDataList:
-        return
-    
-    rebateIpyData = None
-    for ipyData in ipyDataList:
-        rmbMin = ipyData.GetRMBMin()
-        rmbMax = ipyData.GetRMBMax()
-        if (rmbMin <= totalRMB <= rmbMax) or (rmbMin <= totalRMB and rmbMax == 0):
-            rebateIpyData = ipyData
-            break
-        
-    if not rebateIpyData:
-        GameWorld.DebugLog("玩家无返利仙玉奖励!", playerID)
-        return
-    
-    rebateRate = rebateIpyData.GetRebateRate()
-    addItemList = []
-    paramList = [totalRMB, rebateRate]
-    gold = min(int(totalRMB * rebateRate / 100.0), ShareDefine.Def_UpperLimit_DWord)
-    GameWorld.DebugLog("    返利仙玉百分比=%s%%, gold=%s" % (rebateRate, gold), playerID)
-    PlayerControl.SendMailByKey("RechargeRebateGold", [playerID], addItemList, paramList, gold)
-    return
-
-def AddRechargeRebateGoldRMB(curPlayer, addRMB):
-    ## 增加活动已累计充值RMB, 主干分支记录的是仙玉,只算直充,主干没有RMB对应比例配置,直接记录仙玉
-    actInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_RechargeRebateGold, {})    
-    if not actInfo:
-        return
-    
-    if not actInfo.get(ShareDefine.ActKey_State):
-        return
-    
-    totalRMB = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RechargeRebateGoldRMB) + addRMB
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RechargeRebateGoldRMB, totalRMB)
-    
-    GameWorld.DebugLog("累计充值返利仙玉活动增加玩家累计充值RMB: addRMB=%s,totalRMB=%s" % (addRMB, totalRMB), curPlayer.GetPlayerID())
-    Sync_RechargeRebateGoldPlayerInfo(curPlayer)
-    return
-
-
-def Sync_RechargeRebateGoldPlayerInfo(curPlayer):
-    ## 通知累计充值返利仙玉活动玩家数据信息
-    playerActInfo = ChPyNetSendPack.tagMCRechargeRebateGoldPlayerInfo()
-    playerActInfo.RechargeRMBTotal = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RechargeRebateGoldRMB)
-    NetPackCommon.SendFakePack(curPlayer, playerActInfo)
-    return
-
-def Sync_RechargeRebateGoldActionInfo(curPlayer):
-    ## 通知累计充值返利仙玉活动信息
-    
-    actInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_RechargeRebateGold, {})    
-    if not actInfo:
-        return
-    
-    if not actInfo.get(ShareDefine.ActKey_State):
-        return
-    
-    cfgID = actInfo.get(ShareDefine.ActKey_CfgID)
-    ipyData = IpyGameDataPY.GetIpyGameData("ActRechargeRebateGold", cfgID)
-    if not ipyData:
-        return
-    
-    templateIDList = ipyData.GetTemplateIDList()
-    if not templateIDList:
-        return
-    
-    startDateStr, endDateStr = GameWorld.GetOperationActionDateStr(ipyData)
-    actInfo = ChPyNetSendPack.tagMCActRechargeRebateGoldInfo()
-    actInfo.StartDate = startDateStr
-    actInfo.EndtDate = endDateStr
-    actInfo.LimitLV = ipyData.GetLVLimit()
-    actInfo.IsDayReset = ipyData.GetIsDayReset()
-    actInfo.RebateDayInfo = []
-    for templateID in templateIDList:
-        ipyDataList = IpyGameDataPY.GetIpyGameDataList("RechargeRebateGoldTemplate", templateID)
-        if not ipyDataList:
-            continue
-        
-        dayInfo = ChPyNetSendPack.tagMCActRechargeRebateDay()
-        dayInfo.RebateInfo = []
-        for dayIpyData in ipyDataList:
-            rebateInfo = ChPyNetSendPack.tagMCActRechargeRebate()
-            rebateInfo.RMBMin = dayIpyData.GetRMBMin()
-            rebateInfo.RMBMax = dayIpyData.GetRMBMax()
-            rebateInfo.RebateRate = dayIpyData.GetRebateRate()
-            dayInfo.RebateInfo.append(rebateInfo)
-            
-        dayInfo.Rebates = len(dayInfo.RebateInfo)
-        actInfo.RebateDayInfo.append(dayInfo)
-        
-    actInfo.RebateDays = len(actInfo.RebateDayInfo)
-    NetPackCommon.SendFakePack(curPlayer, actInfo)
-    return
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 62fadad..5c3416a 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBillboard.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBillboard.py
@@ -96,10 +96,6 @@
     ##更新玩家总战斗力
     return
 
-def UpdatePyPetBillboard(curPlayer, isForceUpdate=False, isUpdateTotal=True):
-    ## 更新宠物排行榜
-    return
-
 #def __CanPlayerBillboardComm(curPlayer):
 #    ## 玩家可否上榜通用检查
 #    if not GameWorld.IsNormalPlayer(curPlayer):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCoat.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCoat.py
deleted file mode 100644
index 0d3cc62..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCoat.py
+++ /dev/null
@@ -1,304 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-#-------------------------------------------------------------------------------
-#
-##@package Player.PlayerCoat
-#
-# @todo:玩家时装外套
-# @author xdh
-# @date 2019-01-07
-# @version 1.0
-#
-# 详细描述: 玩家时装外套
-#
-#---------------------------------------------------------------------
-"""Version = 2019-01-07 10:00"""
-#---------------------------------------------------------------------
-
-import NetPackCommon
-import IPY_GameWorld
-import PlayerControl
-import ItemControler
-import ChPyNetSendPack
-import ShareDefine
-import ItemCommon
-import DataRecordPack
-import IpyGameDataPY
-import GameWorld
-import ChConfig
-
-import math
-
-## 登录
-#  @param curPlayer
-#  @return None
-def OnLogin_Coat(curPlayer):
-    Sync_ClothesCoatSkinInfo(curPlayer)
-    return
-
-#// A5 0B 玩家时装升级 #tagCMCoatUp
-#
-#struct    tagCMCoatUp
-#{
-#    tagHead        Head;
-#    BYTE        CoatIndex; // 时装索引
-#};
-def OnPlayerCoatUp(index, clientData, tick):
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    playerID = curPlayer.GetPlayerID()
-    coatIndex = clientData.CoatIndex
-    ipyData = IpyGameDataPY.GetIpyGameData('Coat', coatIndex)
-    if not ipyData:
-        return
-    
-    curSkinLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ClothesSkinLV % coatIndex)
-    if curSkinLV >= ipyData.GetMaxLV():
-        GameWorld.DebugLog("该时装已满级,无法升级!coatIndex=%s,curSkinLV=%s" % (coatIndex, curSkinLV), playerID)
-        return
-    needCntList = ipyData.GetCostItemCnt()
-    if curSkinLV >= len(needCntList):
-        return
-    plusCost = needCntList[curSkinLV]
-    costItemID = ipyData.GetUnlockItemID()
-    curPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
-    hasEnough, itemIndexList = ItemCommon.GetItem_FromPack_ByID(costItemID, curPack, plusCost)
-    if not hasEnough:
-        GameWorld.DebugLog("OnPlayerCoatUp() 时装升级材料不足, coatIndex=%s, costItemID=%s, needCnt=%s" % (coatIndex, costItemID, plusCost))
-        return
-
-    reduceCnt = plusCost
-    aftlv = curSkinLV + 1
-      
-    #扣除物品
-    ItemCommon.ReduceItem(curPlayer, curPack, itemIndexList, reduceCnt, True, 'CoatUp')
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ClothesSkinLV % coatIndex, aftlv)
-       
-    Sync_ClothesCoatSkinInfo(curPlayer, coatIndex)
-    # 刷属性
-    CalcClothesCoatSkinAttr(curPlayer)
-    PlayerControl.PlayerControl(curPlayer).RefreshPlayerAttrState()
-    
-    extraInfoDict = {"coatID":coatIndex}
-    #DataRecordPack.DR_ClassUpSystem(curPlayer, "CoatUp", aftlv, extraInfoDict)
-    
-    GameWorld.DebugLog("时装升级!coatIndex=%s,curSkinLV=%s,reduceCnt=%s,aftlv=%s" 
-                       % (coatIndex, curSkinLV, reduceCnt, aftlv), playerID)
-    return
-
-#// A5 20 时装分解 #tagCMCoatDecompose
-#
-#struct    tagCMCoatDecompose
-#{
-#    tagHead        Head;
-#    BYTE        Count;        //材料所在背包索引的数量
-#    WORD        IndexList[Count];    //材料所在背包索引列表
-#    DWORD        ItemIDList[Count];    //材料所在背包物品ID列表
-#};
-def OnCoatDecompose(index, clientData, tick):
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    playerID = curPlayer.GetPlayerID()
-    indexList = clientData.IndexList
-    ItemIDList = clientData.ItemIDList
-
-    itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
-    addExp = 0
-    for i, index in enumerate(indexList):
-        eatItem = itemPack.GetAt(index)
-        if not eatItem or eatItem.IsEmpty():
-            continue
-        eatItemID = eatItem.GetItemTypeID()
-        if eatItemID != ItemIDList[i]:
-            GameWorld.Log('时装分解 发的物品ID不对应index=%s eatItemID=%s,ItemIDList[i]=%s'%(index, eatItemID, ItemIDList[i]), playerID)
-            continue
-        itemData = GameWorld.GetGameData().GetItemByTypeID(eatItemID)
-        if not itemData:
-            continue
-        curEff = itemData.GetEffectByIndex(0)
-        coatID = curEff.GetEffectValue(0)
-        ipyData = IpyGameDataPY.GetIpyGameData('Coat', coatID)
-        if not ipyData:
-            continue
-        curSkinLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ClothesSkinLV % coatID)
-        if curSkinLV < ipyData.GetMaxLV():
-            continue
-        itemCnt = eatItem.GetCount()
-        addExp += itemCnt * curEff.GetEffectValue(1)
-        ItemCommon.DelItem(curPlayer, eatItem, itemCnt, True, ChConfig.ItemDel_CoatDecompose)
-    if not addExp:
-        GameWorld.Log(' 时装分解, 没有可分解的ItemIDList=%s'%ItemIDList, playerID)
-        return
-    totalExp = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ClothesChestEXP) + addExp
-    curChestLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ClothesChestLV)
-    updChestLV = curChestLV
-    maxChestLV = IpyGameDataPY.IPY_Data().GetCoatChestUpByIndex(IpyGameDataPY.IPY_Data().GetCoatChestUpCount() - 1).GetLV()
-    for chestLV in xrange(curChestLV + 1, maxChestLV + 1):
-        ipyData = IpyGameDataPY.GetIpyGameData('CoatChestUp', chestLV)
-        if not ipyData:
-            break
-        needExp = ipyData.GetNeedExp()
-        if totalExp < needExp:
-            break
-        updChestLV = chestLV
-        totalExp -= needExp
-    if updChestLV != curChestLV:
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ClothesChestLV, updChestLV)
-        # 刷属性
-        CalcClothesCoatSkinAttr(curPlayer)
-        PlayerControl.PlayerControl(curPlayer).RefreshPlayerAttrState()
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ClothesChestEXP, min(totalExp, ChConfig.Def_UpperLimit_DWord))
-        
-    Sync_ClothesCoatSkinInfo(curPlayer, coatID)
-    return
-
-def GetCoatQualityLVInfo(curPlayer):
-    costQualityLVDict = {}
-    ipyMgr = IpyGameDataPY.IPY_Data()
-    for i in xrange(ipyMgr.GetCoatCount()):
-        ipyData = ipyMgr.GetCoatByIndex(i)
-        coatID = ipyData.GetCoatID()
-        costQuality = ipyData.GetCostQuality()
-        skinLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ClothesSkinLV % coatID)
-        if not skinLV:
-            continue
-        costQualityLVDict[costQuality] = costQualityLVDict.get(costQuality, 0) + skinLV
-    return costQualityLVDict
-
-## 计算时装属性
-#  @param curPlayer 玩家
-#  @param allAttrList 属性列表
-#  @return None
-def CalcClothesCoatSkinAttr(curPlayer):
-    initFPAdd = 0 #初始战力
-    allAttrList = [{} for _ in range(4)]
-    ipyMgr = IpyGameDataPY.IPY_Data()
-    for i in xrange(ipyMgr.GetCoatCount()):
-        ipyData = ipyMgr.GetCoatByIndex(i)
-        coatID = ipyData.GetCoatID()
-        skinLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ClothesSkinLV % coatID)
-        if not skinLV:
-            continue
-        initFPAdd += ipyData.GetInitFightPower()
-        starAttrDict = ipyData.GetStarAttr()
-        if str(skinLV) not in starAttrDict:
-            continue
-        for attrID, attrValue in starAttrDict[str(skinLV)].items():
-            PlayerControl.CalcAttrDict_Type(int(attrID), attrValue, allAttrList)
-    #时装柜属性
-    curChestLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ClothesChestLV)
-    ipyData = IpyGameDataPY.GetIpyGameDataNotLog('CoatChestUp', curChestLV)
-    if ipyData:
-        for attrID, attrValue in ipyData.GetAddAttr().items():
-            PlayerControl.CalcAttrDict_Type(int(attrID), attrValue, allAttrList)
-    
-    # 保存计算值
-    PlayerControl.SetMFPExFightPower(curPlayer, ShareDefine.Def_MFPType_Coat, initFPAdd)
-    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Coat, allAttrList)
-    return
-
-
-##穿上/脱下时装
-# @param curPlayer 玩家实例
-# @param srcBackpack 起点背包
-# @param desBackPack 目标背包
-# @param srcIndex 起点索引
-# @param destIndex 目标索引
-# @return 
-def SwitchCoat(curPlayer, srcBackpack, desBackPack, srcIndex, destIndex):
-    clothesPlaceList = [6,7,8]#[ShareDefine.retWeaponSkin, ShareDefine.retClothesSkin, ShareDefine.retWeapon2Skin]
-    if not ((desBackPack == IPY_GameWorld.rptEquip and srcBackpack == ShareDefine.rptTempSwap and destIndex in clothesPlaceList) \
-    or (srcBackpack == IPY_GameWorld.rptEquip and desBackPack == ShareDefine.rptTempSwap and srcIndex in clothesPlaceList)):
-        return False
-    
-    #===============================================================================================
-    # # 不可以交换时装
-    # if curPlayer.GetMapID() in [ChConfig.Def_FBMapID_RedFort]:
-    #    PlayerControl.NotifyCode(curPlayer, "GeRen_liubo_422737")
-    #    return True
-    #===============================================================================================
-    
-    playerID = curPlayer.GetPlayerID()
-    
-    # 穿时装
-    if desBackPack == IPY_GameWorld.rptEquip:
-        # 穿的时候srcIndex代表时装的索引
-        skinLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ClothesSkinLV%srcIndex)
-        if skinLV <= 0:
-            GameWorld.Log("时装未激活,不能穿!srcIndex=%s" % (srcIndex), playerID)
-            return True
-        ipyData = IpyGameDataPY.GetIpyGameData('Coat', srcIndex)
-        if not ipyData:
-            return True
-        EquipItemIDList = ipyData.GetEquipItemID()
-        job = curPlayer.GetJob()
-        if job > len(EquipItemIDList):
-            GameWorld.Log("找不到该职业时装配置,不能穿!srcIndex=%s,job=%s" % (srcIndex, job), playerID)
-            return True
-        equipItemID = EquipItemIDList[job-1]
-        # 找到时装ID后,srcIndex转化为交换物品的格子索引,默认0
-        srcIndex= 0
-        
-        # 给临时交换物品
-        if not ItemControler.PutItemInTempSwap(curPlayer, equipItemID):
-            GameWorld.Log("时装ID(%s)放入临时交换背包失败!" % (equipItemID), playerID)
-            return True
-        
-    # 脱时装
-    else:
-        ItemControler.ClearPack(curPlayer, ShareDefine.rptTempSwap)
-        destIndex = 0
-    
-    isOK = ItemCommon.DoLogicSwitchItemEx(curPlayer, srcBackpack, desBackPack, srcIndex, destIndex)
-    # 下发周围玩家时装穿戴状态
-    if isOK:
-        if desBackPack == IPY_GameWorld.rptEquip:
-            packIndex = IPY_GameWorld.rptEquip
-            itemPlace = destIndex
-            itemPack = curPlayer.GetItemManager().GetPack(packIndex)
-            curItem = itemPack.GetAt(itemPlace)
-            itemId = curItem.GetItemTypeID()
-            itemStarLV = 0#curItem.GetItemStarLV()
-            itemHoleCnt = 0#curItem.GetCanPlaceStoneCount()
-            itemStoneCnt = 0#curItem.GetUseStoneCount()
-            itemUseData = curItem.GetUserData()
-            curPlayer.ChangeEquip(itemId, itemPlace, itemStarLV, itemHoleCnt, itemStoneCnt, itemUseData)
-        else:
-            packIndex = ShareDefine.rptTempSwap
-            itemPack = curPlayer.GetItemManager().GetPack(packIndex)
-            curItem = itemPack.GetAt(0)
-            if curItem:
-                curPlayer.Sync_UnEquipItem(curItem.GetItemTypeID(), srcIndex)
-    GameWorld.DebugLog("SwitchCoat isOK=%s" % isOK)
-    return True
-
-
-## 通知客户端时装开启状态
-#  @param curPlayer
-#  @return None
-def Sync_ClothesCoatSkinInfo(curPlayer, coatIndex= -1):
-    stateData = ChPyNetSendPack.tagMCClothesCoatSkinState()
-    stateData.Clear()
-    stateData.CoatChestExp = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ClothesChestEXP)
-    stateData.CoatChestLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ClothesChestLV)
-    stateData.CoatInfoList = []
-    if coatIndex == -1:
-        coatIDList =[]
-        ipyMgr = IpyGameDataPY.IPY_Data()
-        for i in xrange(ipyMgr.GetCoatCount()):
-            ipyData = ipyMgr.GetCoatByIndex(i)
-            coatID = ipyData.GetCoatID()
-            coatIDList.append(coatID)
-    else:
-        coatIDList = [coatIndex]
-        
-    for coatID in coatIDList:
-        coatInfo = ChPyNetSendPack.tagMCClothesCoatLVInfo()
-        coatInfo.Clear()
-        coatInfo.CoatIndex = coatID
-        coatInfo.CoatLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ClothesSkinLV % coatID)
-        stateData.CoatInfoList.append(coatInfo)
-    stateData.CoatNum = len(stateData.CoatInfoList)
-    NetPackCommon.SendFakePack(curPlayer, stateData)
-    return
-
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 5687f87..0996c27 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCoin.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCoin.py
@@ -45,18 +45,11 @@
 import PlayerDailyGiftbag
 import PlayerGoldGift
 import PlayerActTotalRecharge
-import PlayerActRechargeRebateGold
-import PlayerActFamilyCTGAssist
 import PlayerActManyDayRecharge
 import PlayerActSingleRecharge
-import PlayerActRechargePrize
-import CrossActCTGBillboard
-import CrossActAllRecharge
 import PlayerActGrowupBuy
-import PlayerWeekParty
 import PlayerGoldInvest
 import PlayerActTurntable
-import PlayerTongTianLing
 import PlayerZhanling
 import PlayerGoldRush
 import PlayerLLMJ
@@ -594,14 +587,7 @@
     gainGoldPrize = ipyData.GetGainGoldPrize() # 赠送货币数,首次充值赠送仙玉时,此仙玉不给
     firstGoldPrize = ipyData.GetFirstGoldPrize() # 首次充值赠送的仙玉
     prizeGold = firstGoldPrize if (not totalBuyCount and firstGoldPrize) else gainGoldPrize
-    if moneyType == IPY_GameWorld.TYPE_Price_Gold_Money:
-        #if payType in [PayType_Gold, PayType_GoldPlus] and PlayerGoldInvest.GetInvestState(curPlayer, ChConfig.InvestType_Life):
-        #    prizeGold = addGold # bt tqxbqy 版本,永久卡仙玉直充固定双倍
-        actPrizeGold = PlayerActRechargePrize.DoAddPlayerActRechargePrizeCount(curPlayer, recordID)
-        if actPrizeGold:
-            prizeGold += actPrizeGold
-            addDRDict.update({"actRechargePrize":1})
-            
+    
     syncRecordIDList = [recordID]
     # 打包购买 - 目前用于每日特惠,有需要可扩展为通用
     if recordID == IpyGameDataPY.GetFuncCfg("DailyTehui", 2):
@@ -822,30 +808,19 @@
     
     # 所有真实充值均有效的
     if coinType in [ChConfig.CoinType_Gold, ChConfig.CoinType_Buy, ChConfig.CoinType_UsePayCoin]:
-        #跨服充值排行活动
-        CrossActCTGBillboard.AddCTGRMB(curPlayer, orderCoin)
-        #跨服全民充值
-        CrossActAllRecharge.AddCTGRMB(curPlayer, orderCoin)
         PlayerActManyDayRecharge.AddManyDayRechargeValue(curPlayer, orderCoin) # 多日连充
-        
-    # 只算充仙玉的
-    if coinType == ChConfig.CoinType_Gold:
-        PlayerActRechargeRebateGold.AddRechargeRebateGoldRMB(curPlayer, addGold)
         
     #累积充值X元
     PlayerActTotalRecharge.AddTotalRechargeGold(curPlayer, orderCoin, coinType)
     PlayerActSingleRecharge.UpdSingleRechargeValue(curPlayer, orderCoin, coinType) # 单笔累充
     PlayerActTurntable.OnPlayerRecharge(curPlayer, orderCoin, coinType) # 转盘
-    PlayerWeekParty.AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Recharge, addVIPExp)
     #投资
     if ctgIpyData:
         ctgID = ctgIpyData.GetRecordID()
-        #PlayerActFamilyCTGAssist.OnPlayerCTG(curPlayer, ctgID)
         PlayerGoldInvest.InvestByCTG(curPlayer, ctgID)
         PlayerGoldGift.OnGiftByCTGID(curPlayer, ctgID)
         PlayerZhanling.OnActiviteByCTGID(curPlayer, ctgID)
         PlayerGoldRush.OnGoldRushByCTGID(curPlayer, ctgID)
-        PlayerTongTianLing.OnActiviteTTTByCTGID(curPlayer, ctgID)
         PlayerLLMJ.OnActiviteByCTGID(curPlayer, ctgID)
         
     serverDay = DBDataMgr.GetEventTrigMgr().GetValue(ShareDefine.Def_ServerDay) + 1
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 aa3d385..434cc25 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
@@ -24,7 +24,6 @@
 import ItemCommon
 import ReadChConfig
 import BuffSkill
-import PetControl
 import OperControlManager
 import PlayerFamily
 import ShareDefine
@@ -44,13 +43,7 @@
 import GameFuncComm
 import IpyGameDataPY
 import PyGameData
-import PlayerActTurntable
-import PlayerCostRebate
-import PlayerActLunhuidian
-import GY_Query_CrossRealmReg
 import OpenServerActivity
-import CrossRealmPlayer
-import CrossPlayerData
 import PlayerActivity
 import ChNetSendPack
 import PlayerState
@@ -617,10 +610,6 @@
 #    curPlayer.SetIsConfronting(False)
 #    #通知客户端 //0进入;其他退出
 #    curPlayer.View_PlayerBattle(0, 0, 1)
-#    
-#    #清除战宠仇恨
-#    PetControl.ClearFightPetAngry(curPlayer)
-#    
 #    #添加测试信息
 #    GameWorld.GodLog(curPlayer, '退出战斗对峙成功')
     return
@@ -881,8 +870,6 @@
     PassiveBuffEffMng.OnPlayerLeaveMap(curPlayer)
     #杀死所有召唤的灵
     KillPlayerSummonNPC(curPlayer)
-    #召唤回出战的宠物
-    PetControl.ReCallFightPet(curPlayer)
     curPlayer.DeleteMirror()
     return
 
@@ -960,8 +947,6 @@
     
     PlayerSuccess.FinishDelayAddSuccessProgress(curPlayer, tick)
     playerID = curPlayer.GetPlayerID()
-    if not isDisconnect:
-        CrossPlayerData.ClearCrossSyncDataCache(curPlayer)
     #清除地图玩家缓存
     PyGameData.g_playerReqEnterFBEx.pop(playerID, None)
     #移除地图缓存的境界难度玩家ID信息
@@ -1115,9 +1100,6 @@
 # @return 返回值无意义
 # @remarks 玩家离开服务器
 def PlayerLeaveServer(curPlayer, tick):
-    #宠物下线逻辑, 这里要进行排行榜, 优先做, 避免玩家光环等属性影响宠物属性失效
-    PetControl.DoLogic_PetInfo_OnLeaveServer(curPlayer, tick)
-    
     RecordTodayOnlineTime(curPlayer)
     #清除下线消失的buff, 在更新排行榜之前
     __DisconnectClearBuff(curPlayer, tick)
@@ -1175,8 +1157,6 @@
     
     FBLogic.DoPlayerChangeMapLogic(curPlayer, tick)
     #summonList = list()
-    #召回宠物
-    PetControl.ReCallFightPet(curPlayer)
     #1. 删除自己不需要的召唤兽(火焰之灵等)
     #必须用while, 因为在循环中要删除
     # 召唤兽切地图不带过去
@@ -1232,7 +1212,6 @@
     
     GameWorld.Log("PlayerLeaveFB...", curPlayer.GetPlayerID())
     if GameWorld.IsCrossServer():
-        CrossRealmPlayer.PlayerExitCrossServer(curPlayer)
         return
     
     funcLineID = 0
@@ -1310,74 +1289,6 @@
     return
 
 #---------------------------------------------------------------------
-
-def PlayerEnterCrossServer(curPlayer, mapID, lineID):
-    playerID = curPlayer.GetPlayerID()
-    GameWorld.Log("玩家请求进入跨服地图: mapID=%s,lineID=%s" % (mapID, lineID), playerID)
-    if mapID not in ChConfig.Def_CrossMapIDList:
-        return
-    
-    tick = GameWorld.GetGameWorld().GetTick()
-    lastRequestTick = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_RequestEnterCrossServerTick)
-    if lastRequestTick and tick - lastRequestTick < 5000:
-        GameWorld.DebugLog("    请求进入跨服CD中!", playerID)
-        NotifyCode(curPlayer, "RequestEnterCrossServerCD")
-        return
-    
-    crossRegisterMap = curPlayer.NomalDictGetProperty(ChConfig.Def_PlayerKey_CrossRegisterMap)
-    if crossRegisterMap:
-        GameWorld.ErrLog("跨服已经在上传数据,不重复提交!crossRegisterMap=%s,mapID=%s" % (crossRegisterMap, mapID), playerID)
-        return
-    
-    if GameWorld.IsCrossServer():
-        GameWorld.DebugLog("跨服服务器不允许该操作!")
-        return
-    
-    if GetCrossMapID(curPlayer):
-        GameWorld.ErrLog("玩家当前为跨服状态,不允许再次请求进入跨服!", curPlayer.GetPlayerID())
-        return
-    
-    if not CrossRealmPlayer.IsCrossServerOpen():
-        NotifyCode(curPlayer, "CrossMatching18")
-        return
-    
-    if GameObj.GetHP(curPlayer) <= 0:
-        NotifyCode(curPlayer, "CrossMap4")
-        return
-    
-    if PlayerState.IsInPKState(curPlayer):
-        NotifyCode(curPlayer, "SingleEnterPK", [mapID])
-        return
-    
-    fbIpyData = FBCommon.GetFBIpyData(mapID)
-    if fbIpyData:
-        fbLineIpyData = FBCommon.GetFBLineIpyData(mapID, lineID, False)
-        if not fbLineIpyData:
-            GameWorld.DebugLog("副本表找不到副本对应功能线路!mapID=%s,lineID=%s" % (mapID, lineID))
-            return
-        ret = FBCommon.CheckCanEnterFBComm(curPlayer, mapID, lineID, fbIpyData, fbLineIpyData)
-        if ret != ShareDefine.EntFBAskRet_OK:
-            return
-        
-        if not FBLogic.OnEnterFBEvent(curPlayer, mapID, lineID, tick):
-            GameWorld.DebugLog("    OnEnterFBEvent False!", curPlayer.GetPlayerID())
-            NotifyCode(curPlayer, "SingleEnterDefaul")
-            return
-        
-    # 需要动态分布线路的地图,发送到跨服服务器进行分配
-    if mapID in ChConfig.Def_CrossDynamicLineMap:
-        extendInfo = {}
-        msgDict = {"PlayerID":curPlayer.GetPlayerID(), "MapID":mapID, "FuncLineID":lineID, "LV":curPlayer.GetLV()}
-        if extendInfo:
-            msgDict.update(extendInfo)
-        GameWorld.SendMsgToCrossServer(ShareDefine.ClientServerMsg_EnterFB, msgDict)
-    else:
-        isSend = GY_Query_CrossRealmReg.RegisterEnterCrossServer(curPlayer, mapID, lineID=lineID)
-        if not isSend:
-            return
-    curPlayer.SetDict(ChConfig.Def_PlayerKey_RequestEnterCrossServerTick, tick)
-    return
-
 ##玩家进入副本
 # @param curPlayer 玩家实例
 # @param mapID 地图ID
@@ -2764,10 +2675,6 @@
     elif type_Price == IPY_GameWorld.TYPE_Price_Silver_Paper:
         __PayMoneyAfterBySilverPaper(curPlayer, price)
         
-    #转盘活动
-    #PlayerActTurntable.OnPlayerUseGold(curPlayer, type_Price, price)
-    #轮回殿
-    #PlayerActLunhuidian.AddLunhuidianValue(curPlayer, PlayerActLunhuidian.AwardType_PayMoney, type_Price, price)
     if type_Price == ShareDefine.TYPE_Price_Xiantao:
         # 累加未结算战锤 - 经验
         unXiantaoCntExp = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_UnXiantaoCntExp)
@@ -2850,17 +2757,6 @@
 #  @param price ,货币价格
 #  @return None
 def __PayMoneyAfterByGoldMoney(curPlayer, type_Price, price, costType, infoDict, costVIPGold):
-        
-    
-    # 充值活动玩家消耗元宝处理
-    #PlayerGoldAction.PlayerUseGold(curPlayer, price)
-    
-    # 消费返利
-    if costType not in ChConfig.CostRebate_DisableType:
-        PlayerCostRebate.AddCostRebateGold(curPlayer, costType, price, infoDict)
-    else:
-        GameWorld.DebugLog("不计入消费活动的消费类型!costType=%s" % costType, curPlayer.GetPlayerID())
-        
     return
 
 ## 付款以后后续操作(金票)
@@ -3389,7 +3285,6 @@
             #aftFreePoint = curPlayer.GetFreePoint()
             if aftLV > befLV:
                 curPlayer.SetLV(aftLV, False) # 这里不再通知GameServer
-                #PlayerTongTianLing.AddTongTianTaskValue(curPlayer, ChConfig.TTLTaskType_LVUp, aftLV - befLV)
                 PlayerTask.UpdTaskValue(curPlayer, ChConfig.TaskType_LV)
                 ChPlayer.OnPlayerBaseInfoChange(curPlayer, IPY_PlayerDefine.CDBPlayerRefresh_LV) # 等级
                 
@@ -3602,9 +3497,6 @@
 
         #杀死所有召唤的灵
         KillPlayerSummonNPC(curPlayer)
-        
-        #召唤回出战的宠物
-        PetControl.ReCallFightPet(curPlayer)
         
         #清空使用技能记录
         curPlayer.ClearUseSkillRec()
@@ -4020,7 +3912,7 @@
     
     if crossActName and crossActIDKey:
         playerActID = curPlayer.NomalDictGetProperty(crossActIDKey)
-        actInfo = CrossRealmPlayer.GetPlayerCrossActInfo(curPlayer, crossActName)
+        actInfo = {}#GetPlayerCrossActInfo(curPlayer, crossActName)
         actID = actInfo.get(ShareDefine.ActKey_ID, 0)
         cfgID = actInfo.get(ShareDefine.ActKey_CfgID, 0)
         state = actInfo.get(ShareDefine.ActKey_State, 0)
@@ -4323,11 +4215,8 @@
 def GetFBFuncLineID(curPlayer): return 0
 
 ## 跨服状态所在地图ID: 0-非跨服状态,非0-跨服状态对应的地图ID
-def GetCrossMapID(curPlayer): return curPlayer.GetExAttr5()
+def GetCrossMapID(curPlayer): return 0
 def SetCrossMapID(curPlayer, value):
-    curPlayer.SetExAttr5(value, False, True)
-    if not value:
-        CrossPlayerData.ClearCrossSyncDataCache(curPlayer)
     return
 
 ## 铜钱点, 支持铜钱超20亿
@@ -4432,9 +4321,6 @@
     #if value < beforeFightPower:
     #    DataRecordPack.DR_FightPowerChangeInfo(curPlayer, beforeFightPower)
     GameWorld.DebugLog("总战力: %s, beforeFightPower=%s" % (value, beforeFightPower), curPlayer.GetPlayerID())
-    #PlayerBillboard.UpdatePlayerFPTotalBillboard(curPlayer)
-    #if beforeFightPower != totalFightPower:
-    #    CrossPlayerData.OnPlayerFightPowerChange(curPlayer)
     ChPlayer.OnPlayerBaseInfoChange(curPlayer, IPY_PlayerDefine.CDBPlayerRefresh_FightPower) # 战力
     return
 
@@ -4724,13 +4610,6 @@
 #-------------------------------------------------------------------------------
 ## 设置玩家字典值, 存库
 def NomalDictSetProperty(curPlayer, key, value, dType=0):
-    if CrossPlayerData.IsNeedProcessCrossPlayer(curPlayer) and key not in \
-        [ChConfig.Def_PlayerKey_CrossRegisterMap]:
-        playerID = curPlayer.GetPlayerID()
-        changeDict = PyGameData.g_crossPlayerDictChangeInfo.get(playerID, {})
-        changeDict[(key, dType)] = value
-        PyGameData.g_crossPlayerDictChangeInfo[playerID] = changeDict
-        
     if value == 0:
         curPlayer.NomalDictDelProperty(key, dType)
         return 0
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCostRebate.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCostRebate.py
deleted file mode 100644
index 8803cce..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCostRebate.py
+++ /dev/null
@@ -1,321 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-##@package Player.PlayerCostRebate
-#
-# @todo:消费返利活动
-# @author hxp
-# @date 2018-7-16
-# @version 1.0
-#
-# 详细描述: 消费返利活动
-#
-#-------------------------------------------------------------------------------
-#"""Version = 2018-7-16 12:00"""
-#-------------------------------------------------------------------------------
-
-import PyGameData
-import ShareDefine
-import PlayerControl
-import IpyGameDataPY
-import ItemControler
-import ChPyNetSendPack
-import DataRecordPack
-import IPY_GameWorld
-import NetPackCommon
-import GameWorld
-import ChConfig
-
-def GetTemplateID(cfgID, dayIndex):
-    if cfgID == None or dayIndex == None:
-        return 0
-    ipyData = IpyGameDataPY.GetIpyGameData("ActCostRebate", cfgID)
-    if not ipyData:
-        return 0
-    templateIDList = ipyData.GetTemplateIDList()
-    templateID = templateIDList[-1] if dayIndex >= len(templateIDList) else templateIDList[dayIndex]
-    return templateID
-
-def OnPlayerLogin(curPlayer):
-    
-    for actInfo in PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_CostRebate, {}).values():
-        actNum = actInfo.get(ShareDefine.ActKey_ActNum, 0)
-        isReset = __CheckPlayerCostRebateAction(curPlayer, actNum)
-        if not isReset:
-            # 活动中同步活动信息
-            if actInfo.get(ShareDefine.ActKey_State):
-                Sync_CostRebateActionInfo(curPlayer, actNum)
-                Sync_CostRebateInfo(curPlayer, actNum)
-    return
-
-def RefreshCostRebateActionInfo(actNum):
-    ## 收到GameServer同步的活动信息,刷新活动信息
-    playerManager = GameWorld.GetPlayerManager()
-    for index in xrange(playerManager.GetPlayerCount()):
-        curPlayer = playerManager.GetPlayerByIndex(index)
-        if not GameWorld.IsNormalPlayer(curPlayer):
-            continue
-        __CheckPlayerCostRebateAction(curPlayer, actNum)
-    return
-
-def __CheckPlayerCostRebateAction(curPlayer, actNum):
-    ## 检查玩家消费返利活动数据信息
-    
-    playerID = curPlayer.GetPlayerID()
-    
-    actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_CostRebate, actNum)
-    actID = actInfo.get(ShareDefine.ActKey_ID, 0)
-    state = actInfo.get(ShareDefine.ActKey_State, 0)
-    
-    playerActID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CostRebateID % actNum) # 玩家身上的活动ID
-    
-    # 活动ID 相同的话不处理
-    if actID == playerActID:
-        GameWorld.DebugLog("消费返利活动ID不变,不处理!actNum=%s,actID=%s" % (actNum, actID), curPlayer.GetPlayerID())
-        return
-    actWorldLV = actInfo.get(ShareDefine.ActKey_WorldLV, 0)
-    playerWorldLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CostRebateWorldLV % actNum)
-    templateID = GetTemplateID(actInfo.get(ShareDefine.ActKey_CfgID, 0), actInfo.get(ShareDefine.ActKey_DayIndex, 0))
-    playerTemplateID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CostRebateTemplateID % actNum)
-    
-    GameWorld.DebugLog("消费返利重置! actNum=%s,actID=%s,playerActID=%s,state=%s,templateID=%s,playerTemplateID=%s" 
-                       % (actNum, actID, playerActID, state, templateID, playerTemplateID), playerID)
-    
-    # 未领取的奖励邮件发放
-    __SendCostRebateMail(curPlayer, playerTemplateID, playerWorldLV, actNum)
-    
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CostRebateID % actNum, actID)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CostRebateTemplateID % actNum, templateID)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CostRebateWorldLV % actNum, actWorldLV)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CostRebateGold % actNum, 0)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CostRebateAwardRecord % actNum, 0)
-    
-    Sync_CostRebateActionInfo(curPlayer, actNum)
-    Sync_CostRebateInfo(curPlayer, actNum)
-    return True
-
-def __SendCostRebateMail(curPlayer, playerTemplateID, playerWorldLV, actNum):
-    # 未领取的奖励邮件发放
-    
-    if not playerTemplateID:
-        return
-    
-    costGold = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CostRebateGold % actNum)
-    if not costGold:
-        return
-    
-    ipyDataList = IpyGameDataPY.GetIpyGameDataList("CostRebateTemplate", playerTemplateID)
-    if not ipyDataList:
-        return
-    job = curPlayer.GetJob()
-    playerID = curPlayer.GetPlayerID()
-    batchPlayerIDList, batchAddItemList, batchParamList = [], [], []
-    awardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CostRebateAwardRecord % actNum)
-    
-    for ipyData in ipyDataList:
-        awardIndex = ipyData.GetAwardIndex()
-        if awardRecord & pow(2, awardIndex):
-            continue
-        
-        needCostGold = ipyData.GetNeedCostGold()
-        if costGold < needCostGold:
-            continue
-        awardRecord |= pow(2, awardIndex) 
-        
-        awardItemList = __GetItemList(ipyData.GetAwardItemList(), job, playerWorldLV)
-        batchPlayerIDList.append([playerID])
-        batchAddItemList.append(awardItemList)
-        batchParamList.append([needCostGold])
-        
-    if batchPlayerIDList:
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CostRebateAwardRecord % actNum, awardRecord)
-        PlayerControl.SendMailBatch("ConsumptionRebateMail", batchPlayerIDList, batchAddItemList, batchParamList)
-        
-    return
-
-
-def __GetItemList(itemDict, job, worldLV):
-    #{世界等级范围:[(物品ID,个数,是否绑定), ...]},若物品ID要区分职业则配{世界等级范围:[({职业:物品ID,..},个数,是否绑定), ...]}
-    itemList = []
-    itemInfoList = GameWorld.GetDictValueByRangeKey(itemDict, worldLV, [])
-    for itemInfo in itemInfoList:
-        if type(itemInfo[0]) == dict:
-            itemID = itemInfo[0].get(job)
-            if not itemID:
-                GameWorld.ErrLog('累计充值奖励未配置该职业itemDict=%s,job=%s'%(itemDict, job))
-                continue
-        else:
-            itemID = itemInfo[0]
-        itemList.append([itemID, itemInfo[1], itemInfo[2]])
-    return itemList
-
-
-def AddCostRebateGold(curPlayer, costType, costGold, infoDict):
-    if costGold <= 0:
-        return
-    if costType in ChConfig.CostRebate_DisableType:
-        GameWorld.DebugLog("不计入消费返利的消费类型!costType=%s" % costType, curPlayer.GetPlayerID())
-        return
-    
-    for actInfo in PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_CostRebate, {}).values():
-        actNum = actInfo.get(ShareDefine.ActKey_ActNum, 0)
-        
-        if not actInfo.get(ShareDefine.ActKey_State):
-            GameWorld.DebugLog("消费返利活动当前未开启!actNum=%s" % actNum)
-            continue
-        
-        actID = actInfo.get(ShareDefine.ActKey_ID)
-        templateID = GetTemplateID(actInfo.get(ShareDefine.ActKey_CfgID, 0), actInfo.get(ShareDefine.ActKey_DayIndex, 0))
-        if not actID or not templateID:
-            GameWorld.ErrLog("消费返利活动数据异常!actNum=%s,actID=%s,templateID=%s" % (actNum, actID, templateID), curPlayer.GetPlayerID())
-            continue
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CostRebateID % actNum, actID)
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CostRebateTemplateID % actNum, templateID)
-        
-        curCostGold = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CostRebateGold % actNum)
-        updCostGold = curCostGold + costGold
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CostRebateGold % actNum, updCostGold)
-        Sync_CostRebateInfo(curPlayer, actNum)
-        GameWorld.DebugLog("玩家消费返利活动: actNum=%s,actID=%s,templateID=%s,curCostGold=%s,costGold=%s,updCostGold=%s" 
-                           % (actNum, actID, templateID, curCostGold, costGold, updCostGold), curPlayer.GetPlayerID())
-    return
-
-def OnGetCostRebateAward(curPlayer, awardIndex, actNum):
-    ## 领取消费返利奖励
-    
-    actNum = GameWorld.ToIntDef(actNum, 0)
-    if actNum <= 0:
-        GameWorld.DebugLog("没有该活动编号! actNum=%s" % actNum)
-        return
-    
-    playerID = curPlayer.GetPlayerID()
-    
-    actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_CostRebate, actNum)
-    costRebateID = actInfo.get(ShareDefine.ActKey_ID, 0)
-    state = actInfo.get(ShareDefine.ActKey_State, 0)
-    templateID = GetTemplateID(actInfo.get(ShareDefine.ActKey_CfgID, 0), actInfo.get(ShareDefine.ActKey_DayIndex, 0))
-    if not state or not templateID:
-        GameWorld.DebugLog("没有消费返利活动,无法领奖!actNum=%s,state=%s,templateID=%s" % (actNum, state, templateID), playerID)
-        return
-    
-    playerCostRebateID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CostRebateID % actNum) # 玩家身上的活动ID
-    if costRebateID != playerCostRebateID:
-        return
-    
-    awardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CostRebateAwardRecord % actNum)
-    if awardRecord & pow(2, awardIndex):
-        GameWorld.DebugLog("已经领取过该消费返利活动奖励!actNum=%s,awardIndex=%s,awardRecord=%s" % (actNum, awardIndex, awardRecord), playerID)
-        return
-    
-    ipyDataList = IpyGameDataPY.GetIpyGameDataList("CostRebateTemplate", templateID)
-    if not ipyDataList:
-        return
-    
-    awardIpyData = None
-    for ipyData in ipyDataList:
-        if ipyData.GetAwardIndex() == awardIndex:
-            awardIpyData = ipyData
-            break
-        
-    if not awardIpyData:
-        GameWorld.DebugLog("找不到该返利活动档位索引奖励!templateID=%s,awardIndex=%s" % (templateID, awardIndex), playerID)
-        return
-    
-    needCostGold = awardIpyData.GetNeedCostGold()
-    actWorldLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CostRebateWorldLV % actNum)
-    awardItemList = __GetItemList(awardIpyData.GetAwardItemList(), curPlayer.GetJob(), actWorldLV)
-    
-    curCostGold = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CostRebateGold % actNum)
-    if curCostGold < needCostGold:
-        GameWorld.DebugLog("所需消费仙玉数不足,无法领取!templateID=%s,awardIndex=%s,needCostGold=%s,curCostGold=%s" 
-                           % (templateID, awardIndex, needCostGold, curCostGold), playerID)
-        return
-    
-    if not ItemControler.CheckPackSpaceEnough(curPlayer, awardItemList):
-        return
-    
-    awardRecord |= pow(2, awardIndex)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CostRebateAwardRecord % actNum, awardRecord)
-    Sync_CostRebateInfo(curPlayer, actNum)
-    
-    notifyKey = awardIpyData.GetNotifyKey()
-    if notifyKey:
-        PlayerControl.WorldNotify(0, notifyKey, [curPlayer.GetPlayerName(), needCostGold])
-        
-    for itemID, itemCount, _ in awardItemList:
-        ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, 0, [IPY_GameWorld.rptItem])
-        
-    addDataDict = {"TemplateID":templateID, "NeedCostGold":needCostGold, "AwardIndex":awardIndex,
-                   "ItemList":str(awardItemList), "ActNum":actNum}
-    DataRecordPack.DR_FuncGiveItem(curPlayer, "CostRebateAward", addDataDict)
-    return
-
-def Sync_CostRebateInfo(curPlayer, actNum):
-    ## 通知消费返利玩家数据信息
-    playerActInfo = ChPyNetSendPack.tagMCCostRebatePlayerInfo()
-    playerActInfo.ActNum = actNum
-    playerActInfo.CostGoldTotal = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CostRebateGold % actNum)
-    playerActInfo.AwardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CostRebateAwardRecord % actNum)
-    NetPackCommon.SendFakePack(curPlayer, playerActInfo)
-    return
-
-def Sync_CostRebateActionInfo(curPlayer, actNum):
-    ## 通知消费返利活动信息
-    
-    actCostRebateInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_CostRebate, actNum)
-    if not actCostRebateInfo:
-        return
-    
-    if not actCostRebateInfo.get(ShareDefine.ActKey_State):
-        return
-    
-    cfgID = actCostRebateInfo.get(ShareDefine.ActKey_CfgID)
-    ipyData = IpyGameDataPY.GetIpyGameData("ActCostRebate", cfgID)
-    if not ipyData:
-        return
-    
-    templateIDList = ipyData.GetTemplateIDList()
-    if not templateIDList:
-        return
-    job = curPlayer.GetJob()
-    actWorldLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CostRebateWorldLV % actNum)
-    startDateStr, endDateStr = GameWorld.GetOperationActionDateStr(ipyData)
-    startDateSync = actCostRebateInfo.get(ShareDefine.ActKey_StartDateSync, startDateStr)
-    actInfo = ChPyNetSendPack.tagMCCostRebateInfo()
-    actInfo.ActNum = actNum
-    actInfo.StartDate = startDateSync
-    actInfo.EndtDate = endDateStr
-    actInfo.LimitLV = ipyData.GetLVLimit()
-    actInfo.IsDayReset = ipyData.GetIsDayReset()
-    actInfo.AwardDayInfo = []
-    for templateID in templateIDList:
-        ipyDataList = IpyGameDataPY.GetIpyGameDataList("CostRebateTemplate", templateID)
-        if not ipyDataList:
-            continue
-        
-        dayInfo = ChPyNetSendPack.tagMCCostRebateAwardDay()
-        dayInfo.AwardInfo = []
-        for ipyData in ipyDataList:
-            awardInfo = ChPyNetSendPack.tagMCCostRebateAward()
-            awardInfo.AwardIndex = ipyData.GetAwardIndex()
-            awardInfo.NeedGold = ipyData.GetNeedCostGold()
-            awardInfo.AwardItem = []
-            for itemID, itemCount, isBind in __GetItemList(ipyData.GetAwardItemList(), job, actWorldLV):
-                awardItem = ChPyNetSendPack.tagMCCostRebateAwardItem()
-                awardItem.ItemID = itemID
-                awardItem.ItemCount = itemCount
-                awardItem.IsBind = isBind
-                awardInfo.AwardItem.append(awardItem)
-            awardInfo.AwardItemCount = len(awardInfo.AwardItem)
-            
-            dayInfo.AwardInfo.append(awardInfo)
-            
-        dayInfo.AwardCount = len(dayInfo.AwardInfo)
-        actInfo.AwardDayInfo.append(dayInfo)
-        
-    actInfo.AwardDays = len(actInfo.AwardDayInfo)
-    NetPackCommon.SendFakePack(curPlayer, actInfo)
-    return
-
-
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCrossChampionship.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCrossChampionship.py
deleted file mode 100644
index 0365b79..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCrossChampionship.py
+++ /dev/null
@@ -1,249 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-##@package Player.PlayerCrossChampionship
-#
-# @todo:跨服排位争霸赛
-# @author hxp
-# @date 2022-09-21
-# @version 1.0
-#
-# 详细描述: 跨服排位争霸赛
-#
-#-------------------------------------------------------------------------------
-#"""Version = 2022-09-21 21:30"""
-#-------------------------------------------------------------------------------
-
-import GameWorld
-import ShareDefine
-import PlayerControl
-import CrossRealmPlayer
-import ChPyNetSendPack
-import NetPackCommon
-import IpyGameDataPY
-import ChConfig
-
-import random
-import time
-
-
-def DoChampionshipOpen(curPlayer):
-    DoPlayerLogin(curPlayer)
-    return
-
-def DoPlayerLogin(curPlayer):
-    if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_Championship_WorshipCount):
-        Sync_ChampionshipPlayerInfo(curPlayer)
-    return
-
-def DoPlayerOnDay(curPlayer):
-    if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_Championship_WorshipCount):
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_Championship_WorshipCount, 0)
-        Sync_ChampionshipPlayerInfo(curPlayer)        
-    return
-
-#// C1 20 跨服排位仙官申请 #tagCMChampionshipOfficialApply
-#
-#struct    tagCMChampionshipOfficialApply
-#{
-#    tagHead        Head;
-#    BYTE        ZoneID;        //仙官数据分区ID
-#    WORD        MainOfficialID;    //界主官职ID
-#    WORD        OfficialID;    //申请官职ID
-#    BYTE        Cancel;        //是否取消申请,默认0-申请;1-取消申请
-#};
-def OnChampionshipOfficialApply(index, clientData, tick):
-    if GameWorld.IsCrossServer():
-        return
-    
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    playerID = curPlayer.GetPlayerID()
-    
-    zoneID = clientData.ZoneID
-    mainOfficialID = clientData.MainOfficialID
-    officialID = clientData.OfficialID
-    cancel = clientData.Cancel
-    
-    realmLV = curPlayer.GetOfficialRank()
-    needRealmLV = IpyGameDataPY.GetFuncCfg("CrossChamOfficial", 3)
-    if realmLV < needRealmLV:
-        GameWorld.DebugLog("所需境界不足,无法申请仙官! realmLV(%s) < %s" % (realmLV, needRealmLV), playerID)
-        return
-    
-    # 发送跨服服务器
-    dataMsg = {"zoneID":zoneID, "mainOfficialID":mainOfficialID, "officialID":officialID, "cancel":cancel,
-               "playerID":playerID, "PropData":CrossRealmPlayer.GetPlayerCrossPropDataShort(curPlayer)}
-    GameWorld.SendMsgToCrossServer(ShareDefine.ClientServerMsg_ChampionshipOfficialApply, dataMsg)
-    return
-
-
-#// C1 21 跨服排位仙官挑战 #tagCMChampionshipOfficialChallenge
-#
-#struct    tagCMChampionshipOfficialChallenge
-#{
-#    tagHead        Head;
-#    BYTE        ZoneID;        //仙官数据分区ID
-#    WORD        MainOfficialID;    //界主官职ID
-#    WORD        OfficialID;    //挑战的目标官职ID
-#    DWORD        PlayerID;        //挑战时的目标玩家ID
-#};
-def OnChampionshipOfficialChallenge(index, clientData, tick):
-    if GameWorld.IsCrossServer():
-        return
-    
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    playerID = curPlayer.GetPlayerID()
-    
-    zoneID = clientData.ZoneID
-    mainOfficialID = clientData.MainOfficialID
-    officialID = clientData.OfficialID
-    tagPlayerID = clientData.PlayerID
-    
-    realmLV = curPlayer.GetOfficialRank()
-    needRealmLV = IpyGameDataPY.GetFuncCfg("CrossChamOfficial", 3)
-    if realmLV < needRealmLV:
-        GameWorld.DebugLog("所需境界不足,无法挑战仙官! realmLV(%s) < %s" % (realmLV, needRealmLV), playerID)
-        return
-    
-    # 发送跨服服务器
-    dataMsg = {"zoneID":zoneID, "mainOfficialID":mainOfficialID, "officialID":officialID,
-               "playerID":playerID, "tagPlayerID":tagPlayerID, "PropData":CrossRealmPlayer.GetPlayerCrossPropDataShort(curPlayer)}
-    GameWorld.SendMsgToCrossServer(ShareDefine.ClientServerMsg_ChampionshipOfficialChallenge, dataMsg)
-    return
-
-
-#// C1 22 跨服排位竞猜 #tagCMChampionshipGuess
-#
-#struct    tagCMChampionshipGuess
-#{
-#    tagHead        Head;
-#    BYTE        ZoneID;        //排位数据分区ID
-#    BYTE        GuessType;    //竞猜类型 8-8强;4-4强排位
-#    DWORD        PlayerID;        //目标玩家ID
-#    BYTE        GuessCount;    //投注/追加份数
-#    BYTE        GuessRank;    // 竞猜名次,没有名次的竞猜默认0;1-代表第一名
-#};
-def OnChampionshipGuess(index, clientData, tick):
-    if GameWorld.IsCrossServer():
-        return
-    
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    playerID = curPlayer.GetPlayerID()
-    zoneID = clientData.ZoneID
-    guessType = clientData.GuessType
-    tagPlayerID = clientData.PlayerID
-    guessCount = clientData.GuessCount
-    guessRank = clientData.GuessRank
-    
-    moneyType, moneyValue = IpyGameDataPY.GetFuncEvalCfg("CrossChamGuess", 1)
-    guessMoney = moneyValue * guessCount
-    if guessMoney <= 0:
-        return
-    
-    if not PlayerControl.HaveMoney(curPlayer, moneyType, guessMoney):
-        return
-    
-    if not GameWorld.SetPlayerTickTime(curPlayer, ChConfig.TYPE_Player_Tick_Championship, tick):
-        PlayerControl.NotifyCode(curPlayer, "RequestLater")
-        return
-    
-    # 发送跨服服务器
-    dataMsg = {"zoneID":zoneID, "guessType":guessType, "playerID":playerID, "tagPlayerID":tagPlayerID,
-               "guessRank":guessRank, "guessMoney":guessMoney, "moneyType":moneyType, "exDataType":"ChampionshipGuess"}
-    GameWorld.SendMsgToCrossServer(ShareDefine.ClientServerMsg_ChampionshipGuess, dataMsg)
-    return
-
-
-#// C1 23 跨服排位膜拜 #tagCMChampionshipWorship
-#
-#struct    tagCMChampionshipWorship
-#{
-#    tagHead        Head;
-#    BYTE        ZoneID;        //仙官数据分区ID
-#    DWORD        PlayerID;        //目标玩家ID
-#};
-def OnChampionshipWorship(index, clientData, tick):
-    if GameWorld.IsCrossServer():
-        return
-    
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    playerID = curPlayer.GetPlayerID()
-    zoneID = clientData.ZoneID
-    tagPlayerID = clientData.PlayerID
-    
-    worshipCountMax = IpyGameDataPY.GetFuncCfg("CrossChamWorship", 1)
-    if worshipCountMax:
-        worshipCountToday = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_Championship_WorshipCount)
-        if worshipCountToday >= worshipCountMax:
-            GameWorld.DebugLog("膜拜次数不足! worshipCountToday=%s >= %s" % (worshipCountToday, worshipCountMax), curPlayer.GetPlayerID())
-            return False
-        
-    if not GameWorld.SetPlayerTickTime(curPlayer, ChConfig.TYPE_Player_Tick_Championship, tick):
-        PlayerControl.NotifyCode(curPlayer, "RequestLater")
-        return
-    
-    # 发送跨服服务器
-    dataMsg = {"zoneID":zoneID, "playerID":playerID, "tagPlayerID":tagPlayerID, "exDataType":"OfficialWorship", "WorshipTime":int(time.time())}
-    GameWorld.SendMsgToCrossServer(ShareDefine.ClientServerMsg_ChampionshipWorship, dataMsg)
-    return
-
-def GameServer_Championship(curPlayer, msgData):
-    
-    playerID = curPlayer.GetPlayerID()
-    
-    msgType = msgData[0]
-    if msgType == "ChampionshipGuess":
-        dataMsg = msgData[1]
-        if not isinstance(dataMsg, dict) or "moneyType" not in dataMsg:
-            return
-        moneyType = dataMsg["moneyType"]
-        guessMoney = dataMsg["guessMoney"]
-        infoDict = dataMsg
-        PlayerControl.PayMoney(curPlayer, moneyType, guessMoney, msgType, infoDict)
-        
-    elif msgType == "OfficialWorship":
-        dataMsg = msgData[1]
-        worshipTime = dataMsg["WorshipTime"]
-        worshipDouble = dataMsg.get("worshipDouble", 0)
-        if GameWorld.CheckTimeIsSameServerDayEx(worshipTime):
-            worshipCountToday = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_Championship_WorshipCount) + 1
-            worshipCountMax = IpyGameDataPY.GetFuncCfg("CrossChamWorship", 1)
-            if worshipCountToday > worshipCountMax:
-                return
-            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_Championship_WorshipCount, worshipCountToday)
-            GameWorld.DebugLog("更新膜拜次数! worshipCountToday=%s" % worshipCountToday, playerID)
-            Sync_ChampionshipPlayerInfo(curPlayer)
-            
-        gongdePointRange = IpyGameDataPY.GetFuncEvalCfg("CrossChamWorship", 2) # 随机奖励功德点范围
-        if len(gongdePointRange) != 2:
-            return
-        gongdePoint = random.randint(gongdePointRange[0], gongdePointRange[1])
-        GameWorld.DebugLog("膜拜随机功德点: gongdePoint=%s" % gongdePoint, playerID)
-        doubleHMList = IpyGameDataPY.GetFuncEvalCfg("CrossChamWorship", 3) # 双倍膜拜时间范围
-        if worshipDouble and len(doubleHMList) == 2:
-            fromHour, fromMinute = doubleHMList[0]
-            toHour, toMinute = doubleHMList[1]
-            serverTime = GameWorld.GetCurrentTime()
-            curHour, curMinute = serverTime.hour, serverTime.minute
-            fromValue = fromHour * 100 + fromMinute
-            toValue = toHour * 100 + toMinute
-            curValue = curHour * 100 + curMinute
-            if fromValue <= curValue <= toValue:
-                gongdePoint *= 2
-                GameWorld.DebugLog("膜拜双倍功德点: gongdePoint=%s" % gongdePoint, playerID)
-            else:
-                GameWorld.DebugLog("非双倍膜拜期间: doubleHM(%s~%s), curHM=%s" % (fromValue, toValue, curValue), playerID)
-        
-        if gongdePoint:
-            PlayerControl.GiveMoney(curPlayer, ShareDefine.TYPE_Price_GongdePoint, gongdePoint, "OfficialWorship")
-            
-    return
-
-def Sync_ChampionshipPlayerInfo(curPlayer):
-    clientPack = ChPyNetSendPack.tagMCChampionshipPlayerInfo()
-    clientPack.WorshipCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_Championship_WorshipCount)
-    NetPackCommon.SendFakePack(curPlayer, clientPack)
-    return
-
-    
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCrossRealmPK.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCrossRealmPK.py
deleted file mode 100644
index d2a64f0..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCrossRealmPK.py
+++ /dev/null
@@ -1,798 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-##@package Player.PlayerCrossRealmPK
-#
-# @todo:跨服PK竞技场
-# @author hxp
-# @date 2018-12-21
-# @version 1.0
-#
-# 详细描述: 跨服PK竞技场
-#
-#-------------------------------------------------------------------------------
-#"""Version = 2018-12-21 18:00"""
-#-------------------------------------------------------------------------------
-
-import ShareDefine
-import PlayerControl
-import NetPackCommon
-import IpyGameDataPY
-import ChPyNetSendPack
-import CrossRealmPlayer
-import PlayerTongTianLing
-import DataRecordPack
-import PlayerWeekParty
-import IPY_GameWorld
-import ItemControler
-import ItemCommon
-import GameWorld
-import ChConfig
-import GameObj
-
-def DoPlayerOnDay(curPlayer):
-    if GameWorld.IsCrossServer():
-        return
-    totalScore = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_TotalScore)
-    if not totalScore:
-        return
-    
-    zoneID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_ZoneID)
-    seasonID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_SeasonID)
-    
-    # 邮件发放未领取的每日PK次数奖励
-    dayPKCountAwardDict = IpyGameDataPY.GetFuncEvalCfg("CrossRealmPKAward", 1, {})
-    dayPKCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_TodayPKCount)
-    dayPKCountAwardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_DayPKCountAwardState)
-    SendDayPKAwardByMail(curPlayer, zoneID, seasonID, "PKCount", dayPKCount, dayPKCountAwardState, dayPKCountAwardDict, "CrossServer1")
-    
-    # 邮件发放未领取的每日胜利次数奖励
-    dayWinCountAwardDict = IpyGameDataPY.GetFuncEvalCfg("CrossRealmPKAward", 2, {})
-    dayWinCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_TodayWinCount)
-    dayWinCountAwardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_DayWinCountAwardState)
-    SendDayPKAwardByMail(curPlayer, zoneID, seasonID, "WinCount", dayWinCount, dayWinCountAwardState, dayWinCountAwardDict, "CrossServer2")
-    
-    # 重置每日奖励状态
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_TodayPKCount, 0)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_TodayWinCount, 0)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_TodayBuyCount, 0)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_ItemAddCount, 0)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_RefreshCount, 0)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_DayPKCountAwardState, 0)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_DayWinCountAwardState, 0)
-    SyncCrossRealmPKPlayerInfo(curPlayer)
-    SyncCrossRealmPKAwardState(curPlayer)
-    return
-
-def DoPlayerLogin(curPlayer):
-    if GameWorld.IsCrossServer():
-        return
-    
-    mapZoneID = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_CrossPKZoneID)
-    mapSeasonID = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_CrossPKSeasonID)
-    if not mapZoneID or not mapSeasonID:
-        return
-    
-    if not __CheckResetPlayerCrossPKData(curPlayer, mapZoneID, mapSeasonID):
-        SyncCrossRealmPKPlayerInfo(curPlayer)
-        SyncCrossRealmPKAwardState(curPlayer)
-        SyncCrossRealmPKHisSeasonInfo(curPlayer)
-    return
-
-def IsCrossRealmPKMatchState():
-    ## 跨服PK匹配赛是否开启
-    return False
-
-def GetCrossPKDanAwardIpyData(seasonID, awardDanLV, isLog):
-    ## 获取跨服段位奖励配置信息
-    crossZoneName = "" #GameWorld.GetCrossZoneName()
-    danLVAwardIpyData = IpyGameDataPY.GetIpyGameDataNotLog("CrossRealmPKDanAward", crossZoneName, seasonID, awardDanLV)
-    if not danLVAwardIpyData:
-        danLVAwardIpyData = IpyGameDataPY.GetIpyGameDataNotLog("CrossRealmPKDanAward", "", seasonID, awardDanLV)
-    if not danLVAwardIpyData and isLog:
-        GameWorld.ErrLog("找不到段位奖励配置: seasonID=%s, awardDanLV=%s" % (seasonID, awardDanLV))
-    return danLVAwardIpyData
-
-def OnCrossRealmPKSeasonChange(value):
-    ## 赛区赛季状态变更,规定所有赛区的赛季ID都一样,且赛季ID一定是自增的,所以这里只判断赛季ID变更即可
-    
-    if GameWorld.IsCrossServer():
-        return
-    
-    mapZoneID = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_CrossPKZoneID)
-    mapSeasonID = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_CrossPKSeasonID)
-    
-    if mapSeasonID == value:
-        GameWorld.DebugLog("跨服PK赛季信息与地图当前值相同,不处理!")
-        return
-    GameWorld.Log("跨服PK赛季信息变更: mapSeasonID=%s,value=%s" % (mapSeasonID, value))
-    mapSeasonID = value
-    
-    playerManager = GameWorld.GetPlayerManager()
-    for i in xrange(playerManager.OnlineCount()):
-        curPlayer = playerManager.OnlineAt(i)
-        if not GameWorld.IsNormalPlayer(curPlayer):
-            continue
-        
-        #检查重置玩家信息
-        __CheckResetPlayerCrossPKData(curPlayer, mapZoneID, mapSeasonID)
-        
-    return
-
-def __CheckResetPlayerCrossPKData(curPlayer, mapZoneID, mapSeasonID):
-    ## 检查玩家赛区赛季状态数据
-    
-    playerID = curPlayer.GetPlayerID()
-    zoneID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_ZoneID)
-    seasonID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_SeasonID)
-    if mapSeasonID == seasonID:
-        GameWorld.DebugLog("玩家跨服PK赛季信息相同,不处理! mapSeasonID=%s,seasonID=%s" % (mapSeasonID, seasonID), playerID)
-        return
-    GameWorld.Log("玩家跨服PK赛区赛季信息不同! 处理相关数据! mapSeasonID=%s,seasonID=%s" % (mapSeasonID, seasonID), playerID)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_SeasonID, mapSeasonID)
-    
-    playerDanLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_DanLV)
-    danLVAwardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_DanLVAwardState)
-
-    GameWorld.Log("开始新赛季,发放上赛季未领取的奖励,重置赛季数据! zoneID=%s,seasonID=%s,newSeasonID=%s,playerDanLV=%s,danLVAwardState=%s" 
-                  % (zoneID, seasonID, mapSeasonID, playerDanLV, danLVAwardState), playerID)
-    
-    # 邮件发放上赛季未领取的段位奖励、赛季奖励(排名或段位)
-    for awardDanLV in xrange(playerDanLV + 1):
-        danLVAwardIpyData = GetCrossPKDanAwardIpyData(seasonID, awardDanLV, False)
-        if not danLVAwardIpyData:
-            continue
-        awardItemList = danLVAwardIpyData.GetDanLVAwardList()
-        if not awardItemList:
-            continue
-        if pow(2, awardDanLV) & danLVAwardState:
-            GameWorld.DebugLog("    已经领取过该段位达标奖励!awardDanLV=%s,danLVAwardState=%s" % (awardDanLV, danLVAwardState), playerID)
-            continue
-        eventName = "DanLV"
-        GameWorld.Log("    邮件补发未领取的段位达标奖励!awardDanLV=%s,danLVAwardState=%s,awardItemList=%s" 
-                      % (awardDanLV, danLVAwardState, awardItemList), playerID)
-        mailDetail = {"EventName":eventName, "zoneID":zoneID, "seasonID":seasonID, "awardDanLV":awardDanLV, 
-                      "danLVAwardState":danLVAwardState, "mapSeasonID":mapSeasonID}
-        PlayerControl.SendMailByKey("CrossServer3", [playerID], awardItemList, [seasonID, awardDanLV], detail=mailDetail)
-        DR_GetCrossPKAward(curPlayer, zoneID, seasonID, eventName, True, mailDetail)
-        
-    # 查询 GameServer 玩家赛季排名
-    if not curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_SeasonAwardState) and playerDanLV:
-        OnQueryCrossPKSeasonOrderAward(curPlayer, zoneID, seasonID, True)
-        
-    # 重置状态
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_TotalScore, 0)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_DanLV, 0)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_PKCount, 0)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_WinCount, 0)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_CWinCount, 0)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_CLoseCount, 0)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_TodayPKCount, 0)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_TodayWinCount, 0)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_TodayBuyCount, 0)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_ItemAddCount, 0)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_RefreshCount, 0)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_DayPKCountAwardState, 0)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_DayWinCountAwardState, 0)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_DanLVAwardState, 0)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_SeasonAwardState, 0)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_ZoneID, mapZoneID)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_SeasonID, mapSeasonID)
-    
-    SyncCrossRealmPKPlayerInfo(curPlayer)
-    SyncCrossRealmPKAwardState(curPlayer)
-    
-    # 重置商店物品
-    #FunctionNPCCommon.ShopItemOnCrossPKSeasonChange(curPlayer)
-    return True
-
-#// C1 01 跨服PK匹配 #tagCMCrossRealmPKMatch
-#
-#struct    tagCMCrossRealmPKMatch
-#{
-#    tagHead        Head;
-#    BYTE        Type;    // 0-查询匹配;1-刷新匹配
-#};
-def OnCrossRealmPKMatch(index, clientData, tick):
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    accID = curPlayer.GetAccID()
-    playerID = curPlayer.GetPlayerID()
-    requestType = clientData.Type
-    
-    GameWorld.DebugLog("跨服PK匹配请求: type=%s,accID=%s" % (requestType, accID), playerID)
-    
-    # 刷新匹配
-    if requestType == 1:
-        if not CheckCanMatch(curPlayer):
-            return
-        
-        refreshCount  = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_RefreshCount)
-        freeRefreshCountMax = IpyGameDataPY.GetFuncCfg("CrossRealmPKMatchRefresh", 1)
-        if freeRefreshCountMax <= 0 or refreshCount < freeRefreshCountMax:
-            GameWorld.DebugLog("免费刷新: refreshCount=%s < %s" % (refreshCount, freeRefreshCountMax), playerID)
-        else:
-            refreshBuyCount = max(0, refreshCount - freeRefreshCountMax)
-            refreshBuyCountMax = IpyGameDataPY.GetFuncCfg("CrossRealmPKMatchRefresh", 2)
-            if refreshBuyCountMax and refreshBuyCount >= refreshBuyCountMax:
-                GameWorld.DebugLog("购买刷新次数已达每日上限! refreshBuyCount=%s >= %s" % (refreshBuyCount, refreshBuyCountMax), playerID)
-                return
-            costMoney = eval(IpyGameDataPY.GetFuncCompileCfg("CrossRealmPKMatchRefresh", 3))
-            moneyType = IpyGameDataPY.GetFuncCfg("CrossRealmPKMatchRefresh", 4)
-            GameWorld.DebugLog("付费刷新: refreshCount=%s,refreshBuyCount=%s,costMoney=%s,moneyType=%s" 
-                               % (refreshCount, refreshBuyCount, costMoney, moneyType), playerID)
-            if not PlayerControl.PayMoney(curPlayer, moneyType, costMoney, ChConfig.Def_Cost_CrossRealmPK, {"Event":"Refresh", "refreshBuyCount":refreshBuyCount}):
-                return
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_RefreshCount, refreshCount + 1)
-        SyncCrossRealmPKPlayerInfo(curPlayer)
-        
-    dataMsg = {
-               "requestType":requestType,
-               "seasonID":GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_CrossPKSeasonID), # 赛季ID
-               "zoneID":GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_CrossPKZoneID), # PK赛区
-               "playerID":playerID,
-               "fightPower":PlayerControl.GetFightPower(curPlayer),
-               }
-    GameWorld.SendMsgToCrossServer(ShareDefine.ClientServerMsg_PKMatch, dataMsg)
-    GameWorld.DebugLog("发送请求匹配到跨服服务器 dataMsg=%s" % str(dataMsg), playerID)
-    return
-
-def CheckCanMatch(curPlayer):
-    ## 可否匹配、挑战
-    playerID = curPlayer.GetPlayerID()
-    if GameWorld.IsCrossServer():
-        GameWorld.DebugLog("跨服服务器无法发起匹配!", playerID)
-        return
-    
-    if not CrossRealmPlayer.IsCrossServerOpen():
-        PlayerControl.NotifyCode(curPlayer, "CrossMatching18")
-        return
-    
-    if GameWorld.GetMap().GetMapFBType() != IPY_GameWorld.fbtNull:
-        GameWorld.DebugLog("副本中,无法进行跨服匹配!", playerID)
-        return
-    
-    if curPlayer.GetPlayerAction() == IPY_GameWorld.paDie or GameObj.GetHP(curPlayer) == 0:
-        #GameWorld.DebugLog("已死亡,无法进行跨服匹配!", playerID)
-        return
-    
-    if GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_CrossPKSeasonState) != 1:
-        GameWorld.DebugLog("OnCrossRealmPKMatch 跨服赛季未开启,不可进行匹配!", playerID)
-        #PlayerControl.NotifyCode(curPlayer, "SeasonIsNotOpen")
-        return
-    
-    if not IsCrossRealmPKMatchState():
-        GameWorld.DebugLog("OnCrossRealmPKMatch 跨服匹配未开启,不可进行匹配!", playerID)
-        #PlayerControl.NotifyCode(curPlayer, "MatchIsNotOpen")
-        return
-    
-    return True
-
-def CheckHavePKCount(curPlayer):
-    ## 检查是否有PK次数
-    dayFreeMatchCountMax = IpyGameDataPY.GetFuncCfg("CrossRealmPKMatchCount", 1)
-    if dayFreeMatchCountMax:
-        todayPKCount  = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_TodayPKCount)
-        todayBuyCount  = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_TodayBuyCount)
-        todayItemAddCount  = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_ItemAddCount)
-        
-        if todayPKCount >= (dayFreeMatchCountMax + todayBuyCount + todayItemAddCount):
-            GameWorld.DebugLog("PK次数不足,无法发起匹配! todayPKCount=%s >= (dayFreeMatchCountMax=%s + todayBuyCount=%s + todayItemAddCount=%s)" 
-                               % (todayPKCount, dayFreeMatchCountMax, todayBuyCount, todayItemAddCount), curPlayer.GetPlayerID())
-            return False
-    return True
-
-def CrossServerMsg_PKOverInfo(curPlayer, overInfo):
-    ## 收到跨服服务器的PK结算信息
-    playerID = curPlayer.GetPlayerID()
-    zoneID, seasonID, timeStr, winnerID, pkScore, danLV, cWinCount, addScore, tagPlayerID, tagPlayerName = overInfo
-    isWinner = winnerID == playerID
-    GameWorld.Log("地图收到跨服PK结算: isWinner=%s,zoneID=%s,seasonID=%s,timeStr=%s,winnerID=%s,pkScore=%s,danLV=%s,cWinCount=%s,addScore=%s,tagPlayerID=%s" 
-                  % (isWinner, zoneID, seasonID, timeStr, winnerID, pkScore, danLV, cWinCount, addScore, tagPlayerID), playerID)
-    
-    isToday = GameWorld.CheckTimeIsSameServerDayEx(GameWorld.ChangeTimeStrToNum(timeStr))
-    if not __DoAddPKOverData(curPlayer, zoneID, seasonID, danLV, pkScore, cWinCount, isWinner, isToday):
-        return
-    
-    overPack = ChPyNetSendPack.tagGCCrossRealmPKOverInfo()
-    overPack.TimeStr = timeStr
-    overPack.OverType = 0
-    overPack.WinnerID = winnerID
-    overPack.RoundWinnerID = []
-    overPack.RoundCount = len(overPack.RoundWinnerID)
-    overPack.AddScore = addScore
-    overPack.Score = pkScore
-    overPack.DanLV = danLV
-    overPack.CWinCnt = cWinCount
-    overPack.TagName = tagPlayerName
-    overPack.TagNameLen = len(overPack.TagName)
-    NetPackCommon.SendFakePack(curPlayer, overPack)
-    return
-
-def __DoAddPKOverData(curPlayer, zoneID, seasonID, danLV, pkScore, cWinCount, isWinner, isToday):
-    playerID = curPlayer.GetPlayerID()
-    curSeasonID = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_CrossPKSeasonID)
-    if curSeasonID != seasonID:
-        GameWorld.Log("    非本赛季的结算信息,不处理!curSeasonID=%s,seasonID=%s" % (curSeasonID, seasonID), playerID)
-        return
-    
-    # 赛季已关闭
-    if GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_CrossPKSeasonState) != 1:
-        GameWorld.Log("    赛季已关闭,不处理!seasonID=%s" % (seasonID), playerID)
-        return
-    
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_ZoneID, zoneID)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_SeasonID, seasonID)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_SeasonDanLV % seasonID, danLV)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_SeasonScore % seasonID, pkScore)
-    
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_TotalScore, pkScore)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_DanLV, danLV)
-    
-    pkCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_PKCount) + 1
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_PKCount, pkCount)
-    GameWorld.Log("    更新数据: danLV=%s,pkScore=%s,pkCount=%s" % (danLV, pkScore, pkCount), playerID)
-    if isWinner:
-        winCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_WinCount) + 1
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_WinCount, winCount)
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_CWinCount, cWinCount)
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_CLoseCount, 0)
-        GameWorld.Log("    winner winCount=%s,cWinCount=%s" % (winCount, cWinCount), playerID)
-    else:
-        cLoseCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_CLoseCount) + 1
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_CLoseCount, cLoseCount)
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_CWinCount, 0)
-        GameWorld.Log("    loser cLoseCount=%s" % cLoseCount, playerID)
-        
-    # 同一天的话增加当日PK次数
-    if isToday:
-        todayPKCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_TodayPKCount) + 1
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_TodayPKCount, todayPKCount)
-        GameWorld.Log("    同一天的PK结算增加今日PK次数: todayPKCount=%s" % todayPKCount, playerID)
-        if isWinner:
-            todayWinCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_TodayWinCount) + 1
-            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_TodayWinCount, todayWinCount)
-            GameWorld.Log("    增加今日已获胜次数: todayWinCount=%s" % todayWinCount, playerID)
-        PlayerWeekParty.AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_CrossPK, 1)
-        PlayerTongTianLing.AddTongTianTaskValue(curPlayer, ChConfig.TTLTaskType_CrossPK, 1)
-    else:
-        GameWorld.Log("    不同天的PK结算不增加今日PK次数! ", playerID)
-        
-    SyncCrossRealmPKPlayerInfo(curPlayer)
-    return True
-
-#// C1 08 跨服PK挑战机器人结算 #tagCMCrossRealmPKRobotOver
-#
-#struct    tagCMCrossRealmPKRobotOver
-#{
-#    tagHead        Head;
-#    BYTE        IsWin;    //是否获胜
-#    DWORD        TagPlayerID;    //目标玩家ID
-#};
-def OnCrossRealmPKRobotOver(index, clientData, tick):
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    playerID = curPlayer.GetPlayerID()
-    isWinner = clientData.IsWin
-    tagPlayerID = clientData.TagPlayerID
-    
-    if GameWorld.IsCrossServer():
-        GameWorld.DebugLog("跨服服务器无法发起机器人结算!", playerID)
-        return
-    
-    if not CheckHavePKCount(curPlayer):
-        return
-    
-    SendPKOver(curPlayer, tagPlayerID, isWinner)
-    return
-
-def SendPKOver(curPlayer, tagPlayerID, isWinner):
-    ## 发送给跨服PK结算
-    playerID = curPlayer.GetPlayerID()
-    dataMsg = {
-               "playerID":playerID,
-               "tagPlayerID":tagPlayerID,
-               "isWinner":isWinner,
-               "seasonID":GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_CrossPKSeasonID), # 赛季ID
-               "pkZoneID":GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_CrossPKZoneID), # PK赛区
-               "playerName":CrossRealmPlayer.GetCrossPlayerName(curPlayer),
-               "playerJob":curPlayer.GetJob(),
-               "face":curPlayer.GetFace(),
-               "facePic":curPlayer.GetFacePic(),
-               "realmLV":curPlayer.GetOfficialRank(),
-               "fightPower":PlayerControl.GetFightPower(curPlayer),
-               "pkScore":curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_TotalScore), # 当前积分
-               "danLV":curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_DanLV), # 当前段位
-               "cWinCount":curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_CWinCount), # 连胜次数
-               }
-    GameWorld.SendMsgToCrossServer(ShareDefine.ClientServerMsg_PKOver, dataMsg)
-    GameWorld.DebugLog("同步跨服服务器PK结算: %s" % str(dataMsg), playerID)
-    return
-
-def GMSetPlayerCrossPKData(curPlayer, danLV, pkScore, cWinCount=None, resultDict=None, zoneID=0, seasonID=0):
-    ## GM设置玩家跨服PK数据,一般用于测试或修复外网数据
-    if not zoneID or not seasonID:
-        zoneID = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_CrossPKZoneID)
-        seasonID = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_CrossPKSeasonID)
-        
-    errorMsg = "" 
-    playerInfoDict = {}
-    if not zoneID or not seasonID:
-        errorMsg = "zone season or state error."
-    else:
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_DanLV, danLV)
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_TotalScore, pkScore)
-        if cWinCount >= 0:
-            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_CWinCount, cWinCount)
-            if cWinCount > 0:
-                PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_CLoseCount, 0)
-        else:
-            cWinCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_CLoseCount)
-            
-        # 请求查询跨服服务器
-        playerInfoDict = {"accID":curPlayer.GetAccID(),
-                          "playerID":curPlayer.GetPlayerID(),
-                          "playerName":CrossRealmPlayer.GetCrossPlayerName(curPlayer),
-                          "playerJob":curPlayer.GetJob(),
-                          "face":curPlayer.GetFace(),
-                          "facePic":curPlayer.GetFacePic(),
-                          "realmLV":curPlayer.GetOfficialRank(),
-                          "pkScore":pkScore, "danLV":danLV, "cWinCount":cWinCount,
-                          }
-        dataMsg = {"ZoneID":zoneID, "SeasonID":seasonID, "PlayerInfo":playerInfoDict}
-        GameWorld.SendMsgToCrossServer(ShareDefine.ClientServerMsg_PKBillboard, dataMsg)
-        SyncCrossRealmPKPlayerInfo(curPlayer)
-        
-    if resultDict:
-        resultDict.update({"zoneID":zoneID, "seasonID":seasonID, "errorMsg":errorMsg, "PlayerInfo":playerInfoDict})
-    return errorMsg
-
-#// C1 02 跨服PK购买次数 #tagCMCrossRealmPKBuy
-#
-#struct    tagCMCrossRealmPKBuy
-#{
-#    tagHead        Head;
-#};
-def OnCrossRealmPKBuy(index, clientData, tick):
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    playerID = curPlayer.GetPlayerID()
-    if not CrossRealmPlayer.IsCrossServerOpen():
-        PlayerControl.NotifyCode(curPlayer, "CrossMatching18")
-        return
-    if not IsCrossRealmPKMatchState():
-        GameWorld.DebugLog("跨服匹配未开启,不可进行购买次数!", playerID)
-        return
-    dayFreeMatchCountMax = IpyGameDataPY.GetFuncCfg("CrossRealmPKMatchCount", 1)
-    if not dayFreeMatchCountMax:
-        GameWorld.DebugLog("每日匹配次数没有限制,不需要购买次数!", playerID)
-        return
-    todayPKCount  = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_TodayPKCount)
-    todayBuyCount  = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_TodayBuyCount)
-    todayItemAddCount  = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_ItemAddCount)
-    canPKCount = dayFreeMatchCountMax + todayBuyCount + todayItemAddCount - todayPKCount
-    if canPKCount >= dayFreeMatchCountMax:
-        GameWorld.DebugLog("可PK次数不能大于每日免费次数!", playerID)
-        return
-    dayBuyCountMax = IpyGameDataPY.GetFuncCfg("CrossRealmPKMatchCount", 2)
-    #todayBuyCount  = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_TodayBuyCount)
-    if dayBuyCountMax and todayBuyCount >= dayBuyCountMax:
-        GameWorld.DebugLog("今日购买次数已满,无法购买!todayBuyCount=%s" % (todayBuyCount), playerID)
-        return
-    
-    costGold = eval(IpyGameDataPY.GetFuncCompileCfg("CrossRealmPKMatchCount", 3))
-    costMoneyList = PlayerControl.HaveMoneyEx(curPlayer, ShareDefine.TYPE_Price_Gold_Paper_Money, costGold)
-    if not costMoneyList:
-        GameWorld.DebugLog("仙玉绑玉不足: todayBuyCount=%s,costGold=%s" % (todayBuyCount, costGold), playerID)
-        return
-    
-    infoDict = {"Event":"BuyPKCount", "todayBuyCount":todayBuyCount}
-    for moneyType, moneyNum in costMoneyList:
-        PlayerControl.PayMoney(curPlayer, moneyType, moneyNum, ChConfig.Def_Cost_CrossRealmPK, infoDict)
-        
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_TodayBuyCount, todayBuyCount + 1)
-    GameWorld.DebugLog("购买跨服PK次数: todayBuyCount=%s" % (todayBuyCount), playerID)
-    SyncCrossRealmPKPlayerInfo(curPlayer)
-    return
-
-
-#// C1 03 跨服PK领取奖励 #tagCMCrossRealmPKGetAward
-#
-#struct    tagCMCrossRealmPKGetAward
-#{
-#    tagHead        Head;
-#    BYTE        AwardType;    // 奖励类型;1-每日匹配奖励,2-每日胜利奖励,3-段位达标奖励,4-赛季结算奖励
-#    BYTE        AwardData;    // 奖励类型对应领取值;每日匹配奖励时为匹配次数,每日胜利奖励时为胜利次数,段位达标奖励时为领取的段位
-#};
-def OnCrossRealmPKGetAward(index, clientData, tick):
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    if not curPlayer:
-        return
-    playerID = curPlayer.GetPlayerID()
-    awardType = clientData.AwardType
-    awardData = clientData.AwardData
-    zoneID = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_CrossPKZoneID)
-    seasonID = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_CrossPKSeasonID)
-    if not zoneID or not seasonID:
-        GameWorld.DebugLog("当前没有跨服PK赛季, 无法领取奖励! zoneID=%s,seasonID=%s" % (zoneID, seasonID))
-        return
-    
-    if awardType == 1:
-        awardPKCount = awardData
-        playerTodayPKCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_TodayPKCount)
-        GameWorld.DebugLog("玩家领取每日匹配次数奖励! awardPKCount=%s,playerTodayPKCount=%s" % (awardPKCount, playerTodayPKCount), playerID)
-        if playerTodayPKCount < awardPKCount:
-            GameWorld.DebugLog("    PK次数不足,无法领取!", playerID)
-            return
-        dayPKCountAwardDict = IpyGameDataPY.GetFuncEvalCfg("CrossRealmPKAward", 1, {}) # {"次数":[[物品ID,个数,是否绑定], ...], ...}
-        awardPKCountList = dayPKCountAwardDict.keys()
-        awardPKCountList = [int(k) for k in awardPKCountList]
-        awardPKCountList.sort()
-        GameWorld.DebugLog("    awardPKCountList=%s" % awardPKCountList, playerID)
-        if awardPKCount not in awardPKCountList:
-            GameWorld.DebugLog("    没有该PK次数奖励!")
-            return
-        awardIndex = awardPKCountList.index(awardPKCount)
-        awardStateDictName = ChConfig.Def_PDict_CrossPK_DayPKCountAwardState
-        awardItemList = dayPKCountAwardDict[str(awardPKCount)]
-        eventName = "PKCount"
-        drDataDict = {"awardPKCount":awardPKCount}
-        
-    elif awardType == 2:
-        awardWinCount = awardData
-        playerTodayWinCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_TodayWinCount)
-        GameWorld.DebugLog("玩家领取每日胜利次数奖励! awardWinCount=%s,playerTodayWinCount=%s" % (awardWinCount, playerTodayWinCount), playerID)
-        if playerTodayWinCount < awardWinCount:
-            GameWorld.DebugLog("    胜利次数不足,无法领取!", playerID)
-            return
-        dayWinCountAwardDict = IpyGameDataPY.GetFuncEvalCfg("CrossRealmPKAward", 2, {}) # {"次数":[[物品ID,个数,是否绑定], ...], ...}
-        awardWinCountList = dayWinCountAwardDict.keys()
-        awardWinCountList = [int(k) for k in awardWinCountList]
-        awardWinCountList.sort()
-        GameWorld.DebugLog("    awardWinCountList=%s" % awardWinCountList, playerID)
-        if awardWinCount not in awardWinCountList:
-            GameWorld.DebugLog("    没有该胜利次数奖励!", playerID)
-            return
-        awardIndex = awardWinCountList.index(awardWinCount)
-        awardStateDictName = ChConfig.Def_PDict_CrossPK_DayWinCountAwardState
-        awardItemList = dayWinCountAwardDict[str(awardWinCount)]
-        eventName = "WinCount"
-        drDataDict = {"awardWinCount":awardWinCount}
-        
-    elif awardType == 3:
-        awardDanLV = awardData
-        playerDanLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_DanLV)
-        GameWorld.DebugLog("玩家领取段位达标奖励! awardDanLV=%s,playerDanLV=%s" % (awardDanLV, playerDanLV), playerID)
-        if playerDanLV < awardDanLV:
-            GameWorld.DebugLog("    段位未达标,无法领取!", playerID)
-            return
-        danLVAwardIpyData = GetCrossPKDanAwardIpyData(seasonID, awardDanLV, True)
-        if not danLVAwardIpyData:
-            return
-        awardIndex = awardDanLV
-        awardStateDictName = ChConfig.Def_PDict_CrossPK_DanLVAwardState
-        awardItemList = danLVAwardIpyData.GetDanLVAwardList()
-        eventName = "DanLV"
-        drDataDict = {"awardDanLV":awardDanLV}
-        
-    elif awardType == 4:
-        GameWorld.DebugLog("玩家领取赛季结算奖励!", playerID)
-        totalScore = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_TotalScore)
-        if not totalScore:
-            GameWorld.DebugLog("无赛季积分无法领取奖励!", playerID)
-            return
-        if GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_CrossPKSeasonState) != 2:
-            GameWorld.DebugLog("非赛季结算阶段,不可领取!", playerID)
-            return
-        if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_SeasonAwardState):
-            GameWorld.DebugLog("已经领取过该奖励,不可领取!", playerID)            
-            return
-        # 查询 GameServer 玩家赛季排名
-        OnQueryCrossPKSeasonOrderAward(curPlayer, zoneID, seasonID, False)
-        return
-    
-    else:
-        return
-    
-    if not awardItemList:
-        GameWorld.DebugLog("该奖励没有配置奖励物品!", playerID)
-        return
-    
-    awardState = curPlayer.NomalDictGetProperty(awardStateDictName)
-    if pow(2, awardIndex) & awardState:
-        GameWorld.DebugLog("    已经领取过该奖励!awardIndex=%s,awardState=%s" % (awardIndex, awardState), playerID)
-        return
-    
-    needSpace = len(awardItemList)
-    # 背包空间
-    packSpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem, needSpace)
-    if packSpace < needSpace:
-        PlayerControl.NotifyCode(curPlayer, "GeRen_lhs_202580")
-        return
-    
-    awardState |= pow(2, awardIndex)
-    PlayerControl.NomalDictSetProperty(curPlayer, awardStateDictName, awardState)
-    SyncCrossRealmPKAwardState(curPlayer)
-    GameWorld.DebugLog("玩家领取跨服PK奖励! awardType=%s,awardData=%s,awardIndex=%s,awardState=%s,awardItemList=%s" 
-                       % (awardType, awardData, awardIndex, awardState, awardItemList), playerID)
-    drDataDict.update({"awardIndex":awardIndex, "awardState":awardState, "awardItemList":awardItemList})
-    for itemID, itemCnt, isBind in awardItemList:
-        ItemControler.GivePlayerItem(curPlayer, itemID, itemCnt, 0, [IPY_GameWorld.rptItem])
-        
-    if awardType == 3 and awardDanLV >= IpyGameDataPY.GetFuncCfg("CrossRealmPKAward", 4):
-        PlayerControl.WorldNotify(0, "CrossMatching22", [curPlayer.GetPlayerName(), awardDanLV])
-        
-    DR_GetCrossPKAward(curPlayer, zoneID, seasonID, eventName, False, drDataDict)
-    return
-
-def SendDayPKAwardByMail(curPlayer, zoneID, seasonID, eventName, dataCount, awardState, awardItemDict, mailTypeKey):
-    ## 邮件发放未领取的每日奖励
-    playerID = curPlayer.GetPlayerID()
-    awardCountList = awardItemDict.keys()
-    awardCountList = [int(k) for k in awardCountList]
-    awardCountList.sort()
-    GameWorld.DebugLog("    awardCountList=%s" % awardCountList, playerID)
-    for i, awardCount in enumerate(awardCountList):
-        if dataCount < awardCount:
-            GameWorld.DebugLog("跨服PK每日奖励次数不足: eventName=%s,i=%s,awardCount=%s > dataCount=%s" % (eventName, i, awardCount, dataCount), playerID)
-            break
-        if pow(2, i) & awardState:
-            GameWorld.DebugLog("已领取该跨服PK每日奖励: eventName=%s,i=%s,awardCount=%s" % (eventName, i, awardCount), playerID)
-            continue
-        awardItemList = awardItemDict[str(awardCount)]
-        GameWorld.Log("邮件发放跨服PK未领取的每日奖励: zoneID=%s,seasonID=%s,eventName=%s,i=%s,awardCount=%s,dataCount=%s,awardState=%s,awardItemList=%s" 
-                      % (zoneID, seasonID, eventName, i, awardCount, dataCount, awardState, awardItemList), playerID)
-        
-        mailDetail = {"EventName":eventName, "zoneID":zoneID, "seasonID":seasonID, "awardCount":awardCount, "awardState":awardState}
-        PlayerControl.SendMailByKey(mailTypeKey, [playerID], awardItemList, [awardCount], detail=mailDetail)
-        DR_GetCrossPKAward(curPlayer, zoneID, seasonID, eventName, True, mailDetail)
-        
-    return
-
-def OnQueryCrossPKSeasonOrderAward(curPlayer, zoneID, seasonID, isMail):
-    # 查询 GameServer 玩家赛季排名
-    playerID = curPlayer.GetPlayerID()
-    danLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_DanLV)
-    eventName, eventData = "SeasonAward", [danLV, isMail]
-    sendMsg = str([zoneID, seasonID, eventName, eventData])
-    GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(playerID, 0, 0, "CrossPKSeasonOrder", sendMsg, len(sendMsg))
-    GameWorld.Log("查询GameServer玩家赛区赛季排名: zoneID=%s, seasonID=%s, sendMsg=%s" % (zoneID, seasonID, sendMsg), playerID)
-    return
-
-def GameServer_CrossPKSeasonOrder(curPlayer, msgList):
-    zoneID, seasonID, eventName, eventData, order = msgList
-    
-    # 领取赛季奖励
-    if eventName == "SeasonAward":
-        danLV, isMail = eventData
-        DoGetPKSeasonAward(curPlayer, eventName, zoneID, seasonID, order, danLV, isMail)
-        
-    return
-
-def DoGetPKSeasonAward(curPlayer, eventName, zoneID, seasonID, order, danLV, isMail):
-    ## 执行发放赛季结算奖励,名次奖励与最高段位奖励互斥,优先名次奖励
-    isNotify = not isMail
-    notifyKey = ""
-    awardItemList = []
-    seasonAwardLV = danLV
-    playerID = curPlayer.GetPlayerID()
-    mapSeasonID = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_CrossPKSeasonID)
-    GameWorld.Log("发放玩家跨服PK赛季结算奖励! zoneID=%s,seasonID=%s,order=%s,danLV=%s,isMail=%s,seasonAwardLV=%s,mapSeasonID=%s" 
-                  % (zoneID, seasonID, order, danLV, isMail, seasonAwardLV, mapSeasonID), playerID)
-    mailTypeKey, mailParamList, mailDetail = "", [], {"EventName":eventName, "zoneID":zoneID, "seasonID":seasonID, 
-                                                      "order":order, "danLV":danLV, "mapSeasonID":mapSeasonID}
-    if order > 0:
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_SeasonOrder % seasonID, order)
-        crossZoneName = "" #GameWorld.GetCrossZoneName()
-        seasonOrderAwardIpyData = IpyGameDataPY.GetIpyGameDataNotLog("CrossRealmPKOrderAward", crossZoneName, seasonID)
-        if not seasonOrderAwardIpyData:
-            seasonOrderAwardIpyData = IpyGameDataPY.GetIpyGameData("CrossRealmPKOrderAward", "", seasonID)
-        seasonOrderAwardDict = {} if not seasonOrderAwardIpyData else seasonOrderAwardIpyData.GetOrderAwardInfo() # {"名次":[[物品ID,个数,是否绑定], ...], ...}
-        awardOrderList = seasonOrderAwardDict.keys()
-        awardOrderList = [int(k) for k in awardOrderList]
-        awardOrderList.sort()
-        GameWorld.DebugLog("    awardOrderList=%s" % awardOrderList, playerID)
-        fromOrder, toOrder = 1, 1
-        for i, awardOrder in enumerate(awardOrderList):
-            if order <= awardOrder:
-                toOrder = awardOrder
-                awardItemList = seasonOrderAwardDict[str(awardOrder)]
-                maxDanLV = IpyGameDataPY.IPY_Data().GetCrossRealmPKDanCount() - 1 # 因为段位等级从0开始,所以最大段位等级要减1
-                seasonAwardLV = maxDanLV + (len(awardOrderList) - i)
-                GameWorld.Log("获得排名奖励, 更新奖励等级: awardOrderList=%s,i=%s,maxDanLV=%s,seasonAwardLV=%s" % (awardOrderList, i, maxDanLV, seasonAwardLV), playerID)
-                mailTypeKey = "CrossServer4"
-                notifyKey = "CrossMatching23" if order <= IpyGameDataPY.GetFuncCfg("CrossRealmPKAward", 5) else ""
-                mailParamList = [seasonID, fromOrder, toOrder]
-                break
-            fromOrder = awardOrder + 1
-            
-    # 没有奖励的话取段位奖励    
-    if not awardItemList:
-        danLVAwardIpyData = GetCrossPKDanAwardIpyData(seasonID, danLV, False)
-        if not danLVAwardIpyData:
-            return
-        awardItemList = danLVAwardIpyData.GetSeasonDanLVAwardList()
-        mailTypeKey = "CrossServer5"
-        notifyKey = "CrossMatching24" if danLV >= IpyGameDataPY.GetFuncCfg("CrossRealmPKAward", 4) else ""
-        mailParamList = [seasonID, danLV]
-        
-    if not awardItemList:
-        GameWorld.Log("没有玩家对应的赛季结算奖励!", playerID)
-        return
-    ## 发奖励之前需再判断一次,防止重复发包重复领取
-    if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_SeasonAwardState):
-        GameWorld.Log("已经发放过赛季结算奖励!", playerID)
-        return
-    if seasonID == mapSeasonID:
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_SeasonAwardState, 1)
-        SyncCrossRealmPKAwardState(curPlayer)
-        GameWorld.Log("还是同一个赛季,设置赛季奖励已领取!")
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_SeasonAwardLV % seasonID, seasonAwardLV)
-    SyncCrossRealmPKHisSeasonInfo(curPlayer)
-    
-    if not isMail:
-        needSpace = len(awardItemList)
-        packSpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem, needSpace)
-        if packSpace < needSpace:
-            isMail = True
-            
-    if isMail:
-        PlayerControl.SendMailByKey(mailTypeKey, [playerID], awardItemList, mailParamList, detail=mailDetail)
-    else:
-        for itemID, itemCnt, isBind in awardItemList:
-            ItemControler.GivePlayerItem(curPlayer, itemID, itemCnt, 0, [IPY_GameWorld.rptItem])
-            
-    GameWorld.Log("领取成功! awardItemList=%s" % (awardItemList), playerID)
-    drDataDict = {"awardItemList":awardItemList, "order":order, "danLV":danLV, "seasonAwardLV":seasonAwardLV, "isMail":isMail}
-    DR_GetCrossPKAward(curPlayer, zoneID, seasonID, eventName, isMail, drDataDict)
-    
-    if isNotify and notifyKey:
-        PlayerControl.WorldNotify(0, notifyKey, [curPlayer.GetPlayerName()] + mailParamList + [awardItemList[0][0]])
-    return
-
-def SyncCrossRealmPKPlayerInfo(curPlayer):
-    ## 同步玩家跨服PK玩家相关信息,积分、段位、相关次数等信息
-    pkPlayerInfo = ChPyNetSendPack.tagMCCrossRealmPKPlayerInfo()
-    pkPlayerInfo.Score = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_TotalScore)
-    pkPlayerInfo.DanLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_DanLV)
-    pkPlayerInfo.PKCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_PKCount)
-    pkPlayerInfo.WinCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_WinCount)
-    pkPlayerInfo.CWinCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_CWinCount)
-    pkPlayerInfo.DayPKCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_TodayPKCount)
-    pkPlayerInfo.DayWinCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_TodayWinCount)
-    pkPlayerInfo.DayBuyCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_TodayBuyCount)
-    pkPlayerInfo.DayItemAddCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_ItemAddCount)
-    pkPlayerInfo.DayRefreshCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_RefreshCount)
-    NetPackCommon.SendFakePack(curPlayer, pkPlayerInfo)
-    return
-    
-def SyncCrossRealmPKAwardState(curPlayer):
-    ## 同步玩家跨服PK相关奖励状态
-    pkAwardPack = ChPyNetSendPack.tagMCCrossRealmPKAwardState()
-    pkAwardPack.DayPKCountAwardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_DayPKCountAwardState)
-    pkAwardPack.DayWinCountAwardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_DayWinCountAwardState)
-    pkAwardPack.DanLVAwardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_DanLVAwardState)
-    pkAwardPack.SeasonAwardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_SeasonAwardState)
-    NetPackCommon.SendFakePack(curPlayer, pkAwardPack)
-    return
-
-def SyncCrossRealmPKHisSeasonInfo(curPlayer):
-    mapSeasonID = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_CrossPKSeasonID)
-    hisSeasonInfo = ChPyNetSendPack.tagMCCrossRealmPKPlayerHisSeasonInfo()
-    hisSeasonInfo.SeasonList = []
-    for seasonID in xrange(1, mapSeasonID + 1):
-        seasonInfo = ChPyNetSendPack.tagMCCrossRealmPKPlayerHisSeason()
-        seasonInfo.SeasonID = seasonID
-        seasonInfo.DanLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_SeasonDanLV % seasonID)
-        seasonInfo.Score = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_SeasonScore % seasonID)
-        seasonInfo.Order = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_SeasonOrder % seasonID)
-        seasonInfo.AwardLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_SeasonAwardLV % seasonID)
-        hisSeasonInfo.SeasonList.append(seasonInfo)
-    hisSeasonInfo.Count = len(hisSeasonInfo.SeasonList)
-    NetPackCommon.SendFakePack(curPlayer, hisSeasonInfo)
-    return
-
-def DR_GetCrossPKAward(curPlayer, zoneID, seasonID, eventName, isMail, drDataDict):
-    ## 记录领奖流向
-    drDataDict.update({"zoneID":zoneID, "seasonID":seasonID, "isMail":isMail})
-    DataRecordPack.SendEventPack("GetCrossPKAward_%s" % eventName, drDataDict, curPlayer)
-    return
-
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCrossYaomoBoss.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCrossYaomoBoss.py
deleted file mode 100644
index 9392e52..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCrossYaomoBoss.py
+++ /dev/null
@@ -1,117 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-##@package Player.PlayerCrossYaomoBoss
-#
-# @todo:跨服妖魔boss
-# @author hxp
-# @date 2022-11-11
-# @version 1.0
-#
-# 详细描述: 跨服妖魔boss
-#
-#-------------------------------------------------------------------------------
-#"""Version = 2022-11-11 15:30"""
-#-------------------------------------------------------------------------------
-
-import GameWorld
-import PlayerControl
-import IpyGameDataPY
-import ItemControler
-import IPY_GameWorld
-import ShareDefine
-import ItemCommon
-import ChConfig
-
-def OnYaomoBossStateChange(state, tick):
-    ## 活动状态变更
-    if state:
-        # 开始的不需要处理
-        return
-    return
-
-def OnCrossYaomoBossDead(curNPC):
-    
-    objID = curNPC.GetID()
-    npcID = curNPC.GetNPCID()
-    mapID = GameWorld.GetGameWorld().GetMapID()
-    lineID = GameWorld.GetGameWorld().GetLineID()
-    realMapID = GameWorld.GetGameWorld().GetRealMapID()
-    copyMapID = GameWorld.GetGameWorld().GetCopyMapID()
-    
-    zoneID = 0
-    zoneTypeName = ChConfig.Def_CrossZoneMapTableName.get(mapID)
-    ipyDataMgr = IpyGameDataPY.IPY_Data()
-    if zoneTypeName and hasattr(ipyDataMgr, "Get%sCount" % zoneTypeName):
-        for index in range(getattr(ipyDataMgr, "Get%sCount" % zoneTypeName)()):
-            ipyData = getattr(ipyDataMgr, "Get%sByIndex" % zoneTypeName)(index)
-            if realMapID == ipyData.GetMapID() and copyMapID == ipyData.GetCopyMapID():
-                zoneID = ipyData.GetZoneID()
-                break
-            
-    npcHurtList = [] #NPCHurtMgr.GetPlayerHurtList(curNPC)
-    if not npcHurtList or not npcHurtList.GetHurtCount():
-        GameWorld.ErrLog("跨服妖魔boss结算无伤害列表: mapID=%s,lineID=%s,realMapID=%s,copyMapID=%s,zoneID=%s,npcID=%s,objID=%s" 
-                         % (mapID, lineID, realMapID, copyMapID, zoneID, npcID, objID))
-        return
-    
-    GameWorld.Log("跨服妖魔boss伤害结算: mapID=%s,lineID=%s,realMapID=%s,copyMapID=%s,zoneID=%s,npcID=%s,objID=%s" 
-                  % (mapID, lineID, realMapID, copyMapID, zoneID, npcID, objID))
-    npcHurtList.Sort()  #sort以后伤血列表从大到小排序
-    
-    rank = 0
-    playerHurtList = []
-    for index in xrange(npcHurtList.GetHurtCount()):
-        #获得伤血对象
-        hurtObj = npcHurtList.GetHurtAt(index)
-        hurtType = hurtObj.GetValueType()
-        hurtID = hurtObj.GetValueID()
-        hurtValue = hurtObj.GetHurtValue()
-        hurtName = hurtObj.GetHurtName()
-        if hurtType != ChConfig.Def_NPCHurtTypePlayer or not hurtID:
-            continue
-        rank += 1
-        playerID = hurtID
-        GameWorld.Log("    zoneID=%s,rank=%s,playerID=%s,hurtValue=%s" % (zoneID, rank, playerID, hurtValue))
-        playerHurtList.append([playerID, hurtValue, hurtName])
-        
-    msgInfo = str([zoneID, npcID, playerHurtList])
-    GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(0, 0, 0, "CrossYaomoBossHurtInfo", msgInfo, len(msgInfo))
-    return
-
-def GetCrossYaomoBossHurtAward(curPlayer, awardIndex, tick):
-    
-    playerID = curPlayer.GetPlayerID()
-    if not ItemCommon.CheckPackHasSpace(curPlayer, IPY_GameWorld.rptItem, True):
-        return
-    
-    if not GameWorld.SetPlayerTickTime(curPlayer, ChConfig.TYPE_Player_Tick_CrossYaomoBoss, tick):
-        PlayerControl.NotifyCode(curPlayer, "RequestLater")
-        return
-    
-    # 发送跨服服务器
-    dataMsg = {"playerID":playerID, "awardIndex":awardIndex}
-    GameWorld.SendMsgToCrossServer(ShareDefine.ClientServerMsg_CrossYaomoBossHurtAward, dataMsg)
-    return
-
-def GameServer_CrossYaomoBoss_DoResult(curPlayer, msgData):
-    msgType, dataMsg = msgData[:2]
-    #ret = msgData[2] if len(msgData) > 2 else None
-    
-    ## 伤害目标奖励 
-    if msgType == "HurtValueAward":
-        __DoGiveCrossYaomoBossHurtAward(curPlayer, dataMsg)
-        
-    ## 参与击杀妖魔boss
-    if msgType == "KillYaomoBoss":
-        pass
-        
-    return
-
-def __DoGiveCrossYaomoBossHurtAward(curPlayer, dataMsg):
-    playerID = curPlayer.GetPlayerID()
-    awardIndex, awardItemList = dataMsg
-    GameWorld.Log("给玩家跨服妖魔boss伤害目标奖励: awardIndex=%s,awardItemList=%s" % (awardIndex, awardItemList), playerID)
-    ItemControler.GivePlayerItemOrMail(curPlayer, awardItemList, event=["CrossYaomoBoss", False, {}])
-    return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerDogz.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerDogz.py
index 345bf91..94d6dd6 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerDogz.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerDogz.py
@@ -29,8 +29,6 @@
 import SkillCommon
 import SkillShell
 import DataRecordPack
-import PlayerWeekParty
-import ItemControler
 
 import time
 
@@ -291,7 +289,6 @@
             if curItem.IsEmpty():
                 GameWorld.DebugLog("神兽有装备未穿戴,无法助战!dogzID=%s,packIndex=%s" % (dogzID, i), playerID)
                 return
-        PlayerWeekParty.AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Dogz, dogzID, False)
         
     isFight = True if batteState else False
     GameWorld.DebugLog("神兽助战状态变更!dogzID=%s,isFight=%s" % (dogzID, isFight), 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 1da98ec..0cdd336 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
@@ -37,27 +37,16 @@
 import ChItem
 import GameLogic_Tianzi
 import PlayerGoldInvest
-import PlayerCrossRealmPK
-import PlayerCrossChampionship
-import PlayerCostRebate
-import CrossActCTGBillboard
-import CrossActAllRecharge
 import PlayerActCollectWords
 import PlayerActTotalRecharge
-import PlayerActLianqi
 import PlayerActGodGift
-import PlayerActFamilyGCZ
 import PlayerActFamilyCTGAssist
-import PlayerActRechargeRebateGold
 import PlayerActManyDayRecharge
 import PlayerActSingleRecharge
-import PlayerActRechargePrize
 import PlayerActGrowupBuy
 import PlayerActTurntable
 import PlayerActBuyOne
 import PlayerSpringSale
-import PlayerWeekParty
-import PlayerFeastWeekParty
 import PlayerFeastLogin
 import PlayerFeastWish
 import PlayerActTask
@@ -69,12 +58,9 @@
 import PlayerFlashGiftbag
 import PlayerDailyGiftbag
 import PlayerOfflineSupport
-import PlayerLuckyCloudBuy
 import PlayerLuckyTreasure
-import PlayerTongTianLing
 import PlayerFlashSale
 import PlayerWishingWell
-import CrossPlayerData
 import PlayerTreasure
 import PlayerZhanling
 import PlayerLove
@@ -358,21 +344,13 @@
     PlayerFreeGoods.OnDay(curPlayer)
     #采集次数重置
     NPCCommon.PlayerOnDay(curPlayer)
-    #跨服竞技场
-    PlayerCrossRealmPK.DoPlayerOnDay(curPlayer)
-    #跨服排位
-    PlayerCrossChampionship.DoPlayerOnDay(curPlayer)
     #竞技场
     PlayerArena.OnDayEx(curPlayer)
-    #特殊时间点过天的,一般是游戏功能,此时立即同步一次跨服玩家数据
-    CrossPlayerData.SendMergePlayerDataNow(curPlayer)
     
     # 以下为支持两种重置模式切换配置的
     FBCommon.FBOnDay(curPlayer, onEventType)
     #许愿池
     PlayerWishingWell.OnDay(curPlayer)
-    #通天令
-    PlayerTongTianLing.OnDay(curPlayer, onEventType)
     #任务活动
     PlayerActTask.OnDay(curPlayer)
     #登录活动
@@ -944,9 +922,6 @@
             if actionName == ShareDefine.OperationActionName_ExpRate:
                 PlayerControl.RefreshOperationAction_ExpRate()
                 
-            elif actionName == ShareDefine.OperationActionName_CostRebate:
-                PlayerCostRebate.RefreshCostRebateActionInfo(actNum)
-                
             elif actionName == ShareDefine.OperationActionName_TotalRecharge:
                 PlayerActTotalRecharge.RefreshTotalRechargeActionInfo(actNum)
                 
@@ -986,9 +961,6 @@
             elif actionName == ShareDefine.OperationActionName_CollectWords:
                 PlayerActCollectWords.RefreshActCollectWordsInfo(actNum)
                 
-            elif actionName == ShareDefine.OperationActionName_WeekParty:
-                PlayerWeekParty.RefreshOperationAction_WeekParty()
-                
             elif actionName == ShareDefine.OperationActionName_BuyCountGift:
                 PlayerActBuyCountGift.RefreshBuyCountGiftActionInfo(actNum)
                 
@@ -1013,20 +985,11 @@
             elif actionName == ShareDefine.OperationActionName_FeastWish:
                 PlayerFeastWish.RefreshFeastWishActionInfo()
                 
-            elif actionName == ShareDefine.OperationActionName_FeastWeekParty:
-                PlayerFeastWeekParty.RefreshOperationAction_FeastWeekParty()
-                
             elif actionName == ShareDefine.OperationActionName_LuckyTreasure:
                 PlayerLuckyTreasure.RefreshLuckyTreasureAction()
                 
-            elif actionName == ShareDefine.OperationActionName_RechargePrize:
-                PlayerActRechargePrize.RefreshRechargePrizeActionInfo()
-                
             elif actionName == ShareDefine.OperationActionName_GrowupBuy:
                 PlayerActGrowupBuy.RefreshGrowupBuyActionInfo()
-                
-            elif actionName == ShareDefine.OperationActionName_RechargeRebateGold:
-                PlayerActRechargeRebateGold.RefreshRechargeRebateGoldActionInfo()
                 
             return
         
@@ -1042,28 +1005,10 @@
                 #GameWorld.DebugLog("跨服服务器地图,不处理")
                 return
             
-            if actionName == ShareDefine.CrossActName_CTGBillboard:
-                CrossActCTGBillboard.RefreshCrossActCTGBillboardInfo()
-                
-            elif actionName == ShareDefine.CrossActName_AllRecharge:
-                CrossActAllRecharge.RefreshCrossActAllRechargeInfo()
-                
-            elif actionName == ShareDefine.CrossActName_Lianqi:
-                PlayerActLianqi.RefreshCrossActLianqiInfo()
-                
-            elif actionName == ShareDefine.CrossActName_FamilyGCZ:
-                PlayerActFamilyGCZ.RefreshActFamilyGCZInfo()
-                
             return
         
         if key == ShareDefine.Def_Notify_WorldKey_CrossZoneName:
             PyGameData.g_crossZoneName = msgValue
-            return
-        
-        # 幸运云购
-        if key == ShareDefine.Def_Notify_WorldKey_LuckyCloudBuyInfo:
-            PyGameData.g_luckyCloudBuyInfo = eval(msgValue)
-            PlayerLuckyCloudBuy.OnLuckyCloudBuyChange()
             return
         
         if msgValue.isdigit():
@@ -1092,11 +1037,6 @@
     # elif key == ShareDefine.Def_Notify_WorldKey_MapServerScriptReloadVersion:
     #    ReloadModule.DoMapServerScriptReload(value, tick)
     #===============================================================================================
-    
-    # 跨服PK
-    elif key == ShareDefine.Def_Notify_WorldKey_CrossPKSeasonID:
-        PlayerCrossRealmPK.OnCrossRealmPKSeasonChange(value)
-            
     #通用设置
     befValue = gameWorldMgr.GetGameWorldDictByKey(key)
     gameWorldMgr.SetGameWorldDict(key, value)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFeastWeekParty.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFeastWeekParty.py
deleted file mode 100644
index f34a963..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFeastWeekParty.py
+++ /dev/null
@@ -1,421 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-#-------------------------------------------------------------------------------
-#
-##@package Player.PlayerFeastWeekParty
-#
-# @todo:节日巡礼
-# @author xdh
-# @date 2018-07-12 16:50
-# @version 1.0
-#
-#
-# 详细描述: 节日巡礼
-#
-#---------------------------------------------------------------------
-"""Version = 2018-07-12 16:50"""
-#---------------------------------------------------------------------
-
-import IPY_GameWorld
-import GameWorld
-import ChConfig
-import IpyGameDataPY
-import PlayerControl
-import ItemControler
-import ChPyNetSendPack
-import DataRecordPack
-import NetPackCommon
-import ShareDefine
-import PyGameData
-import ItemCommon
-
-
-def OnLogin(curPlayer):
-    isReset = __CheckPlayerFeastWeekPartyAction(curPlayer)
-    if not isReset:
-        actCostRebateInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_FeastWeekParty, {})
-        # 活动中同步活动信息
-        SyncFeastWeekPartyInfo(curPlayer)
-        if actCostRebateInfo.get(ShareDefine.ActKey_State):
-            AddFeastWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Login, 1, False, False, False)
-            SyncFeastWeekPartyPlayerInfo(curPlayer)
-    return
-
-
-def RefreshOperationAction_FeastWeekParty():
-    playerManager = GameWorld.GetPlayerManager()
-    for i in xrange(playerManager.GetPlayerCount()):
-        curPlayer = playerManager.GetPlayerByIndex(i)
-        if not GameWorld.IsNormalPlayer(curPlayer):
-            continue
-        __CheckPlayerFeastWeekPartyAction(curPlayer)
-    return
-
-
-def __CheckPlayerFeastWeekPartyAction(curPlayer):
-    ## 检查玩家节日巡礼活动数据信息
-    playerID = curPlayer.GetPlayerID()
-    
-    actFeastWeekPartyInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_FeastWeekParty, {})
-    state = actFeastWeekPartyInfo.get(ShareDefine.ActKey_State, 0)
-    actID = actFeastWeekPartyInfo.get(ShareDefine.ActKey_ID, 0)
-    cfgID = actFeastWeekPartyInfo.get(ShareDefine.ActKey_CfgID, 0)
-    playerActID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekPartyActID, 0, ChConfig.Def_PDictType_FeastWeekParty)  # 玩家身上的活动ID
-    playerFeastWeekPartyID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FeastWeekPartyID, 0, ChConfig.Def_PDictType_FeastWeekParty)  # 玩家身上的活动配置ID
-    # 活动ID 相同的话不处理
-    if actID == playerActID:
-        GameWorld.DebugLog("节日巡礼活动ID不变,不处理!playerActID=%s" % playerActID, curPlayer.GetPlayerID())
-        if state:
-            CheckFeastWeekPartyActionCnt(curPlayer, True)
-        return
-    # 未领取的奖励邮件发放
-    if playerFeastWeekPartyID:
-        __SendFeastWeekPartyMail(curPlayer, playerFeastWeekPartyID)
-        
-    GameWorld.DebugLog('    节日巡礼活动重置!')
-    curPlayer.ClearNomalDict(ChConfig.Def_PDictType_FeastWeekParty)
-    
-    GameWorld.DebugLog("节日巡礼变更! state=%s,actID=%s,cfgID=%s,playerFeastWeekPartyID=%s" % (state, actID, cfgID, playerFeastWeekPartyID), playerID)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_WeekPartyActID, actID, ChConfig.Def_PDictType_FeastWeekParty)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FeastWeekPartyID, cfgID, ChConfig.Def_PDictType_FeastWeekParty)
-    if state:
-        CheckFeastWeekPartyActionCnt(curPlayer,  False)
-        SyncFeastWeekPartyInfo(curPlayer)
-        SyncFeastWeekPartyPlayerInfo(curPlayer)
-        
-    return True
-
-
-def __SendFeastWeekPartyMail(curPlayer, cfgID):
-    # 未领取的奖励邮件发放
-    actBossIpyData = IpyGameDataPY.GetIpyGameData("ActFeastWeekParty", cfgID)
-    if not actBossIpyData:
-        return
-    templateIDList = actBossIpyData.GetTemplateID()
-    if not templateIDList:
-        return
-    
-    totalItemDict = {}
-    for day, tidList in enumerate(templateIDList):
-        for tid in tidList:
-            ipyData = IpyGameDataPY.GetIpyGameData('FeastWeekParty', tid)
-            if not ipyData:
-                continue
-            singleTimes = ipyData.GetSingleTimes()
-            curTimes = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FeastWeekPartyCurTimes % (day, tid), 0, ChConfig.Def_PDictType_FeastWeekParty)
-            gotTimes = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FeastWeekPartyGotTimes % (day, tid), 0, ChConfig.Def_PDictType_FeastWeekParty)
-            canGotCnt = (curTimes - gotTimes) / singleTimes
-            if not canGotCnt:
-                continue
-            itemDict = __GetAwardItem(curPlayer, ipyData, canGotCnt)
-            GameWorld.AddDictValue(totalItemDict, itemDict)
-    #积分奖励
-    for day, awardDict in actBossIpyData.GetPointAward().items():
-        pointList = awardDict.keys()
-        pointList.sort()
-        for i, point in enumerate(pointList):
-            curPoint = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FeastWeekPartyPoint % day, 0, ChConfig.Def_PDictType_FeastWeekParty)
-            if curPoint < point:
-                continue
-            awardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FeastWeekPartyAwardRecord % day, 0, ChConfig.Def_PDictType_FeastWeekParty)
-            if awardRecord & pow(2, i):
-                continue
-            itemList = awardDict[point]
-            for itemID, itemCnt, isBind in itemList:
-                totalItemDict[itemID] = totalItemDict.get(itemID, 0) + itemCnt
-            DataRecordPack.DR_FeastWeekPartyPoint(curPlayer, day, point)
-    if not totalItemDict:
-        return
-    totalItemList = [[itemID, itemCnt, 1] for itemID, itemCnt in totalItemDict.items()]
-    PlayerControl.SendMailByKey('SecondWeekReward2', [curPlayer.GetID()], totalItemList)
-    return
-
-
-def AddFeastWeekPartyActionCnt(curPlayer, actionID, addCnt=1, isAdd=True, isCompatible=False, isSync=True):
-    '''增加节日巡礼相关活动完成次数'''
-    #判断活动是否开启
-    if not addCnt:
-        return
-    actFeastWeekPartyInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_FeastWeekParty, {})
-    state = actFeastWeekPartyInfo.get(ShareDefine.ActKey_State, 0)
-    cfgID = actFeastWeekPartyInfo.get(ShareDefine.ActKey_CfgID, 0)
-    
-    if not cfgID:
-        return
-    if not state:
-        return
-    
-    actBossIpyData = IpyGameDataPY.GetIpyGameData("ActFeastWeekParty", cfgID)
-    if not actBossIpyData:
-        return
-    templateIDList = actBossIpyData.GetTemplateID()
-    dayIndex = actFeastWeekPartyInfo.get(ShareDefine.ActKey_DayIndex, 0)
-    if dayIndex >= len(templateIDList):
-        return
-    
-    dayTidList = templateIDList[dayIndex]
-    findTid = 0
-    for tid in dayTidList:
-        if tid / 100 == actionID:
-            findTid = tid
-            break
-    if not findTid:
-        return
-    ipyData = IpyGameDataPY.GetIpyGameData('FeastWeekParty', findTid)
-    if not ipyData:
-        return
-    totalTimes = ipyData.GetTotalTimes()
-    curTimes = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FeastWeekPartyCurTimes % (dayIndex, findTid), 0, ChConfig.Def_PDictType_FeastWeekParty)
-    if isAdd:
-        addCnt = addCnt if totalTimes == 0 else min(totalTimes - curTimes, addCnt)
-        if addCnt <= 0:
-            return
-        updTimes = curTimes + addCnt
-    else:
-        if not isCompatible and addCnt != totalTimes:
-            return
-        updTimes = min(addCnt, totalTimes)
-    realAddCnt = updTimes - curTimes
-    if realAddCnt <= 0:
-        return
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FeastWeekPartyCurTimes % (dayIndex, findTid), updTimes, ChConfig.Def_PDictType_FeastWeekParty)
-    #加积分
-    singleTimes = ipyData.GetSingleTimes()
-    addPoint = (curTimes % singleTimes + realAddCnt)/singleTimes* ipyData.GetPoint()
-    curPoint = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FeastWeekPartyPoint % dayIndex, 0, ChConfig.Def_PDictType_FeastWeekParty)
-    updPoint = curPoint + addPoint
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FeastWeekPartyPoint % dayIndex, updPoint, ChConfig.Def_PDictType_FeastWeekParty)
-    GameWorld.DebugLog('   增加节日巡礼相关活动完成次数 dayIndex=%s, findTid=%s, realAddCnt=%s,addPoint=%s' % (dayIndex, findTid, realAddCnt, addPoint))
-    if isSync:
-        SyncFeastWeekPartyPlayerInfo(curPlayer, dayIndex, findTid)
-    return True
-
-def CheckFeastWeekPartyActionCnt(curPlayer, isSync):
-    ## 同步活动状态时需要触发的
-    
-    # 灵宠激活
-    petDataPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptPet)
-    for petDataIndex in range(petDataPack.GetCount()):
-        petItem = petDataPack.GetAt(petDataIndex)
-        if petItem.IsEmpty():
-            continue
-        petNPCID = petItem.GetUserAttr(ShareDefine.Def_IudetPet_NPCID)
-        AddFeastWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Pet, petNPCID, False, isSync=isSync)
-        
-    # 出战神兽
-    ipyDataMgr = IpyGameDataPY.IPY_Data()
-    for i in xrange(ipyDataMgr.GetDogzCount()):
-        ipyData = ipyDataMgr.GetDogzByIndex(i)
-        if GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_DogzFightState, i):
-            AddFeastWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Dogz, ipyData.GetDogzID(), False, isSync=isSync)
-    
-    # 穿戴某品质符印
-    runeHoleCnt = IpyGameDataPY.GetFuncCfg("RuneUnlock", 4)
-    for holeNum in xrange(1, runeHoleCnt + 1):
-        runeData = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_Rune_Data % holeNum, 0)
-        if not runeData:
-            continue
-        runeItemID = ItemControler.GetRuneItemID(runeData)
-        itemData = GameWorld.GetGameData().GetItemByTypeID(runeItemID)
-        if not itemData:
-            continue
-        itemColor = itemData.GetItemColor()
-        AddFeastWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Rune, itemColor, False, isSync=isSync)
-        
-    AddFeastWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Login, 1, False, False, isSync)
-    return
-
-def GetFeastWeekPartyActionAward(curPlayer, day, templateID):
-    '''领取节日巡礼活动奖励'''
-    templateID = GameWorld.ToIntDef(templateID, 0)
-    ipyData = IpyGameDataPY.GetIpyGameData('FeastWeekParty', templateID)
-    if not ipyData:
-        return
-    singleTimes = ipyData.GetSingleTimes()
-    curTimes = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FeastWeekPartyCurTimes % (day, templateID), 0, ChConfig.Def_PDictType_FeastWeekParty)
-    gotTimes = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FeastWeekPartyGotTimes % (day, templateID), 0, ChConfig.Def_PDictType_FeastWeekParty)
-    if curTimes - gotTimes < singleTimes:
-        return
-    
-    #给奖励
-    awardDict = __GetAwardItem(curPlayer, ipyData)
-    # 检查背包
-    needSpace = len(awardDict)
-    packSpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem, needSpace)
-    if needSpace > packSpace:
-        PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_998371")
-        return
-    #更新次数 每次领奖只领一次
-    newGotTimes = gotTimes + singleTimes
-    
-    #GameWorld.Log('  actionID=%s,curTimes=%s,gotTimes=%s,singleTimes=%s,newGotTimes=%s'%(actionID, curTimes, gotTimes,singleTimes, newGotTimes))
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FeastWeekPartyGotTimes % (day, templateID), newGotTimes, ChConfig.Def_PDictType_FeastWeekParty)
-    for itemID, itemCnt in awardDict.items():
-        ItemControler.GivePlayerItem(curPlayer, itemID, itemCnt, 0, [IPY_GameWorld.rptItem])
-    SyncFeastWeekPartyPlayerInfo(curPlayer, day, templateID)
-    return
-
-
-def GetFeastWeekPartyPointAward(curPlayer, day, getPoint):
-    ##领取节日巡礼积分奖励
-    getPoint = GameWorld.ToIntDef(getPoint, 0)
-    actFeastWeekPartyInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_FeastWeekParty, {})
-    state = actFeastWeekPartyInfo.get(ShareDefine.ActKey_State, 0)
-    cfgID = actFeastWeekPartyInfo.get(ShareDefine.ActKey_CfgID, 0)
-    if not state or not cfgID:
-        return
-    actBossIpyData = IpyGameDataPY.GetIpyGameData("ActFeastWeekParty", cfgID)
-    if not actBossIpyData:
-        return
-    curPoint = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FeastWeekPartyPoint % day, 0, ChConfig.Def_PDictType_FeastWeekParty)
-    if curPoint < getPoint:
-        return
-    pointAwardDict = actBossIpyData.GetPointAward().get(day, {})
-    pointList = pointAwardDict.keys()
-    pointList.sort()
-    if getPoint not in pointList:
-        return
-    getIndex = pointList.index(getPoint)
-    awardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FeastWeekPartyAwardRecord % day, 0, ChConfig.Def_PDictType_FeastWeekParty)
-    if awardRecord & pow(2, getIndex):
-        GameWorld.Log(' 领取节日巡礼积分奖励, 已领取 day=%s, getPoint=%s' % (day, getPoint))
-        return
-    itemList = pointAwardDict[getPoint]
-    needSpace = len(itemList)
-    packSpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem, needSpace)
-    if needSpace > packSpace:
-        PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_998371")
-        return
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FeastWeekPartyAwardRecord % day, awardRecord | pow(2, getIndex), ChConfig.Def_PDictType_FeastWeekParty)
-    for itemID, itemCnt, isBind in itemList:
-        ItemControler.GivePlayerItem(curPlayer, itemID, itemCnt, 0, [IPY_GameWorld.rptItem])
-    SyncFeastWeekPartyPlayerInfo(curPlayer, day)
-    DataRecordPack.DR_FeastWeekPartyPoint(curPlayer, day, getPoint)
-    return
-
-
-def __GetAwardItem(curPlayer, ipyData, times=1):
-    awardDict = {}
-    for itemID, itemCnt, isbind in ipyData.GetReward():
-        if not itemID or not itemCnt:
-            continue
-        awardDict[itemID] = awardDict.get(itemID, 0) + itemCnt * times
-        
-    return awardDict
-
-
-def SyncFeastWeekPartyPlayerInfo(curPlayer, day=-1, templateID=-1):
-    #通知当前次数、已领次数 
-    actFeastWeekPartyInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_FeastWeekParty, {})
-    state = actFeastWeekPartyInfo.get(ShareDefine.ActKey_State, 0)
-    cfgID = actFeastWeekPartyInfo.get(ShareDefine.ActKey_CfgID, 0)
-    if not state or not cfgID:
-        return
-    actBossIpyData = IpyGameDataPY.GetIpyGameData("ActFeastWeekParty", cfgID)
-    if not actBossIpyData:
-        return
-    templateIDList = actBossIpyData.GetTemplateID()
-    if not templateIDList:
-        return
-    if day != -1:
-        if day >= len(templateIDList):
-            return
-        syncDayList = [day]
-    else:
-        syncDayList = range(len(templateIDList))
-        
-    packData = ChPyNetSendPack.tagMCFeastWeekPartyPlayerInfo()
-    packData.DayInfoList = []
-    for cday in syncDayList:
-        tiemInfo = ChPyNetSendPack.tagMCFeastWeekPartyDayPlayerInfo()
-        tiemInfo.DayIndex = cday
-        tiemInfo.Point = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FeastWeekPartyPoint % cday, 0, ChConfig.Def_PDictType_FeastWeekParty)
-        tiemInfo.AwardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FeastWeekPartyAwardRecord % cday, 0, ChConfig.Def_PDictType_FeastWeekParty)
-        tiemInfo.TaskList = []
-        for tID in templateIDList[cday]:
-            if templateID != -1 and tID != templateID:
-                continue
-            tipyData = IpyGameDataPY.GetIpyGameData('FeastWeekParty', tID)
-            if not tipyData:
-                continue
-            taskInfo = ChPyNetSendPack.tagMCFeastWeekPartyTaskInfo()
-            taskInfo.TemplateID = tID
-            taskInfo.CurTimes = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FeastWeekPartyCurTimes % (cday, tID), 0, ChConfig.Def_PDictType_FeastWeekParty)
-            taskInfo.GotTimes = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FeastWeekPartyGotTimes % (cday, tID), 0, ChConfig.Def_PDictType_FeastWeekParty)
-            tiemInfo.TaskList.append(taskInfo)
-        tiemInfo.ACount = len(tiemInfo.TaskList)
-        packData.DayInfoList.append(tiemInfo)
-    packData.Count = len(packData.DayInfoList)
-    NetPackCommon.SendFakePack(curPlayer, packData)
-    return
-
-
-def SyncFeastWeekPartyInfo(curPlayer):
-    actFeastWeekPartyInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_FeastWeekParty, {})
-    state = actFeastWeekPartyInfo.get(ShareDefine.ActKey_State, 0)
-    cfgID = actFeastWeekPartyInfo.get(ShareDefine.ActKey_CfgID, 0)
-    if not cfgID:
-        return
-    actBossIpyData = IpyGameDataPY.GetIpyGameData("ActFeastWeekParty", cfgID)
-    if not actBossIpyData:
-        return
-    templateIDList = actBossIpyData.GetTemplateID()
-    if not templateIDList:
-        return
-    pointAwardDict = actBossIpyData.GetPointAward()
-    actInfo = ChPyNetSendPack.tagMCFeastWeekPartyInfo()
-    actInfo.Clear()
-    actInfo.StartDate = actBossIpyData.GetStartDate()
-    actInfo.EndtDate = actBossIpyData.GetEndDate()
-    actInfo.AdvanceMinutes = actBossIpyData.GetAdvanceMinutes()
-    actInfo.IsDayReset = actBossIpyData.GetIsDayReset()
-    actInfo.ResetType = actBossIpyData.GetResetType()
-    actInfo.LimitLV = actBossIpyData.GetLVLimit()
-    actInfo.DayInfoList = []
-    tidList = []
-    for day, dayActList in enumerate(templateIDList):
-        dayInfo = ChPyNetSendPack.tagMCFeastWeekPartyDayInfo()
-        dayInfo.TemplateList = dayActList
-        dayInfo.ActCnt = len(dayActList)
-        for tid in dayActList:
-            if tid not in tidList:
-                tidList.append(tid)
-        dayInfo.PItemInfo = []
-        for point, itemList in pointAwardDict.get(day, {}).items():
-            for itemID, itemCnt, isBind in itemList:
-                awardItem = ChPyNetSendPack.tagMCFeastWeekPartyItem()
-                awardItem.ItemID = itemID
-                awardItem.ItemCnt = itemCnt
-                awardItem.IsBind = isBind
-                awardItem.NeedPoint = point
-                dayInfo.PItemInfo.append(awardItem)
-        dayInfo.PCount = len(dayInfo.PItemInfo)
-        actInfo.DayInfoList.append(dayInfo)
-    actInfo.DayCnt = len(actInfo.DayInfoList)
-    actInfo.ActionInfo = []
-    for tid in tidList:
-        ipyData = IpyGameDataPY.GetIpyGameData('FeastWeekParty', tid)
-        if not ipyData:
-            GameWorld.ErrLog('    节日巡礼模板表找不到模板%s' % tid)
-            continue
-        tInfo = ChPyNetSendPack.tagMCFeastWeekPartyAction()
-        tInfo.TemplateID = tid
-        tInfo.ActionType = ipyData.GetActionType()
-        tInfo.TotalTimes = ipyData.GetTotalTimes()
-        tInfo.SingleTimes = ipyData.GetSingleTimes()
-        tInfo.Point = ipyData.GetPoint()
-        tInfo.ItemInfo = []
-        for itemID, itemCnt, isBind in ipyData.GetReward():
-            awardItem = ChPyNetSendPack.tagMCFeastWeekPartyItem()
-            awardItem.ItemID = itemID
-            awardItem.ItemCnt = itemCnt
-            awardItem.IsBind = isBind
-            awardItem.NeedPoint = 0
-            tInfo.ItemInfo.append(awardItem)
-        tInfo.Count = len(tInfo.ItemInfo)
-        actInfo.ActionInfo.append(tInfo)
-    actInfo.TCount = len(actInfo.ActionInfo)
-    NetPackCommon.SendFakePack(curPlayer, actInfo)
-    return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFlashGiftbag.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFlashGiftbag.py
index b151c43..43af6b8 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFlashGiftbag.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFlashGiftbag.py
@@ -23,7 +23,6 @@
 import ChPyNetSendPack
 import DataRecordPack
 import ItemControler
-import PlayerWeekParty
 import GameWorld
 import ChConfig
 import CommFunc
@@ -183,7 +182,6 @@
             PlayerControl.WorldNotify(0, notifyKey, [curPlayer.GetPlayerName(), rmb, giftbagIpyData.GetMainItemID()])
         
         SyncFlashGiftbagBuyCount(curPlayer, actNum, [giftbagID])
-        PlayerWeekParty.AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_GiftBag, actGiftbagType, False)
         
         canBuy = True
         GameWorld.DebugLog("    购买限时礼包: actNum=%s,actGiftbagType=%s,giftbagID=%s,buyCount=%s,isJueban=%s" 
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFuncTeam.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFuncTeam.py
deleted file mode 100644
index e49429c..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFuncTeam.py
+++ /dev/null
@@ -1,1075 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-##@package Player.PlayerFuncTeam
-#
-# @todo:功能队伍表
-# @author hxp
-# @date 2025-05-28
-# @version 1.0
-#
-# 详细描述: 功能队伍表,支持跨服
-#
-#-------------------------------------------------------------------------------
-#"""Version = 2025-05-28 10:00"""
-#-------------------------------------------------------------------------------
-
-import GameWorld
-import ShareDefine
-import IpyGameDataPY
-#import CrossBattlefield
-import CrossRealmPlayer
-import PlayerViewCache
-import ChPyNetSendPack
-#import CrossRealmMsg
-import PlayerControl
-import NetPackCommon
-import DBDataMgr
-import DirtyList
-import ChConfig
-
-# 队伍操作
-Def_FuncTeamOPList = (
-Def_FuncTeamOP_JoinApply, # 申请加入 1
-Def_FuncTeamOP_JoinCancel, # 申请取消 2
-Def_FuncTeamOP_JoinAgree, # 同意入队 3
-Def_FuncTeamOP_JoinRefuse, # 拒绝入队 4
-Def_FuncTeamOP_Exit, # 退出队伍 5
-Def_FuncTeamOP_Kick, # 踢出队伍 6
-Def_FuncTeamOP_Transfer, # 转让队长 7
-Def_FuncTeamOP_Dissolve, # 解散队伍 8
-) = range(1, 1 + 8)
-
-def IsOPLimitInAct(curPlayer, funcMapID):
-    ## 活动期间是否限制队伍操作
-    ipyData = IpyGameDataPY.GetIpyGameData("FuncTeamSet", funcMapID)
-    if not ipyData:
-        return
-    if not ipyData.GetOPLimitInAct():
-        return
-    isInAct = False
-    if isInAct:
-        GameWorld.ErrLog("活动期间无法操作队伍! funcMapID=%s" % funcMapID, curPlayer.GetPlayerID())
-    return isInAct
-
-def GetFuncTeamZoneID(funcMapID):
-    zoneID = 0
-    return zoneID
-
-#// B9 20 创建功能队伍 #tagCMCreateFuncTeam
-#
-#struct    tagCMCreateFuncTeam
-#{
-#    tagHead        Head;
-#    DWORD        FuncMapID;    // 功能地图ID或自定义的活动功能ID
-#    DWORD        FuncMapEx;    // 功能地图扩展,如不同的层级
-#    BYTE        NameLen;
-#    char        TeamName[NameLen];    // 队伍名称,可为空
-#    WORD        MinLV;        //最低等级限制
-#    DWORD        MinFightPower;    //最低战力限制,求余亿
-#    DWORD        MinFightPowerEx;    //最低战力限制,整除亿
-#    BYTE        ServerOnly;    //是否仅本服玩家可加入,0-否,1-是
-#    BYTE        NeedCheck;     //是否需要审核
-#};
-def OnCreateFuncTeam(index, clientData, tick):
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    playerID = curPlayer.GetPlayerID()
-    funcMapID = clientData.FuncMapID
-    funcMapEx = clientData.FuncMapEx
-    teamName = clientData.TeamName
-    minLV = clientData.MinLV
-    minFightPower = clientData.MinFightPower
-    minFightPowerEx = clientData.MinFightPowerEx
-    serverOnly = clientData.ServerOnly
-    needCheck = clientData.NeedCheck
-    
-    if IsOPLimitInAct(curPlayer, funcMapID):
-        return
-    
-    zoneID = GetFuncTeamZoneID(funcMapID)
-    if not zoneID:
-        return
-    
-    teamInfo = {"funcMapID":funcMapID, "funcMapEx":funcMapEx, "teamName":teamName, "minLV":minLV, 
-               "minFightPower":minFightPower, "minFightPowerEx":minFightPowerEx, 
-               "serverOnly":serverOnly, "needCheck":needCheck}
-    dataMsg = {"zoneID":zoneID, "playerID":playerID, "teamInfo":teamInfo, "cacheBase":PlayerViewCache.GetSyncCrossCacheBase(curPlayer)}
-    CrossRealmMsg.SendMsgToCrossServer(ShareDefine.ClientServerMsg_CreateFuncTeam, dataMsg)
-    return
-
-#// B9 21 修改功能队伍 #tagCMChangeFuncTeam
-#
-#struct    tagCMChangeFuncTeam
-#{
-#    tagHead        Head;
-#    DWORD        TeamID;
-#    DWORD        FuncMapID;    // 功能地图ID或自定义的活动功能ID
-#    WORD        MinLV;        //最低等级限制
-#    DWORD        MinFightPower;    //最低战力限制,求余亿
-#    DWORD        MinFightPowerEx;    //最低战力限制,整除亿
-#    BYTE        ServerOnly;    //是否仅本服玩家可加入,0-否,1-是
-#    BYTE        NeedCheck;     //是否需要审核
-#};
-def OnChangeFuncTeam(index, clientData, tick):
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    playerID = curPlayer.GetPlayerID()
-    teamID = clientData.TeamID
-    funcMapID = clientData.FuncMapID
-    minLV = clientData.MinLV
-    minFightPower = clientData.MinFightPower
-    minFightPowerEx = clientData.MinFightPowerEx
-    serverOnly = clientData.ServerOnly
-    needCheck = clientData.NeedCheck
-    
-    if IsOPLimitInAct(curPlayer, funcMapID):
-        return
-    
-    zoneID = GetFuncTeamZoneID(funcMapID)
-    if not zoneID:
-        return
-    
-    teamInfo = {"teamID":teamID, "funcMapID":funcMapID, "minLV":minLV, 
-               "minFightPower":minFightPower, "minFightPowerEx":minFightPowerEx, 
-               "serverOnly":serverOnly, "needCheck":needCheck}
-    dataMsg = {"zoneID":zoneID, "playerID":playerID, "teamInfo":teamInfo, "cacheBase":PlayerViewCache.GetSyncCrossCacheBase(curPlayer)}
-    CrossRealmMsg.SendMsgToCrossServer(ShareDefine.ClientServerMsg_ChangeFuncTeam, dataMsg)
-    return
-
-#// B9 22 功能队伍成员操作 #tagCMFuncTeamMemOP
-#
-#struct    tagCMFuncTeamMemOP
-#{
-#    tagHead        Head;
-#    DWORD        TeamID;
-#    DWORD        FuncMapID;    // 功能地图ID或自定义的活动功能ID
-#    BYTE        OPType;        // 1-申请加入;2-申请取消;3-同意入队;4-拒绝入队;5-退出队伍;6-踢出队伍;7-转让队长;8-解散队伍;
-#    DWORD        OPData;        // 可选
-#};
-def OnFuncTeamMemOP(index, clientData, tick):
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    playerID = curPlayer.GetPlayerID()
-    teamID = clientData.TeamID
-    funcMapID = clientData.FuncMapID
-    opType = clientData.OPType
-    opData = clientData.OPData
-    
-    if opType not in Def_FuncTeamOPList:
-        return
-    
-    if IsOPLimitInAct(curPlayer, funcMapID):
-        return
-    
-    zoneID = GetFuncTeamZoneID(funcMapID)
-    if not zoneID:
-        return
-    
-    dataMsg = {"zoneID":zoneID, "playerID":playerID, "teamID":teamID, "funcMapID":funcMapID, 
-               "opType":opType, "opData":opData}
-    dataMsg["cacheBase"] = PlayerViewCache.GetSyncCrossCacheBase(curPlayer)
-    CrossRealmMsg.SendMsgToCrossServer(ShareDefine.ClientServerMsg_FuncTeamMemOP, dataMsg)
-    return
-
-#// B9 23 查找功能队伍列表 #tagCMQueryFuncTeam
-#
-#struct    tagCMQueryFuncTeam
-#{
-#    tagHead        Head;
-#    DWORD        FuncMapID;    // 功能地图ID或自定义的活动功能ID
-#    DWORD        FuncMapEx;    // 功能地图扩展,如不同的层级,0代表所有
-#    DWORD        StartIndex;    // 查看的起始索引, 默认0
-#    BYTE        QueryCnt;    // 查看条数,默认20,最大不超过100
-#    BYTE        HaveSpace;    // 是否只查看有空位置的队伍
-#    BYTE        IDLimitType;    // ID限制类型:1-同仙盟队长;2-同ServerGroupID队长;3-同ServerID队长
-#    BYTE        SearchLen;
-#    char        SearchMsg[SearchLen];    // 指定搜索时有用,可搜索指定队伍ID或模糊搜索队伍名称,搜索时返回最多QueryCnt个数的队伍
-#};
-def OnQueryFuncTeam(index, clientData, tick):
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    playerID = curPlayer.GetPlayerID()
-    funcMapID = clientData.FuncMapID
-    funcMapEx = clientData.FuncMapEx
-    startIndex = clientData.StartIndex
-    queryCnt = clientData.QueryCnt
-    haveSpace = clientData.HaveSpace
-    idLimitType = clientData.IDLimitType
-    searchMsg = clientData.SearchMsg
-    
-    zoneID = GetFuncTeamZoneID(funcMapID)
-    if not zoneID:
-        return
-    
-    dataMsg = {"zoneID":zoneID, "playerID":playerID, "funcMapID":funcMapID, "funcMapEx":funcMapEx, 
-               "startIndex":startIndex, "queryCnt":queryCnt, "haveSpace":haveSpace, "idLimitType":idLimitType, 
-               "searchMsg":searchMsg}
-    dataMsg["cacheBase"] = PlayerViewCache.GetSyncCrossCacheBase(curPlayer)
-    CrossRealmMsg.SendMsgToCrossServer(ShareDefine.ClientServerMsg_QueryFuncTeam, dataMsg)
-    return
-
-#// B9 24 查找玩家功能队伍 #tagCMQueryPlayerFuncTeam
-#
-#struct    tagCMQueryPlayerFuncTeam
-#{
-#    tagHead        Head;
-#    DWORD        FuncMapID;    // 功能地图ID或自定义的活动功能ID
-#};
-def OnQueryPlayerFuncTeam(index, clientData, tick):
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    playerID = curPlayer.GetPlayerID()
-    funcMapID = clientData.FuncMapID
-    
-    zoneID = GetFuncTeamZoneID(funcMapID)
-    if not zoneID:
-        return
-    
-    dataMsg = {"zoneID":zoneID, "playerID":playerID, "funcMapID":funcMapID}
-    dataMsg["cacheBase"] = PlayerViewCache.GetSyncCrossCacheBase(curPlayer)
-    CrossRealmMsg.SendMsgToCrossServer(ShareDefine.ClientServerMsg_QueryFuncTeam, dataMsg)
-    return
-
-def CrossServerMsg_FuncTeamInfo(msgData):
-    ## 子服收到跨服信息 - 队伍刷新信息
-    infoType = msgData["infoType"]
-    playerID = msgData["playerID"]
-    funcMapID = msgData["funcMapID"]
-    teamInfo = msgData["teamInfo"]
-    teamID = msgData.get("teamID", 0)
-    syncPlayerIDList = msgData.get("syncPlayerIDList", [])
-    notifyMark = msgData.get("notifyMark", "")
-    
-    curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(playerID)
-    if curPlayer:
-        if notifyMark:
-            PlayerControl.NotifyCode(curPlayer, notifyMark)
-            
-    if infoType == "QueryPlayerFuncTeam":
-        if curPlayer:
-            if teamInfo:
-                Sync_FuncTeamRefresh(teamInfo, [playerID])
-            else:
-                clientPack = ChPyNetSendPack.tagGCQueryPlayerFuncTeamRet()
-                clientPack.FuncMapID = funcMapID
-                clientPack.TeamID = 0
-                NetPackCommon.SendFakePack(curPlayer, clientPack)
-        return
-    
-    if not teamInfo:
-        # 操作后没有队伍信息了,解散
-        if infoType == "FuncTeamMemOP":
-            Sync_FuncTeamDissolve(teamID, syncPlayerIDList)
-        return
-    
-    Sync_FuncTeamRefresh(teamInfo, syncPlayerIDList)
-    return
-
-def CrossServerMsg_FuncTeamDel(msgData):
-    ## 子服收到跨服信息 - 队伍删除
-    #"zoneID":zoneID, "funcMapID":funcMapID, "delTeamDict":delTeamDict
-    #zoneID = msgData["zoneID"]
-    #funcMapID = msgData["funcMapID"]
-    delTeamDict = msgData["delTeamDict"]
-    for teamID, syncPlayerIDList in delTeamDict.items():
-        Sync_FuncTeamDissolve(teamID, syncPlayerIDList)
-    return
-
-def CrossServerMsg_FuncTeamList(msgData):
-    ## 子服收到跨服信息 - 队伍列表
-    queryInfo = msgData["queryInfo"]
-    loopIndex = msgData["loopIndex"]
-    teamInfoList = msgData["teamInfoList"]
-    
-    playerID = queryInfo["playerID"]
-    curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(playerID)
-    if not curPlayer:
-        return
-    
-    clientPack = ChPyNetSendPack.tagGCFuncTeamList()
-    clientPack.FuncMapID = queryInfo["funcMapID"]
-    clientPack.FuncMapEx = queryInfo["funcMapEx"]
-    clientPack.StartIndex = queryInfo["startIndex"]
-    clientPack.QueryCnt = queryInfo["queryCnt"]
-    clientPack.HaveSpace = queryInfo["haveSpace"]
-    clientPack.IDLimitType = queryInfo["idLimitType"]
-    clientPack.SearchMsg = queryInfo["searchMsg"]
-    clientPack.SearchLen = len(clientPack.SearchMsg)
-    clientPack.LoopIndex = loopIndex
-    
-    for teamInfo in teamInfoList:
-        team = ChPyNetSendPack.tagGCFuncTeam()
-        team.TeamID = teamInfo["TeamID"]
-        team.CreateTime = teamInfo["CreateTime"]
-        team.FuncMapEx = teamInfo["FuncMapEx"]
-        team.TeamName = teamInfo["TeamName"]
-        team.NameLen = len(team.TeamName)
-        team.CaptainID = teamInfo["CaptainID"]
-        team.MinLV = teamInfo["MinLV"]
-        team.MinFightPower = teamInfo["MinFightPower"] % ChConfig.Def_PerPointValue
-        team.MinFightPowerEx = teamInfo["MinFightPower"] / ChConfig.Def_PerPointValue
-        team.ServerOnly = teamInfo["ServerOnly"]
-        team.NeedCheck = teamInfo["NeedCheck"]
-        team.Value1 = teamInfo["Value1"]
-        team.Value2 = teamInfo["Value2"]
-        
-        memberList = []
-        for memberInfo in teamInfo["MemberList"]:
-            mem = ChPyNetSendPack.tagGCFuncTeamMem()
-            mem.ServerID = memberInfo.get("ServerID", 0)
-            mem.PlayerID = memberInfo["PlayerID"]
-            mem.Name = memberInfo.get("Name", "")
-            mem.NameLen = len(mem.Name)
-            mem.LV = memberInfo.get("LV", 0)
-            mem.Job = memberInfo.get("Job", 0)
-            mem.RealmLV = memberInfo.get("RealmLV", 0)
-            mem.Face = memberInfo.get("Face", 0)
-            mem.FacePic = memberInfo.get("FacePic", 0)
-            mem.FightPower = memberInfo.get("FightPower", 0) % ChConfig.Def_PerPointValue
-            mem.FightPowerEx = memberInfo.get("FightPower", 0) / ChConfig.Def_PerPointValue
-            mem.Value1 = memberInfo["Value1"]
-            mem.Value2 = memberInfo["Value2"]
-            memberList.append(mem)
-            
-        team.MemberList = memberList
-        team.MemberCount = len(team.MemberList)
-        team.ApplyIDList = teamInfo["ApplyIDList"]
-        team.ApplyCount = len(team.ApplyIDList)
-        
-        clientPack.TeamList.append(team)
-    clientPack.TeamCount = len(clientPack.TeamList)
-    NetPackCommon.SendFakePack(curPlayer, clientPack)
-    return
-
-def Sync_FuncTeamRefresh(teamInfo, syncPlayerIDList):
-    ## 功能队伍刷新
-    if not teamInfo or not syncPlayerIDList:
-        return
-    
-    syncPlayerList = []
-    playerManager = GameWorld.GetPlayerManager()
-    for playerID in syncPlayerIDList:
-        player = playerManager.FindPlayerByID(playerID)
-        if player == None or not player.GetInitOK():
-            continue
-        syncPlayerList.append(player)
-        
-    if not syncPlayerList:
-        return
-    
-    clientPack = ChPyNetSendPack.tagGCFuncTeamRefresh()
-    clientPack.TeamID = teamInfo["TeamID"]
-    clientPack.CreateTime = teamInfo["CreateTime"]
-    clientPack.FuncMapID = teamInfo["FuncMapID"]
-    clientPack.FuncMapEx = teamInfo["FuncMapEx"]
-    clientPack.TeamName = teamInfo["TeamName"]
-    clientPack.NameLen = len(clientPack.TeamName)
-    clientPack.CaptainID = teamInfo["CaptainID"]
-    clientPack.MinLV = teamInfo["MinLV"]
-    clientPack.MinFightPower = teamInfo["MinFightPower"] % ChConfig.Def_PerPointValue
-    clientPack.MinFightPowerEx = teamInfo["MinFightPower"] / ChConfig.Def_PerPointValue
-    clientPack.ServerOnly = teamInfo["ServerOnly"]
-    clientPack.NeedCheck = teamInfo["NeedCheck"]
-    clientPack.Value1 = teamInfo["Value1"]
-    clientPack.Value2 = teamInfo["Value2"]
-    
-    memberInfoList = teamInfo["MemberList"]
-    applyInfoList = teamInfo["ApplyList"]
-    
-    memberList = []
-    for memberInfo in memberInfoList:
-        mem = ChPyNetSendPack.tagGCFuncTeamRefreshMem()
-        mem.ServerID = memberInfo.get("ServerID", 0)
-        mem.PlayerID = memberInfo["PlayerID"]
-        mem.Name = memberInfo.get("Name", "")
-        mem.NameLen = len(mem.Name)
-        mem.LV = memberInfo.get("LV", 0)
-        mem.Job = memberInfo.get("Job", 0)
-        mem.RealmLV = memberInfo.get("RealmLV", 0)
-        mem.Face = memberInfo.get("Face", 0)
-        mem.FacePic = memberInfo.get("FacePic", 0)
-        mem.FightPower = memberInfo.get("FightPower", 0) % ChConfig.Def_PerPointValue
-        mem.FightPowerEx = memberInfo.get("FightPower", 0) / ChConfig.Def_PerPointValue
-        mem.OfflineValue = memberInfo.get("OfflineValue", 0)
-        mem.Value1 = memberInfo["Value1"]
-        mem.Value2 = memberInfo["Value2"]
-        memberList.append(mem)
-        
-    applyList, applyIDList = [], []
-    for applyInfo in applyInfoList:
-        applyP = ChPyNetSendPack.tagGCFuncTeamRefreshApply()
-        applyP.ServerID = applyInfo["ServerID"]
-        applyP.PlayerID = applyInfo["PlayerID"]
-        applyP.Name = applyInfo["Name"]
-        applyP.NameLen = len(applyP.Name)
-        applyP.LV = applyInfo["LV"]
-        applyP.Job = applyInfo["Job"]
-        applyP.RealmLV = applyInfo["RealmLV"]
-        applyP.Face = applyInfo.get("Face", 0)
-        applyP.FacePic = applyInfo.get("FacePic", 0)
-        applyP.FightPower = applyInfo["FightPower"] % ChConfig.Def_PerPointValue
-        applyP.FightPowerEx = applyInfo["FightPower"] / ChConfig.Def_PerPointValue
-        applyList.append(applyP)
-        applyIDList.append(applyInfo["PlayerID"])
-        
-    clientPack.MemberList = memberList
-    clientPack.MemberCount = len(clientPack.MemberList)
-    clientPack.ApplyIDList = applyIDList
-    clientPack.ApplyInfoList = applyList
-    clientPack.ApplyCount = len(clientPack.ApplyInfoList)
-    
-    for player in syncPlayerList:
-        NetPackCommon.SendFakePack(player, clientPack)
-    return
-
-def Sync_FuncTeamDissolve(teamID, syncPlayerIDList):
-    ## 功能队伍解散
-    if not teamID or not syncPlayerIDList:
-        return
-    
-    syncPlayerList = []
-    playerManager = GameWorld.GetPlayerManager()
-    for playerID in syncPlayerIDList:
-        player = playerManager.FindPlayerByID(playerID)
-        if player == None or not player.GetInitOK():
-            continue
-        syncPlayerList.append(player)
-        
-    if not syncPlayerList:
-        return
-    
-    clientPack = ChPyNetSendPack.tagGCFuncTeamDissolve()
-    clientPack.TeamID = teamID
-    for player in syncPlayerList:
-        NetPackCommon.SendFakePack(player, clientPack)
-    return
-
-##--------------------------------------------------------------------------------------------------
-
-def GetFuncTeamMapIDZoneInfo(funcMapID, serverGroupID):
-    ## 获取功能队伍分区信息
-    
-    funcZoneID = 0
-    serverGroupList = []
-    
-    return funcZoneID, serverGroupList
-
-def ClientServerMsg_CreateFuncTeam(serverGroupID, msgData):
-    ## 收到子服 - 功能队伍创建
-    
-    zoneID = msgData["zoneID"]
-    playerID = msgData["playerID"]
-    teamInfo = msgData["teamInfo"]
-    cacheBase = msgData["cacheBase"]
-    
-    funcMapID = teamInfo["funcMapID"]
-    
-    zoneInfo = GetFuncTeamMapIDZoneInfo(funcMapID, serverGroupID)
-    if not zoneInfo:
-        return
-    funcZoneID, _ = zoneInfo
-    
-    if zoneID != funcZoneID:
-        GameWorld.ErrLog("功能队伍分区不一致,无法创建! funcMapID=%s,zoneID=%s != %s" % (funcMapID, zoneID, funcZoneID), playerID)
-        return
-    
-    canCreate, notifyMark = CheckCanCreateFuncTeam(playerID, teamInfo, zoneID)
-    
-    # 某些功能创建前检查
-    #if funcMapID == ChConfig.Def_FBMapID_CrossBattlefield:
-    #    pass
-    
-    newTeam = None
-    teamID = 0
-    newTeamInfo = {}
-    if canCreate:
-        PlayerViewCache.UpdCrossCacheBase(playerID, cacheBase)
-        funcTeamMgr = DBDataMgr.GetFuncTeamMgr()
-        newTeam = funcTeamMgr.CreateFuncTeam(playerID, teamInfo, zoneID)
-        
-    if newTeam:
-        teamID = newTeam.GetTeamID()
-        newTeamInfo = newTeam.GetSyncDict(True)
-        
-        # 某些功能创建后处理
-        #if funcMapID == ChConfig.Def_FBMapID_CrossBattlefield:
-        #    pass
-        
-    else:
-        if not notifyMark:
-            notifyMark = "CreatTeamFail"
-            
-    serverGroupList = [serverGroupID] # 创建仅通知指定服即可
-    syncPlayerIDList = [playerID]
-    sendMsg = {"infoType":"CreateFuncTeam", "zoneID":zoneID, "playerID":playerID, "funcMapID":funcMapID, 
-               "teamInfo":newTeamInfo, "teamID":teamID, "syncPlayerIDList":syncPlayerIDList, "notifyMark":notifyMark}
-    CrossRealmMsg.SendMsgToClientServer(ShareDefine.CrossServerMsg_FuncTeamInfo, sendMsg, serverGroupList)
-    return
-
-def CheckCanCreateFuncTeam(playerID, teamInfo, zoneID=0, checkInTeam=True):
-    ## 检查可否创建功能队伍 - 本服跨服通用
-    # @param checkInTeam: 是否检查已经在队伍中,如果功能只允许单个队伍,则需要检查,反之可设置为不检查
-    # @return: 是否可创建, 不可创建提示信息
-    
-    funcMapID = teamInfo["funcMapID"]
-    ipyData = IpyGameDataPY.GetIpyGameData("FuncTeamSet", funcMapID)
-    if not ipyData:
-        return False, ""
-    
-    needName = ipyData.GetNeedName()
-    if needName:
-        teamName = teamInfo["teamName"]
-        if not teamName or len(teamName) > 33:
-            # 队伍名不合法
-            return False, "TeamNameLenError"
-        
-        if DirtyList.IsWordForbidden(teamName):
-            return False, "TeamNameUnallow"
-        
-    funcTeamMgr = PyDataManager.GetDBPyFuncTeamManager()
-    teamList = funcTeamMgr.GetFuncTeamList(zoneID, funcMapID)
-    for funcTeam in teamList:
-        if needName:
-            if teamName == funcTeam.GetTeamName():
-                # 队伍名已存在
-                return False, "TeamNameExist"
-        
-        if checkInTeam:
-            if funcTeam.GetMemberByID(playerID):
-                # 已经在队伍中
-                return False, "AlreadyHaveTeam"
-            
-    return True, ""
-
-def ClientServerMsg_ChangeFuncTeam(serverGroupID, msgData):
-    ## 收到子服 - 功能队伍修改
-    
-    zoneID = msgData["zoneID"]
-    playerID = msgData["playerID"]
-    teamInfo = msgData["teamInfo"]
-    cacheBase = msgData.get("cacheBase", {})
-    
-    teamID = teamInfo["teamID"]
-    funcMapID = teamInfo["funcMapID"]
-    
-    zoneInfo = GetFuncTeamMapIDZoneInfo(funcMapID, serverGroupID)
-    if not zoneInfo:
-        return
-    funcZoneID, serverGroupList = zoneInfo
-    
-    if zoneID != funcZoneID:
-        GameWorld.ErrLog("功能队伍分区不一致,无法修改! funcMapID=%s,zoneID=%s != %s" % (funcMapID, zoneID, funcZoneID), playerID)
-        return
-    
-    funcTeamMgr = PyDataManager.GetDBPyFuncTeamManager()
-    funcTeam = funcTeamMgr.GetFuncTeam(teamID)
-    if not funcTeam:
-        GameWorld.ErrLog("功能队伍不存在! funcMapID=%s,teamID=%s" % (funcMapID, teamID), playerID)
-        return
-    
-    if playerID != funcTeam.GetCaptainID():
-        GameWorld.DebugLog("非功能队伍队长,无法修改! funcMapID=%s,teamID=%s,CaptainID=%s" % (funcMapID, teamID, funcTeam.GetCaptainID()), playerID)
-        return
-    
-    if cacheBase:
-        PlayerViewCache.UpdCrossCacheBase(playerID, cacheBase)
-        
-    funcTeam.SetMinFightPower(teamInfo["minFightPower"] + teamInfo["minFightPowerEx"] * ChConfig.Def_PerPointValue)
-    funcTeam.SetMinLV(teamInfo["minLV"])
-    funcTeam.SetServerOnly(teamInfo["serverOnly"])
-    funcTeam.SetNeedCheck(teamInfo["needCheck"])
-    
-    if not funcTeam.GetNeedCheck():
-        pass
-    
-    teamID = funcTeam.GetTeamID()
-    teamInfo = funcTeam.GetSyncDict(True)
-    syncPlayerIDList = funcTeam.GetSyncPlayerIDList()
-    sendMsg = {"infoType":"ChangeFuncTeam", "zoneID":zoneID, "playerID":playerID, "funcMapID":funcMapID, 
-               "teamInfo":teamInfo, "teamID":teamID, "syncPlayerIDList":syncPlayerIDList}
-    CrossRealmMsg.SendMsgToClientServer(ShareDefine.CrossServerMsg_FuncTeamInfo, sendMsg, serverGroupList)
-    return
-
-def ClientServerMsg_FuncTeamMemOP(serverGroupID, msgData):
-    ## 收到子服 - 功能队伍操作
-    
-    zoneID = msgData["zoneID"]
-    playerID = msgData["playerID"] # 操作的玩家ID
-    teamID = msgData["teamID"]
-    funcMapID = msgData["funcMapID"]
-    opType = msgData["opType"]
-    opData = msgData["opData"]
-    cacheBase = msgData.get("cacheBase", {})
-    
-    zoneInfo = GetFuncTeamMapIDZoneInfo(funcMapID, serverGroupID)
-    if not zoneInfo:
-        return
-    funcZoneID, serverGroupList = zoneInfo
-    
-    if zoneID != funcZoneID:
-        GameWorld.ErrLog("功能队伍分区不一致,无法操作! funcMapID=%s,zoneID=%s != %s" % (funcMapID, zoneID, funcZoneID), playerID)
-        return
-    
-    if cacheBase:
-        PlayerViewCache.UpdCrossCacheBase(playerID, cacheBase)
-        
-    isOK = False
-    syncDict = {}
-    teamInfo = {}
-    
-    funcTeamMgr = PyDataManager.GetDBPyFuncTeamManager()
-    funcTeam = funcTeamMgr.GetFuncTeam(teamID)
-    if not funcTeam:
-        GameWorld.ErrLog("功能队伍不存在! funcMapID=%s,teamID=%s,opType=%s" % (funcMapID, teamID, opType), playerID)
-        syncDict["notifyMark"] = "TeamNotExist"
-        syncPlayerIDList = [playerID]
-    else:
-        # 仅队长可操作
-        if opType in [Def_FuncTeamOP_JoinAgree, Def_FuncTeamOP_JoinRefuse, Def_FuncTeamOP_Kick, 
-                      Def_FuncTeamOP_Transfer, Def_FuncTeamOP_Dissolve]:
-            if playerID != funcTeam.GetCaptainID():
-                GameWorld.ErrLog("仅队长可操作! funcMapID=%s,teamID=%s,opType=%s,CaptainID=%s" 
-                                 % (funcMapID, teamID, opType, funcTeam.GetCaptainID()), playerID)
-                return
-            
-        syncPlayerIDList = funcTeam.GetSyncPlayerIDList()
-        
-        # 申请加入
-        if opType == Def_FuncTeamOP_JoinApply:
-            isOK = __DoFuncTeamOP_JoinApply(zoneID, funcMapID, teamID, playerID, opType, opData, cacheBase, syncDict)
-            if playerID not in syncPlayerIDList:
-                syncPlayerIDList.append(playerID)
-                
-        # 申请取消
-        elif opType == Def_FuncTeamOP_JoinCancel:
-            isOK = __DoFuncTeamOP_JoinCancel(zoneID, funcMapID, teamID, playerID, opType, opData, cacheBase, syncDict)
-            if playerID not in syncPlayerIDList:
-                syncPlayerIDList.append(playerID)
-                
-        # 同意入队
-        elif opType == Def_FuncTeamOP_JoinAgree:
-            isOK = __DoFuncTeamOP_JoinAgree(zoneID, funcMapID, teamID, playerID, opType, opData, cacheBase, syncDict)
-            
-        # 拒绝入队
-        elif opType == Def_FuncTeamOP_JoinRefuse:
-            isOK = __DoFuncTeamOP_JoinRefuse(zoneID, funcMapID, teamID, playerID, opType, opData, cacheBase, syncDict)
-            
-        # 退出队伍
-        elif opType == Def_FuncTeamOP_Exit:
-            isOK = __DoFuncTeamOP_Exit(zoneID, funcMapID, teamID, playerID, opType, opData, cacheBase, syncDict)
-            
-        # 踢出队伍
-        elif opType == Def_FuncTeamOP_Kick:
-            isOK = __DoFuncTeamOP_Kick(zoneID, funcMapID, teamID, playerID, opType, opData, cacheBase, syncDict)
-            
-        # 转让队长
-        elif opType == Def_FuncTeamOP_Transfer:
-            isOK = __DoFuncTeamOP_Transfer(zoneID, funcMapID, teamID, playerID, opType, opData, cacheBase, syncDict)
-                
-        # 解散队伍
-        elif opType == Def_FuncTeamOP_Dissolve:
-            isOK = __DoFuncTeamOP_Dissolve(zoneID, funcMapID, teamID, playerID, opType, opData, cacheBase, syncDict)
-            
-    if not isOK and not syncDict:
-        # 没有执行成功 且 没有需要回复的信息,则不需要回发子服
-        return
-    
-    funcTeam = funcTeamMgr.GetFuncTeam(teamID)
-    if funcTeam:
-        teamInfo = funcTeam.GetSyncDict(True)
-        
-    sendMsg = {"infoType":"FuncTeamMemOP", "zoneID":zoneID, "playerID":playerID, "funcMapID":funcMapID, 
-               "teamInfo":teamInfo, "teamID":teamID, "syncPlayerIDList":syncPlayerIDList, "opType":opType}
-    sendMsg.update(syncDict)
-    CrossRealmMsg.SendMsgToClientServer(ShareDefine.CrossServerMsg_FuncTeamInfo, sendMsg, serverGroupList)
-    return
-
-def DelTeam(teamID):
-    funcTeamMgr = PyDataManager.GetDBPyFuncTeamManager()
-    funcTeam = funcTeamMgr.GetFuncTeam(teamID)
-    if not funcTeam:
-        GameWorld.ErrLog("删除功能队伍时不存在! teamID=%s" % teamID)
-        return
-    zoneID = funcTeam.GetZoneID()
-    funcMapID = funcTeam.GetFuncMapID()
-    syncPlayerIDList = funcTeam.GetSyncPlayerIDList()
-    
-    funcTeamMgr.DelTeam(teamID)
-    
-    if not funcTeamMgr.IsLockBatch():
-        sendMsg = {"zoneID":zoneID, "funcMapID":funcMapID, "delTeamDict":{teamID:syncPlayerIDList}}
-        CrossRealmMsg.SendMsgToClientServer(ShareDefine.CrossServerMsg_FuncTeamDel, sendMsg)
-        
-    return syncPlayerIDList
-
-def DelTeamByFunc(delFuncMapID):
-    GameWorld.Log("清空功能队伍! delFuncMapID=%s" % delFuncMapID)
-    funcTeamMgr = PyDataManager.GetDBPyFuncTeamManager()
-    funcTeamMgr.LockBatch()
-    delTeamIDList = []
-    for key, teamList in funcTeamMgr.funcTeamListDict.items():
-        zoneID, funcMapID = key
-        if funcMapID != delFuncMapID:
-            continue
-        delTeamDict = {}
-        for funcTeam in teamList[::-1]:
-            teamID = funcTeam.GetTeamID()
-            syncPlayerIDList = DelTeam(teamID)
-            if syncPlayerIDList:
-                delTeamDict[teamID] = syncPlayerIDList
-            delTeamIDList.append(teamID)
-             
-        # 按分区处理后一次性同步子服
-        zoneIpyData = CrossRealmPlayer.GetCrossZoneIpyDataByZoneID(funcMapID, zoneID)
-        serverGroupIDList = zoneIpyData.GetServerGroupIDList() if zoneIpyData else []
-        sendMsg = {"zoneID":zoneID, "funcMapID":funcMapID, "delTeamDict":delTeamDict}
-        CrossRealmMsg.SendMsgToClientServer(ShareDefine.CrossServerMsg_FuncTeamDel, sendMsg, serverGroupIDList)
-    funcTeamMgr.UnLockBatch()
-    
-    delCount = len(delTeamIDList)
-    funcTeamMgr.SyncMapFuncTeamMemIDInfo(delTeamIDList)
-    return delCount
-
-def DelTealAll():
-    delCount = 0
-    ipyDataMgr = IpyGameDataPY.IPY_Data()
-    for index in range(ipyDataMgr.GetFuncTeamSetCount()):
-        ipyData = ipyDataMgr.GetFuncTeamSetByIndex(index)
-        delCount += DelTeamByFunc(ipyData.GetFuncMapID())
-    return delCount
-
-def SendFuncTeamToClientServer(teamID):
-    ## 同步队伍明细到子服
-    funcTeamMgr = PyDataManager.GetDBPyFuncTeamManager()
-    funcTeam = funcTeamMgr.GetFuncTeam(teamID)
-    if not funcTeam:
-        return
-    funcMapID = funcTeam.GetFuncMapID()
-    teamInfo = funcTeam.GetSyncDict(True)
-    syncPlayerIDList = funcTeam.GetSyncPlayerIDList()
-    
-    sendMsg = {"infoType":"", "playerID":0, "funcMapID":funcMapID, 
-               "teamInfo":teamInfo, "teamID":teamID, "syncPlayerIDList":syncPlayerIDList}
-    CrossRealmMsg.SendMsgToClientServer(ShareDefine.CrossServerMsg_FuncTeamInfo, sendMsg)
-    return
-
-def __DoFuncTeamOP_JoinApply(zoneID, funcMapID, teamID, playerID, opType, opData, cacheBase, syncDict):
-    ## 申请加入
-    
-    funcTeamMgr = PyDataManager.GetDBPyFuncTeamManager()
-    playerTeamID = funcTeamMgr.GetPlayerTeamID(playerID, funcMapID)
-    if playerTeamID:
-        GameWorld.Log("已经有功能队伍了,不能再申请! funcMapID=%s,playerTeamID=%s" % (funcMapID, playerTeamID), playerID)
-        return
-    
-    funcTeam = funcTeamMgr.GetFuncTeam(teamID)
-    if not funcTeam:
-        return
-    
-    if funcTeam.GetMemberByID(playerID):
-        GameWorld.Log("已在功能队伍中! funcMapID=%s,teamID=%s" % (funcMapID, teamID), playerID)
-        return
-    
-    if playerID in funcTeam.GetApplyIDList():
-        GameWorld.Log("已在功能队伍申请列表中! funcMapID=%s,teamID=%s" % (funcMapID, teamID), playerID)
-        return
-    
-    ipyData = IpyGameDataPY.GetIpyGameData("FuncTeamSet", funcMapID)
-    if not ipyData:
-        return
-    
-    memberMax = ipyData.GetMemberMax()
-    applyMax = ipyData.GetApplyMax()
-    reqApplyMax = ipyData.GetReqApplyMax()
-    
-    if len(funcTeam.GetMemberList()) >= memberMax:
-        GameWorld.DebugLog("功能队伍成员已满! funcMapID=%s,teamID=%s,memberMax=%s" % (funcMapID, teamID, memberMax), playerID)
-        syncDict["notifyMark"] = "TeamMemFull"
-        return
-    
-    if applyMax and len(funcTeam.GetApplyIDList()) >= applyMax:
-        GameWorld.DebugLog("功能队伍申请队列已满! funcMapID=%s,teamID=%s,applyMax=%s" % (funcMapID, teamID, applyMax), playerID)
-        syncDict["notifyMark"] = "TeamApplyFull"
-        return
-    
-    minLV = funcTeam.GetMinLV()
-    if minLV and minLV > cacheBase.get("LV", 0):
-        GameWorld.DebugLog("功能队伍最低等级限制,无法申请! funcMapID=%s,teamID=%s,minLV=%s" % (funcMapID, teamID, minLV), playerID)
-        syncDict["notifyMark"] = "TeamLVLimit"
-        return
-    
-    minFightPower = funcTeam.GetMinFightPower()
-    if minFightPower and minFightPower > cacheBase.get("FightPower", 0):
-        GameWorld.DebugLog("功能队伍最低战力限制,无法申请! funcMapID=%s,teamID=%s,minFightPower=%s" % (funcMapID, teamID, minFightPower), playerID)
-        syncDict["notifyMark"] = "TeamFightPowerLimit"
-        return
-    
-    minServerOnly = funcTeam.GetServerOnly()
-    if minServerOnly:
-        # 待扩展,看是取ServerID,还是 ServerGroupID,需注意GroupID合服后可能不一致的问题
-        pass
-    
-    if reqApplyMax:
-        applyTeamIDList = []
-        teamList = funcTeamMgr.GetFuncTeamList(zoneID, funcMapID)
-        for fTeam in teamList:
-            if playerID in fTeam.GetApplyIDList():
-                applyTeamIDList.append(fTeam.GetTeamID())
-        if len(applyTeamIDList) >= reqApplyMax:
-            GameWorld.DebugLog("玩家申请加入队伍数已满,无法申请! funcMapID=%s,applyTeamCount=%s, %s" 
-                               % (funcMapID, len(applyTeamIDList), applyTeamIDList), playerID)
-            syncDict["notifyMark"] = "TeamReqJoinApplyFull"
-            return
-        
-    if funcTeam.GetNeedCheck():
-        syncDict["notifyMark"] = "TeamReqJoinApplyOK"
-        funcTeam.AddApplyID(playerID)
-    else:
-        funcTeam.AddTeamMember(playerID)
-        
-    return True
-
-def __DoFuncTeamOP_JoinCancel(zoneID, funcMapID, teamID, playerID, opType, opData, cacheBase, syncDict):
-    ## 申请取消
-    
-    funcTeamMgr = PyDataManager.GetDBPyFuncTeamManager()
-    funcTeam = funcTeamMgr.GetFuncTeam(teamID)
-    if not funcTeam:
-        return
-    
-    funcTeam.DelApplyID(playerID)
-    
-    return True
-
-def __DoFuncTeamOP_JoinAgree(zoneID, funcMapID, teamID, playerID, opType, opData, cacheBase, syncDict):
-    ## 同意入队
-    # @param opData: 目标玩家ID,为0时一键同意
-    
-    ipyData = IpyGameDataPY.GetIpyGameData("FuncTeamSet", funcMapID)
-    if not ipyData:
-        return
-    
-    funcTeamMgr = PyDataManager.GetDBPyFuncTeamManager()
-    funcTeam = funcTeamMgr.GetFuncTeam(teamID)
-    if not funcTeam:
-        return
-    
-    applyIDList = funcTeam.GetApplyIDList()
-    if not applyIDList:
-        return
-        
-    memberMax = ipyData.GetMemberMax()
-    joinPlayerIDList = []
-    tagPlayerID = opData
-    if tagPlayerID:
-        if tagPlayerID not in applyIDList:
-            GameWorld.Log("目标玩家不在功能队伍申请列表中! funcMapID=%s,teamID=%s,tagPlayerID=%s not in applyIDList=%s" 
-                          % (funcMapID, teamID, tagPlayerID, applyIDList), playerID)
-            return
-        
-        tagPlayerTeamID = funcTeamMgr.GetPlayerTeamID(tagPlayerID, funcMapID)
-        if tagPlayerTeamID:
-            GameWorld.DebugLog("目标玩家已加入其他功能队伍! funcMapID=%s,tagPlayerID=%s,tagPlayerTeamID=%s" 
-                               % (funcMapID, tagPlayerID, tagPlayerTeamID), playerID)
-            syncDict["notifyMark"] = "PlayerInOtherTeam"
-        else:
-            joinPlayerIDList = [tagPlayerID]
-    else:
-        joinPlayerIDList = [] + applyIDList # 一键同意按申请顺序,如需按战力再做优化
-        
-    for joinPlayerID in joinPlayerIDList:
-        if len(funcTeam.GetMemberList()) >= memberMax:
-            GameWorld.DebugLog("功能队伍成员已满! funcMapID=%s,teamID=%s,memberMax=%s" % (funcMapID, teamID, memberMax), playerID)
-            break
-        tagPlayerTeamID = funcTeamMgr.GetPlayerTeamID(joinPlayerID, funcMapID)
-        if tagPlayerTeamID:
-            GameWorld.DebugLog("目标玩家已加入其他功能队伍! funcMapID=%s,joinPlayerID=%s,tagPlayerTeamID=%s" 
-                               % (funcMapID, joinPlayerID, tagPlayerTeamID), playerID)
-            continue
-        funcTeam.AddTeamMember(joinPlayerID)
-        
-    return True
-
-def __DoFuncTeamOP_JoinRefuse(zoneID, funcMapID, teamID, playerID, opType, opData, cacheBase, syncDict):
-    ## 拒绝入队
-    # @param opData: 目标玩家ID,为0时一键拒绝
-    
-    funcTeamMgr = PyDataManager.GetDBPyFuncTeamManager()
-    funcTeam = funcTeamMgr.GetFuncTeam(teamID)
-    if not funcTeam:
-        return
-    
-    tagPlayerID = opData
-    if tagPlayerID:
-        funcTeam.DelApplyID(tagPlayerID)
-    else:
-        funcTeam.DelApplyIDAll() # 一键拒绝
-        
-    return True
-
-def __DoFuncTeamOP_Exit(zoneID, funcMapID, teamID, playerID, opType, opData, cacheBase, syncDict):
-    ## 退出队伍
-    
-    funcTeamMgr = PyDataManager.GetDBPyFuncTeamManager()
-    funcTeam = funcTeamMgr.GetFuncTeam(teamID)
-    if not funcTeam:
-        return
-    
-    # 队长退出,直接解散
-    if playerID == funcTeam.GetCaptainID():
-        return __DoFuncTeamOP_Dissolve(zoneID, funcMapID, teamID, playerID, opType, opData, cacheBase, syncDict)
-    
-    funcTeam.DelTeamMember(playerID)
-    
-    return True
-
-def __DoFuncTeamOP_Kick(zoneID, funcMapID, teamID, playerID, opType, opData, cacheBase, syncDict):
-    ## 踢出队伍
-    
-    funcTeamMgr = PyDataManager.GetDBPyFuncTeamManager()
-    funcTeam = funcTeamMgr.GetFuncTeam(teamID)
-    if not funcTeam:
-        return
-    
-    tagPlayerID = opData
-    if not tagPlayerID:
-        GameWorld.DebugLog("需指定踢出队伍目标队员! opData=%s" % opData, playerID)
-        return
-    
-    if tagPlayerID == funcTeam.GetCaptainID():
-        GameWorld.DebugLog("不能踢队长! opData=%s" % opData, playerID)
-        return
-    
-    funcTeam.DelTeamMember(tagPlayerID)
-    
-    return True
-
-def __DoFuncTeamOP_Transfer(zoneID, funcMapID, teamID, playerID, opType, opData, cacheBase, syncDict):
-    ## 转让队长
-    
-    funcTeamMgr = PyDataManager.GetDBPyFuncTeamManager()
-    funcTeam = funcTeamMgr.GetFuncTeam(teamID)
-    if not funcTeam:
-        return
-    
-    memberIDList = funcTeam.GetMemberIDList()
-    tagPlayerID = opData
-    if tagPlayerID not in memberIDList:
-        GameWorld.Log("目标玩家不是队员,无法转让队长! funcMapID=%s,teamID=%s,tagPlayerID=%s not in %s" 
-                      % (funcMapID, teamID, tagPlayerID, memberIDList), playerID)
-        return
-    
-    funcTeam.SetCaptainID(tagPlayerID)
-    
-    return True
-
-def __DoFuncTeamOP_Dissolve(zoneID, funcMapID, teamID, playerID, opType, opData, cacheBase, syncDict):
-    ## 解散队伍
-    funcTeamMgr = PyDataManager.GetDBPyFuncTeamManager()
-    funcTeamMgr.DelTeam(teamID)
-    return True
-
-def ClientServerMsg_QueryFuncTeam(serverGroupID, msgData):
-    ## 收到子服 - 查找队伍列表
-    
-    zoneID = msgData["zoneID"]
-    playerID = msgData["playerID"]
-    funcMapID = msgData["funcMapID"]
-    cacheBase = msgData.get("cacheBase", {})
-    
-    zoneInfo = GetFuncTeamMapIDZoneInfo(funcMapID, serverGroupID)
-    if not zoneInfo:
-        return
-    funcZoneID, _ = zoneInfo
-    
-    if zoneID != funcZoneID:
-        GameWorld.ErrLog("功能队伍分区不一致,无法查询! funcMapID=%s,zoneID=%s != %s" % (funcMapID, zoneID, funcZoneID), playerID)
-        return
-    
-    if cacheBase:
-        PlayerViewCache.UpdCrossCacheBase(playerID, cacheBase)
-        
-    # 非列表查询,返回玩家相关队伍
-    if "startIndex" not in msgData:
-        syncPlayerIDList = [playerID]
-        serverGroupList = [serverGroupID]
-        
-        funcTeamMgr = PyDataManager.GetDBPyFuncTeamManager()
-        # 申请的队伍
-        funcTeamList = funcTeamMgr.GetFuncTeamList(zoneID, funcMapID)
-        for funcTeam in funcTeamList:
-            if playerID not in funcTeam.GetApplyIDList():
-                continue
-            teamID = funcTeam.GetTeamID()
-            teamInfo = funcTeam.GetSyncDict(True)
-            sendMsg = {"infoType":"QueryPlayerFuncTeam", "zoneID":zoneID, "playerID":playerID, "funcMapID":funcMapID, 
-                       "teamInfo":teamInfo, "teamID":teamID, "syncPlayerIDList":syncPlayerIDList}
-            CrossRealmMsg.SendMsgToClientServer(ShareDefine.CrossServerMsg_FuncTeamInfo, sendMsg, serverGroupList)
-            
-        # 玩家所属队伍
-        teamID = funcTeamMgr.GetPlayerTeamID(playerID, funcMapID)
-        funcTeam = funcTeamMgr.GetFuncTeam(teamID)
-        teamInfo = funcTeam.GetSyncDict(True) if funcTeam else {}
-        sendMsg = {"infoType":"QueryPlayerFuncTeam", "zoneID":zoneID, "playerID":playerID, "funcMapID":funcMapID, 
-                   "teamInfo":teamInfo, "teamID":teamID, "syncPlayerIDList":syncPlayerIDList}
-        CrossRealmMsg.SendMsgToClientServer(ShareDefine.CrossServerMsg_FuncTeamInfo, sendMsg, serverGroupList)
-        return
-    
-    # 列表查询
-    funcMapEx = msgData["funcMapEx"]
-    startIndex = msgData["startIndex"]
-    queryCnt = msgData["queryCnt"]
-    haveSpace = msgData["haveSpace"]
-    idLimitType = msgData["idLimitType"]
-    searchMsg = msgData["searchMsg"]
-    if queryCnt <= 0:
-        queryCnt = 20
-    queryCnt = min(100, queryCnt) # 默认20,最大100
-    
-    ipyData = IpyGameDataPY.GetIpyGameData("FuncTeamSet", funcMapID)
-    if not ipyData:
-        return
-    memberMax = ipyData.GetMemberMax()
-    
-    idLimitTypeDict = {1:"FamilyID", 2:"ServerGroupID", 3:"AccID"}
-    loopIndex = startIndex
-    teamInfoList = []
-    funcTeamMgr = PyDataManager.GetDBPyFuncTeamManager()
-    teamList = funcTeamMgr.GetFuncTeamList(zoneID, funcMapID)
-    for index in xrange(startIndex, len(teamList)):
-        loopIndex = index + 1
-        funcTeam = teamList[index]
-        if searchMsg:
-            # 精确匹配队伍名、队伍ID的插入在最前面
-            if searchMsg == funcTeam.GetTeamName() or searchMsg == str(funcTeam.GetTeamID()):
-                teamInfoList.insert(0, funcTeam.GetSyncDict(False))
-            elif searchMsg in funcTeam.GetTeamName():
-                teamInfoList.append(funcTeam.GetSyncDict(False))
-            else:
-                continue
-        else:
-            if funcMapEx != 0 and funcMapEx != funcTeam.GetFuncMapEx():
-                continue
-            if haveSpace and len(funcTeam.GetMemberList()) >= memberMax:
-                #GameWorld.DebugLog("已满员,不加入列表查看 teamID=%s" % funcTeam.GetTeamID())
-                continue
-            if idLimitType in idLimitTypeDict:
-                limitAttrName = idLimitTypeDict[idLimitType]
-                curIDValue = cacheBase.get(limitAttrName, 0)
-                captainID = funcTeam.GetCaptainID()
-                cacheDict = PlayerViewCache.GetCachePropDataDict(PlayerViewCache.FindViewCache(captainID))
-                teamIDValue = cacheDict.get(limitAttrName, 0)
-                if limitAttrName == "AccID":
-                    curIDValue = GameWorld.GetAccIDServerID(str(curIDValue))
-                    teamIDValue = GameWorld.GetAccIDServerID(str(teamIDValue))
-                    
-                if not curIDValue or curIDValue != teamIDValue:
-                    #GameWorld.DebugLog("没有或不同ID限制,不加入列表查看! idLimitType=%s,curIDValue=%s != %s, teamID=%s, captainID=%s" 
-                    #                   % (idLimitType, curIDValue, teamIDValue, funcTeam.GetTeamID(), captainID))
-                    continue
-            teamInfoList.append(funcTeam.GetSyncDict(False))
-            
-        if len(teamInfoList) >= queryCnt:
-            break
-        
-    serverGroupList = [serverGroupID] # 仅通知查询服即可
-    sendMsg = {"teamInfoList":teamInfoList, "loopIndex":loopIndex, "queryInfo":msgData}
-    CrossRealmMsg.SendMsgToClientServer(ShareDefine.CrossServerMsg_FuncTeamList, sendMsg, serverGroupList)
-    return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerLuckyCloudBuy.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerLuckyCloudBuy.py
deleted file mode 100644
index 59fe2c9..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerLuckyCloudBuy.py
+++ /dev/null
@@ -1,183 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-##@package Player.PlayerLuckyCloudBuy
-#
-# @todo:幸运云购
-# @author hxp
-# @date 2021-10-21
-# @version 1.0
-#
-# 详细描述: 幸运云购
-#
-#-------------------------------------------------------------------------------
-#"""Version = 2021-10-21 17:00"""
-#-------------------------------------------------------------------------------
-
-import ChConfig
-import PyGameData
-import ShareDefine
-import PlayerControl
-import IpyGameDataPY
-import CrossRealmPlayer
-import ChPyNetSendPack
-import IPY_GameWorld
-import NetPackCommon
-import ItemControler
-import ItemCommon
-import GameWorld
-
-def OnPlayerLogin(curPlayer):
-    
-    if GameWorld.IsCrossServer():
-        return
-    
-    if not CrossRealmPlayer.IsCrossServerOpen():
-        return
-    
-    __CheckLuckyCloudBuyID(curPlayer)
-    Sync_LuckyCloudBuyPlayerInfo(curPlayer)
-    return
-
-def OnLuckyCloudBuyChange():
-    
-    if GameWorld.IsCrossServer():
-        return
-    
-    if not CrossRealmPlayer.IsCrossServerOpen():
-        return
-    
-    playerManager = GameWorld.GetPlayerManager()
-    for index in xrange(playerManager.GetPlayerCount()):
-        curPlayer = playerManager.GetPlayerByIndex(index)
-        if not GameWorld.IsNormalPlayer(curPlayer):
-            continue
-        __CheckLuckyCloudBuyID(curPlayer)
-        Sync_LuckyCloudBuyPlayerInfo(curPlayer) # 该功能收到就同步,不论有没有重置,因为可能由跨服关闭变为开启时的数据同步
-        
-    return
-
-def __CheckLuckyCloudBuyID(curPlayer):
-    
-    roundID = PyGameData.g_luckyCloudBuyInfo.get("idTime", 0)
-    playerRoundID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_LuckyCloudBuy_RoundID) # 玩家身上的活动ID
-    if playerRoundID == roundID:
-        GameWorld.DebugLog("幸运云购奖励期ID相同,不重置! playerRoundID=%s,roundID=%s" % (playerRoundID, roundID), curPlayer.GetPlayerID())
-        return
-    GameWorld.DebugLog("幸运云购奖励期ID变更,重置! playerRoundID=%s,roundID=%s" % (playerRoundID, roundID), curPlayer.GetPlayerID())
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_LuckyCloudBuy_RoundID, roundID)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_LuckyCloudBuy_BuyCount, 0)
-    return True
-
-#// C1 10 幸运云购购买 #tagCMLuckyCloudBuy
-#
-#struct    tagCMLuckyCloudBuy
-#{
-#    tagHead        Head;
-#    BYTE        BuyCount;    // 购买次数
-#};
-def OnLuckyCloudBuy(index, clientData, tick):
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    accID = curPlayer.GetAccID()
-    playerID = curPlayer.GetPlayerID()
-    buyCount = clientData.BuyCount
-    
-    if GameWorld.IsCrossServer():
-        return
-    
-    if not CrossRealmPlayer.IsCrossServerOpen():
-        PlayerControl.NotifyCode(curPlayer, "CrossMatching18")
-        return
-    
-    unLimitHour, unLimitMinute = IpyGameDataPY.GetFuncEvalCfg("LuckyCloudBuyCost", 3)
-    crossServerDateTime = None #GameWorld.ChangeStrToDatetime(GameWorld.GetCrossServerTimeStr())
-    if not crossServerDateTime:
-        return
-    unLimitDateTime = GameWorld.ChangeStrToDatetime("%d-%d-%d %d:%d:00" \
-                                % (crossServerDateTime.year, crossServerDateTime.month, crossServerDateTime.day, unLimitHour, unLimitMinute))
-    
-    if crossServerDateTime >= unLimitDateTime:
-        GameWorld.DebugLog("当前跨服服务器时间不限制幸运云购购买次数了! crossServerDateTime=%s,unLimitHour=%s,unLimitMinute=%s" 
-                           % (crossServerDateTime, unLimitHour, unLimitMinute))
-    else:
-        hadBuyCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_LuckyCloudBuy_BuyCount)
-        vipLV = curPlayer.GetVIPLv()
-        gmLVLimitBuyCountList = IpyGameDataPY.GetFuncEvalCfg("LuckyCloudBuyCost", 2)
-        maxBuyCount = gmLVLimitBuyCountList[vipLV] if len(gmLVLimitBuyCountList) > vipLV else gmLVLimitBuyCountList[-1]
-        if hadBuyCount + buyCount > maxBuyCount:
-            GameWorld.DebugLog("幸运云购购买次数限制! hadBuyCount=%s,buyCount=%s,vipLV=%s,maxBuyCount=%s,crossServerDateTime=%s" 
-                               % (hadBuyCount, buyCount, vipLV, maxBuyCount, crossServerDateTime))
-            return
-        
-    buyCountCostMoneyDict = IpyGameDataPY.GetFuncEvalCfg("LuckyCloudBuyCost", 1, {})
-    if str(buyCount) not in buyCountCostMoneyDict:
-        return
-    costMoneyType, costMoneyValue = buyCountCostMoneyDict[str(buyCount)]
-    if not PlayerControl.HaveMoney(curPlayer, costMoneyType, costMoneyValue):
-        return
-    
-    needSpace = min(buyCount, 10)
-    emptySpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem, needSpace)
-    if needSpace > emptySpace:
-        PlayerControl.NotifyCode(curPlayer, "GeRen_lhs_202580")
-        return
-    
-    if not GameWorld.SetPlayerTickTime(curPlayer, ChConfig.TYPE_Player_Tick_LuckyCloudBuy, tick):
-        PlayerControl.NotifyCode(curPlayer, "RequestLater")
-        return
-    
-    GameWorld.Log("幸运云购购买: buyCount=%s" % (buyCount), playerID)
-    
-    dataMsg = {"accID":accID,
-               "playerID":playerID,
-               "playerName":CrossRealmPlayer.GetCrossPlayerName(curPlayer),
-               "buyCount":buyCount,
-               "roundID":curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_LuckyCloudBuy_RoundID),
-               }
-    GameWorld.SendMsgToCrossServer(ShareDefine.ClientServerMsg_LuckyCloudBuy, dataMsg)
-    return
-
-def GameServer_LuckyCloudBuy(curPlayer, msgData):
-    msgType = msgData[0]
-    if msgType == "LuckyCloudBuyNum":
-        CrossServerMsg_LuckyCloudBuyNum(curPlayer, msgData)
-        
-    return
-
-def CrossServerMsg_LuckyCloudBuyNum(curPlayer, msgData):
-        
-    playerID = curPlayer.GetPlayerID()
-    _, roundID, buyCount, awardItemList = msgData
-    
-    # 消耗钱及奖励必须执行,增加次数需同一个轮次ID
-    playerRoundID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_LuckyCloudBuy_RoundID)
-    hadBuyCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_LuckyCloudBuy_BuyCount)
-    GameWorld.Log("地图玩家收到幸运云购购买结算信息! playerRoundID=%s,hadBuyCount=%s, roundID=%s,buyCount=%s" 
-                  % (playerRoundID, hadBuyCount, roundID, buyCount), playerID)
-    
-    buyCountCostMoneyDict = IpyGameDataPY.GetFuncEvalCfg("LuckyCloudBuyCost", 1, {})
-    if str(buyCount) not in buyCountCostMoneyDict:
-        return
-    costMoneyType, costMoneyValue = buyCountCostMoneyDict[str(buyCount)]
-    
-    if not PlayerControl.PayMoney(curPlayer, costMoneyType, costMoneyValue, "LuckyCloudBuy"):
-        return
-    
-    if roundID == playerRoundID:
-        updBuyCount = hadBuyCount + buyCount
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_LuckyCloudBuy_BuyCount, updBuyCount)
-        GameWorld.Log("    更新幸运云购购买次数: updBuyCount=%s" % (updBuyCount), playerID)
-        
-    GameWorld.Log("    结算幸运云购购买奖励: awardItemList=%s" % str(awardItemList), playerID)
-    ItemControler.GivePlayerItemOrMail(curPlayer, awardItemList, event=["LuckyCloudBuy", False, {}])
-    
-    Sync_LuckyCloudBuyPlayerInfo(curPlayer)
-    return
-
-def Sync_LuckyCloudBuyPlayerInfo(curPlayer):
-    clientPack = ChPyNetSendPack.tagMCLuckyCloudBuyPlayerInfo()
-    clientPack.BuyCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_LuckyCloudBuy_BuyCount)
-    NetPackCommon.SendFakePack(curPlayer, clientPack)
-    return
-
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerPet.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerPet.py
deleted file mode 100644
index 0628bf4..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerPet.py
+++ /dev/null
@@ -1,1162 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-##@package Player.PlayerPet
-#
-# @todo:宠物/灵兽
-# @author xdh
-# @date 2018-7-20
-# @version 1.0
-#
-# 详细描述: 宠物
-#
-#-------------------------------------------------------------------------------
-#"""Version = 2018-7-20 15:30"""
-#-------------------------------------------------------------------------------
-
-#导入
-import ChConfig
-import NPCCommon
-import ItemCommon
-import IPY_GameWorld
-import DataRecordPack
-import PlayerBillboard
-import SkillShell
-import ItemControler
-import PlayerControl
-import GameFuncComm
-import ShareDefine
-import SkillCommon
-import PetControl
-import GameWorld
-import IpyGameDataPY
-import GameMap
-import PlayerWeekParty
-import CalcNoLineEffect
-import PassiveBuffEffMng
-import CrossPlayerData
-import CalcLineEffect
-import ChPyNetSendPack
-import NetPackCommon
-import PlayerActLunhuidian
-import PlayerActTask
-import GameObj
-
-import random
-import math
-#---------------------------------------------------------------------
-
-
-def DoLogic_PetInfo_OnDay(curPlayer):
-            
-    return
-#---------------------------------------------------------------------
-
-## 宠物功能开启
-#  @return: 是否激活成功
-def DoPetOpen(curPlayer):
-    GameWorld.DebugLog("DoPetOpen...", curPlayer.GetPlayerID())
-        
-#    firstPetData = ReadChConfig.GetEvalChConfig("FirstPet")
-#    petNPCID = firstPetData[0]
-#    isAutoFight = firstPetData[1]
-#    if petNPCID <= 0:
-#        return
-#    
-#    # 如果已经有该宠物, 不再给
-#    if GetPetDataItemIndexByNPCID(curPlayer, petNPCID) < 0:
-#        newPetItem = GetNewPetDataItem(curPlayer, petNPCID)
-#        if not newPetItem:
-#            return
-#        
-#        if not ItemControler.PlayerItemControler(curPlayer).PutInItem(ShareDefine.rptPet, newPetItem):
-#            return
-#        
-#        petData = newPetItem.GetUserData()
-#        DataRecordPack.DR_UsePetEgg(curPlayer, 0, petNPCID, petData)
-#        
-#    if isAutoFight and not curPlayer.GetPetMgr().GetFightPet():
-#        petItemIndex = GetPetDataItemIndexByNPCID(curPlayer, petNPCID)
-#        GameWorld.DebugLog("自动出战新手宠!petNPCID=%s,petItemIndex=%s" % (petNPCID, petItemIndex))
-#        DoChangePetState(curPlayer, petItemIndex, ShareDefine.Def_PetState_Fight)
-    
-    for trainType in xrange(1, GetPetTrainTypes() + 1):
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_PetTrainLV % trainType, 1)
-    Sync_PetTrainData(curPlayer)
-    return True
-
-## 功能开启后, 角色升级需要的处理
-def DoLVUPLogic_Pet(curPlayer):
-    #GameWorld.DebugLog("DoLVUPLogic_Pet")
-    return
-
-def GetPetIpydata(petNPCID):return IpyGameDataPY.GetIpyGameData("PetInfo", petNPCID)
-
-## 获取新宠物数据物品
-def GetNewPetDataItem(curPlayer, petNPCID, classlv= -1):
-
-    gameData = GameWorld.GetGameData()
-    petNpcData = gameData.FindNPCDataByID(petNPCID)
-    if not petNpcData:
-        GameWorld.ErrLog("FindNPCDataByID can not find npcData petNPCID=%s" % (petNPCID))
-        return
-    petIpyData = GetPetIpydata(petNPCID)
-    if not petIpyData:
-        GameWorld.ErrLog("tagPetInfo.txt can not find petData petNPCID=%s" % (petNPCID))
-        return
-    
-    newPetItem = None#ItemCommon.CreateSingleItem(ChConfig.Def_ItemID_PetData)
-    if not newPetItem:
-        return
-    
-    newPetItem.SetUserAttr(ShareDefine.Def_IudetPet_NPCID, petNPCID)
-    newPetItem.SetUserAttr(ShareDefine.Def_IudetPet_State, ShareDefine.Def_PetState_Null)
-    
-    initClass = petIpyData.GetInitRank() if classlv == -1 else classlv#初始阶级
-    newPetItem.SetUserAttr(ShareDefine.Def_IudetPet_ClassLV, max(0, initClass - 1)) #代码里从0开始
-    newPetItem.SetUserAttr(ShareDefine.Def_IudetPet_QualityLV, petIpyData.GetQuality()) # 宠物品质
-    
-    petSkillList = petIpyData.GetSkillID()
-    petSkillUnLockList = petIpyData.GetSkillUnLock()
-
-    for i, skillid in enumerate(petSkillList):
-        limitPetClassLV = petSkillUnLockList[i] # 学习此技能所需宠物阶级
-        if initClass < limitPetClassLV:
-            continue
-        curSkilData = GameWorld.GetGameData().GetSkillBySkillID(skillid)
-        if not curSkilData:
-            continue
-        if curSkilData.GetFuncType() == ChConfig.Def_SkillFuncType_PetOwnerSkill:
-            __GiveOwnerSkill(curPlayer, skillid)
-            continue
-        newPetItem.AddUserAttr(ShareDefine.Def_IudetPet_Skill, skillid)
-    
-    return newPetItem
-
-# 从称号获得技能
-def __GiveOwnerSkill(curPlayer, skillResID):
-    GameWorld.DebugLog("给灵宠主人技能: skillResID=%s" % skillResID)
-    skillData = GameWorld.GetGameData().FindSkillByType(skillResID, 1)
-    if skillData == None:
-        GameWorld.DebugLog("    not find skill(%s)" % skillResID)
-        return
-    if not SkillCommon.CheckSkillJob(curPlayer, skillData):
-        return
-    if not SkillShell.CheckLearnSkillCondition(curPlayer, skillData):
-        GameWorld.DebugLog("    learn skill condition isn't enough! skillResID=%s" % skillResID)
-        return
-    skillManager = curPlayer.GetSkillManager()
-    if skillManager.FindSkillBySkillTypeID(skillResID):
-        GameWorld.DebugLog("    have learned skill(%s)" % skillResID)
-        return
-    
-    skillManager.LVUpSkillBySkillTypeID(skillResID)
-    PassiveBuffEffMng.GetPassiveEffManager().RegistPassiveEff(curPlayer, skillResID)    
-    PlayerControl.PlayerControl(curPlayer).RefreshSkillFightPowerEx(skillResID, 0)
-    return
-
-## 获取宠物实例对应的宠物数据物品
-def GetPetDataItem(curPetOwner, rolePet):
-    if not curPetOwner:
-        return
-    packItemIndex = GetPetObjItemIndex(rolePet)
-    return GetPetDataItemByIndex(curPetOwner, packItemIndex)
-
-## 获取宠物数据物品
-def GetPetDataItemByIndex(curPlayer, petItemIndex):
-    
-    petDataPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptPet)
-    petDataItem = petDataPack.GetAt(petItemIndex)
-    if not ItemCommon.CheckItemCanUse(petDataItem):
-        GameWorld.DebugLog("PetDataItem is none! PetItemIndex=%s" % petItemIndex, curPlayer.GetPlayerID())
-        return
-    
-    return petDataItem
-
-## 获取宠物数据物品
-def GetPetDataItemByNPCID(curPlayer, petNPCID):
-    petDataPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptPet)
-    for petDataIndex in range(petDataPack.GetCount()):
-        petItem = petDataPack.GetAt(petDataIndex)
-        if petItem.IsEmpty():
-            continue
-        if petNPCID == petItem.GetUserAttr(ShareDefine.Def_IudetPet_NPCID):
-            return petItem
-    return
-
-## 永恒暂用友好度来存储该宠物所属的宠物背包物品索引
-def GetPetObjItemIndex(rolePet): return rolePet.GetRolePet().Friendliness
-def SetPetObjItemIndex(petStruct, petItemIndex): petStruct.Friendliness = petItemIndex
-
-## 根据宠物NPCID获取宠物数据物品在背包中的索引
-def GetPetDataItemIndexByNPCID(curPlayer, petNPCID):
-    petDataPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptPet)
-    for petDataIndex in range(petDataPack.GetCount()):
-        petItem = petDataPack.GetAt(petDataIndex)
-        if petItem.IsEmpty():
-            continue
-        if petNPCID == petItem.GetUserAttr(ShareDefine.Def_IudetPet_NPCID):
-            return petDataIndex
-        
-    return -1
-
-#===================================================================================================
-# //////////////////////////////////////////////////////////////
-# //16 03 宠物出战/召回#tagCPetStateChange
-# tagCPetStateChange       *   GettagCPetStateChange();
-# 
-# class   IPY_CPetStateChange
-# {
-# public:
-# 
-#    int      GetPetID();
-#    // 状态.0-召回;1-出战;2xx-守护(守护+目标守护位)
-#    int      GetState(); 0~255
-# };
-#===================================================================================================
-##客户端封包响应
-#@param index 玩家索引
-#@param tick 时间戳
-#@return 返回值无意义
-#@remarks 客户端封包响应 //16 03 宠物出战/召回#tagCPetStateChange
-def PetStateChange(index, tick):
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    pack = IPY_GameWorld.IPY_CPetStateChange()
-    petItemIndex = pack.GetPetID()
-    state = pack.GetState()
-    
-    #时间间隔未到,不处理(2010-06-23 16:20 策划刘鸿生说无须系统提示)
-    if tick - curPlayer.GetTickByType(ChConfig.TYPE_Player_Tick_ChangePetState) \
-       < ChConfig.TYPE_Player_Tick_Time[ChConfig.TYPE_Player_Tick_ChangePetState]:
-        #没有到刷新间隔
-        return
-    
-    curPlayer.SetTickByType(ChConfig.TYPE_Player_Tick_ChangePetState, tick)
-    
-    DoChangePetState(curPlayer, petItemIndex, state)
-    return
-
-## 宠物战斗状态变更; 0-收回;1-出战  (手游版本只能出战)
-def DoChangePetState(curPlayer, petItemIndex, tagState, isRefresh=True):
-    if petItemIndex < 0:
-        return
-    
-    if tagState not in ShareDefine.Def_PetStateList:
-        return
-        
-    petItem = GetPetDataItemByIndex(curPlayer, petItemIndex)
-    if not petItem:
-        return
-    
-    #判断是否达到可切换的阶数
-    curClasslv = petItem.GetUserAttr(ShareDefine.Def_IudetPet_ClassLV)
-    petNPCID = petItem.GetUserAttr(ShareDefine.Def_IudetPet_NPCID)
-    ipyData = GetPetIpydata(petNPCID)
-    if not ipyData:
-        return
-    needClasslv = ipyData.GetUseNeedRank()
-    if curClasslv < needClasslv - 1: #配置的阶级从1开始
-        GameWorld.DebugLog('    灵兽切换外观,阶级不足%s,不可切换!' % needClasslv)
-        return
-    
-    curState = petItem.GetUserAttr(ShareDefine.Def_IudetPet_State) # 当前状态
- 
-    GameWorld.DebugLog("宠物状态变更!petItemIndex=%s,curState=%s,tagState=%s" 
-                       % (petItemIndex, curState, tagState))
-    
-    # 当前状态处理
-    if curState == ShareDefine.Def_PetState_Fight:
-#        curPet = curPlayer.GetPetMgr().GetFightPet()
-#        if curPet:
-#            #已是出战状态, C++召唤坐标和人重叠
-#            resultPos = GameMap.GetEmptyPlaceInArea(curPlayer.GetPosX(), curPlayer.GetPosY(), ChConfig.Def_SummonAppearDist)
-#            curPet.ResetPos(resultPos.GetPosX(), resultPos.GetPosY())
-#            PassiveBuffEffMng.GetPassiveEffManager().RegistPassiveEff(curPet)
-#            PassiveBuffEffMng.GetPassiveEffManager().RegistPassiveBuff(curPet)
-#        return
-        #18/10/15 因为某种未知原因宠物物品的状态是出战(实际场景中未出战),导致该宠物无法出战,故再次发包出战时,此处不拦!
-        PetControl.ReCallFightPet(curPlayer)
-   
-    else:
-        pass
-    
-    # 目标状态处理
-    if tagState == ShareDefine.Def_PetState_Null:
-        #这里可不再宠物设置Null状态
-        #petItem.SetUserAttr(ShareDefine.Def_IudetPet_State, ShareDefine.Def_PetState_Null)
-        pass
-    elif tagState == ShareDefine.Def_PetState_Fight:
-        __DoPetGoOutToFight(curPlayer, petItem)
-   
-        
-    if isRefresh:
-        RefreshPetItemAddAttr(curPlayer, True) # 不刷排行榜
-        
-#    if petItem.GetUserAttr(ShareDefine.Def_IudetPet_State) != tagState:
-#        petItem.SetUserAttr(ShareDefine.Def_IudetPet_State, tagState)
-#        GameWorld.DebugLog("切换宠物状态异常防范! curState=%s,tagState=%s" % (curState, tagState))
-        
-    if not GameWorld.IsCrossServer():
-        dataList = [petNPCID, curClasslv, tagState]
-        CrossPlayerData.SendDataToCrossServer(curPlayer, CrossPlayerData.CrossData_PetState, dataList)
-        
-    return
-
-def CrossServer_DoChangePetState(curPlayer, dataList):
-    ## 跨服处理 宠物战斗状态变更
-    petNPCID, curClasslv, tagState = dataList
-    petItem = GetPetDataItemByNPCID(curPlayer, petNPCID)
-    if not petItem:
-        newPetItem = GetNewPetDataItem(curPlayer, petNPCID)
-        if not newPetItem:
-            return
-        if not ItemControler.PlayerItemControler(curPlayer).PutInItem(ShareDefine.rptPet, newPetItem):
-            return
-        petItem = GetPetDataItemByNPCID(curPlayer, petNPCID)
-    if not petItem:
-        return
-    
-    curItemClasslv = petItem.GetUserAttr(ShareDefine.Def_IudetPet_ClassLV)
-    # 处理技能问题,暂不处理
-    if curClasslv > curItemClasslv:
-        pass
-    
-    curState = petItem.GetUserAttr(ShareDefine.Def_IudetPet_State) # 当前状态
-    if curState == ShareDefine.Def_PetState_Fight:
-        PetControl.ReCallFightPet(curPlayer)
-        
-    if tagState == ShareDefine.Def_PetState_Fight:
-        __DoPetGoOutToFight(curPlayer, petItem)
-        
-    return
-
-
-## 执行宠物出战逻辑
-def __DoPetGoOutToFight(curPlayer, petItem):
-    npcID = petItem.GetUserAttr(ShareDefine.Def_IudetPet_NPCID)
-
-    petNpcData = GameWorld.GetGameData().FindNPCDataByID(npcID)
-    if not petNpcData:
-        GameWorld.Log("PetStateChange FindNPCDataByID, pet npcID = %s" % (npcID))
-        return
-    
-    petMgr = curPlayer.GetPetMgr()
-    rolePet = petMgr.PetList_Add(npcID)
-    if rolePet == None:
-        GameWorld.ErrLog("PetStateChange PetList_Add, 添加宠物 = %s失败" % (npcID))
-        return
-    
-    #---初始化宠物属性---
-    petStruct = rolePet.GetRolePet()
-    petID = petStruct.PetID
-    petStruct.BindType = petItem.GetIsBind()
-    petStruct.Name = str(petStruct.PetID)#petNpcData.GetName() 配表不是UTF8会导致报错,默认用ID当名字
-    petStruct.DailyTrainCnt = 0
-    # 宠物lv 改为 阶级 用于客户端显示名字颜色用
-#    classLV = petItem.GetUserAttr(ShareDefine.Def_IudetPet_ClassLV)
-#    rolePet.SetLV(classLV)
-
-    #位置.1, 在宠物列表; 2, 在物品背包     
-    petStruct.Pos = 1
-    
-    petItemIndex = petItem.GetItemPlaceIndex()
-    SetPetObjItemIndex(petStruct, petItemIndex)
-    rolePet.SetRolePet(petStruct)
-    
-    learnSkillList, passiveSkillList = GetPetLearnSkill(curPlayer)
-    PetControl.DoLogic_PlayerPetLearnSkillList(rolePet, learnSkillList)
-    
-    #---刷新属性(不通知)---
-    #GameWorld.DebugLog("刷前: petID=%s,playerID=%s,npcID=%s,BindType=%s,AIMode=%s,PetIndex=%s,grade=%s,qualLV=%s," 
-    #                   % (petStruct.PetID, petStruct.PlayerID, petStruct.NPCID, petStruct.BindType, petStruct.AIMode, petStruct.PetIndex,
-    #                      rolePet.GetGrade(), rolePet.GetQualityLV()))
-    petControl = NPCCommon.NPCControl(rolePet)
-    petControl.RefreshNPCState(canSyncClient=False)
-    #GameWorld.DebugLog("刷后: petID=%s,playerID=%s,npcID=%s,BindType=%s,AIMode=%s,PetIndex=%s,grade=%s,qualLV=%s," 
-    #                   % (petStruct.PetID, petStruct.PlayerID, petStruct.NPCID, petStruct.BindType, petStruct.AIMode, petStruct.PetIndex,
-    #                      rolePet.GetGrade(), rolePet.GetQualityLV()))
-    
-    #当前血量(不通知)
-    PetControl.SetPetHP(rolePet, GameObj.GetMaxHP(rolePet), False)
-    
-    #---通知客户端---
-    #rolePet.Sync_PetInfo()
-    #刷新技能栏
-    #rolePet.Sync_SkillList()
-    
-    #---收到"宠物出战"请求---
-    #检查是否可出战
-    if not PetControl.CheckPetCanFight(curPlayer, rolePet):
-        GameWorld.DebugLog("不可出战!PetList_SetFree petID=%s" % petID)
-        petMgr.PetList_SetFree(petID)
-        return
-
-    # 先招回出战中的宠物
-    PetControl.ReCallFightPet(curPlayer)
-    
-    #召唤宠物出战
-    resultPos = GameMap.GetEmptyPlaceInArea(curPlayer.GetPosX(), curPlayer.GetPosY(), ChConfig.Def_SummonAppearDist)
-    PetControl.SummonPet(rolePet, resultPos.GetPosX(), resultPos.GetPosY())
-    petItem.SetUserAttr(ShareDefine.Def_IudetPet_State, ShareDefine.Def_PetState_Fight)
-    
-    #记录出战的宠物索引 默认+1 0则代表没有
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FightPetIndex, petItemIndex + 1)
-    rolePet.SetSightLevel(curPlayer.GetSightLevel())
-    return True
-
-def AutoSummonPet(curPlayer):
-    #重新召唤之前的宠物,复活、切换地图时调用
-    fightPetIndex = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FightPetIndex)
-    if not fightPetIndex:
-        return
-    DoChangePetState(curPlayer, fightPetIndex - 1, ShareDefine.Def_PetState_Fight)
-    return
-
-## 获取出战宠物要学的技能
-def GetPetLearnSkill(curPlayer):
-    learnSkillDict = {}
-    passiveSkillList = []
-    petPackIndex = ShareDefine.rptPet
-    petPack = curPlayer.GetItemManager().GetPack(petPackIndex)
-    for i in range(petPack.GetCount()):
-        petItem = petPack.GetAt(i)
-        if petItem.IsEmpty():
-            continue
-        for i in range(petItem.GetUserAttrCount(ShareDefine.Def_IudetPet_Skill)):
-            skillID = petItem.GetUserAttrByIndex(ShareDefine.Def_IudetPet_Skill, i)
-            curSkilData = GameWorld.GetGameData().GetSkillBySkillID(skillID)
-            if not curSkilData:
-                continue
-            if SkillCommon.isPassiveAttr(curSkilData):
-                #被动技能属性不学
-                passiveSkillList.append(skillID)
-                continue
-            skillTypeID = curSkilData.GetSkillTypeID()
-            if skillTypeID in learnSkillDict:
-                learnSkillDict[skillTypeID].append(skillID)
-            else:
-                learnSkillDict[skillTypeID] = [skillID]
-            
-    learnSkillIDList = [max(a) for a in learnSkillDict.values()]
-    return learnSkillIDList, passiveSkillList
-    
-#===============================================================================
-#// A7 02 宠物激活 #tagCMActivatePet
-#
-#struct    tagCMActivatePet
-#{
-#    tagHead        Head;
-#    DWORD        PetNPCID; // 宠物NPCID
-#    BYTE        IsUseGold; // 是否使用钻石直接购买激活
-#};
-def OnActivatePet(index, clientData, tick):
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    petNPCID = clientData.PetNPCID
-    isUseGold = clientData.IsUseGold
-    DoActivatePet(curPlayer, petNPCID, isUseGold, True)
-    return
-
-def DoActivatePet(curPlayer, petNPCID, isUseGold=False, isUseItem=False):
-    if not isUseItem:
-        #目前只能物品激活
-        return
-    
-    hasSpace = False
-    petPackIndex = ShareDefine.rptPet
-    petPack = curPlayer.GetItemManager().GetPack(petPackIndex)
-    for i in range(petPack.GetCount()):
-        packItem = petPack.GetAt(i)
-        if packItem.IsEmpty():
-            hasSpace = True
-            continue
-        
-        petItemNPCID = packItem.GetUserAttr(ShareDefine.Def_IudetPet_NPCID)
-        if petItemNPCID == petNPCID:
-            GameWorld.DebugLog("已经拥有该宠物! i=%s,petItemNPCID=%s,petNPCID=%s" % (i, petItemNPCID, petNPCID))
-            return
-    
-    if not hasSpace:
-        PlayerControl.NotifyCode(curPlayer, "Pet_liubo_76326") # 宠物数量达到上限
-        return
-    ipyData = GetPetIpydata(petNPCID)
-    if not ipyData:
-        return
-    
-    needItemID = ipyData.GetUnLockNeedItemID()
-    needItemCnt = ipyData.GetUnLockNeedItemCnt()
-    itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
-    hasEnough, itemList = ItemCommon.GetItem_FromPack_ByID(needItemID, itemPack, needItemCnt)
-    if not hasEnough:
-        GameWorld.DebugLog("DoActivatePet() item(%s[%s]) isn't enough" % (needItemID, needItemCnt))
-        return
-    
-    newPetItem = GetNewPetDataItem(curPlayer, petNPCID)
-    if not newPetItem:
-        return
-    
-    if not ItemControler.PlayerItemControler(curPlayer).PutInItem(petPackIndex, newPetItem):
-        return
-    
-    ItemCommon.ReduceItem(curPlayer, itemPack, itemList, needItemCnt, False, ChConfig.ItemDel_Pet)
-    
-    sysMark = ipyData.GetUnlockSys() or 'GetPet'
-    PlayerControl.WorldNotify(0, sysMark, [curPlayer.GetName(), petNPCID])
-    rolePet = curPlayer.GetPetMgr().GetFightPet()
-    if not rolePet:
-        petItemIndex = GetPetDataItemIndexByNPCID(curPlayer, petNPCID)
-        GameWorld.DebugLog("没有宠物出战,获得新宠物,默认出战该宠物!petNPCID=%s,petItemIndex=%s" % (petNPCID, petItemIndex))
-        DoChangePetState(curPlayer, petItemIndex, ShareDefine.Def_PetState_Fight)
-    else:
-        
-        if rolePet:
-            learnSkillList, passiveSkillList = GetPetLearnSkill(curPlayer)
-            PetControl.DoLogic_PlayerPetLearnSkillList(rolePet, learnSkillList)
-    RefreshPetItemAddAttr(curPlayer, True)
-    
-    PlayerWeekParty.AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Pet, petNPCID, False)
-    return True
-
-
-def DoPetActivate(curPlayer, index, classlv=None, refresh=True):
-    ##直接激活 外部调用GM测试用
-    ipyDataMgr = IpyGameDataPY.IPY_Data()
-    petInfoCount = ipyDataMgr.GetPetInfoCount()
-    if petInfoCount <= 0 or index > petInfoCount:
-        GameWorld.ErrLog("激活宠物超过宠物表数据数: index=%s,petInfoCount=%s" % (index, petInfoCount))
-        return
-    petIpyData = ipyDataMgr.GetPetInfoByIndex(index - 1)
-    petNPCID = petIpyData.GetID()
-    quality = petIpyData.GetQuality()
-    maxClassLV = petIpyData.GetMaxRank()
-    
-    petPackIndex = ShareDefine.rptPet
-    petPack = curPlayer.GetItemManager().GetPack(petPackIndex)
-    for i in range(petPack.GetCount()):
-        packItem = petPack.GetAt(i)
-        if packItem.IsEmpty():
-            continue
-        petItemNPCID = packItem.GetUserAttr(ShareDefine.Def_IudetPet_NPCID)
-        if petItemNPCID == petNPCID:
-            if classlv:
-                packItem.SetUserAttr(ShareDefine.Def_IudetPet_ClassLV, max(0, min(classlv, maxClassLV) - 1))
-            packItem.SetUserAttr(ShareDefine.Def_IudetPet_QualityLV, quality) # 宠物品质
-            GameWorld.DebugLog("已经拥有该宠物! i=%s,petItemNPCID=%s,petNPCID=%s" % (i, petItemNPCID, petNPCID))
-            return True
-        
-    if classlv == None:
-        classlv = 1
-    classlv = min(classlv, maxClassLV)
-    newPetItem = GetNewPetDataItem(curPlayer, petNPCID, classlv)
-    if not newPetItem:
-        return
-    petPackIndex = ShareDefine.rptPet
-    
-    if not ItemControler.PlayerItemControler(curPlayer).PutInItem(petPackIndex, newPetItem):
-        return
-    if not refresh:
-        return True
-    petItemIndex = GetPetDataItemIndexByNPCID(curPlayer, petNPCID)
-    DoChangePetState(curPlayer, petItemIndex, ShareDefine.Def_PetState_Fight)
-    RefreshPetItemAddAttr(curPlayer, True)
-    return True
-#===============================================================================
-
-
-## 获取已激活的灵兽ID
-def GetActivePetID(curPlayer):
-    petIDList = []
-    petPackIndex = ShareDefine.rptPet
-    petPack = curPlayer.GetItemManager().GetPack(petPackIndex)
-    for i in range(petPack.GetCount()):
-        packItem = petPack.GetAt(i)
-        if packItem.IsEmpty():
-            continue
-        petItemNPCID = packItem.GetUserAttr(ShareDefine.Def_IudetPet_NPCID)
-        petIDList.append(petItemNPCID)
-    return petIDList
-
-#// A7 04 宠物升阶 #tagCMPetClassUP
-#
-#struct    tagCMPetClassUP
-#{
-#    tagHead        Head;
-#    BYTE        PetItemIndex;    //宠物数据背包索引
-#};
-def PetClassUp(index, clientData, tick):
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_Pet):
-        GameWorld.DebugLog(' 宠物功能未开启')
-        return
-    playerID = curPlayer.GetPlayerID()
-    PetItemIndex = clientData.PetItemIndex
-    costItemCount = clientData.UseItemCnt # 消耗材料个数
-    isAutoBuy = 0 #clientData.IsAutoBuy # 是否自动购买
-    petDataItem = GetPetDataItemByIndex(curPlayer, PetItemIndex)
-    if not petDataItem:
-        return
-    
-    petNPCID = petDataItem.GetUserAttr(ShareDefine.Def_IudetPet_NPCID)
-
-    petNpcData = GameWorld.GetGameData().FindNPCDataByID(petNPCID)
-    if not petNpcData:
-        GameWorld.ErrLog("can not found pet npcID = %s" % (petNPCID))
-        return
-    
-    classLV = petDataItem.GetUserAttr(ShareDefine.Def_IudetPet_ClassLV)
-    petIpyData = GetPetIpydata(petNPCID)
-    if not petIpyData:
-        return
-    maxClassLV = petIpyData.GetMaxRank()
-    if classLV + 2 > maxClassLV:
-        GameWorld.DebugLog("宠物升阶 已满级。。。classLV=%s" % classLV, playerID)
-        return
-    
-    ipyData = IpyGameDataPY.GetIpyGameData("PetClassCost", petNPCID, classLV + 1)
-    if not ipyData:
-        return
-    
-    needExp = ipyData.GetUpNeedExp()
-    if not needExp:
-        return
-    
-    curPetClassExp = petDataItem.GetUserAttr(ShareDefine.Def_IudetPet_Exp)
-    
-    
-    curItemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
-    
-    itemIndexList = []
-    costItemIDList = []
-    specCostItemInfo = IpyGameDataPY.GetFuncEvalCfg('PetUpItem', 4)
-    for strItemID, petNPCIDList in specCostItemInfo.items():
-        if petNPCID in petNPCIDList:
-            costItemIDList = [int(strItemID)]
-            break
-    if not costItemIDList:
-        costItemIDList = IpyGameDataPY.GetFuncEvalCfg('PetUpItem')
-    if not costItemIDList:
-        return
-    
-    #扣材料
-    nowCnt = 0
-    for itemID in costItemIDList:
-        hasEnough, indexList, findItemIsBind, lackCnt = ItemCommon.GetItem_FromPack_ByID_ExEx(itemID, curItemPack, costItemCount - nowCnt)
-        itemIndexList.extend(indexList)
-        if hasEnough:
-            #足够退出
-            break
-        if itemIndexList:
-            nowCnt = 0
-            for itemIndex in itemIndexList:
-                curItem = curItemPack.GetAt(itemIndex)
-                #检查物品
-                if not ItemCommon.CheckItemCanUse(curItem):
-                    continue
-                itemCnt = curItem.GetCount()
-                nowCnt += itemCnt
-    if not hasEnough and not isAutoBuy:
-        GameWorld.DebugLog("PetClassUp 升阶道具不足! petNPCID=%s,costItemIDList=%s" % (petNPCID, costItemIDList))
-        return
-    
-    autoBuyItemID = costItemIDList[0]
-    if itemIndexList:
-        curItem = curItemPack.GetAt(itemIndexList[0])
-    else:
-        curItem = GameWorld.GetGameData().GetItemByTypeID(autoBuyItemID)
-    if not curItem:
-        return
-    
-    if lackCnt > 0:
-        return
-        #===========================================================================================
-        # if not isAutoBuy:
-        #    return
-        # lackCost = ItemCommon.GetAutoBuyItemNeedGold({autoBuyItemID:lackCnt})
-        # if lackCost <= 0:
-        #    return
-        # itemData = GameWorld.GetGameData().GetItemByTypeID(autoBuyItemID)
-        # itemName = autoBuyItemID if not itemData else itemData.GetName()
-        # infoDict = {ChConfig.Def_Cost_Reason_SonKey:itemName}
-        # if not PlayerControl.PayMoney(curPlayer, IPY_GameWorld.TYPE_Price_Gold_Money, lackCost,
-        #                              ChConfig.Def_Cost_PetClassUP, infoDict, lackCnt):
-        #    return
-        #===========================================================================================
-       
-    playerName = curPlayer.GetName()
-   
-    curEff = curItem.GetEffectByIndex(0)
-    addExp = curEff.GetEffectValue(0) * costItemCount
-    updExp = curPetClassExp + addExp
-    updClassLV = classLV
-    for lv in xrange(classLV, maxClassLV-1):
-        ipyData = IpyGameDataPY.GetIpyGameData("PetClassCost", petNPCID, lv+1)
-        if not ipyData:
-            break
-        upNeedExp = ipyData.GetUpNeedExp()
-        if updExp < upNeedExp:
-            break
-        updExp -= upNeedExp
-        updClassLV +=1
-        
-    
-    #扣除物品
-    delCnt = max(0, costItemCount - lackCnt) # 实际扣除的个数
-    if itemIndexList:
-        ItemCommon.ReduceItem(curPlayer, curItemPack, itemIndexList, delCnt, True, ChConfig.ItemDel_Pet)
-        
-    # 更新经验值
-    if updClassLV+1 >=maxClassLV:
-        updExp =0
-    petDataItem.SetUserAttr(ShareDefine.Def_IudetPet_Exp, updExp)
-    if updClassLV > classLV:
-        petDataItem.SetUserAttr(ShareDefine.Def_IudetPet_ClassLV, updClassLV)
-        
-        # 升阶开启技能
-        petIpyData = GetPetIpydata(petNPCID)
-        petSkillList = petIpyData.GetSkillID()
-        petSkillUnLockList = petIpyData.GetSkillUnLock()
-        sysMarkList = petIpyData.GetSkillUnLockSys()
-        learnSkillList = []
-        for i, skillid in enumerate(petSkillList):
-            limitPetClassLV = petSkillUnLockList[i] # 学习此技能所需宠物阶级
-            #上一阶已经处理过的技能不再处理
-            if updClassLV >= limitPetClassLV:
-                continue
-            # 未达到所需阶级
-            if updClassLV + 1 < limitPetClassLV:
-                continue
-            curSkilData = GameWorld.GetGameData().GetSkillBySkillID(skillid)
-            if not curSkilData:
-                continue
-            if curSkilData.GetFuncType() == ChConfig.Def_SkillFuncType_PetOwnerSkill:
-                __GiveOwnerSkill(curPlayer, skillid)
-                continue
-            petDataItem.AddUserAttr(ShareDefine.Def_IudetPet_Skill, skillid)
-            if not SkillCommon.isPassiveAttr(curSkilData):
-                #被动技能不学
-                learnSkillList.append(skillid)
-            #广播
-            sysMark = sysMarkList[i] if i < len(sysMarkList) else 'PetUpLv'
-            PlayerControl.WorldNotify(0, sysMark, [playerName, petNPCID, limitPetClassLV, skillid])
-            
-        if not learnSkillList and updClassLV + 1 == maxClassLV:
-            PlayerControl.WorldNotify(0, 'PetUpLvMax', [playerName, petNPCID])
-        # 如果是当前出战的宠物, 则该宠物学习技能
-        fightPet = curPlayer.GetPetMgr().GetFightPet()
-        if learnSkillList and fightPet:
-            PetControl.DoLogic_PlayerPetLearnSkillList(fightPet, learnSkillList)
-            
-        RefreshPetItemAddAttr(curPlayer, True)
-        
-    extraInfoDict = {"petItemIndex":PetItemIndex, "petNPCID":petNPCID}
-    extraInfoDict.update(eval(petDataItem.GetUserData()))
-    #DataRecordPack.DR_ClassUpSystem(curPlayer, "PetClassUp", updClassLV, extraInfoDict)
-    
-    PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_PetUpItem, costItemCount)
-    PlayerActLunhuidian.AddLunhuidianValue(curPlayer, PlayerActLunhuidian.AwardType_UseItem, autoBuyItemID, costItemCount)
-    return
-
-def GetTotalPetLV(curPlayer):
-    totalPetLV = 0
-    petPackIndex = ShareDefine.rptPet
-    petPack = curPlayer.GetItemManager().GetPack(petPackIndex)
-    for i in range(petPack.GetCount()):
-        petItem = petPack.GetAt(i)
-        if petItem.IsEmpty():
-            continue 
-        petItemNPCID = petItem.GetUserAttr(ShareDefine.Def_IudetPet_NPCID)
-        classLV = petItem.GetUserAttr(ShareDefine.Def_IudetPet_ClassLV) + 1
-        petIpyData = GetPetIpydata(petItemNPCID)
-        if not petIpyData:
-            continue
-        totalPetLV += classLV
-    return totalPetLV
-
-def GetTotalPetCount(curPlayer):
-    totalPetCount = 0
-    petPackIndex = ShareDefine.rptPet
-    petPack = curPlayer.GetItemManager().GetPack(petPackIndex)
-    for i in range(petPack.GetCount()):
-        petItem = petPack.GetAt(i)
-        if petItem.IsEmpty():
-            continue 
-        petItemNPCID = petItem.GetUserAttr(ShareDefine.Def_IudetPet_NPCID)
-        petIpyData = GetPetIpydata(petItemNPCID)
-        if not petIpyData:
-            continue
-        totalPetCount += 1
-    return totalPetCount
-
-def IsPetMaxLV(curPlayer, petNPCID):
-    petItem = GetPetDataItemByNPCID(curPlayer, petNPCID)
-    if not petItem:
-        return
-    petNPCID = petItem.GetUserAttr(ShareDefine.Def_IudetPet_NPCID)
-    classLV = petItem.GetUserAttr(ShareDefine.Def_IudetPet_ClassLV)
-    petIpyData = GetPetIpydata(petNPCID)
-    if not petIpyData:
-        return
-    maxClassLV = petIpyData.GetMaxRank()
-    return classLV + 2 > maxClassLV
-
-## 刷新宠物数据物品增加的属性
-def RefreshPetItemAddAttr(curPlayer, isUpdBillboard):
-    CalcPetItemAddPlayerAttr(curPlayer)
-    
-    if isUpdBillboard:
-        PlayerControl.PlayerControl(curPlayer).RefreshPlayerAttrState(billboardFunc=PlayerBillboard.UpdatePyPetBillboard, isForce=True)
-        #PlayerBillboard.UpdatePyPetBillboard(curPlayer, True)
-    else:
-        PlayerControl.PlayerControl(curPlayer).RefreshPlayerAttrState(isForce=True)
-        
-    fightPet = curPlayer.GetPetMgr().GetFightPet()
-    if fightPet:
-        PetControl.RefurbishPetAttr(fightPet)
-    return
-
-def CalcSkill_PetBattleEffect(curPlayer, rolePet, allAttrListPet):
-    #灵兽技能给灵兽加的属性,不给人物加的属性
-    learnSkillList, passiveSkillList = GetPetLearnSkill(curPlayer)
-    #GameWorld.DebugLog("1刷技能属性: %s" % allAttrList)
-    for skillID in passiveSkillList:
-        curSkill = GameWorld.GetGameData().GetSkillBySkillID(skillID)
-        if not curSkill:
-            continue
-        for effectIndex in xrange(curSkill.GetEffectCount()):
-            curEffect = curSkill.GetEffect(effectIndex)
-            if curEffect.GetEffectID() not in ChConfig.Def_SkillEffs_Pet:
-                # 不给宠物加的不处理
-                continue
-            SkillShell.CalcBuffEffAttr(rolePet, curEffect, allAttrListPet)
-
-
-##计算NPC战斗属性
-# @param curNPC NPC实例
-# @return 返回值无意义
-# @remarks 计算NPC战斗属性
-def CalcBuffer_PetBattleEffect(rolePet, allAttrListPet):
-    #@warning:战斗属性先算非线性在算线性
-    buffRefreshList = NPCCommon.GetNPCBuffRefreshList(rolePet)
-    
-    for buffState, canPileup in buffRefreshList:
-        SkillShell.CalcCurBuffer_Effect(buffState, rolePet, allAttrListPet)
-    
-    #非线性
-    CalcNoLineEffect.ChangeNPCAttrInNoLineEffectList(rolePet, allAttrListPet[ChConfig.CalcAttr_BattleNoline])
-    #线性
-    CalcLineEffect.ChangeNPCAttrInLineEffectList(rolePet, allAttrListPet[ChConfig.CalcAttr_Battle])
-    return
-
-
-## 计算宠物增加的玩家属性
-#  @param curPlayer 玩家
-#  @return None
-def CalcPetItemAddPlayerAttr(curPlayer):
-    return
-#    allAttrListPet = [{} for _ in range(4)]
-#    allAttrListPetSign = [{} for _ in range(4)] # 属性含 特殊的技能属性(因为签到技能属性成长,战力也是成长的,所以不能放技能中算战力,暂时放魂石中)
-#    allAttrListPetSoul = [{} for _ in range(4)]
-#    skillAttrList = [{} for _ in range(4)]
-#    allAttrListPetSkin = [{} for _ in range(4)]
-#    allAttrListTrain = [{} for _ in range(4)]
-#    allAttrListStar = [{} for _ in range(4)]
-#    customAttrDictPet = {}
-#    totalMinAtk, totalMaxAtk, qualityAttrInfo = GetPetAtkValue(curPlayer)
-#    customAttrDictPet["petQualityAttrInfo"] = qualityAttrInfo
-#    PlayerControl.CalcAttrDict_Type(ShareDefine.Def_Effect_PetMinAtk, totalMinAtk, allAttrListPet)
-#    PlayerControl.CalcAttrDict_Type(ShareDefine.Def_Effect_PetMaxAtk, totalMaxAtk, allAttrListPet)
-#    totalSignNum = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TotalSignNum) # 总签到天数
-#    # 果实给人物加属性, 魂石果实算附加属性层,单独计算
-#    fightPowerEx = PlayerAttrFruit.CalcAttrFruitAddAtrr(curPlayer, allAttrListPetSoul, ShareDefine.Def_AttrFruitFunc_Pet)
-#    PlayerControl.SetMFPExFightPower(curPlayer, ShareDefine.Def_MFPType_PetSoul, fightPowerEx)
-#    
-#    #灵兽技能给人物加的属性
-#    learnSkillList, passiveSkillList = GetPetLearnSkill(curPlayer)
-#    #GameWorld.DebugLog("1刷技能属性: %s" % allAttrList)
-#    for skillID in passiveSkillList:
-#        curSkill = GameWorld.GetGameData().GetSkillBySkillID(skillID)
-#        if not curSkill:
-#            continue
-#        # 灵宠签到技能特殊处理
-#        if curSkill.GetSkillTypeID() == ChConfig.Def_SkillID_PetSignDay:
-#            for effectIndex in xrange(curSkill.GetEffectCount()):
-#                curEffect = curSkill.GetEffect(effectIndex)
-#                effID = curEffect.GetEffectID()
-#                effValue = curEffect.GetEffectValue(0)
-#                PlayerControl.CalcAttrDict_Type(effID, effValue * totalSignNum, allAttrListPetSign)
-#            
-#            continue
-#        for effectIndex in xrange(curSkill.GetEffectCount()):
-#            curEffect = curSkill.GetEffect(effectIndex)
-#            if curEffect.GetEffectID() in ChConfig.Def_SkillEffs_Pet:
-#                # 给宠物加的不处理
-#                continue
-#            SkillShell.CalcBuffEffAttr(curPlayer, curEffect, skillAttrList)
-#    
-#    # 新培养属性
-#    ipyDataMgr = IpyGameDataPY.IPY_Data()
-#    for index in xrange(ipyDataMgr.GetPetTrainCount()):
-#        trainIpyData = ipyDataMgr.GetPetTrainByIndex(index)
-#        trainType = trainIpyData.GetTrainType()
-#        dataTrainLV = trainIpyData.GetTrainLV()
-#        trainLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_PetTrainLV % trainType)
-#        
-#        if dataTrainLV > trainLV:
-#            continue
-#        elif dataTrainLV == trainLV:
-#            trainItemCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_PetTrainItemCount % trainType)
-#        else:
-#            trainItemCount = trainIpyData.GetEatCntTotal()
-#            
-#        # 等阶额外属性
-#        lvAttrTypeList = trainIpyData.GetLVAttrTypeList()
-#        lvAttrValueList = trainIpyData.GetLVAttrValueList()
-#        for i, attrID in enumerate(lvAttrTypeList):
-#            attrValue = lvAttrValueList[i]
-#            PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrListTrain)
-#            
-#        # 培养丹增加属性
-#        eatCntEverytime = trainIpyData.GetEatCntEverytime()
-#        if trainItemCount and eatCntEverytime:
-#            eatItemAttrTypeList = trainIpyData.GetEatItemAttrTypeList()
-#            eatItemAttrValueList = trainIpyData.GetEatItemAttrValueList()
-#            attrMultiple = trainItemCount / eatCntEverytime
-#            for i, attrID in enumerate(eatItemAttrTypeList):
-#                attrValue = eatItemAttrValueList[i]
-#                PlayerControl.CalcAttrDict_Type(attrID, attrValue * attrMultiple, allAttrListTrain)
-#                
-#    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_PetTarin, allAttrListTrain)
-#    
-#    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Pet, allAttrListPet, customAttrDict=customAttrDictPet)
-#    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_PetSoul, allAttrListPetSoul)
-#    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_PetSign, allAttrListPetSign)
-#    
-#    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_PetSkill, skillAttrList)
-#    
-#    #初始战力
-#    fpExTotal = 0
-#    petPackIndex = ShareDefine.rptPet
-#    petPack = curPlayer.GetItemManager().GetPack(petPackIndex)
-#    for i in range(petPack.GetCount()):
-#        petItem = petPack.GetAt(i)
-#        if petItem.IsEmpty():
-#            continue
-#        # 物品上的技能战力,主人上的另算
-#        for i in range(petItem.GetUserAttrCount(ShareDefine.Def_IudetPet_Skill)):
-#            skillID = petItem.GetUserAttrByIndex(ShareDefine.Def_IudetPet_Skill, i)
-#            curSkilData = GameWorld.GetGameData().GetSkillBySkillID(skillID)
-#            if not curSkilData:
-#                continue
-#            fpExTotal += curSkilData.GetFightPower()
-#        petItemNPCID = petItem.GetUserAttr(ShareDefine.Def_IudetPet_NPCID)
-#        petIpyData = GetPetIpydata(petItemNPCID)
-#        if not petIpyData:
-#            continue
-#        fpExTotal += petIpyData.GetInitFightPower() # 初始战力
-#        #觉醒战力
-#        skinData = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HorsePetSkinData % (2, petItemNPCID), 0)
-#        skinIpyData = IpyGameDataPY.GetIpyGameDataNotLog('HorsePetSkin', 2, petItemNPCID, skinData/100)
-#        if skinIpyData:
-#            for attrID, attrValue in skinIpyData.GetAttrInfo().items():
-#                PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrListPetSkin)
-#                
-#        #星级
-#        curStar = petItem.GetUserAttr(ShareDefine.Def_IudetPet_Star)
-#        starIpyData = IpyGameDataPY.GetIpyGameDataNotLog("PetStarUp", petItemNPCID, curStar)
-#        if starIpyData:
-#            starAttrType = starIpyData.GetStarAttrType()
-#            starAttrValue = starIpyData.GetStarAttrValue()
-#            for i, attrID in enumerate(starAttrType):
-#                attrValue = starAttrValue[i]
-#                PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrListStar)
-#                
-#    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_PetSkin, allAttrListPetSkin)
-#    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_PetStar, allAttrListStar)
-#    PlayerControl.SetMFPExFightPower(curPlayer, ShareDefine.Def_MFPType_Pet, fpExTotal)
-##    GameWorld.DebugLog("宠物榜NPCID: %s, petDict=%s" % (billPetNPCID, str(billPetDict)))
-#    return
-
-## 获取灵兽出战时的攻击力
-def GetPetAtkValue(curPlayer):
-    qualityAttrInfo = {}
-    return 0, 0, qualityAttrInfo
-#    if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_Pet):
-#        #GameWorld.DebugLog(' 宠物功能未开启')
-#        return 0, 0, qualityAttrInfo
-#    
-#    classAddAtk = 0
-#    petPackIndex = ShareDefine.rptPet
-#    petPack = curPlayer.GetItemManager().GetPack(petPackIndex)
-#    for i in range(petPack.GetCount()):
-#        packItem = petPack.GetAt(i)
-#        if packItem.IsEmpty():
-#            continue
-#        petItemNPCID = packItem.GetUserAttr(ShareDefine.Def_IudetPet_NPCID)
-#        classlv = packItem.GetUserAttr(ShareDefine.Def_IudetPet_ClassLV)
-#        classIpyData = IpyGameDataPY.GetIpyGameData("PetClassCost", petItemNPCID, classlv + 1)
-#        atkAdd = classIpyData.GetAtkAdd() if classIpyData else 0
-#        classAddAtk += atkAdd
-#        
-#        petIpyData = GetPetIpydata(petItemNPCID)
-#        if petIpyData:
-#            quality = petIpyData.GetQuality()
-#            if quality not in qualityAttrInfo:
-#                qualityAttrInfo[quality] = {}
-#            qualityAttrDict = qualityAttrInfo[quality]
-#            qualityAttrDict[ShareDefine.Def_Effect_PetAtk] = qualityAttrDict.get(ShareDefine.Def_Effect_PetAtk, 0) + atkAdd
-#            
-#    totalMinAtk = classAddAtk
-#    totalMaxAtk = classAddAtk
-#    return totalMinAtk, totalMaxAtk, qualityAttrInfo
-
-def OnPlayerPetLogin(curPlayer):
-    ## 登录处理
-    if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_Pet):
-        return
-    
-    # 培养是后面加的功能,每次登录补检查一下功能开始时设置为培养1级
-    for trainType in xrange(1, GetPetTrainTypes() + 1):
-        if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_PetTrainLV % trainType) == 0:
-            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_PetTrainLV % trainType, 1)
-            
-    Sync_PetTrainData(curPlayer)
-    return
-
-def GetPetTrainTypes():
-    return len(IpyGameDataPY.GetFuncEvalCfg("PetUpItem", 3))
-
-#// A7 05 宠物培养 #tagCMPetTrain
-#
-#struct    tagCMPetTrain
-#{
-#    tagHead        Head;
-#    BYTE        TrainType;        //培养类型: 1-基础培养,2-特殊培养,3-百分比培养
-#    WORD        UseItemCnt;        //消耗材料个数
-#};
-def OnPetTrain(index, clientData, tick):
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    trainType = clientData.TrainType # 培养类型
-    costItemCount = clientData.UseItemCnt # 消耗材料个数
-    
-    trainLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_PetTrainLV % trainType)
-    curEatItemCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_PetTrainItemCount % trainType)
-    GameWorld.DebugLog("灵宠培养: trainType=%s,trainLV=%s,costItemCount=%s,curEatItemCount=%s" 
-                       % (trainType, trainLV, costItemCount, curEatItemCount))
-    
-    if trainType <= 0 or trainType > GetPetTrainTypes():
-        return
-    
-    if trainLV <= 0:
-        GameWorld.DebugLog("    培养未激活  trainType=%s" % trainType)
-        return
-    
-    trainIpyData = IpyGameDataPY.GetIpyGameData("PetTrain", trainType, trainLV)
-    if not trainIpyData:
-        return
-    
-    needRealmLV = trainIpyData.GetNeedRealmLV()
-    curRealmLV = PlayerControl.GetTrainRealmLVReal(curPlayer, 2)
-    if curRealmLV < needRealmLV:
-        GameWorld.DebugLog("    境界不足,无法培养!  curRealmLV(%s) < needRealmLV(%s)" % (curRealmLV, needRealmLV))
-        return
-    
-    needEatCountTotal = trainIpyData.GetEatCntTotal()
-    if not needEatCountTotal:
-        GameWorld.DebugLog("    该培养已满级!")
-        return
-    
-    costItemIDList = IpyGameDataPY.GetFuncEvalCfg("PetUpItem", 3)
-    costItemID = costItemIDList[trainType - 1]
-    if not costItemID or not costItemCount:
-        return
-    
-    costItemIndexList, bindCnt, unBindCnt = ItemCommon.GetPackItemBindStateIndexInfo(curPlayer, costItemID, costItemCount)
-    lackCnt = costItemCount - bindCnt - unBindCnt
-    if lackCnt > 0:
-        GameWorld.DebugLog("    消耗道具不足,无法培养!costItemID=%s,costItemCount=%s,bindCnt=%s,unBindCnt=%s,lackCnt=%s" 
-                           % (costItemID, costItemCount, bindCnt, unBindCnt, lackCnt))
-        return
-    
-    delCnt = costItemCount
-    
-    # 扣除消耗
-    if delCnt:
-        ItemCommon.DelCostItemByBind(curPlayer, costItemIndexList, bindCnt, unBindCnt, delCnt, ChConfig.ItemDel_Pet)
-        
-    updClassLV = trainLV
-    updEatItemCount = curEatItemCount + costItemCount
-    GameWorld.DebugLog("    updEatItemCount=%s,needEatCountTotal=%s" % (updEatItemCount, needEatCountTotal))
-    
-    if updEatItemCount >= needEatCountTotal:
-        updClassLV += 1
-        updEatItemCount -= needEatCountTotal
-        GameWorld.DebugLog("    进阶: updClassLV=%s,updEatItemCount=%s" % (updClassLV, updEatItemCount))
-        
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_PetTrainLV % trainType, updClassLV)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_PetTrainItemCount % trainType, updEatItemCount)
-    
-    # 升阶
-    if updClassLV > trainLV:
-        pass
-    
-    Sync_PetTrainData(curPlayer)
-    # 刷属性,更新排行榜
-    RefreshPetItemAddAttr(curPlayer, True)
-    
-    if trainType == 2:
-        PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_PetTrainItem2, costItemCount)
-    elif trainType == 3:
-        PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_PetTrainItem3, costItemCount)
-    elif trainType == 1:
-        PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_PetTrainItem1, costItemCount)
-    return
-
-#// A7 06 宠物升星 #tagCMPetStarUp
-#
-#struct    tagCMPetStarUp
-#{
-#    tagHead        Head;
-#    BYTE        PetItemIndex;    //宠物数据背包索引
-#};
-def OnPetStarUp(index, clientData, tick):
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    playerID = curPlayer.GetPlayerID()
-    PetItemIndex = clientData.PetItemIndex
-    petDataItem = GetPetDataItemByIndex(curPlayer, PetItemIndex)
-    if not petDataItem:
-        return
-    petNPCID = petDataItem.GetUserAttr(ShareDefine.Def_IudetPet_NPCID)
-    curStar = petDataItem.GetUserAttr(ShareDefine.Def_IudetPet_Star)
-    nextStar = curStar + 1
-    nextIpyData = IpyGameDataPY.GetIpyGameDataNotLog("PetStarUp", petNPCID, nextStar)
-    if not nextIpyData:
-        GameWorld.DebugLog("灵宠不存在该星级,无法升星. petNPCID=%s,curStar=%s" % (petNPCID, curStar), playerID)
-        return
-    needItemList = nextIpyData.GetStarUpNeedItemList()
-    if not needItemList:
-        return
-    itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
-    lackItemDict, delInfoDict = ItemCommon.GetCostItemIndexList(needItemList, itemPack)
-    if lackItemDict:
-        GameWorld.DebugLog("灵宠升星所需物品不足! petNPCID=%s,nextStar=%s,needItemList=%s,lackItemDict=%s" 
-                           % (petNPCID, nextStar, needItemList, lackItemDict), playerID)
-        return
-    
-    ItemCommon.DelCostItem(curPlayer, itemPack, delInfoDict, "PetStarUp")    
-    petDataItem.SetUserAttr(ShareDefine.Def_IudetPet_Star, nextStar)
-    GameWorld.DebugLog("灵宠升星. petNPCID=%s,curStar=%s,nextStar=%s" % (petNPCID, curStar, nextStar), playerID)
-    
-    RefreshPetItemAddAttr(curPlayer, True)    
-    return
-
-def Sync_PetTrainData(curPlayer):
-    clientPack = ChPyNetSendPack.tagMCPetTrainInfo()
-    clientPack.TrainLVList = []
-    clientPack.TrainItemCountList = []
-    for trainType in xrange(1, GetPetTrainTypes() + 1):
-        clientPack.TrainLVList.append(curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_PetTrainLV % trainType))
-        clientPack.TrainItemCountList.append(curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_PetTrainItemCount % trainType))
-    clientPack.TrainTypes = len(clientPack.TrainLVList)
-    NetPackCommon.SendFakePack(curPlayer, clientPack)
-    return
-
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerPrestigeSys.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerPrestigeSys.py
index 1a0a47d..5cbc417 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerPrestigeSys.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerPrestigeSys.py
@@ -27,7 +27,6 @@
 import ChConfig
 import ChPlayer
 import IPY_PlayerDefine
-import PlayerTongTianLing
 import PlayerTask
 import PlayerOnline
 import PlayerSuccess
@@ -264,7 +263,6 @@
     RefreshOfficialAttr(curPlayer)
     GameFuncComm.DoFuncOpenLogic(curPlayer)
     SyncRealmInfo(curPlayer, taskIDList=syncTaskIDList)
-    PlayerTongTianLing.AddTongTianTaskValue(curPlayer, ChConfig.TTLTaskType_RealmUp, 1)
     PlayerTask.UpdTaskValue(curPlayer, ChConfig.TaskType_RealmLV)
     PlayerSuccess.UptateSuccessProgress(curPlayer, ShareDefine.SuccType_OSARealmLV, nextRealmLv)
     
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerRune.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerRune.py
deleted file mode 100644
index dfafaa4..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerRune.py
+++ /dev/null
@@ -1,629 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-#-------------------------------------------------------------------------------
-#
-##@package Player.PlayerRune
-#
-# @todo:玩家符印
-# @author xdh
-# @date 2017-08-04
-# @version 1.0
-#
-# 详细描述: 玩家符印
-#---------------------------------------------------------------------
-#"""Version = 2017-08-04 12:00"""
-#---------------------------------------------------------------------
-
-import GameWorld
-import ShareDefine
-import ChConfig
-import ItemCommon
-import ItemControler
-import PlayerControl
-import ChPyNetSendPack
-import NetPackCommon
-import IpyGameDataPY
-import IPY_GameWorld
-import DataRecordPack
-import PlayerWeekParty
-
-g_runeLVExpDict = {}
-
-##登录处理
-# @param curPlayer 玩家
-# @return None
-def PlayerRuneLogin(curPlayer):
-    DoUnlockRuneHole(curPlayer, False)
-    Sync_RuneInfo(curPlayer)
-    return
-
-
-## 获取符印ipy数据
-def GetRuneIpyData(itemID):return IpyGameDataPY.GetIpyGameData("Rune", itemID)
-
-## 获取符印升级需要经验
-def GetRuneNeedExp(itemID, lv):
-    global g_runeLVExpDict
-    itemData = GameWorld.GetGameData().GetItemByTypeID(itemID)
-    if not itemData:
-        return 0
-    ipyData = GetRuneIpyData(itemID)
-    if not ipyData:
-        return 0
-    itemColor = itemData.GetItemColor()
-    if lv == 0: #初始经验
-        expDict = IpyGameDataPY.GetFuncEvalCfg('RuneExp', 4, {})
-        exp = expDict.get(itemColor, 0)
-    else:
-        if lv in g_runeLVExpDict:
-            exp = g_runeLVExpDict[lv]
-        else:
-            level = lv + 1 #公式从1开始
-            exp = eval(IpyGameDataPY.GetFuncCompileCfg('RuneExp'))
-            g_runeLVExpDict[lv] = exp
-            
-        qualityPerDict = IpyGameDataPY.GetFuncEvalCfg('RuneExp', 2, {})
-        if itemColor in qualityPerDict:
-            exp *= float(qualityPerDict[itemColor])
-        if len(ipyData.GetAttrType()) > 1: #多属性
-            specialPer = IpyGameDataPY.GetFuncCfg('RuneExp', 3)
-            exp *= specialPer
-    return exp
-
-## 获取符印属性数值
-def GetRuneAttrValue(itemID, lv):
-    itemData = GameWorld.GetGameData().GetItemByTypeID(itemID)
-    if not itemData:
-        return {}
-    ipyData = GetRuneIpyData(itemID)
-    if not ipyData:
-        return {}
-    level = lv + 1 #公式从1开始
-    
-    attrTypeList = ipyData.GetAttrType()
-    isSpecial = len(attrTypeList) > 1 #是否多属性
-    itemColor = itemData.GetItemColor()
-    attrDict = {}
-    for attrType in attrTypeList:
-        keyStr = 'RuneAttr%s' % attrType
-        attrFormula = IpyGameDataPY.GetFuncCompileCfg(keyStr)
-        if not attrFormula:
-            continue
-        
-        value = eval(attrFormula)
-        qualityPerDict = IpyGameDataPY.GetFuncEvalCfg(keyStr, 2, {})
-        if itemColor in qualityPerDict:
-            value *= float(qualityPerDict[itemColor])
-        extraValueDict = IpyGameDataPY.GetFuncEvalCfg(keyStr, 4, {})
-        value += extraValueDict.get(itemColor, 0)
-        
-        if isSpecial:
-            specialPer = IpyGameDataPY.GetFuncCfg(keyStr, 3)
-            if specialPer:
-                value *= specialPer
-            else:
-                GameWorld.ErrLog(' itemID=%s   功能配置表keyStr=%s, 数值3未配置' % (itemID, keyStr))
-        attrDict[int(attrType)] = int(value)
-    return attrDict
-
-def GetRuneMaxLV(itemID):
-    # 获取符印最大等级
-    itemData = GameWorld.GetGameData().GetItemByTypeID(itemID)
-    if not itemData:
-        return 0
-    runeMaxLVDict = IpyGameDataPY.GetFuncEvalCfg('RuneMaxLV', 1, {})
-    itemColor = itemData.GetItemColor()
-    runeMaxLV = runeMaxLVDict.get(itemColor, 0)
-    return runeMaxLV
-
-#// A5 13 解锁符印孔 #tagCMUnlockRuneHole
-#
-#struct    tagCMUnlockRuneHole
-#{
-#    tagHead        Head;
-#    BYTE        HoleIndex; // 孔索引
-#};
-def OnUnlockRuneHole(index, clientData, tick):
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    holeIndex = clientData.HoleIndex
-    runeUnlockDict = IpyGameDataPY.GetFuncEvalCfg("RuneUnlock", 2, {})
-    if holeIndex not in runeUnlockDict:
-        return
-    runeOpenState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_Rune_HoleOpenState, 0)
-    if runeOpenState & pow(2, holeIndex):
-        return
-    if curPlayer.GetLV() < IpyGameDataPY.GetFuncEvalCfg("RuneUnlock", 3, {}).get(holeIndex, 0):
-        return
-    costMoney = runeUnlockDict[holeIndex]
-    if not PlayerControl.PayMoney(curPlayer, IPY_GameWorld.TYPE_Price_Gold_Money, costMoney, ChConfig.Def_Cost_RuneHole, {'holeIndex':holeIndex}):
-        return
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_Rune_HoleOpenState, runeOpenState |pow(2, holeIndex))
-    Sync_RuneInfo(curPlayer)
-    PlayerControl.WorldNotify(0, 'RuneSpecialHoleGet', [curPlayer.GetName(), costMoney])
-    return
-
-def DoUnlockRuneHole(curPlayer, isSycn=True):
-    # 解锁符印孔, 符印塔过关时调用
-    runeUnlockList = IpyGameDataPY.GetFuncEvalCfg("RuneUnlock")
-    
-    runeOpenState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_Rune_HoleOpenState, 0)
-    trialTowerPassLV = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_TrialTower_PassLV) # 符印塔已过关层数
-    updOpenState = runeOpenState
-    for holeNum, needTowerPassLV in enumerate(runeUnlockList):
-        if runeOpenState & pow(2, holeNum):
-            continue
-        
-        if trialTowerPassLV < needTowerPassLV:
-            continue
-        updOpenState |= pow(2, holeNum)
-        GameWorld.DebugLog('    解锁符印孔 holeNum=%s,trialTowerPassLV=%s' % (holeNum, trialTowerPassLV))
-    if updOpenState != runeOpenState:
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_Rune_HoleOpenState, updOpenState)
-        if isSycn:
-            Sync_RuneInfo(curPlayer)
-    return
-
-## 获取符印是否已解锁
-def GetIsOpenByRuneID(curPlayer, itemid):
-    ipyData = GetRuneIpyData(itemid)
-    if ipyData:
-        curPassLV = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_TrialTower_PassLV)
-        return curPassLV >= ipyData.GetTowerID()
-    # 没配置限制层数解锁的默认解锁
-    return True
-
-def SwitchRune(curPlayer, srcBackpack, desBackPack, srcIndex, destIndex):
-    # 镶嵌/摘下符印
-    if not ((desBackPack == ShareDefine.rptRune and srcBackpack == ShareDefine.rptTempSwap) \
-            or (srcBackpack == ShareDefine.rptRune and desBackPack == ShareDefine.rptTempSwap)):
-        return False
-    
-
-    maxRuneHole = IpyGameDataPY.GetFuncCfg("RuneUnlock", 4)
-    # 穿
-    if desBackPack == ShareDefine.rptTempSwap:
-        desRuneNum = destIndex + 1
-        if desRuneNum < 1 or desRuneNum > maxRuneHole:
-            GameWorld.DebugLog("不存在该符印孔! desRuneNum=%s" % desRuneNum, curPlayer.GetPlayerID())
-            return True
-        
-        runeOpenState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_Rune_HoleOpenState, 0)
-        if not runeOpenState & pow(2, destIndex):
-            GameWorld.DebugLog("该符印孔未解锁! desRuneNum=%s,state=%s" % (desRuneNum, runeOpenState), curPlayer.GetPlayerID())
-            return True
-        
-        srcRuneData = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_VPackItem 
-                                                     % (ShareDefine.rptRune, srcIndex)) # 符印背包中的值
-        if not srcRuneData:
-            GameWorld.DebugLog("符印背包该位置没有符印! srcIndex=%s" % srcIndex, curPlayer.GetPlayerID())
-            return True
-        srcRuneItemID = ItemControler.GetRuneItemID(srcRuneData)
-        
-        srcIpyData = GetRuneIpyData(srcRuneItemID)
-        
-        if not srcIpyData:
-            GameWorld.DebugLog("该符印没有配置属性! 无法镶嵌! itemID=%s" % srcRuneItemID, curPlayer.GetPlayerID())
-            return True
-        srcRuneAttrTypeList = srcIpyData.GetAttrType()
-        srcRuneAttrTypeCntDict = {attrType:1 for attrType in srcRuneAttrTypeList}
-        maxSameAttrRuneCnt = IpyGameDataPY.GetFuncCfg('RuneUnlock', 5)
-        # 判断是否已有镶嵌该属性类型
-        doubleCnt = 0 #双属性符印个数
-        for RuneNum in xrange(1, maxRuneHole + 1):
-            if RuneNum == desRuneNum: # 目标孔不判断
-                continue
-            RuneData = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_Rune_Data % RuneNum, 0)
-            if not RuneData:
-                continue
-            RuneItemID = ItemControler.GetRuneItemID(RuneData)
-            ipyData = GetRuneIpyData(RuneItemID)
-            if not ipyData:
-                continue
-            attrTypeList = ipyData.GetAttrType()
-            for attrType in attrTypeList:
-                if attrType in srcRuneAttrTypeCntDict:
-                    srcRuneAttrTypeCntDict[attrType] += 1
-                    if srcRuneAttrTypeCntDict[attrType] > maxSameAttrRuneCnt:
-                        GameWorld.DebugLog(
-                            "该属性类型已镶嵌数量超过%s! 无法镶嵌! ,attrType=%s" % (maxSameAttrRuneCnt, attrType),
-                            curPlayer.GetPlayerID())
-                        return
-
-            if len(attrTypeList) > 1:
-                doubleCnt +=1
-        
-        if len(srcRuneAttrTypeList) > 1 and doubleCnt >= __GetCanInlayDoubleAttrRuneCnt(curPlayer):
-            GameWorld.DebugLog("当前可镶嵌双属性符印个数已达上限%s! 无法镶嵌! itemID=%s" % (doubleCnt, srcRuneItemID), curPlayer.GetPlayerID())
-            return True
-        
-        desRuneData = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_Rune_Data % desRuneNum, 0) # 孔上的值
-        
-        # 设置符印孔数据
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_Rune_Data % desRuneNum, srcRuneData)
-        # 原来的孔数据,则放入符印背包中
-        ItemControler.SetVPackItemKeyData(curPlayer, ShareDefine.rptRune, srcIndex, desRuneData)
-        #符印成就
-        DoRuneSuccessLogic(curPlayer)
-    else:
-        srcRuneNum = srcIndex + 1
-        srcRuneData = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_Rune_Data % srcRuneNum, 0)
-        if not srcRuneData:
-            GameWorld.DebugLog("该符印孔没有镶嵌符印! srcRuneNum=%s, srcRuneData=%s" % (srcRuneNum, srcRuneData), curPlayer.GetPlayerID())
-            return True
-        
-        emptyIndex = ItemCommon.GetEmptyIndexInPack(curPlayer, ShareDefine.rptRune)
-        if emptyIndex == -1:
-            GameWorld.DebugLog("符印背包已满,无法摘下! ", curPlayer.GetPlayerID())
-            return True
-        desRuneData = 0
-        # 摘下设置孔数据为0
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_Rune_Data % srcRuneNum, 0)
-        ItemControler.SetVPackItemKeyData(curPlayer, ShareDefine.rptRune, emptyIndex, srcRuneData)
-    dataDict = {'desBackPack':desBackPack, 'srcRuneData':srcRuneData, 'desRuneData':desRuneData}
-    DataRecordPack.Cache_FightPowerChangeInfo(curPlayer, ChConfig.PowerDownType_Rune, dataDict)
-    RefreshRuneAttr(curPlayer)
-    PlayerControl.PlayerControl(curPlayer).RefreshPlayerAttrState()
-    Sync_RuneInfo(curPlayer)
-    return True
-
-def __GetCanInlayDoubleAttrRuneCnt(curPlayer):
-    ##当前可镶嵌几个双属性符印
-    runeDoubleInlayCntDict = IpyGameDataPY.GetFuncEvalCfg('RuneDoubleInlayCnt', 1, {})
-    trialTowerPassLV = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_TrialTower_PassLV) # 符印塔已过关层数
-    sortLVList = sorted(runeDoubleInlayCntDict.keys())
-    findLV = 0
-    for plv in sortLVList:
-        if trialTowerPassLV < plv:
-            break
-        findLV = plv
-    return runeDoubleInlayCntDict.get(findLV, 0)
-
-#// A5 65 符印升级 #tagCMRuneUp
-#
-#struct    tagCMRuneUp
-#{
-#    tagHead        Head;
-#    BYTE        PlaceType;    // 位置类型;0-符印背包,1-符印孔
-#    WORD        PlaceIndex;    // 位置索引
-#};
-def OnRuneUp(index, clientData, tick):
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    placeType = clientData.PlaceType
-    placeIndex = clientData.PlaceIndex
-    
-    if placeType == 0:
-        RuneData = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_VPackItem % (ShareDefine.rptRune, placeIndex))
-    elif placeType == 1:
-        RuneData = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_Rune_Data % (placeIndex + 1), 0)
-    else:
-        return
-    
-    playerID = curPlayer.GetPlayerID()
-    if not RuneData:
-        GameWorld.DebugLog("该位置不存在符印, 无法升级! placeType=%s,placeIndex=%s" % (placeType, placeIndex), playerID)
-        return
-    
-    RuneItemID = ItemControler.GetRuneItemID(RuneData)
-    RuneItemPlusLV = ItemControler.GetRuneItemPlusLV(RuneData)
-    RuneIsLock = ItemControler.GetRuneItemIsLock(RuneData)
-    RuneSource = ItemControler.GetRuneItemSource(RuneData)
-    itemData = GameWorld.GetGameData().GetItemByTypeID(RuneItemID)
-    if not itemData:
-        return
-    
-    runeMaxLV = GetRuneMaxLV(RuneItemID)
-    if RuneItemPlusLV + 1 >= runeMaxLV:
-        GameWorld.DebugLog('该符印已满级,无法升级!runeMaxLV=%s' % runeMaxLV)
-        return
-    
-    plusCost = GetRuneNeedExp(RuneItemID, RuneItemPlusLV + 1)
-    plusCost = int(plusCost)
-    if not plusCost:
-        GameWorld.DebugLog("该符印无法升级!  placeType=%s,placeIndex=%s,itemID=%s,plusLV=%s" 
-                           % (placeType, placeIndex, RuneItemID, RuneItemPlusLV), playerID)
-        return
-
-    
-    updRuneData = ItemControler.GetRuneItemKeyData(RuneItemID, RuneItemPlusLV + 1, RuneIsLock, RuneSource)
-    if not PlayerControl.PayMoney(curPlayer, ShareDefine.TYPE_Price_Rune, plusCost):
-        curRuneMoney = PlayerControl.GetMoney(curPlayer, ShareDefine.TYPE_Price_Rune)
-        GameWorld.DebugLog("符印精华点不足,无法升级!placeType=%s,placeIndex=%s,itemID=%s,plusLV=%s,plusCost=%s,curRuneMoney=%s" 
-                           % (placeType, placeIndex, RuneItemID, RuneItemPlusLV, plusCost, curRuneMoney), playerID)
-        return
-    
-    if placeType == 0:
-        ItemControler.SetVPackItemKeyData(curPlayer, ShareDefine.rptRune, placeIndex, updRuneData)
-    elif placeType == 1:
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_Rune_Data % (placeIndex + 1), updRuneData)
-        RefreshRuneAttr(curPlayer)
-        PlayerControl.PlayerControl(curPlayer).RefreshPlayerAttrState()
-        Sync_RuneInfo(curPlayer)
-        DoRuneSuccessLogic(curPlayer)
-        
-    GameWorld.DebugLog("符印升级!placeType=%s,placeIndex=%s,RuneData=%s,updRuneData=%s" 
-                       % (placeType, placeIndex, RuneData, updRuneData), playerID)
-    return
-
-
-def DoRuneSuccessLogic(curPlayer):
-    #符印成就处理
-    #清掉#镶嵌X枚X品质符印的成就信息
-    totalLV = 0
-    runeHoleCnt = IpyGameDataPY.GetFuncCfg("RuneUnlock", 4)
-    for holeNum in xrange(1, runeHoleCnt + 1):
-        runeData = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_Rune_Data % holeNum, 0)
-        if not runeData:
-            continue
-        runeItemID = ItemControler.GetRuneItemID(runeData)
-        itemData = GameWorld.GetGameData().GetItemByTypeID(runeItemID)
-        if not itemData:
-            continue
-        itemColor = itemData.GetItemColor()
-        runeItemPlusLV = ItemControler.GetRuneItemPlusLV(runeData) + 1 #客户端1开始
-        totalLV += runeItemPlusLV
-        PlayerWeekParty.AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Rune, itemColor, False)
-    return
-
-#// A5 66 符印分解 #tagCMRuneDecompose
-#
-#struct    tagCMRuneDecompose
-#{
-#    tagHead        Head;
-#    BYTE        IsAll;    // 是否全部分解,优先级最高,锁定除外
-#    BYTE        QualityCnt;    // 按全部分解品质数
-#    BYTE        QualityList[QualityCnt];    // 全部分解的品质列表,发送的品质会全部分解,锁定除外
-#    BYTE        Count;    // 指定批量分解数,最大不超过50个
-#    WORD        PlaceIndexList[Count];    // 批量分解位置索引列表
-#};
-def OnRuneDecompose(index, clientData, tick):
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    isAll = clientData.IsAll
-    qualityList = clientData.QualityList
-    GameWorld.DebugLog("符印分解: isAll=%s,qualityList=%s,PlaceIndexList=%s" % (isAll, qualityList, clientData.PlaceIndexList))
-    
-    delPlaceDict = {}
-    totalDecompose = 0
-    totalMJ = 0
-    packIndex = ShareDefine.rptRune
-    placeList = xrange(ItemCommon.GetVPackCnt(packIndex)) if (isAll or clientData.QualityCnt > 0) else clientData.PlaceIndexList
-    addPer = 0
-    for place in placeList:
-        RuneData = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_VPackItem % (packIndex, place))
-        if not RuneData:
-            continue
-        # 锁定的不可分解
-        RuneIsLock = ItemControler.GetRuneItemIsLock(RuneData)
-        if RuneIsLock:
-            continue
-        RuneItemID = ItemControler.GetRuneItemID(RuneData)
-        RuneItemPlusLV = ItemControler.GetRuneItemPlusLV(RuneData)
-        itemData = GameWorld.GetGameData().GetItemByTypeID(RuneItemID)
-        if not itemData:
-            continue
-        
-        quality = itemData.GetItemColor()
-        
-        if not (isAll or quality in qualityList or place in clientData.PlaceIndexList):
-            continue
-        
-        if itemData.GetType() == ChConfig.Def_ItemType_RuneExp: #精华物品读效果值
-            curEff = itemData.GetEffectByIndex(0)
-            decompose = curEff.GetEffectValue(0)
-            decompose += decompose * addPer / ShareDefine.Def_MaxRateValue
-        else:
-            decompose = 0
-            for lv in range(RuneItemPlusLV + 1):
-                decompose += GetRuneNeedExp(RuneItemID, lv)
-                if lv == 0:
-                    decompose += decompose * addPer / ShareDefine.Def_MaxRateValue
-                    
-            ipyData = IpyGameDataPY.GetIpyGameDataNotLog('RuneCompound', RuneItemID)
-            if ipyData and ItemControler.GetRuneItemSource(RuneData) in [ChConfig.Rune_Source_Unkown,ChConfig.Item_Source_Compound]:
-                totalMJ += ipyData.GetNeedMJ()
-            
-
-        totalDecompose += decompose
-        delPlaceDict[place] = [RuneData, int(decompose)]
-        
-    if delPlaceDict:
-        ItemCommon.DelVPackItem(curPlayer, packIndex, delPlaceDict.keys(), ChConfig.ItemDel_Rune)
-    
-    totalDecompose = int(totalDecompose)
-    if totalDecompose:
-        addDataDict = {"delPlaceDict":delPlaceDict, "totalDecompose":totalDecompose}
-        PlayerControl.GiveMoney(curPlayer, ShareDefine.TYPE_Price_Rune, totalDecompose, 
-                                ChConfig.Def_GiveMoney_RuneDecompose, addDataDict, False)
-        PlayerControl.NotifyCode(curPlayer, 'hwj_20170807_1', [totalDecompose, ShareDefine.TYPE_Price_Rune])
-    if totalMJ:
-        addDataDict = {"delPlaceDict":delPlaceDict, "totalMJ":totalMJ}
-        PlayerControl.GiveMoney(curPlayer, ShareDefine.TYPE_Price_Ysog, totalMJ, 
-                                ChConfig.Def_GiveMoney_RuneDecompose, addDataDict, False)
-        PlayerControl.NotifyCode(curPlayer, 'hwj_20170807_1', [totalMJ, ShareDefine.TYPE_Price_Ysog])
-    return
-
-#// A5 67 符印锁定状态变更 #tagCMRuneLock
-#
-#struct    tagCMRuneLock
-#{
-#    tagHead        Head;
-#    BYTE        LockState;    // 锁定状态, 0-锁定,1-解锁
-#    BYTE        Count;    // 批量操作数,最大不超过50个
-#    WORD        PlaceIndexList[Count];    // 批量操作位置索引列表
-#};
-def OnRuneLock(index, clientData, tick):
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    packIndex = ShareDefine.rptRune
-    changeLockState = clientData.LockState # 锁定状态, 1-锁定,0-解锁
-    
-    changePlaceList = []
-    for place in clientData.PlaceIndexList:
-        RuneData = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_VPackItem % (packIndex, place))
-        if not RuneData:
-            continue
-        RuneIsLock = ItemControler.GetRuneItemIsLock(RuneData)
-        if changeLockState == RuneIsLock:
-            continue
-        RuneItemID = ItemControler.GetRuneItemID(RuneData)
-        RuneItemPlusLV = ItemControler.GetRuneItemPlusLV(RuneData)
-        updRuneData = ItemControler.GetRuneItemKeyData(RuneItemID, RuneItemPlusLV, changeLockState)
-        ItemControler.SetVPackItemKeyData(curPlayer, packIndex, place, updRuneData, False)
-        changePlaceList.append(place)
-        
-    if changePlaceList:
-        ItemControler.Sync_VPackItem_Refresh(curPlayer, packIndex, changePlaceList)
-        GameWorld.DebugLog("修改符印锁定状态: changeLockState=%s, %s" % (changeLockState, changePlaceList))
-    return
-
-#// A5 78 符印合成 #tagCMRuneCompound
-#
-#struct    tagCMRuneCompound
-#
-#{
-#    tagHead        Head;
-#    BYTE        Cnt;
-#    BYTE        PackList[Cnt];    //所在位置 0-背包 1-符印孔
-#    BYTE        IndexList[Cnt];    //物品索引
-#    DWORD        TagItemID;    //合成目标物品ID
-#};
-def OnRuneCompound(index, clientData, tick):
-    ##符印合成
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    tagItemID = clientData.TagItemID
-    packList = clientData.PackList
-    indexList = clientData.IndexList
-    GameWorld.DebugLog('    符印合成 tagItemID=%s'%tagItemID)
-    ipyData = IpyGameDataPY.GetIpyGameData('RuneCompound', tagItemID)
-    if not ipyData:
-        return
-    materialsIDList = []
-    materialsLVDict = {}
-    indexList1 = [] #背包的符印索引
-    indexList2 = [] #孔索引
-    for i, placeType in enumerate(packList):
-        index = indexList[i]
-        if placeType == 0:
-            runeData = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_VPackItem % (ShareDefine.rptRune, index)) # 符印背包中的值
-            indexList1.append(index)
-        else:
-            runeData = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_Rune_Data % (index+1), 0)
-            indexList2.append(index+1)
-        if not runeData:
-            continue
-        runeItemID = ItemControler.GetRuneItemID(runeData)
-        runeItemPlusLV = ItemControler.GetRuneItemPlusLV(runeData)
-        materialsIDList.append(runeItemID) 
-        materialsLVDict[runeItemID] = runeItemPlusLV
-        
-    
-    needItemIDList = ipyData.GetNeedItem()
-    if sorted(materialsIDList) != sorted(needItemIDList):
-        GameWorld.DebugLog('    符印合成 材料不对 tagItemID=%s, materialsIDList=%s, needItemIDList=%s'%(tagItemID,materialsIDList,needItemIDList))
-        return
-    
-    if 0 not in packList:
-        #如果没有背包的材料要判断格子数
-        emptySpace = ItemCommon.GetItemPackSpace(curPlayer, ShareDefine.rptRune, 1)
-        if emptySpace < 1:
-            PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_676165", [ShareDefine.rptRune])
-            GameWorld.DebugLog('    符印合成 背包格子数量不足1个')
-            return 
-        
-    needMJ = ipyData.GetNeedMJ()
-    infoDict = {"TagItemID":tagItemID}
-    if not PlayerControl.PayMoney(curPlayer, ShareDefine.TYPE_Price_Ysog, needMJ, ChConfig.Def_Cost_ItemProduce, infoDict):
-        return
-     
-    totalPoint = 0
-    for itemID in materialsIDList:
-        decompose = 0
-        RuneItemPlusLV = materialsLVDict.get(itemID,0)
-        for lv in range(1, RuneItemPlusLV + 1):
-            decompose += GetRuneNeedExp(itemID, lv)
-        totalPoint += decompose
-    totalPoint = int(totalPoint)
-    tagItemLV = 0
-
-    runeMaxLV = GetRuneMaxLV(tagItemID)
-    for lv in xrange(1, runeMaxLV):
-        needExp = GetRuneNeedExp(tagItemID, lv)
-        if totalPoint < needExp:
-            break
-        tagItemLV = lv
-        totalPoint -= needExp
-    
-    #删除材料物品
-    if indexList1:
-        ItemCommon.DelVPackItem(curPlayer, ShareDefine.rptRune, indexList1, ChConfig.ItemDel_Rune)
-    if indexList2:
-        for index in indexList2:
-            srcRuneData = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_Rune_Data % index, 0)
-            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_Rune_Data % index, 0)
-            dataDict = {'doType':'RuneCompound', 'srcRuneData':srcRuneData, 'desRuneData':0}
-            DataRecordPack.Cache_FightPowerChangeInfo(curPlayer, ChConfig.PowerDownType_Rune, dataDict)
-            
-        Sync_RuneInfo(curPlayer)
-        RefreshRuneAttr(curPlayer)
-        PlayerControl.PlayerControl(curPlayer).RefreshPlayerAttrState()
-        
-    #给新物品
-    curItem = ItemControler.GetOutPutItemObj(tagItemID)
-    curItem.SetUserAttr(ShareDefine.Def_IudetRuneLV, tagItemLV)
-    curItem.SetUserAttr(ShareDefine.Def_IudetRuneSource, ChConfig.Item_Source_Compound)
-    PlayerItemControler = ItemControler.PlayerItemControler(curPlayer)
-    PlayerItemControler.PutInItem(ShareDefine.rptRune, curItem, event=[ChConfig.ItemGive_RuneCompound, False, {'indexList1':indexList1,'indexList2':indexList2}])
-    curPlayer.Sync_MakeItemAnswer(ShareDefine.Def_mitRuneCompound, 1)
-    return
-
-
-## 刷符印属性
-def RefreshRuneAttr(curPlayer):
-    allAttrList = [{} for _ in range(4)]
-    runeHoleCnt = IpyGameDataPY.GetFuncCfg("RuneUnlock", 4)
-    for holeNum in xrange(1, runeHoleCnt + 1):
-        runeData = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_Rune_Data % holeNum, 0)
-        if not runeData:
-            continue
-        runeItemID = ItemControler.GetRuneItemID(runeData)
-        runeItemPlusLV = ItemControler.GetRuneItemPlusLV(runeData)
-        
-        attrDict = GetRuneAttrValue(runeItemID, runeItemPlusLV)
-        
-        if not attrDict:
-            continue
-        #GameWorld.DebugLog('    刷符印属性 holeNum=%s, attrDict=%s' % (holeNum, attrDict))
-        for attrID, attrValue in attrDict.items():
-            PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrList)
-        
-    # 保存计算值
-    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Rune, allAttrList)
-    return
-
-def GetRuneTotalLV(curPlayer):
-    ## 符印累计总等级
-    totalLV = 0
-    runeHoleCnt = IpyGameDataPY.GetFuncCfg("RuneUnlock", 4)
-    for holeNum in xrange(1, runeHoleCnt + 1):
-        runeData = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_Rune_Data % holeNum, 0)
-        if not runeData:
-            continue
-        totalLV += ItemControler.GetRuneItemPlusLV(runeData) + 1
-    return totalLV
-
-
-## 同步客户端
-def Sync_RuneInfo(curPlayer):
-    runeHoleCnt = IpyGameDataPY.GetFuncCfg("RuneUnlock", 4)
-    if not runeHoleCnt:
-        return
-    RuneInfoPack = ChPyNetSendPack.tagMCRuneInfo()
-    RuneInfoPack.Clear()
-    RuneInfoPack.RuneHoleOpenState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_Rune_HoleOpenState, 0)
-    RuneInfoPack.RuneDataList = []
-    for RuneNum in xrange(1, runeHoleCnt + 1):
-        RuneData = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_Rune_Data % RuneNum, 0)
-        RuneInfoPack.RuneDataList.append(RuneData)
-    RuneInfoPack.Count = len(RuneInfoPack.RuneDataList)
-    NetPackCommon.SendFakePack(curPlayer, RuneInfoPack)
-    return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py
index 9df0805..20d6a29 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py
@@ -30,7 +30,6 @@
 import GameMap
 import math
 import time
-import PetControl
 import AICommon
 import PlayerSuccess
 import PassiveBuffEffMng
@@ -121,8 +120,6 @@
         BaseAttack.Sync_AttackResult(curPlayer, useSkillData)
         
     if useSkillData and useSkillData.GetSkillID() != ChConfig.Def_SkillID_Somersault:
-        # 跟随玩家同频率攻击
-        PetControl.PetFight(curPlayer, tick)
         SummonFollowAtk(curPlayer, tick)
     #===========================================================================
     # if not result:
@@ -1033,8 +1030,6 @@
     #PlayerActLianqi.OnProcess(curPlayer)
     #仙盟攻城战
     #PlayerActFamilyGCZ.OnProcess(curPlayer)
-    #跨服数据同步,放最后
-    #CrossPlayerData.ProcessCrossPlayer(curPlayer, tick)
     return
 
 def ProcessPlayerSecond(curPlayer, tick):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTalk.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTalk.py
index ff8820f..93b4b61 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTalk.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTalk.py
@@ -20,7 +20,6 @@
 import ShareDefine
 import IPY_GameWorld
 import ChPyNetSendPack
-import CrossRealmPlayer
 import PlayerViewCache
 import NetPackCommon
 import IpyGameDataPY
@@ -63,9 +62,6 @@
         
     elif channelType == IPY_GameWorld.tcCountry:
         if GameWorld.IsCrossServer():
-            return
-        if not CrossRealmPlayer.IsCrossServerOpen():
-            PlayerControl.NotifyCode(curPlayer, "CrossMatching18")
             return
         
     if not __CheckTalk(curPlayer, channelType, content, tick):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTongTianLing.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTongTianLing.py
deleted file mode 100644
index bc100e3..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTongTianLing.py
+++ /dev/null
@@ -1,443 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-##@package Player.PlayerTongTianLing
-#
-# @todo:通天令
-# @author hxp
-# @date 2022-01-17
-# @version 1.0
-#
-# 详细描述: 通天令
-#
-#-------------------------------------------------------------------------------
-#"""Version = 2022-01-17 19:00"""
-#-------------------------------------------------------------------------------
-
-import GameWorld
-import ShareDefine
-import PlayerControl
-import IpyGameDataPY
-import ChPyNetSendPack
-import NetPackCommon
-import ItemControler
-import ChConfig
-import time
-
-TTL_LVAwardKeyCount = 2
-TTL_TaskAwardKeyCount = 9
-
-def OnPlayerLogin(curPlayer):
-    if CheckTongTianLingReset(curPlayer):
-        return
-    SyncTongTianLVInfo(curPlayer)
-    SyncTongTianTaskInfo(curPlayer)
-    SyncTongTianTaskAward(curPlayer)
-    return
-
-def OnDay(curPlayer, onEventType):
-    
-    if onEventType == ShareDefine.Def_OnEventType:
-        # 常规时间0点过天检查重置
-        if CheckTongTianLingReset(curPlayer):
-            return
-        return
-    
-    resetTaskTypeList, resetTaskIDList = [], []
-    ipyDataMgr = IpyGameDataPY.IPY_Data()
-    for index in xrange(ipyDataMgr.GetTongTianTaskCount()):
-        ipyData = ipyDataMgr.GetTongTianTaskByIndex(index)
-        if not ipyData.GetIsDailyTask():
-            continue
-        ttTaskID = ipyData.GetTTTaskID()
-        ttTaskType = ipyData.GetTTTaskType()
-        resetTaskTypeList.append(ttTaskType)
-        
-        if GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_TTL_TaskAwardRecord, ttTaskID):
-            GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_PDict_TTL_TaskAwardRecord, ttTaskID, 0)
-            resetTaskIDList.append(ttTaskID)
-            
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TTL_DailyTaskPointToday, 0)
-    isDailyTask = 1 # 只处理每日重置的任务
-    syncTaskInfoList = []
-    for ttTaskType in resetTaskTypeList:
-        curValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TTL_TaskValue % (ttTaskType, isDailyTask))
-        if not curValue:
-            continue
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TTL_TaskValue % (ttTaskType, isDailyTask), 0)
-        syncTaskInfoList.append([ttTaskType, isDailyTask])
-        
-    if syncTaskInfoList:
-        #GameWorld.DebugLog("重置通天任务进度: syncTaskInfoList=%s" % syncTaskInfoList)
-        SyncTongTianTaskInfo(curPlayer, syncTaskInfoList)
-        
-    if resetTaskIDList:
-        #GameWorld.DebugLog("重置通天任务奖励: resetTaskIDList=%s" % resetTaskIDList)
-        SyncTongTianTaskAward(curPlayer)
-        
-    return
-
-def CheckTongTianLingReset(curPlayer):
-    ## 检查通天令重置
-    
-    playerID = curPlayer.GetPlayerID()
-    resetDays = IpyGameDataPY.GetFuncCfg("TongTianLing", 4)
-    if resetDays <= 0:
-        return
-    
-    curTime = int(time.time())
-    startTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TTL_StartTime)
-    passDays = GameWorld.GetDiff_Day(curTime, startTime) + 1
-    if passDays <= resetDays:
-        GameWorld.DebugLog("通天令本轮天数未完,不重置! startTime(%s),passDays=%s <= %s" 
-                           % (GameWorld.ChangeTimeNumToStr(startTime), passDays, resetDays), playerID)
-        return
-    
-    syncTaskInfoList = []
-    for ttTaskType in ChConfig.TTLTaskTypeList:
-        for isDailyTask in [0, 1]:
-            curValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TTL_TaskValue % (ttTaskType, isDailyTask))
-            if not curValue:
-                continue
-            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TTL_TaskValue % (ttTaskType, isDailyTask), 0)
-            syncTaskInfoList.append([ttTaskType, isDailyTask])
-            
-    for i in xrange(TTL_LVAwardKeyCount):
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TTL_CommAwardRecord % i, 0)
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TTL_XianAwardRecord % i, 0)
-        
-    for i in xrange(TTL_TaskAwardKeyCount):
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TTL_TaskAwardRecord % i, 0)
-        
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TTL_StartTime, curTime)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TTL_LVInfo, 0)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TTL_LVPoint, 0)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TTL_DailyTaskPointToday, 0)
-    
-    GameWorld.Log("通天令重置! StartTime=%s" % curTime, playerID)
-    SyncTongTianLVInfo(curPlayer)
-    SyncTongTianTaskInfo(curPlayer, syncTaskInfoList)
-    SyncTongTianTaskAward(curPlayer)
-    return True
-
-def GetTongTianLingLVInfo(curPlayer):
-    ## 获取通天令等级状态信息
-    # @return: 通天令等级, 是否激活通天令
-    lvInfo = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TTL_LVInfo)
-    ttLV, ttState = lvInfo / 10, lvInfo % 10
-    return ttLV, ttState
-
-def SetTongTianLingLVInfo(curPlayer, ttLV, ttState):
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TTL_LVInfo, ttLV * 10 + ttState)
-    return
-
-def AddTongTianTaskValue(curPlayer, ttTaskType, addValue):
-    ## 增加通天令任务进度
-    
-    taskIpyList = IpyGameDataPY.GetIpyGameDataByCondition("TongTianTask", {"TTTaskType":ttTaskType}, True, False)
-    if not taskIpyList:
-        return
-    
-    addValueDict = {}
-    for ipyData in taskIpyList:
-        taskID = ipyData.GetTTTaskID()
-        if GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_TTL_TaskAwardRecord, taskID):
-            # 已领奖的不再处理
-            continue
-        isDailyTask = ipyData.GetIsDailyTask()
-        finishNeedValue = ipyData.GetFinishNeedValue()
-        maxValue = addValueDict.get((ttTaskType, isDailyTask), 0)
-        if finishNeedValue > maxValue:
-            addValueDict[(ttTaskType, isDailyTask)] = finishNeedValue
-            
-    syncTaskInfoList = []
-    for key, finishNeedValue in addValueDict.items():
-        ttTaskType, isDailyTask = key
-        curValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TTL_TaskValue % (ttTaskType, isDailyTask))
-        if curValue >= finishNeedValue:
-            continue
-        updValue = min(curValue + addValue, finishNeedValue)
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TTL_TaskValue % (ttTaskType, isDailyTask), updValue)
-        #GameWorld.DebugLog("更新通天令任务进度: ttTaskType=%s,isDailyTask=%s,curValue=%s,addValue=%s,updValue=%s" 
-        #                   % (ttTaskType, isDailyTask, curValue, addValue, updValue), curPlayer.GetPlayerID())
-        syncTaskInfoList.append([ttTaskType, isDailyTask])
-        
-    if syncTaskInfoList:
-        SyncTongTianTaskInfo(curPlayer, syncTaskInfoList)
-        
-    return
-
-def AddTongTianPoint(curPlayer, addPoint):
-    ## 增加通天令经验点
-    playerID = curPlayer.GetPlayerID()
-    ttLV, ttState = GetTongTianLingLVInfo(curPlayer)
-    ttPoint = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TTL_LVPoint)
-    ipyData = IpyGameDataPY.GetIpyGameData("TongTianLV", ttLV)
-    if not ipyData:
-        return
-    lvUPPoint = ipyData.GetLVUPPoint()
-    if not lvUPPoint:
-        GameWorld.DebugLog("通天令已满级!", playerID)
-        return
-    updLV = ttLV
-    updPoint = ttPoint + addPoint
-    GameWorld.DebugLog("增加通天令经验: ttLV=%s,ttPoint=%s,addPoint=%s,updPoint=%s,lvUPPoint=%s" 
-                       % (ttLV, ttPoint, addPoint, updPoint, lvUPPoint), playerID)
-    doCount = 0
-    while lvUPPoint and updPoint >= lvUPPoint and doCount < 50:
-        doCount += 1
-        updPoint -= lvUPPoint
-        updLV += 1
-        nextLVIPYData = IpyGameDataPY.GetIpyGameDataNotLog("TongTianLV", updLV)
-        lvUPPoint = nextLVIPYData.GetLVUPPoint() if nextLVIPYData else 0
-        GameWorld.DebugLog("    通天令升级: updLV=%s,updPoint=%s,nextLVUPPoint=%s" % (updLV, updPoint, lvUPPoint), playerID)
-        
-    SetTongTianLingLVInfo(curPlayer, updLV, ttState)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TTL_LVPoint, updPoint)
-    SyncTongTianLVInfo(curPlayer)
-    return updLV, updPoint
-
-#// A5 43 通天令领取任务奖励 #tagCMGetTongTianTaskAward
-#
-#struct    tagCMGetTongTianTaskAward
-#{
-#    tagHead        Head;
-#    BYTE        TaskID;    // 任务ID
-#};
-def OnGetTongTianTaskAward(index, clientData, tick):
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    playerID = curPlayer.GetPlayerID()
-    ttTaskID = clientData.TaskID
-    
-    ipyData = IpyGameDataPY.GetIpyGameData("TongTianTask", ttTaskID)
-    if not ipyData:
-        return
-    
-    if GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_TTL_TaskAwardRecord, ttTaskID):
-        GameWorld.DebugLog("通天任务已领奖! ttTaskID=%s" % ttTaskID, playerID)
-        return
-    
-    ttTaskType = ipyData.GetTTTaskType()
-    isDailyTask = ipyData.GetIsDailyTask()
-    finishNeedValue = ipyData.GetFinishNeedValue()
-    curValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TTL_TaskValue % (ttTaskType, isDailyTask))
-    if curValue < finishNeedValue:
-        GameWorld.DebugLog("通天任务进度未完成,无法领奖! ttTaskID=%s,ttTaskType=%s,isDailyTask=%s,curValue=%s < %s" 
-                           % (ttTaskID, ttTaskType, isDailyTask, curValue, finishNeedValue), playerID)
-        return
-    
-    addTaskPoint = ipyData.GetTaskPoint()
-    dailyTaskPointMax = IpyGameDataPY.GetFuncCfg("TongTianLing", 3)
-    if isDailyTask and dailyTaskPointMax:
-        dailyTaskPointToday = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TTL_DailyTaskPointToday)
-        if dailyTaskPointToday >= dailyTaskPointMax:
-            GameWorld.DebugLog("通天任务日常任务积分奖励已达上限! ttTaskID=%s,ttTaskType=%s,dailyTaskPointToday=%s >= %s" 
-                               % (ttTaskID, ttTaskType, dailyTaskPointToday, dailyTaskPointMax), playerID)
-            return
-        addTaskPoint = min(addTaskPoint, dailyTaskPointMax - dailyTaskPointToday)
-        dailyTaskPointToday += addTaskPoint
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TTL_DailyTaskPointToday, dailyTaskPointToday)
-        GameWorld.DebugLog("更新通天任务日常任务今日已获得积分: dailyTaskPointToday=%s" % dailyTaskPointToday, playerID)
-    GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_PDict_TTL_TaskAwardRecord, ttTaskID, 1)
-    AddTongTianPoint(curPlayer, addTaskPoint)
-    SyncTongTianTaskAward(curPlayer)
-    return
-
-#// A5 44 通天令领取等级奖励 #tagCMGetTongTianLVAward
-#
-#struct    tagCMGetTongTianLVAward
-#{
-#    tagHead        Head;
-#    BYTE        TTLV;    // 领取对应等级奖励,发255为一键领取所有等级奖励,包含仙品奖励
-#    BYTE        IsXian;    // 是否领取仙品奖励,仅指定等级奖励有效
-#};
-def OnGetTongTianLVAward(index, clientData, tick):
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    playerID = curPlayer.GetPlayerID()
-    getTTLVLV = clientData.TTLV
-    isXian = clientData.IsXian
-    
-    ttLV, ttState = GetTongTianLingLVInfo(curPlayer)
-    if getTTLVLV == 255:
-        awardLVList = range(0, ttLV + 1)
-        isXian = 1 # 一键领取的默认包含仙品奖励
-    else:
-        awardLVList = [getTTLVLV]
-        
-    GameWorld.DebugLog("领取通天令奖励: getTTLVLV=%s,isXian=%s,awardLVList=%s" % (getTTLVLV, isXian, awardLVList), playerID)
-    
-    notifyItemIDList = []
-    itemList = []
-    for awardTTLV in awardLVList:
-        if awardTTLV > ttLV:
-            GameWorld.DebugLog("    通天等级不足,无法领奖! awardTTLV=%s < %s" % (awardTTLV, ttLV), playerID)
-            break
-        ipyData = IpyGameDataPY.GetIpyGameData("TongTianLV", awardTTLV)
-        if not ipyData:
-            continue
-        commAwardItemList = ipyData.GetCommAwardItemList()
-        xianAwardItemList = ipyData.GetXianAwardItemList()
-        notifyItemIDList.extend(ipyData.GetNotifyItemIDList())
-        
-        if commAwardItemList and not GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_TTL_CommAwardRecord, awardTTLV):
-            GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_PDict_TTL_CommAwardRecord, awardTTLV, 1)
-            itemList.extend(commAwardItemList)
-            GameWorld.DebugLog("    常规奖励: awardTTLV=%s,commAwardItemList=%s" % (awardTTLV, commAwardItemList), playerID)
-        #elif commAwardItemList:
-        #    GameWorld.DebugLog("    已领取过该奖励: awardTTLV=%s" % (awardTTLV), playerID)
-                
-        getXian = (isXian and xianAwardItemList)
-        if getXian and ttState and not GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_TTL_XianAwardRecord, awardTTLV):
-            GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_PDict_TTL_XianAwardRecord, awardTTLV, 1)
-            itemList.extend(xianAwardItemList)
-            GameWorld.DebugLog("    仙品奖励: awardTTLV=%s,xianAwardItemList=%s" % (awardTTLV, xianAwardItemList), playerID)
-        #elif getXian:
-        #    GameWorld.DebugLog("    仙品通天令未激活或已领奖: awardTTLV=%s,ttState=%s" % (awardTTLV, ttState), playerID)
-            
-    GameWorld.DebugLog("    最终奖励: itemList=%s" % itemList, playerID)
-    if not itemList:
-        return
-    
-    giveItemDict = {}
-    for itemID, itemCount, isBind in itemList:
-        key = (itemID, isBind)
-        giveItemDict[key] = giveItemDict.get(key, 0) + itemCount
-        
-    awardItemList = []
-    for key, itemCount in giveItemDict.items():
-        itemID, isBind = key
-        awardItemList.append([itemID, itemCount, isBind])
-        if itemID in notifyItemIDList:
-            PlayerControl.NotifyCode(curPlayer, "TongTianLingLVAward", [curPlayer.GetPlayerName(), itemID, itemCount])
-            
-    GameWorld.DebugLog("    汇总奖励: awardItemList=%s" % awardItemList, playerID)
-    dataDict = {"awardLVList":awardLVList, "isXian":isXian}
-    ItemControler.GivePlayerItemOrMail(curPlayer, awardItemList, event=["TongTianLing", False, dataDict])
-    SyncTongTianLVInfo(curPlayer)
-    return
-
-#// A5 45 兑换通天令等级经验积分点 #tagCMExchangeTongTianLVPoint
-#
-#struct    tagCMExchangeTongTianLVPoint
-#{
-#    tagHead        Head;
-#    DWORD        ExchangePoint;    // 兑换点数
-#};
-def OnExchangeTongTianLVPoint(index, clientData, tick):
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    playerID = curPlayer.GetPlayerID()
-    exchangePoint = clientData.ExchangePoint
-    exchangeCostInfo = IpyGameDataPY.GetFuncEvalCfg("TongTianLing", 1)
-    if len(exchangeCostInfo) != 2:
-        return
-    costMoneyType, costMoneyValue = exchangeCostInfo
-    if not costMoneyType or not costMoneyValue:
-        return
-    
-    ttLV = GetTongTianLingLVInfo(curPlayer)[0]
-    ttPoint = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TTL_LVPoint)
-    canBuyPointMax = 0
-    ipyDataMgr = IpyGameDataPY.IPY_Data()
-    for index in xrange(ttLV, ipyDataMgr.GetTongTianLVCount()):
-        ipyData = ipyDataMgr.GetTongTianLVByIndex(index)
-        canBuyPointMax += ipyData.GetLVUPPoint()
-    canBuyPointMax -= ttPoint
-    
-    exchangePoint = min(exchangePoint, canBuyPointMax)
-    costMoneyTotal = costMoneyValue * exchangePoint
-    GameWorld.DebugLog("兑换通天令等级经验: ttLV=%s,ttPoint=%s,exchangePoint=%s,canBuyPointMax=%s,costMoneyType=%s,costMoneyTotal=%s" 
-                       % (ttLV, ttPoint, exchangePoint, canBuyPointMax, costMoneyType, costMoneyTotal), playerID)
-    
-    if not PlayerControl.HaveMoney(curPlayer, costMoneyType, costMoneyTotal):
-        return
-        
-    updInfo = AddTongTianPoint(curPlayer, exchangePoint)
-    updLV, updPoint = updInfo if updInfo else (ttLV, ttPoint)
-    
-    infoDict = {ChConfig.Def_Cost_Reason_SonKey:"ExchangeTongTianLVPoint", "exchangePoint":exchangePoint, 
-                "ttLV":ttLV, "ttPoint":ttPoint, "updLV":updLV, "updPoint":updPoint}
-    PlayerControl.PayMoney(curPlayer, costMoneyType, costMoneyTotal, ChConfig.Def_Cost_TongTianLing, infoDict)
-    return
-
-#// A5 46 购买通天令 #tagCMBuyTongTianLing
-#
-#struct    tagCMBuyTongTianLing
-#{
-#    tagHead        Head;
-#};
-def OnBuyTongTianLing(index, clientData, tick):
-    # 废弃,改为充值激活
-    return
-
-def OnActiviteTTTByCTGID(curPlayer, ctgID):
-    ctgIDList = IpyGameDataPY.GetFuncEvalCfg("TongTianLing", 5)
-    if ctgID not in ctgIDList:
-        return
-    
-    playerID = curPlayer.GetPlayerID()
-    ttLV, ttState = GetTongTianLingLVInfo(curPlayer)
-    if ttState:
-        GameWorld.DebugLog("通天令已经购买过了!", playerID)
-        return
-    
-    ttState = 1
-    SetTongTianLingLVInfo(curPlayer, ttLV, ttState)
-    GameWorld.DebugLog("购买激活通天令!", playerID)
-    PlayerControl.NotifyCode(curPlayer, "TongTianLingActive")
-    SyncTongTianLVInfo(curPlayer)
-    return
-
-def SyncTongTianLVInfo(curPlayer):
-    ## 等级信息
-    ttLV, ttState = GetTongTianLingLVInfo(curPlayer)
-    clientPack = ChPyNetSendPack.tagMCTongTianLingInfo()
-    clientPack.TTLBuyState = ttState
-    clientPack.TTLLV = ttLV
-    clientPack.CurPoint = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TTL_LVPoint)
-    clientPack.CommAwardStateList = []
-    clientPack.XianAwardStateList = []
-    for i in xrange(TTL_LVAwardKeyCount):
-        clientPack.CommAwardStateList.append(curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TTL_CommAwardRecord % i))
-        clientPack.XianAwardStateList.append(curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TTL_XianAwardRecord % i))
-    clientPack.AwardStateCount = len(clientPack.CommAwardStateList)
-    clientPack.StartTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TTL_StartTime)
-    NetPackCommon.SendFakePack(curPlayer, clientPack)
-    return
-
-def SyncTongTianTaskInfo(curPlayer, syncTaskInfoList=None):
-    ## 任务进度信息
-    syncAppoint = True
-    if syncTaskInfoList == None:
-        syncAppoint = False
-        syncTaskInfoList = []
-        for ttTaskType in ChConfig.TTLTaskTypeList:
-            syncTaskInfoList.append([ttTaskType, 0])
-            syncTaskInfoList.append([ttTaskType, 1])
-            
-    clientPack = ChPyNetSendPack.tagMCTongTianLingTaskValueInfo()
-    clientPack.TaskValueList = []
-    for ttTaskType, isDailyTask in syncTaskInfoList:
-        curValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TTL_TaskValue % (ttTaskType, isDailyTask))
-        if not curValue and not syncAppoint:
-            continue
-        task = ChPyNetSendPack.tagMCTongTianLingTaskValue()
-        task.TaskType = ttTaskType
-        task.IsDaily = isDailyTask
-        task.TaskValue = curValue
-        clientPack.TaskValueList.append(task)
-    clientPack.Count = len(clientPack.TaskValueList)
-    NetPackCommon.SendFakePack(curPlayer, clientPack)
-    return
-
-def SyncTongTianTaskAward(curPlayer):
-    ## 任务奖励信息
-    clientPack = ChPyNetSendPack.tagMCTongTianLingTaskAwardInfo()
-    clientPack.TaskAwardStateList = []
-    for i in xrange(TTL_TaskAwardKeyCount):
-        clientPack.TaskAwardStateList.append(curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TTL_TaskAwardRecord % i))
-    clientPack.AwardStateCount = len(clientPack.TaskAwardStateList)
-    NetPackCommon.SendFakePack(curPlayer, clientPack)
-    return
-
-
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTreasure.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTreasure.py
index 33152ad..ae679c0 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTreasure.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTreasure.py
@@ -16,7 +16,6 @@
 #-------------------------------------------------------------------------------
 
 import GameWorld
-import PlayerRune
 import IPY_GameWorld
 import IpyGameDataPY
 import FormulaControl
@@ -840,11 +839,6 @@
             return
         if heroIpyData.GetRecruitBySelf() and not PlayerHero.GetHeroActivite(curPlayer, itemID):
             GameWorld.DebugLog("武将未激活不产出! itemID=%s" % itemID, playerID)
-            return
-        
-    elif itemData.GetType() == ChConfig.Def_ItemType_Rune:
-        if not PlayerRune.GetIsOpenByRuneID(curPlayer, itemID):
-            GameWorld.DebugLog("未解锁的符印不产出! itemID=%s" % itemID, playerID)
             return
         
     return True
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerWeekParty.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerWeekParty.py
deleted file mode 100644
index 559a981..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerWeekParty.py
+++ /dev/null
@@ -1,468 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-#-------------------------------------------------------------------------------
-#
-##@package Player.PlayerWeekParty
-#
-# @todo:周狂欢
-# @author xdh
-# @date 2018-07-12 16:50
-# @version 1.0
-#
-#
-# 详细描述: 周狂欢
-#
-#---------------------------------------------------------------------
-"""Version = 2018-07-12 16:50"""
-#---------------------------------------------------------------------
-
-import IPY_GameWorld
-import GameWorld
-import ChConfig
-import IpyGameDataPY
-import PlayerControl
-import ItemControler
-import ChPyNetSendPack
-import PlayerFeastWeekParty
-import DataRecordPack
-import NetPackCommon
-import ShareDefine
-import PyGameData
-import ItemCommon
-
-
-def OnLogin(curPlayer):
-    isReset = __CheckPlayerWeekPartyAction(curPlayer)
-    if not isReset:
-        actCostRebateInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_WeekParty, {})
-        # 活动中同步活动信息
-        SyncWeekPartyInfo(curPlayer)
-        if actCostRebateInfo.get(ShareDefine.ActKey_State):
-            AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Login, 1, False, False, False)
-            SyncWeekPartyPlayerInfo(curPlayer)
-    return
-
-
-def RefreshOperationAction_WeekParty():
-    playerManager = GameWorld.GetPlayerManager()
-    for i in xrange(playerManager.GetPlayerCount()):
-        curPlayer = playerManager.GetPlayerByIndex(i)
-        if not GameWorld.IsNormalPlayer(curPlayer):
-            continue
-        __CheckPlayerWeekPartyAction(curPlayer)
-    return
-
-
-def __CheckPlayerWeekPartyAction(curPlayer):
-    ## 检查玩家周狂欢活动数据信息
-    playerID = curPlayer.GetPlayerID()
-    
-    actWeekPartyInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_WeekParty, {})
-    state = actWeekPartyInfo.get(ShareDefine.ActKey_State, 0)
-    actID = actWeekPartyInfo.get(ShareDefine.ActKey_ID, 0)
-    cfgID = actWeekPartyInfo.get(ShareDefine.ActKey_CfgID, 0)
-    playerActID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekPartyActID, 0, ChConfig.Def_PDictType_WeekParty)  # 玩家身上的活动ID
-    playerWeekPartyID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekPartyID, 0, ChConfig.Def_PDictType_WeekParty)  # 玩家身上的活动配置ID
-    playerWorldLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekPartyWorldLV, 0, ChConfig.Def_PDictType_WeekParty)  # 玩家身上的活动世界等级
-    # 活动ID 相同的话不处理
-    if actID == playerActID:
-        GameWorld.DebugLog("周狂欢活动ID不变,不处理!playerActID=%s" % playerActID, curPlayer.GetPlayerID())
-        if state:
-            CheckWeekPartyActionCnt(curPlayer, True)
-        return
-    # 未领取的奖励邮件发放
-    if playerWeekPartyID:
-        __SendWeekPartyMail(curPlayer, playerWeekPartyID, playerWorldLV)
-        
-    GameWorld.DebugLog('周狂欢活动重置!')
-    curPlayer.ClearNomalDict(ChConfig.Def_PDictType_WeekParty)
-    
-    worldLV = actWeekPartyInfo.get(ShareDefine.ActKey_WorldLV, 0)
-    GameWorld.DebugLog("周狂欢变更! state=%s,actID=%s,cfgID=%s,playerWeekPartyID=%s,worldLV=%s" % (state, actID, cfgID, playerWeekPartyID, worldLV), playerID)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_WeekPartyActID, actID, ChConfig.Def_PDictType_WeekParty)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_WeekPartyID, cfgID, ChConfig.Def_PDictType_WeekParty)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_WeekPartyWorldLV, worldLV, ChConfig.Def_PDictType_WeekParty)
-    if state:
-        CheckWeekPartyActionCnt(curPlayer,  False)
-        SyncWeekPartyInfo(curPlayer)
-        SyncWeekPartyPlayerInfo(curPlayer)
-        
-    return True
-
-def __SendWeekPartyMail(curPlayer, cfgID, playerWorldLV):
-    # 未领取的奖励邮件发放
-    actBossIpyData = IpyGameDataPY.GetIpyGameData("ActWeekParty", cfgID)
-    if not actBossIpyData:
-        return
-    templateIDList = actBossIpyData.GetTemplateID()
-    if not templateIDList:
-        return
-    
-    totalItemDict = {}
-    for day, tidList in enumerate(templateIDList):
-        for tid in tidList:
-            ipyData = IpyGameDataPY.GetIpyGameData('WeekParty', tid)
-            if not ipyData:
-                continue
-            singleTimes = ipyData.GetSingleTimes()
-            curTimes = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekPartyCurTimes % (day, tid), 0, ChConfig.Def_PDictType_WeekParty)
-            gotTimes = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekPartyGotTimes % (day, tid), 0, ChConfig.Def_PDictType_WeekParty)
-            canGotCnt = (curTimes - gotTimes) / singleTimes
-            if not canGotCnt:
-                continue
-            itemDict = __GetAwardItem(curPlayer, ipyData, playerWorldLV, canGotCnt)
-            GameWorld.AddDictValue(totalItemDict, itemDict)
-    #积分奖励
-    pointAwardInfo = __GetPointAwardInfo(actBossIpyData.GetPointAward(), playerWorldLV)
-    for day, awardDict in pointAwardInfo.items():
-        pointList = awardDict.keys()
-        pointList.sort()
-        for i, point in enumerate(pointList):
-            curPoint = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekPartyPoint % day, 0, ChConfig.Def_PDictType_WeekParty)
-            if curPoint < point:
-                continue
-            awardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekPartyAwardRecord % day, 0, ChConfig.Def_PDictType_WeekParty)
-            if awardRecord & pow(2, i):
-                continue
-            itemList = awardDict[point]
-            for itemID, itemCnt, isBind in itemList:
-                totalItemDict[itemID] = totalItemDict.get(itemID, 0) + itemCnt
-            DataRecordPack.DR_WeekPartyPoint(curPlayer, day, point)
-    if not totalItemDict:
-        return
-    totalItemList = [[itemID, itemCnt, 1] for itemID, itemCnt in totalItemDict.items()]
-    PlayerControl.SendMailByKey('SecondWeekReward', [curPlayer.GetID()], totalItemList)
-    return
-
-def __GetPointAwardInfo(cfgPointAwardInfo, worldLV):
-    return GameWorld.GetDictValueByRangeKey(cfgPointAwardInfo, worldLV, {})
-
-def AddWeekPartyActionCnt(curPlayer, actionID, addCnt=1, isAdd=True, isCompatible=False, isSync=True):
-    '''增加周狂欢相关活动完成次数'''
-    PlayerFeastWeekParty.AddFeastWeekPartyActionCnt(curPlayer, actionID, addCnt, isAdd, isCompatible, isSync)
-    #判断活动是否开启
-    if not addCnt:
-        return
-    actWeekPartyInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_WeekParty, {})
-    state = actWeekPartyInfo.get(ShareDefine.ActKey_State, 0)
-    cfgID = actWeekPartyInfo.get(ShareDefine.ActKey_CfgID, 0)
-    
-    if not cfgID:
-        return
-    if not state:
-        return
-    
-    actBossIpyData = IpyGameDataPY.GetIpyGameData("ActWeekParty", cfgID)
-    if not actBossIpyData:
-        return
-    templateIDList = actBossIpyData.GetTemplateID()
-    dayIndex = actWeekPartyInfo.get(ShareDefine.ActKey_DayIndex, 0)
-    if dayIndex >= len(templateIDList):
-        return
-    if actionID in [ChConfig.Def_WPAct_Login]:
-        addDayIndexList = [dayIndex]
-    else:
-        addDayIndexList = range(dayIndex + 1)
-    for dayIndex in addDayIndexList:
-        dayTidList = templateIDList[dayIndex]
-        findTidList = []
-        for tid in dayTidList:
-            if tid / 100 == actionID:
-                findTidList.append(tid)
-        if not findTidList:
-            continue
-        for findTid in findTidList:
-            ipyData = IpyGameDataPY.GetIpyGameData('WeekParty', findTid)
-            if not ipyData:
-                continue
-            totalTimes = ipyData.GetTotalTimes()
-            curTimes = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekPartyCurTimes % (dayIndex, findTid), 0, ChConfig.Def_PDictType_WeekParty)
-            if isAdd:
-                curAddCnt = addCnt if totalTimes == 0 else min(totalTimes - curTimes, addCnt)
-                if curAddCnt <= 0:
-                    continue
-                updTimes = curTimes + curAddCnt
-            else:
-                if not isCompatible and addCnt != totalTimes:
-                    continue
-                updTimes = min(addCnt, totalTimes)
-            realAddCnt = updTimes - curTimes
-            if realAddCnt <= 0:
-                continue
-            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_WeekPartyCurTimes % (dayIndex, findTid), updTimes, ChConfig.Def_PDictType_WeekParty)
-            #加积分
-            singleTimes = ipyData.GetSingleTimes()
-            addPoint = (curTimes % singleTimes + realAddCnt) / singleTimes * ipyData.GetPoint()
-            curPoint = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekPartyPoint % dayIndex, 0, ChConfig.Def_PDictType_WeekParty)
-            updPoint = curPoint + addPoint
-            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_WeekPartyPoint % dayIndex, updPoint, ChConfig.Def_PDictType_WeekParty)
-            GameWorld.DebugLog('   增加周狂欢相关活动完成次数 dayIndex=%s, findTid=%s, curTimes=%s, updTimes=%s, realAddCnt=%s,addPoint=%s' % (dayIndex, findTid, curTimes, updTimes, realAddCnt, addPoint))
-            if isSync:
-                SyncWeekPartyPlayerInfo(curPlayer, dayIndex, findTid)
-    return True
-
-def CheckWeekPartyActionCnt(curPlayer, isSync):
-    ## 同步活动状态时需要触发的
-    
-    # 灵宠激活
-    petDataPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptPet)
-    for petDataIndex in range(petDataPack.GetCount()):
-        petItem = petDataPack.GetAt(petDataIndex)
-        if petItem.IsEmpty():
-            continue
-        petNPCID = petItem.GetUserAttr(ShareDefine.Def_IudetPet_NPCID)
-        AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Pet, petNPCID, False, isSync=isSync)
-        
-    # 出战神兽
-    ipyDataMgr = IpyGameDataPY.IPY_Data()
-    for i in xrange(ipyDataMgr.GetDogzCount()):
-        ipyData = ipyDataMgr.GetDogzByIndex(i)
-        if GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_DogzFightState, i):
-            AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Dogz, ipyData.GetDogzID(), False, isSync=isSync)
-            
-    # 穿戴某品质符印
-    runeHoleCnt = IpyGameDataPY.GetFuncCfg("RuneUnlock", 4)
-    for holeNum in xrange(1, runeHoleCnt + 1):
-        runeData = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_Rune_Data % holeNum, 0)
-        if not runeData:
-            continue
-        runeItemID = ItemControler.GetRuneItemID(runeData)
-        itemData = GameWorld.GetGameData().GetItemByTypeID(runeItemID)
-        if not itemData:
-            continue
-        itemColor = itemData.GetItemColor()
-        AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Rune, itemColor, False, isSync=isSync)
-        
-    AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Login, 1, False, False, isSync)
-    return
-
-def GetWeekPartyActionAward(curPlayer, day, templateID):
-    '''领取周狂欢活动奖励'''
-    templateID = GameWorld.ToIntDef(templateID, 0)
-    actWeekPartyInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_WeekParty, {})
-    state = actWeekPartyInfo.get(ShareDefine.ActKey_State, 0)
-    cfgID = actWeekPartyInfo.get(ShareDefine.ActKey_CfgID, 0)
-    if not state or not cfgID:
-        return
-    actBossIpyData = IpyGameDataPY.GetIpyGameData("ActWeekParty", cfgID)
-    if not actBossIpyData:
-        return
-    templateIDList = actBossIpyData.GetTemplateID()
-    if not templateIDList:
-        return
-    if day >= len(templateIDList):
-        return
-    dayTempIDList = templateIDList[day]
-    if templateID not in dayTempIDList:
-        return
-    ipyData = IpyGameDataPY.GetIpyGameData('WeekParty', templateID)
-    if not ipyData:
-        return
-    singleTimes = ipyData.GetSingleTimes()
-    curTimes = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekPartyCurTimes % (day, templateID), 0, ChConfig.Def_PDictType_WeekParty)
-    gotTimes = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekPartyGotTimes % (day, templateID), 0, ChConfig.Def_PDictType_WeekParty)
-    if curTimes - gotTimes < singleTimes:
-        return
-    
-    #给奖励
-    playerWorldLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekPartyWorldLV, 0, ChConfig.Def_PDictType_WeekParty)
-    awardDict = __GetAwardItem(curPlayer, ipyData, playerWorldLV)
-    # 检查背包
-    needSpace = len(awardDict)
-    packSpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem, needSpace)
-    if needSpace > packSpace:
-        PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_998371")
-        return
-    #更新次数 每次领奖只领一次
-    newGotTimes = gotTimes + singleTimes
-    
-    #GameWorld.Log('  actionID=%s,curTimes=%s,gotTimes=%s,singleTimes=%s,newGotTimes=%s'%(actionID, curTimes, gotTimes,singleTimes, newGotTimes))
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_WeekPartyGotTimes % (day, templateID), newGotTimes, ChConfig.Def_PDictType_WeekParty)
-    for itemID, itemCnt in awardDict.items():
-        ItemControler.GivePlayerItem(curPlayer, itemID, itemCnt, 0, [IPY_GameWorld.rptItem])
-    ItemControler.NotifyGiveAwardInfo(curPlayer, awardDict, "WeekParty")
-    SyncWeekPartyPlayerInfo(curPlayer, day, templateID)
-    return
-
-
-def GetWeekPartyPointAward(curPlayer, day, getPoint):
-    ##领取周狂欢积分奖励
-    getPoint = GameWorld.ToIntDef(getPoint, 0)
-    actWeekPartyInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_WeekParty, {})
-    state = actWeekPartyInfo.get(ShareDefine.ActKey_State, 0)
-    cfgID = actWeekPartyInfo.get(ShareDefine.ActKey_CfgID, 0)
-    if not state or not cfgID:
-        return
-    actBossIpyData = IpyGameDataPY.GetIpyGameData("ActWeekParty", cfgID)
-    if not actBossIpyData:
-        return
-    curPoint = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekPartyPoint % day, 0, ChConfig.Def_PDictType_WeekParty)
-    if curPoint < getPoint:
-        return
-    worldLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekPartyWorldLV, 0, ChConfig.Def_PDictType_WeekParty)
-    pointAwardInfo = __GetPointAwardInfo(actBossIpyData.GetPointAward(), worldLV)
-    pointAwardDict = pointAwardInfo.get(day, {})
-    pointList = pointAwardDict.keys()
-    pointList.sort()
-    if getPoint not in pointList:
-        return
-    getIndex = pointList.index(getPoint)
-    awardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekPartyAwardRecord % day, 0, ChConfig.Def_PDictType_WeekParty)
-    if awardRecord & pow(2, getIndex):
-        GameWorld.Log(' 领取周狂欢积分奖励, 已领取 day=%s, getPoint=%s' % (day, getPoint))
-        return
-    itemList = pointAwardDict[getPoint]
-    needSpace = len(itemList)
-    packSpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem, needSpace)
-    if needSpace > packSpace:
-        PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_998371")
-        return
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_WeekPartyAwardRecord % day, awardRecord | pow(2, getIndex), ChConfig.Def_PDictType_WeekParty)
-    for itemID, itemCnt, isBind in itemList:
-        ItemControler.GivePlayerItem(curPlayer, itemID, itemCnt, 0, [IPY_GameWorld.rptItem])
-    ItemControler.NotifyGiveAwardInfo(curPlayer, itemList, "WeekParty")
-    SyncWeekPartyPlayerInfo(curPlayer, day)
-    DataRecordPack.DR_WeekPartyPoint(curPlayer, day, getPoint)
-    return
-
-
-def __GetAwardItem(curPlayer, ipyData, worldLV, times=1):
-    awardDict = {}
-    awardItemList = __GetAwardItemListByJob(curPlayer, ipyData.GetReward(), worldLV)
-    for itemID, itemCnt, isbind in awardItemList:
-        if not itemID or not itemCnt:
-            continue
-        awardDict[itemID] = awardDict.get(itemID, 0) + itemCnt * times
-        
-    return awardDict
-
-def __GetAwardItemListByJob(curPlayer, rewardItemInfo, worldLV):
-    ## 根据职业获取对应奖励
-    if not rewardItemInfo:
-        return []
-    if isinstance(rewardItemInfo, dict):
-        keyList = rewardItemInfo.keys()
-        # 配世界等级范围的
-        if isinstance(keyList[0], tuple) and len(keyList[0]) == 2:
-            return __GetAwardItemListByJob(curPlayer, GameWorld.GetDictValueByRangeKey(rewardItemInfo, worldLV), worldLV)
-        return rewardItemInfo.get(curPlayer.GetJob(), [])
-    return rewardItemInfo
-
-def SyncWeekPartyPlayerInfo(curPlayer, day= -1, templateID= -1):
-    #通知当前次数、已领次数 
-    actWeekPartyInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_WeekParty, {})
-    state = actWeekPartyInfo.get(ShareDefine.ActKey_State, 0)
-    cfgID = actWeekPartyInfo.get(ShareDefine.ActKey_CfgID, 0)
-    if not state or not cfgID:
-        return
-    actBossIpyData = IpyGameDataPY.GetIpyGameData("ActWeekParty", cfgID)
-    if not actBossIpyData:
-        return
-    templateIDList = actBossIpyData.GetTemplateID()
-    if not templateIDList:
-        return
-    if day != -1:
-        if day >= len(templateIDList):
-            return
-        syncDayList = [day]
-    else:
-        syncDayList = range(len(templateIDList))
-        
-    packData = ChPyNetSendPack.tagMCWeekPartyPlayerInfo()
-    packData.DayInfoList = []
-    for cday in syncDayList:
-        tiemInfo = ChPyNetSendPack.tagMCWeekPartyDayPlayerInfo()
-        tiemInfo.DayIndex = cday
-        tiemInfo.Point = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekPartyPoint % cday, 0, ChConfig.Def_PDictType_WeekParty)
-        tiemInfo.AwardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekPartyAwardRecord % cday, 0, ChConfig.Def_PDictType_WeekParty)
-        tiemInfo.TaskList = []
-        for tID in templateIDList[cday]:
-            if templateID != -1 and tID != templateID:
-                continue
-            tipyData = IpyGameDataPY.GetIpyGameData('WeekParty', tID)
-            if not tipyData:
-                continue
-            taskInfo = ChPyNetSendPack.tagMCWeekPartyTaskInfo()
-            taskInfo.TemplateID = tID
-            taskInfo.CurTimes = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekPartyCurTimes % (cday, tID), 0, ChConfig.Def_PDictType_WeekParty)
-            taskInfo.GotTimes = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekPartyGotTimes % (cday, tID), 0, ChConfig.Def_PDictType_WeekParty)
-            tiemInfo.TaskList.append(taskInfo)
-        tiemInfo.ACount = len(tiemInfo.TaskList)
-        packData.DayInfoList.append(tiemInfo)
-    packData.Count = len(packData.DayInfoList)
-    NetPackCommon.SendFakePack(curPlayer, packData)
-    return
-
-
-def SyncWeekPartyInfo(curPlayer):
-    actWeekPartyInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_WeekParty, {})
-    state = actWeekPartyInfo.get(ShareDefine.ActKey_State, 0)
-    cfgID = actWeekPartyInfo.get(ShareDefine.ActKey_CfgID, 0)
-    if not cfgID:
-        return
-    actBossIpyData = IpyGameDataPY.GetIpyGameData("ActWeekParty", cfgID)
-    if not actBossIpyData:
-        return
-    templateIDList = actBossIpyData.GetTemplateID()
-    if not templateIDList:
-        return
-    worldLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekPartyWorldLV, 0, ChConfig.Def_PDictType_WeekParty)
-    pointAwardDict = __GetPointAwardInfo(actBossIpyData.GetPointAward(), worldLV)
-    startDateStr, endDateStr = GameWorld.GetOperationActionDateStr(actBossIpyData)
-    actInfo = ChPyNetSendPack.tagMCWeekPartyInfo()
-    actInfo.Clear()
-    actInfo.StartDate = startDateStr
-    actInfo.EndtDate = endDateStr
-    actInfo.AdvanceMinutes = actBossIpyData.GetAdvanceMinutes()
-    actInfo.IsDayReset = actBossIpyData.GetIsDayReset()
-    actInfo.ResetType = actBossIpyData.GetResetType()
-    actInfo.LimitLV = actBossIpyData.GetLVLimit()
-    actInfo.DayInfoList = []
-    tidList = []
-    for day, dayActList in enumerate(templateIDList):
-        dayInfo = ChPyNetSendPack.tagMCWeekPartyDayInfo()
-        dayInfo.TemplateList = dayActList
-        dayInfo.ActCnt = len(dayActList)
-        for tid in dayActList:
-            if tid not in tidList:
-                tidList.append(tid)
-        dayInfo.PItemInfo = []
-        for point, itemList in pointAwardDict.get(day, {}).items():
-            for itemID, itemCnt, isBind in itemList:
-                awardItem = ChPyNetSendPack.tagMCWeekPartyItem()
-                awardItem.ItemID = itemID
-                awardItem.ItemCnt = itemCnt
-                awardItem.IsBind = isBind
-                awardItem.NeedPoint = point
-                dayInfo.PItemInfo.append(awardItem)
-        dayInfo.PCount = len(dayInfo.PItemInfo)
-        actInfo.DayInfoList.append(dayInfo)
-    actInfo.DayCnt = len(actInfo.DayInfoList)
-    actInfo.ActionInfo = []
-    for tid in tidList:
-        ipyData = IpyGameDataPY.GetIpyGameData('WeekParty', tid)
-        if not ipyData:
-            GameWorld.ErrLog('    周狂欢模板表找不到模板%s' % tid)
-            continue
-        tInfo = ChPyNetSendPack.tagMCWeekPartyAction()
-        tInfo.TemplateID = tid
-        tInfo.ActionType = ipyData.GetActionType()
-        tInfo.TotalTimes = ipyData.GetTotalTimes()
-        tInfo.SingleTimes = ipyData.GetSingleTimes()
-        tInfo.Point = ipyData.GetPoint()
-        tInfo.ItemInfo = []
-        awardItemList = __GetAwardItemListByJob(curPlayer, ipyData.GetReward(), worldLV)
-        for itemID, itemCnt, isBind in awardItemList:
-            awardItem = ChPyNetSendPack.tagMCWeekPartyItem()
-            awardItem.ItemID = itemID
-            awardItem.ItemCnt = itemCnt
-            awardItem.IsBind = isBind
-            awardItem.NeedPoint = 0
-            tInfo.ItemInfo.append(awardItem)
-        tInfo.Count = len(tInfo.ItemInfo)
-        actInfo.ActionInfo.append(tInfo)
-    actInfo.TCount = len(actInfo.ActionInfo)
-    NetPackCommon.SendFakePack(curPlayer, actInfo)
-    return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_AddBuff.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_AddBuff.py
deleted file mode 100644
index b9e0c49..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_AddBuff.py
+++ /dev/null
@@ -1,50 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#---------------------------------------------------------------------
-#
-#---------------------------------------------------------------------
-##@package GY_Query_AddBuff
-# @todo: 增加buff
-#
-# @author: xdh
-# @date 2019-03-19 21:00
-# @version 1.0
-#
-# @note: 增加buff
-#---------------------------------------------------------------------
-#"""Version = 2019-03-19 21:00""" 
-#---------------------------------------------------------------------
-import GameWorld
-import SkillShell
-#---------------------------------------------------------------------
-
-## XX
-#  @param query_Type 请求类型
-#  @param query_ID 请求的玩家ID
-#  @param packCMDList 发包命令
-#  @param tick 当前时间
-#  @return "True" or "False" or ""
-def DoLogic(query_Type, query_ID, packCMDList, tick):
-    return ''
-
-
-## 登陆信息
-#  @param curPlayer 发出请求的玩家
-#  @param callFunName 功能名称
-#  @param funResult 查询的结果
-#  @param tick 当前时间
-#  @return None
-def DoResult(curPlayer, callFunName, funResult, tick):
-    playerID = curPlayer.GetPlayerID()
-    GameWorld.DebugLog("GY_Query_AddBuff funResult=%s" % funResult, playerID)
-    buffID = GameWorld.ToIntDef(funResult, 0)
-    if not buffID:
-        return
-    #SkillCommon.AddBuffBySkillType(curPlayer, buffID, tick)
-    curSkill = GameWorld.GetGameData().GetSkillBySkillID(buffID)
-    if not curSkill:
-        return
-    SkillShell.__DoLogic_AddBuff(curPlayer, curPlayer, curSkill, False, tick, 0, 0)
-    return
-
-
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_Championship.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_Championship.py
deleted file mode 100644
index 85d3dfc..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_Championship.py
+++ /dev/null
@@ -1,51 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-##@package Player.RemoteQuery.GY_Query_Championship
-#
-# @todo:跨服排位
-# @author hxp
-# @date 2022-09-21
-# @version 1.0
-#
-# 详细描述: 跨服排位
-#
-#-------------------------------------------------------------------------------
-#"""Version = 2022-09-21 21:30"""
-#-------------------------------------------------------------------------------
-
-import GameWorld
-import PlayerCrossChampionship
-import ChConfig
-
-#------------------------------------------------------------------------------ 
-## 跨服赛报名调用接口
-#  @param query_Type 请求类型
-#  @param query_ID 请求的玩家ID
-#  @param packCMDList 发包命令
-#  @param tick 当前时间
-#  @return "True" or "False" or ""
-#  @remarks 函数详细说明.
-def DoLogic(query_Type, query_ID, packCMDList, tick): 
-    return
-
-
-#------------------------------------------------------------------------------ 
-## 执行结果
-#  @param curPlayer 发出请求的玩家
-#  @param callFunName 功能名称
-#  @param funResult 查询的结果
-#  @param tick 当前时间
-#  @return None
-#  @remarks 函数详细说明.
-def DoResult(curPlayer, callFunName, funResult, tick):
-    curPlayer.SetTickByType(ChConfig.TYPE_Player_Tick_Championship, 0)
-    msgData = eval(funResult)
-    playerID = curPlayer.GetPlayerID()
-    GameWorld.Log("GY_Query_Championship msgData=%s" % (msgData), playerID)
-    PlayerCrossChampionship.GameServer_Championship(curPlayer, msgData)
-    return
-    
-    
-    
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_Charm.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_Charm.py
deleted file mode 100644
index c537d21..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_Charm.py
+++ /dev/null
@@ -1,48 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-##@package Player.RemoteQuery.GY_Query_Charm
-#
-# @todo:魅力
-# @author hxp
-# @date 2021-12-03
-# @version 1.0
-#
-# 详细描述: 魅力
-#
-#-------------------------------------------------------------------------------
-#"""Version = 2021-12-03 19:00"""
-#-------------------------------------------------------------------------------
-
-import GameWorld
-import PlayerCharm
-
-#------------------------------------------------------------------------------ 
-## 跨服赛报名调用接口
-#  @param query_Type 请求类型
-#  @param query_ID 请求的玩家ID
-#  @param packCMDList 发包命令
-#  @param tick 当前时间
-#  @return "True" or "False" or ""
-#  @remarks 函数详细说明.
-def DoLogic(query_Type, query_ID, packCMDList, tick):
-    
-    curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(query_ID)
-    if not curPlayer or curPlayer.IsEmpty():
-        return
-    
-    PlayerCharm.GameServer_DoLogic_Charm(curPlayer, packCMDList)
-    return
-
-#------------------------------------------------------------------------------ 
-## 执行结果
-#  @param curPlayer 发出请求的玩家
-#  @param callFunName 功能名称
-#  @param funResult 查询的结果
-#  @param tick 当前时间
-#  @return None
-#  @remarks 函数详细说明.
-def DoResult(curPlayer, callFunName, funResult, tick):
-    return
-
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_CrossActAllRecharge.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_CrossActAllRecharge.py
deleted file mode 100644
index 824405d..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_CrossActAllRecharge.py
+++ /dev/null
@@ -1,49 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-##@package Player.RemoteQuery.GY_Query_CrossActAllRecharge
-#
-# @todo:跨服全民充值
-# @author hxp
-# @date 2022-10-11
-# @version 1.0
-#
-# 详细描述: 跨服全民充值
-#
-#-------------------------------------------------------------------------------
-#"""Version = 2022-10-11 19:00"""
-#-------------------------------------------------------------------------------
-
-import GameWorld
-import CrossActAllRecharge
-
-#------------------------------------------------------------------------------ 
-## 跨服赛报名调用接口
-#  @param query_Type 请求类型
-#  @param query_ID 请求的玩家ID
-#  @param packCMDList 发包命令
-#  @param tick 当前时间
-#  @return "True" or "False" or ""
-#  @remarks 函数详细说明.
-def DoLogic(query_Type, query_ID, packCMDList, tick): 
-    return
-
-
-#------------------------------------------------------------------------------ 
-## 执行结果
-#  @param curPlayer 发出请求的玩家
-#  @param callFunName 功能名称
-#  @param funResult 查询的结果
-#  @param tick 当前时间
-#  @return None
-#  @remarks 函数详细说明.
-def DoResult(curPlayer, callFunName, funResult, tick):
-    msgList = eval(funResult)
-    playerID = curPlayer.GetPlayerID()
-    GameWorld.Log("GY_Query_CrossActAllRecharge %s" % (msgList), playerID)
-    CrossActAllRecharge.GameServer_CrossActAllRecharge(curPlayer, msgList)
-    return
-    
-    
-    
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_CrossGiveMoney.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_CrossGiveMoney.py
deleted file mode 100644
index 6257f76..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_CrossGiveMoney.py
+++ /dev/null
@@ -1,56 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-##@package Player.RemoteQuery.GY_Query_CrossGiveMoney
-#
-# @todo:跨服获得货币
-# @author hxp
-# @date 2019-01-09
-# @version 1.0
-#
-# 详细描述: 跨服获得货币
-#
-#-------------------------------------------------------------------------------
-#"""Version = 2019-01-09 19:30"""
-#-------------------------------------------------------------------------------
-
-import GameWorld
-import PlayerControl
-
-#------------------------------------------------------------------------------ 
-## 跨服赛报名调用接口
-#  @param query_Type 请求类型
-#  @param query_ID 请求的玩家ID
-#  @param packCMDList 发包命令
-#  @param tick 当前时间
-#  @return "True" or "False" or ""
-#  @remarks 函数详细说明.
-def DoLogic(query_Type, query_ID, packCMDList, tick): 
-    return
-
-
-#------------------------------------------------------------------------------ 
-## 执行结果
-#  @param curPlayer 发出请求的玩家
-#  @param callFunName 功能名称
-#  @param funResult 查询的结果
-#  @param tick 当前时间
-#  @return None
-#  @remarks 函数详细说明.
-def DoResult(curPlayer, callFunName, funResult, tick):
-    playerID = curPlayer.GetPlayerID()
-    GameWorld.Log("GY_Query_CrossGiveMoney %s" % funResult, playerID)
-    msgInfo = eval(funResult)
-    if playerID != msgInfo["PlayerID"]:
-        return
-    #"PlayerID":curPlayer.GetPlayerID(), "MoneyType":priceType, "Value":value, "GiveType":giveType, "AddDataDict":addDataDict
-    priceType = msgInfo["MoneyType"]
-    value = msgInfo["Value"]
-    giveType = msgInfo["GiveType"]
-    addDataDict = msgInfo["AddDataDict"]
-    PlayerControl.GiveMoney(curPlayer, priceType, value, giveType, addDataDict)
-    return
-
-    
-    
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_CrossKillBoss.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_CrossKillBoss.py
deleted file mode 100644
index 1d7336c..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_CrossKillBoss.py
+++ /dev/null
@@ -1,51 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-##@package Player.RemoteQuery.GY_Query_CrossKillBoss
-#
-# @todo:跨服击杀boss
-# @author hxp
-# @date 2019-01-14
-# @version 1.0
-#
-# 详细描述: 跨服击杀boss
-#
-#-------------------------------------------------------------------------------
-#"""Version = 2019-01-14 16:00"""
-#-------------------------------------------------------------------------------
-
-import GameWorld
-import NPCCommon
-
-#------------------------------------------------------------------------------ 
-## 跨服赛报名调用接口
-#  @param query_Type 请求类型
-#  @param query_ID 请求的玩家ID
-#  @param packCMDList 发包命令
-#  @param tick 当前时间
-#  @return "True" or "False" or ""
-#  @remarks 函数详细说明.
-def DoLogic(query_Type, query_ID, packCMDList, tick): 
-    return
-
-
-#------------------------------------------------------------------------------ 
-## 执行结果
-#  @param curPlayer 发出请求的玩家
-#  @param callFunName 功能名称
-#  @param funResult 查询的结果
-#  @param tick 当前时间
-#  @return None
-#  @remarks 函数详细说明.
-def DoResult(curPlayer, callFunName, funResult, tick):
-    killerExInfo = eval(funResult)
-    mapID, bossID = killerExInfo
-    GameWorld.Log("GY_Query_CrossKillBoss mapID=%s, bossID=%s" % (mapID, bossID), curPlayer.GetPlayerID())
-    if not curPlayer:
-        return
-    NPCCommon.OnPlayerKillBoss(curPlayer, bossID, mapID, False)
-    return
-
-    
-    
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_CrossPKOverInfo.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_CrossPKOverInfo.py
deleted file mode 100644
index 127c5d2..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_CrossPKOverInfo.py
+++ /dev/null
@@ -1,50 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-##@package Player.RemoteQuery.GY_Query_CrossPKOverInfo
-#
-# @todo:跨服PK结果同步
-# @author hxp
-# @date 2018-12-21
-# @version 1.0
-#
-# 详细描述: 跨服PK结果同步
-#
-#-------------------------------------------------------------------------------
-#"""Version = 2018-12-21 18:00"""
-#-------------------------------------------------------------------------------
-
-import GameWorld
-import PlayerCrossRealmPK
-
-
-#------------------------------------------------------------------------------ 
-## 跨服赛报名调用接口
-#  @param query_Type 请求类型
-#  @param query_ID 请求的玩家ID
-#  @param packCMDList 发包命令
-#  @param tick 当前时间
-#  @return "True" or "False" or ""
-#  @remarks 函数详细说明.
-def DoLogic(query_Type, query_ID, packCMDList, tick): 
-    return
-
-
-#------------------------------------------------------------------------------ 
-## 执行结果
-#  @param curPlayer 发出请求的玩家
-#  @param callFunName 功能名称
-#  @param funResult 查询的结果
-#  @param tick 当前时间
-#  @return None
-#  @remarks 函数详细说明.
-def DoResult(curPlayer, callFunName, funResult, tick):
-    overInfo = eval(funResult)
-    playerID = curPlayer.GetPlayerID()
-    GameWorld.Log("GY_Query_CrossPKOverInfo overInfo=%s" % (overInfo), playerID)
-    PlayerCrossRealmPK.CrossServerMsg_PKOverInfo(curPlayer, overInfo)
-    return
-    
-    
-    
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_CrossPKSeasonOrder.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_CrossPKSeasonOrder.py
deleted file mode 100644
index 64d5ec7..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_CrossPKSeasonOrder.py
+++ /dev/null
@@ -1,49 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-##@package Player.RemoteQuery.GY_Query_CrossPKSeasonOrder
-#
-# @todo:跨服PK赛季名次
-# @author hxp
-# @date 2018-12-25
-# @version 1.0
-#
-# 详细描述: 跨服PK赛季名次
-#
-#-------------------------------------------------------------------------------
-#"""Version = 2018-12-25 21:30"""
-#-------------------------------------------------------------------------------
-
-import GameWorld
-import PlayerCrossRealmPK
-
-
-#------------------------------------------------------------------------------ 
-## 跨服赛报名调用接口
-#  @param query_Type 请求类型
-#  @param query_ID 请求的玩家ID
-#  @param packCMDList 发包命令
-#  @param tick 当前时间
-#  @return "True" or "False" or ""
-#  @remarks 函数详细说明.
-def DoLogic(query_Type, query_ID, packCMDList, tick): 
-    return
-
-#------------------------------------------------------------------------------ 
-## 执行结果
-#  @param curPlayer 发出请求的玩家
-#  @param callFunName 功能名称
-#  @param funResult 查询的结果
-#  @param tick 当前时间
-#  @return None
-#  @remarks 函数详细说明.
-def DoResult(curPlayer, callFunName, funResult, tick):
-    msgList = eval(funResult)
-    playerID = curPlayer.GetPlayerID()
-    GameWorld.Log("GY_Query_CrossPKSeasonOrder msgList=%s" % (msgList), playerID)
-    PlayerCrossRealmPK.GameServer_CrossPKSeasonOrder(curPlayer, msgList)
-    return
-    
-    
-    
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_CrossPutInItem.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_CrossPutInItem.py
deleted file mode 100644
index 720824e..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_CrossPutInItem.py
+++ /dev/null
@@ -1,69 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-##@package Player.RemoteQuery.GY_Query_CrossPutInItem
-#
-# @todo:跨服获得物品
-# @author hxp
-# @date 2019-01-09
-# @version 1.0
-#
-# 详细描述: 跨服获得物品
-#
-#-------------------------------------------------------------------------------
-#"""Version = 2019-01-09 19:30"""
-#-------------------------------------------------------------------------------
-
-import GameWorld
-import ItemCommon
-import ItemControler
-import PlayerControl
-
-#------------------------------------------------------------------------------ 
-## 跨服赛报名调用接口
-#  @param query_Type 请求类型
-#  @param query_ID 请求的玩家ID
-#  @param packCMDList 发包命令
-#  @param tick 当前时间
-#  @return "True" or "False" or ""
-#  @remarks 函数详细说明.
-def DoLogic(query_Type, query_ID, packCMDList, tick): 
-    return
-
-
-#------------------------------------------------------------------------------ 
-## 执行结果
-#  @param curPlayer 发出请求的玩家
-#  @param callFunName 功能名称
-#  @param funResult 查询的结果
-#  @param tick 当前时间
-#  @return None
-#  @remarks 函数详细说明.
-def DoResult(curPlayer, callFunName, funResult, tick):
-    playerID = curPlayer.GetPlayerID()
-    GameWorld.Log("GY_Query_CrossPutInItem %s" % funResult, playerID)
-    itemInfo = eval(funResult)
-    if playerID != itemInfo["PlayerID"]:
-        return
-    itemData = itemInfo["ItemData"]
-    packIndex = itemInfo["PackIndex"]
-    event = itemInfo["Event"]
-    itemID, itemCount, isAuctionItem, itemUserData = itemData
-    curItem = ItemCommon.CreateSingleItem(itemID, itemCount, isAuctionItem)
-    if not curItem:
-        return
-    if itemUserData and itemUserData != "{}":
-        curItem.SetUserData(itemUserData, len(itemUserData))
-        
-    if ItemControler.PlayerItemControler(curPlayer).PutInItem(packIndex, curItem, event=event):
-        return
-    
-    # 放入失败发邮件
-    GameWorld.Log("收到跨服获得物品,放入失败,直接发邮件! itemInfo=%s" % str(itemInfo), playerID)
-    addItemList = [{"ItemID":itemID, "Count":itemCount, "IsAuctionItem":isAuctionItem, "UserData":itemUserData}]
-    PlayerControl.SendMailByKey("", [playerID], addItemList, detail={"CrossPutInItem":1, "Event":event})
-    return
-
-    
-    
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_CrossServerReceiveMsg.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_CrossServerReceiveMsg.py
deleted file mode 100644
index 04e6147..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_CrossServerReceiveMsg.py
+++ /dev/null
@@ -1,47 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-##@package Player.RemoteQuery.GY_Query_CrossServerReceiveMsg
-#
-# @todo:跨服服务器收到子服信息
-# @author hxp
-# @date 2019-01-10
-# @version 1.0
-#
-# 详细描述: 跨服服务器收到子服信息
-#
-#-------------------------------------------------------------------------------
-#"""Version = 2019-01-10 15:30"""
-#-------------------------------------------------------------------------------
-
-import GameWorld
-import ShareDefine
-import ChPlayer
-
-#------------------------------------------------------------------------------ 
-
-def DoLogic(query_Type, query_ID, packCMDList, tick): 
-    return
-
-
-#------------------------------------------------------------------------------ 
-## 执行结果
-#  @param curPlayer 发出请求的玩家
-#  @param callFunName 功能名称
-#  @param funResult 查询的结果
-#  @param tick 当前时间
-#  @return None
-#  @remarks 函数详细说明.
-def DoResult(curPlayer, callFunName, funResult, tick):
-    playerID = curPlayer.GetPlayerID()
-    GameWorld.Log("GY_Query_CrossServerReceiveMsg %s" % funResult, playerID)
-    msgType, msgData, serverGroupID = eval(funResult)
-    
-    if msgType == ShareDefine.ClientServerMsg_Reborn:
-        ChPlayer.ClientServerMsg_Reborn(curPlayer, msgData, serverGroupID, tick)
-        
-    return
-
-    
-    
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_CrossSetPlayerAttrValue.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_CrossSetPlayerAttrValue.py
deleted file mode 100644
index 869c296..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_CrossSetPlayerAttrValue.py
+++ /dev/null
@@ -1,43 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-##@package Player.RemoteQuery.GY_Query_CrossSetPlayerAttrValue
-#
-# @todo:设置跨服玩家属性
-# @author hxp
-# @date 2019-01-14
-# @version 1.0
-#
-# 详细描述: 设置跨服玩家属性
-#
-#-------------------------------------------------------------------------------
-#"""Version = 2019-01-14 16:00"""
-#-------------------------------------------------------------------------------
-
-import GameWorld
-import CrossRealmPlayer
-
-#------------------------------------------------------------------------------ 
-
-def DoLogic(query_Type, query_ID, packCMDList, tick): 
-    return
-
-
-#------------------------------------------------------------------------------ 
-## 执行结果
-#  @param curPlayer 发出请求的玩家
-#  @param callFunName 功能名称
-#  @param funResult 查询的结果
-#  @param tick 当前时间
-#  @return None
-#  @remarks 函数详细说明.
-def DoResult(curPlayer, callFunName, funResult, tick):
-    playerID = curPlayer.GetPlayerID()
-    GameWorld.Log("GY_Query_CrossSetPlayerAttrValue %s" % funResult, playerID)
-    playerSetInfoList = eval(funResult)
-    CrossRealmPlayer.ClientServerMsg_SetPlayerAttrValue(curPlayer, playerSetInfoList)
-    return
-
-    
-    
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_CrossYaomoBoss.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_CrossYaomoBoss.py
deleted file mode 100644
index 1b9ee68..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_CrossYaomoBoss.py
+++ /dev/null
@@ -1,48 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-##@package Player.RemoteQuery.GY_Query_CrossYaomoBoss
-#
-# @todo:跨服妖魔Boss
-# @author hxp
-# @date 2022-11-11
-# @version 1.0
-#
-# 详细描述: 跨服妖魔Boss
-#
-#-------------------------------------------------------------------------------
-#"""Version = 2022-11-11 15:30"""
-#-------------------------------------------------------------------------------
-
-import ChConfig
-import GameWorld
-import PlayerCrossYaomoBoss
-
-#------------------------------------------------------------------------------ 
-## 执行逻辑
-#  @param query_Type 请求类型
-#  @param query_ID 请求的玩家ID
-#  @param packCMDList 发包命令
-#  @param tick 当前时间
-#  @return "True" or "False" or ""
-#  @remarks 函数详细说明.
-def DoLogic(query_Type, query_ID, packCMDList, tick):
-    return
-
-#------------------------------------------------------------------------------ 
-## 执行结果
-#  @param curPlayer 发出请求的玩家
-#  @param callFunName 功能名称
-#  @param funResult 查询的结果
-#  @param tick 当前时间
-#  @return None
-#  @remarks 函数详细说明.
-def DoResult(curPlayer, callFunName, funResult, tick):
-    curPlayer.SetTickByType(ChConfig.TYPE_Player_Tick_CrossYaomoBoss, 0)
-    msgData = eval(funResult)
-    playerID = curPlayer.GetPlayerID()
-    GameWorld.Log("GY_Query_CrossYaomoBoss msgData=%s" % (msgData), playerID)
-    PlayerCrossYaomoBoss.GameServer_CrossYaomoBoss_DoResult(curPlayer, msgData)
-    return
-
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_DelItem.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_DelItem.py
deleted file mode 100644
index 1383433..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_DelItem.py
+++ /dev/null
@@ -1,64 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#---------------------------------------------------------------------
-#
-#---------------------------------------------------------------------
-##@package GY_Query_DelItem
-# @todo: 删除物品
-#
-# @author: xdh
-# @date 2016-08-12 21:00
-# @version 1.0
-#
-# @note: 删除物品
-#---------------------------------------------------------------------
-#"""Version = 2016-08-12 21:00""" 
-#---------------------------------------------------------------------
-import GameWorld
-import IPY_GameWorld
-import ItemCommon
-#---------------------------------------------------------------------
-
-## XX
-#  @param query_Type 请求类型
-#  @param query_ID 请求的玩家ID
-#  @param packCMDList 发包命令
-#  @param tick 当前时间
-#  @return "True" or "False" or ""
-def DoLogic(query_Type, query_ID, packCMDList, tick):
-    return ''
-
-
-## 登陆信息
-#  @param curPlayer 发出请求的玩家
-#  @param callFunName 功能名称
-#  @param funResult 查询的结果
-#  @param tick 当前时间
-#  @return None
-def DoResult(curPlayer, callFunName, funResult, tick):
-    playerID = curPlayer.GetPlayerID()
-    GameWorld.Log("GY_Query_DelItem funResult=%s" % funResult, playerID)
-    result = eval(funResult)
-   
-    if len(result) !=2:
-        return
-    
-    needItemList, eventName = result
-    itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
-    itemInfoList = []
-    for itemId, itemNum in needItemList:
-        isEnough, indexList = ItemCommon.GetItem_FromPack_ByID(itemId, itemPack, itemNum)
-        if not isEnough:
-            GameWorld.DebugLog("%s item(%s) isn't enough" % (eventName, itemId), curPlayer.GetPlayerID())
-            continue
-        itemInfoList.append((itemId, itemNum, indexList))
-        
-    for itemId, itemNum, indexList in itemInfoList:
-        if not indexList:
-            continue
-        ItemCommon.ReduceItem(curPlayer, itemPack, indexList, itemNum, False, eventName)
-        
-        
-    return
-
-
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_EnterFB.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_EnterFB.py
deleted file mode 100644
index 0b2fd4e..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_EnterFB.py
+++ /dev/null
@@ -1,256 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-#-------------------------------------------------------------------------------
-#
-##@package Player.RemoteQuery.GY_Query_EnterFB
-#
-# @todo:进入副本
-# @author hxp
-# @date 2014-04-16
-# @version 1.4
-#
-# 详细描述: 进入副本
-# @change: "2014-04-16 18:00" hxp 进入副本修改
-# @change: "2015-03-21 16:00" hxp 进入战盟家园
-# @change: "2015-03-25 21:30" hxp 进入战盟家园增加延迟关闭处理
-# @change: "2015-06-29 17:20" ljd 经典战役
-#
-#---------------------------------------------------------------------
-#"""Version = 2015-06-29 17:20"""
-#---------------------------------------------------------------------
-
-#导入
-import FBLogic
-import IPY_GameWorld
-import PlayerControl
-import GameWorld
-import FBCommon
-import ChConfig
-import random
-#---------------------------------------------------------------------
-#全局变量
-#---------------------------------------------------------------------
-(
-MapInfo_MapID, # 目标地图信息 - 地图id
-MapInfo_LineID, # 目标地图信息 - 场次分线id
-) = range(2)
-#---------------------------------------------------------------------
-#逻辑实现
-## 请求逻辑
-#  @param query_Type 请求类型
-#  @param query_ID 请求的玩家ID
-#  @param packCMDList 发包命令 [ ]
-#  @param tick 当前时间
-#  @return "True" or "False" or ""
-#  @remarks 函数详细说明.
-def DoLogic(query_Type, query_ID, packCMDList, tick):
-    GameWorld.Log("GY_Query_EnterFB DoLogic() query_Type=%s,query_ID=%s,packCMDList=%s,tick=%s" % \
-                  (query_Type, query_ID, packCMDList, tick))
-    
-
-    if not packCMDList or len(packCMDList) < 2:
-        GameWorld.Log("    DoLogic() return []")
-        return []
-    
-    tagMapID = packCMDList[0]  # 目标地图id
-    tagMapLineID = packCMDList[1]  # 目标地图线路属性,从0开始
-    resultLineID = -1  # 结果lineID
-    hpPer = -1
-    notifyMark = 'GeRen_chenxin_500807' #不能进的提示
-    if tagMapID in ChConfig.Def_MapID_LineIDToPropertyID:        
-        GameWorld.Log("    DoLogic() tagMapID in ChConfig.Def_MapID_LineIDToPropertyID")
-        tagMapPropertyID = tagMapLineID + 1 # 因为PropertyID默认是0,所以使用时从1开始
-        
-        resultLineID = -1  # 结果lineID
-        
-        gameWorldManager = GameWorld.GetGameWorld()
-        maxPlayerCount = FBLogic.GetFBLineMaxPlayerCount(tagMapID, tagMapLineID)
-        
-        GameWorld.Log("    DoLogic()  tagMapID=%s,tagMapLineID=%s,maxPlayerCount=%s" % (tagMapID, tagMapLineID,maxPlayerCount))
-        if not maxPlayerCount:
-            pass
-        firstEmptyGameWorld = None
-        sameLineGameWorldList = [] #人数未满的线路列表
-        fullLineGameWorldList = [] #人数已满的线路列表
-        for index in xrange(gameWorldManager.GetGameWorldCount()):
-            gameWorld = IPY_GameWorld.IPY_GameWorld(index)
-            playerManager = gameWorld.GetMapCopyPlayerManagerByFbIndex(index)
-            propertyID = gameWorld.GetPropertyID()
-            curPlayerCnt = playerManager.GetPlayerCount()
-#            GameWorld.Log("    DoLogic()  check gameworld index=%s,propertyID=%s,playerCount=%s" \
-#                          % (index, propertyID, curPlayerCnt))
-            if propertyID == 0 and not firstEmptyGameWorld:
-                firstEmptyGameWorld = gameWorld
-            # 如果不是同一线路属性的,则跳过
-            # 如果当前人数超过额定人数,则跳过
-            if propertyID == tagMapPropertyID:
-                if curPlayerCnt < maxPlayerCount:
-                    sameLineGameWorldList.append([gameWorld, curPlayerCnt])
-                else:
-                    fullLineGameWorldList.append([gameWorld, curPlayerCnt])
-        findGameWorld = None
-        if sameLineGameWorldList:
-            #若是进入过副本则随机一个,否则选人数最少的一个
-            enterCnt = packCMDList[2]
-            if enterCnt:
-                #GameWorld.DebugLog('DoLogic() sameLineGameWorldList=%s'%len(sameLineGameWorldList))
-                findGameWorld = random.choice(sameLineGameWorldList)[0]
-            else:
-                sameLineGameWorldList.sort(key=lambda asd:asd[1])
-                findGameWorld = sameLineGameWorldList[0][0]
-                
-        elif firstEmptyGameWorld:
-            findGameWorld = firstEmptyGameWorld
-        elif fullLineGameWorldList:
-            #线路都满人了则取个人数相对较少的
-            fullLineGameWorldList.sort(key=lambda asd:asd[1])
-            findGameWorld = fullLineGameWorldList[0][0]
-            
-        if findGameWorld:
-            if findGameWorld.GetPropertyID() == 0:
-                findGameWorld.SetFBFirstOpen(1) # 开启副本
-            findGameWorld.SetPropertyID(tagMapPropertyID)
-            resultLineID = findGameWorld.GetLineID()
-            GameWorld.Log("    DoLogic()  check ok!resultLineID=%s" % (resultLineID))
-            
-            
-#===================================================================================================
-#    # 战盟家园
-#    elif tagMapID == ChConfig.Def_MapID_FamilyHome:
-#        
-#        if len(packCMDList) < 4:
-#            GameWorld.DebugLog("    请求进入战盟家园:无目标战盟ID!")
-#            return
-#        
-#        tagFamilyID = packCMDList[2]
-#        tagFamilyHomeLV = packCMDList[3]
-#        if tagFamilyID <= 0:
-#            GameWorld.DebugLog("    请求进入战盟家园:目标战盟ID错误=%s!" % tagFamilyID)
-#            return
-#        
-#        resultLineID = -1  # 结果lineID
-#        
-#        gameWorldManager = GameWorld.GetGameWorld()
-#        firstNotPropertyGameWorld = None
-#        
-#        for index in range(gameWorldManager.GetGameWorldCount()):
-#            gameWorld = IPY_GameWorld.IPY_GameWorld(index)
-#            playerManager = gameWorld.GetMapCopyPlayerManagerByFbIndex(index)
-#            propertyID = gameWorld.GetPropertyID()
-#            
-#            # 不可进入
-#            if gameWorld.GetCloseFBTick() > 0:
-#                continue
-# 
-#            if gameWorld.GetOpenState() == IPY_GameWorld.fbosWaitForClose:
-#                continue
-#            
-#            if propertyID <= 0 and firstNotPropertyGameWorld == None:
-#                firstNotPropertyGameWorld = gameWorld
-#            
-#            if propertyID == tagFamilyID:
-#                resultLineID = gameWorld.GetLineID()
-#                GameWorld.DebugLog("    找到已经存在的战盟家园: tagFamilyID=%s,resultLineID=%s" % (tagFamilyID, resultLineID))
-#                break
-#            
-#        if resultLineID < 0 and firstNotPropertyGameWorld != None and firstNotPropertyGameWorld.GetPropertyID() <= 0:
-#            firstNotPropertyGameWorld.SetPropertyID(tagFamilyID)
-#            firstNotPropertyGameWorld.SetFBFirstOpen(1) # 开启副本
-#            resultLineID = firstNotPropertyGameWorld.GetLineID()
-#            GameWorld.GetGameWorld().SetGameWorldDict("FamilyHomeLV_%s" % tagFamilyID, tagFamilyHomeLV)
-#            GameWorld.DebugLog("    创建新战盟家园: tagFamilyID=%s,tagFamilyHomeLV=%s,resultLineID=%s" 
-#                               % (tagFamilyID, tagFamilyHomeLV, resultLineID))
-#===================================================================================================
-    elif tagMapID in []:
-        tagMapPropertyID = tagMapLineID + 1 # 因为PropertyID默认是0,所以使用时从1开始
-        resultLineID = -1  # 结果lineID
-        
-        gameWorldManager = GameWorld.GetGameWorld()
-        GameWorld.Log("    DoLogic()  tagMapID=%s,tagMapLineID=%s" % (tagMapID, tagMapLineID))
-        findGameWord = None
-        findPlayerManager = None
-        for index in range(gameWorldManager.GetGameWorldCount()):
-            gameWorld = IPY_GameWorld.IPY_GameWorld(index)
-            playerManager = gameWorld.GetMapCopyPlayerManagerByFbIndex(index)
-            propertyID = gameWorld.GetPropertyID()
-            if gameWorld.GetCloseFBTick() > 0:
-                #正在关闭 不可进
-                continue
-            
-#            GameWorld.Log("    DoLogic()  check gameworld index=%s,propertyID=%s,playerCount=%s" \
-#                          % (index, propertyID, playerManager.GetPlayerCount()))
-            # 如果不是同一线路属性的,则跳过
-            if propertyID == tagMapPropertyID:
-                findGameWord = gameWorld
-                findPlayerManager = playerManager
-                break
-            if not findGameWord and propertyID == 0:
-                findGameWord = gameWorld
-                findPlayerManager = playerManager
-                
-        if findGameWord:
-            if findGameWord.GetPropertyID() == 0:
-                findGameWord.SetFBFirstOpen(1) # 开启副本
-            findGameWord.SetPropertyID(tagMapPropertyID)
-            resultLineID = findGameWord.GetLineID()
-
-    else:
-        #resultLineID = tagMapLineID
-        resultLineID = 0
-        
-    return ['%s' % packCMDList, '%d' % resultLineID, notifyMark, hpPer]
-#---------------------------------------------------------------------
-
-
-#执行结果
-## 执行结果
-#  @param curPlayer 发出请求的玩家
-#  @param callFunName 功能名称
-#  @param funResult 查询的结果
-#  @param tick 当前时间
-#  @return None
-#  @remarks 函数详细说明.
-def DoResult(curPlayer, callFunName, funResult, tick):
-    
-    #还原格式 '[]' -> []
-    funResult = eval(funResult)
-    if not funResult or len(funResult) < 3:
-        GameWorld.Log("GY_Query_EnterFB DoResult() return []")
-        return
-    
-    tagMapInfo = eval(funResult[0])
-    backFBID = int(funResult[1]) # 返回的切图线路id(0~N)
-    notifyMark = funResult[2]
-    hpPer = funResult[3]
-    mapID = tagMapInfo[0] # 请求的切图id
-    funcLineID = tagMapInfo[1]   # 请求的场次线路id(0~6)
-    GameWorld.Log("GY_Query_EnterFB DoResult() mapID=%s,funcLineID=%s,backFBID=%s,hpPer=%s" % (mapID, funcLineID, backFBID, hpPer), curPlayer.GetPlayerID())
-    
-    if backFBID == -1: # 未找到可进入的分线,则返回,提示人数已满
-        PlayerControl.NotifyCode(curPlayer, notifyMark)
-        return
-    
-    if curPlayer.GetMapID() == mapID:
-        #已在该地图就不让进了
-        return
-    
-    # 非协助玩家进入需要判断boss剩余血量是否允许进入
-    if hpPer >= 0 and not PlayerControl.GetAssistTagPlayerID(curPlayer):
-        minHPPer = 15
-        if hpPer < minHPPer:
-            GameWorld.DebugLog("boss血量少于可进入的最低血量百分比,无法进入!hpPer=%s,minHPPer=%s" % (hpPer, minHPPer))
-            PlayerControl.NotifyCode(curPlayer, "DemonJar_Text4")
-            return
-        
-    # 请求进入FB点
-    ipyEnterPosInfo = FBCommon.GetFBLineEnterPosInfo(mapID, funcLineID)
-    retPos = FBLogic.OnGetFBEnterPos(curPlayer, mapID, funcLineID, ipyEnterPosInfo, tick)
-    
-    if not retPos:
-        return
-    
-    PlayerControl.PlayerResetWorldPosFB(curPlayer, mapID, retPos[0], retPos[1], backFBID, funcLineID=funcLineID)
-    return
-
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_EnterFBSetFaction.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_EnterFBSetFaction.py
deleted file mode 100644
index 756b9fa..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_EnterFBSetFaction.py
+++ /dev/null
@@ -1,69 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-#-------------------------------------------------------------------------------
-#
-##@package Player.RemoteQuery.GY_Query_EnterFBSetFaction
-#
-# @todo:进入副本且设置阵营
-# @author hxp
-# @date 2015-10-22
-# @version 1.0
-#
-# 详细描述: 进入副本且设置阵营
-#
-#---------------------------------------------------------------------
-#"""Version = 2015-10-22 23:00"""
-#---------------------------------------------------------------------
-
-
-#导入
-import FBLogic
-import GameWorld
-import PlayerControl
-import FBCommon
-#---------------------------------------------------------------------
-#全局变量
-#---------------------------------------------------------------------
-
-
-#---------------------------------------------------------------------
-#逻辑实现
-## 请求逻辑
-#  @param query_Type 请求类型
-#  @param query_ID 请求的玩家ID
-#  @param packCMDList 发包命令 [ ]
-#  @param tick 当前时间
-#  @return "True" or "False" or ""
-#  @remarks 函数详细说明.
-def DoLogic(query_Type, query_ID, packCMDList, tick):
-    return
-#---------------------------------------------------------------------
-
-
-#执行结果
-## 执行结果
-#  @param curPlayer 发出请求的玩家
-#  @param callFunName 功能名称
-#  @param funResult 查询的结果
-#  @param tick 当前时间
-#  @return None
-#  @remarks 函数详细说明.
-def DoResult(curPlayer, callFunName, funResult, tick):
-    mapID, lineID, faction = eval(funResult)
-    GameWorld.Log("GY_Query_EnterFBSetFaction %s" % str(funResult), curPlayer.GetPlayerID())
-    
-    curPlayer.SetFaction(faction)
-    
-    # 请求进入FB点
-    ipyEnterPosInfo = FBCommon.GetFBLineEnterPosInfo(mapID, lineID)
-    retPos = FBLogic.OnGetFBEnterPos(curPlayer, mapID, lineID, ipyEnterPosInfo, tick)
-    
-    if not retPos:
-        return
-    
-    # 传送逻辑
-    PlayerControl.PlayerResetWorldPosFB(curPlayer, mapID, retPos[0], retPos[1], 0)
-    return
-
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_EnterFBTeamAsk.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_EnterFBTeamAsk.py
deleted file mode 100644
index e246d1b..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_EnterFBTeamAsk.py
+++ /dev/null
@@ -1,91 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-##@package Player.RemoteQuery.GY_Query_EnterFBTeamAsk
-#
-# @todo:组队进入副本请求
-# @author hxp
-# @date 2017-11-09
-# @version 1.0
-#
-# 详细描述: 队长发起进入副本后,验证各个队员是否可以进入该副本
-#
-#-------------------------------------------------------------------------------
-#"""Version = 2017-11-09 22:00"""
-#-------------------------------------------------------------------------------
-
-#导入
-import FBLogic
-import PlayerControl
-import GameWorld
-import FBCommon
-import ChConfig
-#---------------------------------------------------------------------
-
-
-#---------------------------------------------------------------------
-#逻辑实现
-## 请求逻辑
-#  @param query_Type 请求类型
-#  @param query_ID 请求的玩家ID
-#  @param packCMDList 发包命令 [ ]
-#  @param tick 当前时间
-#  @return "True" or "False" or ""
-#  @remarks 函数详细说明.
-def DoLogic(query_Type, query_ID, packCMDList, tick):
-    GameWorld.Log("GY_Query_EnterFBTeamAsk DoLogic() query_Type=%s,query_ID=%s,packCMDList=%s,tick=%s" % 
-                  (query_Type, query_ID, packCMDList, tick))
-    
-    curFindPlayer = GameWorld.GetPlayerManager().FindPlayerByID(query_ID)
-    if not curFindPlayer or curFindPlayer.IsEmpty():
-        return ""
-    
-    if not packCMDList or len(packCMDList) != 5:
-        GameWorld.Log("    DoLogic() return []")
-        return ""
-    
-    #teamID, askVer, askType, askMapID, askMapEx
-    askMapID = packCMDList[3]  # 目标地图id
-    askMapEx = packCMDList[4]  # 目标地图线路属性,从0开始
-    
-    #进入副本通用检查
-    fbIpyData = FBCommon.GetFBIpyData(askMapID)
-    fbLineIpyData = FBCommon.GetFBLineIpyData(askMapID, askMapEx)
-    ret = PlayerControl.CheckMoveToFB(curFindPlayer, askMapID, askMapEx, fbIpyData, fbLineIpyData, tick, False, True)
-    return packCMDList + [query_ID, ret, curFindPlayer.GetName()]
-
-
-#执行结果
-## 执行结果
-#  @param curPlayer 发出请求的玩家
-#  @param callFunName 功能名称
-#  @param funResult 查询的结果
-#  @param tick 当前时间
-#  @return None
-#  @remarks 函数详细说明.
-def DoResult(curPlayer, callFunName, funResult, tick):
-    resultInfo = eval(funResult)
-    mapID, lineID = resultInfo[:2]
-    averageLV, maxLV, playerCnt = 0, 0, 0
-    if len(resultInfo) == 5:
-        averageLV, maxLV, playerCnt = resultInfo[2:5]
-    GameWorld.Log("GY_Query_EnterFBTeamAsk mapID=%s,lineID=%s,averageLV=%s,maxLV=%s,playerCnt=%s,funResult=%s" 
-                  % (mapID, lineID, averageLV, maxLV, playerCnt, str(funResult)), curPlayer.GetPlayerID())
-    
-    if maxLV > 0:
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_TeamFBAverageLV, averageLV)
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_TeamFBMaxLV, maxLV)
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_TeamFBPlayerCnt, playerCnt)
-        
-    # 请求进入FB点
-    ipyEnterPosInfo = FBCommon.GetFBLineEnterPosInfo(mapID, lineID)
-    retPos = FBLogic.OnGetFBEnterPos(curPlayer, mapID, lineID, ipyEnterPosInfo, tick)
-    
-    if not retPos:
-        return
-    
-    # 传送逻辑
-    PlayerControl.PlayerResetWorldPosFB(curPlayer, mapID, retPos[0], retPos[1], funcLineID=lineID)
-    return
-
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_FamilyCTGAssist.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_FamilyCTGAssist.py
deleted file mode 100644
index a6f419a..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_FamilyCTGAssist.py
+++ /dev/null
@@ -1,49 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-##@package Player.RemoteQuery.GY_Query_FamilyCTGAssist
-#
-# @todo:仙盟充值互助
-# @author hxp
-# @date 2024-06-21
-# @version 1.0
-#
-# 详细描述: 仙盟充值互助
-#
-#-------------------------------------------------------------------------------
-#"""Version = 2024-06-21 19:30"""
-#-------------------------------------------------------------------------------
-
-import GameWorld
-import PlayerActFamilyCTGAssist
-import ChConfig
-
-#---------------------------------------------------------------------
-#逻辑实现
-## 请求逻辑
-#  @param query_Type 请求类型
-#  @param query_ID 请求的玩家ID
-#  @param packCMDList 发包命令 [ ]
-#  @param tick 当前时间
-#  @return "True" or "False" or ""
-#  @remarks 函数详细说明.
-def DoLogic(query_Type, query_ID, packCMDList, tick):
-    return ""
-
-#---------------------------------------------------------------------
-#执行结果
-## 执行结果
-#  @param curPlayer 发出请求的玩家
-#  @param callFunName 功能名称
-#  @param funResult 查询的结果
-#  @param tick 当前时间
-#  @return None
-#  @remarks 函数详细说明.
-def DoResult(curPlayer, callFunName, funResult, tick):
-    curPlayer.SetTickByType(ChConfig.TYPE_Player_Tick_FamilyCTGAssist, 0)
-    GameWorld.DebugLog("GY_Query_FamilyCTGAssist DoResult %s" % str(funResult), curPlayer.GetPlayerID())
-    if funResult != "":
-        PlayerActFamilyCTGAssist.GameServer_FamilyCTGAssist(curPlayer, eval(funResult), tick)
-    return
-
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_FamilyGCZ.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_FamilyGCZ.py
deleted file mode 100644
index 645f194..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_FamilyGCZ.py
+++ /dev/null
@@ -1,47 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-##@package Player.RemoteQuery.GY_Query_FamilyGCZ
-#
-# @todo:仙盟攻城战
-# @author hxp
-# @date 2025-04-09
-# @version 1.0
-#
-# 详细描述: 仙盟攻城战
-#
-#-------------------------------------------------------------------------------
-#"""Version = 2025-04-09 16:00"""
-#-------------------------------------------------------------------------------
-
-import GameWorld
-import PlayerActFamilyGCZ
-
-#---------------------------------------------------------------------
-#逻辑实现
-## 请求逻辑
-#  @param query_Type 请求类型
-#  @param query_ID 请求的玩家ID
-#  @param packCMDList 发包命令 [ ]
-#  @param tick 当前时间
-#  @return "True" or "False" or ""
-#  @remarks 函数详细说明.
-def DoLogic(query_Type, query_ID, packCMDList, tick):
-    return ""
-
-#---------------------------------------------------------------------
-#执行结果
-## 执行结果
-#  @param curPlayer 发出请求的玩家
-#  @param callFunName 功能名称
-#  @param funResult 查询的结果
-#  @param tick 当前时间
-#  @return None
-#  @remarks 函数详细说明.
-def DoResult(curPlayer, callFunName, funResult, tick):
-    GameWorld.DebugLog("GY_Query_FamilyGCZ DoResult %s" % str(funResult), curPlayer.GetPlayerID())
-    if funResult != "":
-        PlayerActFamilyGCZ.GameServer_FamilyGCZ(curPlayer, eval(funResult), tick)
-    return
-
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_GetPlayerLVAward.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_GetPlayerLVAward.py
deleted file mode 100644
index 73a24ea..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_GetPlayerLVAward.py
+++ /dev/null
@@ -1,55 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-##@package Player.RemoteQuery.GY_Query_GetPlayerLVAward
-#
-# @todo:等级奖励领奖
-# @author xdh
-# @date 2018-03-07
-# @version 1.0
-#
-# 详细描述: 等级奖励领奖
-#
-#-------------------------------------------------------------------------------
-#"""Version = 2018-03-07 17:30"""
-#-------------------------------------------------------------------------------
-
-import GameWorld
-import PlayerLVAward
-import ChConfig
-
-#---------------------------------------------------------------------
-
-
-#---------------------------------------------------------------------
-#逻辑实现
-## 请求逻辑
-#  @param query_Type 请求类型
-#  @param query_ID 请求的玩家ID
-#  @param packCMDList 发包命令 [ ]
-#  @param tick 当前时间
-#  @return "True" or "False" or ""
-#  @remarks 函数详细说明.
-def DoLogic(query_Type, query_ID, packCMDList, tick):
-    return ""
-
-#---------------------------------------------------------------------
-#执行结果
-## 执行结果
-#  @param curPlayer 发出请求的玩家
-#  @param callFunName 功能名称
-#  @param funResult 查询的结果
-#  @param tick 当前时间
-#  @return None
-#  @remarks 函数详细说明.
-def DoResult(curPlayer, callFunName, funResult, tick):
-    GameWorld.DebugLog("GY_Query_GetPlayerLVAward funResult=%s" % funResult)
-    curPlayer.SetDict(ChConfig.Def_PlayerKey_LvAwardQueryState, 0)
-    awardID = eval(funResult)
-    if awardID == None:
-        return
-    PlayerLVAward.GiveLVAward(curPlayer, awardID)
-    return
-
-
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_GiveAward.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_GiveAward.py
deleted file mode 100644
index 33ce9c4..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_GiveAward.py
+++ /dev/null
@@ -1,52 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-##@package Player.RemoteQuery.GY_Query_GiveAward
-#
-# @todo:给奖励
-# @author hxp
-# @date 2024-07-02
-# @version 1.0
-#
-# 详细描述: 给奖励
-#
-#-------------------------------------------------------------------------------
-#"""Version = 2024-07-02 16:30"""
-#-------------------------------------------------------------------------------
-
-import PlayerControl
-import ItemControler
-import GameWorld
-
-#逻辑实现
-## 玩家请求领取奖励
-#  @param query_Type 请求类型
-#  @param query_ID 请求的玩家ID
-#  @param packCMDList 发包命令
-#  @param tick 当前时间
-#  @return "True" or "False" or ""
-#  @remarks 函数详细说明.
-def DoLogic(query_Type, query_ID, packCMDList, tick):
-    return ''
-
-#---------------------------------------------------------------------
-## 执行结果
-#  @param curPlayer 发出请求的玩家
-#  @param callFunName 功能名称
-#  @param funResult 查询的结果
-#  @param tick 当前时间
-#  @return None
-#  @remarks 函数详细说明.
-def DoResult(curPlayer, callFunName, funResult, tick):
-    GameWorld.Log("GY_Query_GiveAward funResult=%s" % str(funResult), curPlayer.GetPlayerID())
-    if funResult == "":
-        return
-    eventName, moneyInfo, itemList, drDict = eval(funResult)
-    
-    if moneyInfo:
-        for moneyType, moneyValue in moneyInfo.items():
-            PlayerControl.GiveMoney(curPlayer, moneyType, moneyValue, eventName, drDict)
-            
-    ItemControler.GivePlayerItemOrMail(curPlayer, itemList, event=[eventName, False, drDict])
-    return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_LoginData.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_LoginData.py
deleted file mode 100644
index 8ad47a3..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_LoginData.py
+++ /dev/null
@@ -1,118 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#---------------------------------------------------------------------
-#
-#---------------------------------------------------------------------
-##@package GY_Query_LoginData
-# @todo: 查询平台登陆信息
-#
-# @author: Alee
-# @date 2014-03-05 16:00
-# @version 1.6
-#
-# @note: 查询平台登陆信息
-# @change: "2014-03-13 18:40" Alee 迅雷登陆方式和记录修改
-# @change: "2014-08-14 11:00" hxp 登录信息处理
-# @change: "2015-06-08 20:30" hxp 增加channelCode
-# @change: "2015-07-13 14:00" hxp 增加黄/蓝钻支持
-# @change: "2016-07-18 19:00" hxp 增加account_type
-# @change: "2016-09-23 21:00" hxp tencent平台设置来源pf识别
-#---------------------------------------------------------------------
-#"""Version = 2016-09-23 21:00""" 
-#---------------------------------------------------------------------
-import GameWorld
-import DataRecordPack
-import PlayerControl
-import ChConfig
-#---------------------------------------------------------------------
-
-## XX
-#  @param query_Type 请求类型
-#  @param query_ID 请求的玩家ID
-#  @param packCMDList 发包命令
-#  @param tick 当前时间
-#  @return "True" or "False" or ""
-def DoLogic(query_Type, query_ID, packCMDList, tick):
-    return ''
-
-
-## 登陆信息
-#  @param curPlayer 发出请求的玩家
-#  @param callFunName 功能名称
-#  @param funResult 查询的结果
-#  @param tick 当前时间
-#  @return None
-def DoResult(curPlayer, callFunName, funResult, tick):
-    playerID = curPlayer.GetPlayerID()
-    GameWorld.Log("GY_Query_LoginData funResult=%s" % funResult, playerID)
-    result = eval(funResult)
-    if result == []:
-        return
-
-    if result[0] == 'xunlei':
-        #[xunlei,迅雷VIP,VIP等级,金卡VIP,金卡等级, 登录客户端类型]
-#        PlayerThunder.SetIsThunderPlayer(curPlayer, 1)
-#        PlayerThunder.SetIsThunderVIP(curPlayer, result[1])
-#        PlayerThunder.SetThunderVIPLV(curPlayer, result[2])
-#        PlayerThunder.SetIsThunderGoldVIP(curPlayer, result[3])
-#        PlayerThunder.SetThunderGoldVIPLV(curPlayer, result[4])
-#        PlayerThunder.Sync_ThunderPlayerInfo(curPlayer)
-#        
-#        PlayerThunder.DoThunderPlayerLogin(curPlayer)
-#        PlayerThunder.DoThunderPlayerOnDay(curPlayer)
-#        
-#        if curPlayer.GetDictByKey("ThunderLogin") == 1:
-#            DataRecordPack.DR_ThunderFirstLogin(curPlayer, result[5])
-#        
-#        DataRecordPack.DR_ThunderPlayerLogin(curPlayer, result[5])
-        return
-    
-    # 设置客户端登录类型
-    clientType = int(result[0])
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_LoginClientType, clientType)
-    
-    channelCode = result[1]
-    GameWorld.SetPlayerChannelCode(curPlayer, channelCode)
-    
-    pid = result[2]
-    platform = result[3]
-    account_type = result[4]
-        
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_PlayerFromPID, pid)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_Account_Type, account_type)
-    
-    if len(result) <= 5:
-        __ResetOperateInfo(curPlayer)
-        return
-    
-    extendInfo = result[5:]
-    # 当 pf 为 qzone、pengyou、qplus 时,发送黄钻信息
-    if platform in ["qzone", "pengyou", "qplus"]:
-        isYellowVIP, isYellowYearVIP, isYellowHighVIP, yellowVIPLV = extendInfo
-        operateInfo = int("%02d%s%s%s" % (yellowVIPLV, isYellowHighVIP, isYellowYearVIP, isYellowVIP))
-        curPlayer.SetOperateInfo(operateInfo)
-        GameWorld.Log("    platform=%s, SetPlatVIPData=%s" % (platform, operateInfo), playerID)
-    
-    # 当 pf 为 qqgame、3366 时,发送蓝钻信息
-    elif platform in ["qqgame", "3366"]:
-        isBlueVIP, isBlueYearVIP, isBlueHighVIP, blueVIPLV = extendInfo
-        platVIPData = int("%02d%s%s%s" % (blueVIPLV, isBlueHighVIP, isBlueYearVIP, isBlueVIP))
-        curPlayer.SetOperateInfo(platVIPData)
-        GameWorld.Log("    platform=%s, SetPlatVIPData=%s" % (platform, platVIPData), playerID)
-        
-    else:
-        __ResetOperateInfo(curPlayer)
-        GameWorld.Log("    platform=%s, SetPlatVIPData=0" % platform, playerID)
-        
-    
-    return
-
-## 重置玩家运营平台信息
-#  @param curPlayer 
-#  @return None
-def __ResetOperateInfo(curPlayer):
-    if curPlayer.GetOperateInfo() != 0:
-        curPlayer.SetOperateInfo(0)
-        GameWorld.Log("    __ResetOperateInfo=0", curPlayer.GetPlayerID())
-    return
-
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_Love.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_Love.py
deleted file mode 100644
index b0fe747..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_Love.py
+++ /dev/null
@@ -1,55 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-##@package Player.RemoteQuery.GY_Query_Love
-#
-# @todo:情缘
-# @author hxp
-# @date 2021-11-09
-# @version 1.0
-#
-# 详细描述: 情缘
-#
-#-------------------------------------------------------------------------------
-#"""Version = 2021-11-09 20:00"""
-#-------------------------------------------------------------------------------
-
-import GameWorld
-import PlayerLove
-import ChConfig
-
-#------------------------------------------------------------------------------ 
-## 跨服赛报名调用接口
-#  @param query_Type 请求类型
-#  @param query_ID 请求的玩家ID
-#  @param packCMDList 发包命令
-#  @param tick 当前时间
-#  @return "True" or "False" or ""
-#  @remarks 函数详细说明.
-def DoLogic(query_Type, query_ID, packCMDList, tick):
-    
-    curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(query_ID)
-    if not curPlayer or curPlayer.IsEmpty():
-        return
-    
-    GameWorld.Log("GameServer_Love_DoLogic msgData=%s" % (packCMDList), query_ID)
-    PlayerLove.GameServer_Love_DoLogic(curPlayer, packCMDList)
-    return
-
-#------------------------------------------------------------------------------ 
-## 执行结果
-#  @param curPlayer 发出请求的玩家
-#  @param callFunName 功能名称
-#  @param funResult 查询的结果
-#  @param tick 当前时间
-#  @return None
-#  @remarks 函数详细说明.
-def DoResult(curPlayer, callFunName, funResult, tick):
-    curPlayer.SetTickByType(ChConfig.TYPE_Player_Tick_Love, 0)
-    msgData = eval(funResult)
-    playerID = curPlayer.GetPlayerID()
-    GameWorld.Log("GameServer_Love_DoResult msgData=%s" % (msgData), playerID)
-    PlayerLove.GameServer_Love_DoResult(curPlayer, msgData)
-    return
-
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_LuckyCloudBuy.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_LuckyCloudBuy.py
deleted file mode 100644
index c066eca..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_LuckyCloudBuy.py
+++ /dev/null
@@ -1,51 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-##@package Player.RemoteQuery.GY_Query_LuckyCloudBuy
-#
-# @todo:幸运云购
-# @author hxp
-# @date 2021-10-21
-# @version 1.0
-#
-# 详细描述: 幸运云购
-#
-#-------------------------------------------------------------------------------
-#"""Version = 2021-10-21 17:00"""
-#-------------------------------------------------------------------------------
-
-import GameWorld
-import PlayerLuckyCloudBuy
-import ChConfig
-
-#------------------------------------------------------------------------------ 
-## 跨服赛报名调用接口
-#  @param query_Type 请求类型
-#  @param query_ID 请求的玩家ID
-#  @param packCMDList 发包命令
-#  @param tick 当前时间
-#  @return "True" or "False" or ""
-#  @remarks 函数详细说明.
-def DoLogic(query_Type, query_ID, packCMDList, tick): 
-    return
-
-
-#------------------------------------------------------------------------------ 
-## 执行结果
-#  @param curPlayer 发出请求的玩家
-#  @param callFunName 功能名称
-#  @param funResult 查询的结果
-#  @param tick 当前时间
-#  @return None
-#  @remarks 函数详细说明.
-def DoResult(curPlayer, callFunName, funResult, tick):
-    curPlayer.SetTickByType(ChConfig.TYPE_Player_Tick_LuckyCloudBuy, 0)
-    msgData = eval(funResult)
-    playerID = curPlayer.GetPlayerID()
-    GameWorld.Log("GY_Query_LuckyCloudBuy msgData=%s" % (msgData), playerID)
-    PlayerLuckyCloudBuy.GameServer_LuckyCloudBuy(curPlayer, msgData)
-    return
-    
-    
-    
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_NPCCnt.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_NPCCnt.py
deleted file mode 100644
index be16897..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_NPCCnt.py
+++ /dev/null
@@ -1,75 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-#-------------------------------------------------------------------------------
-#
-##@package Player.RemoteQuery.GY_Query_NPCCnt
-#
-# @todo:查询地图NPC数量
-# @author xdh
-# @date 2018-08-20
-# @version 1.0
-#
-# 详细描述: 查询地图NPC数量
-#
-#---------------------------------------------------------------------
-"""Version = 2018-08-20 17:00"""
-
-
-#导入
-import NPCCommon
-import GameWorld
-#---------------------------------------------------------------------
-#全局变量
-#---------------------------------------------------------------------
-
-
-#---------------------------------------------------------------------
-#逻辑实现
-## 请求逻辑
-#  @param query_Type 请求类型
-#  @param query_ID 请求的玩家ID
-#  @param packCMDList 发包命令 [ ]
-#  @param tick 当前时间
-#  @return "True" or "False" or ""
-#  @remarks 函数详细说明.
-def DoLogic(query_Type, query_ID, packCMDList, tick):
-    GameWorld.DebugLog("GY_Query_NPCCnt DoLogic() query_Type=%s,query_ID=%s,packCMDList=%s,tick=%s" % \
-                  (query_Type, query_ID, packCMDList, tick))
-    
-    if not packCMDList or len(packCMDList) < 3:
-        GameWorld.DebugLog("    DoLogic() return []")
-        return []
-    
-    tagMapID = packCMDList[0]  # 目标地图id
-    tagLineID = packCMDList[1]  # 线路id
-    queryNPCIDList = packCMDList[2]  # 查询的NPCID列表
-    
-    npcInfoDict = NPCCommon.GetNPCCntInfo(queryNPCIDList, tick)
-
-    return [tagMapID, npcInfoDict]
-#---------------------------------------------------------------------
-
-
-#执行结果
-## 执行结果
-#  @param curPlayer 发出请求的玩家
-#  @param callFunName 功能名称
-#  @param funResult 查询的结果
-#  @param tick 当前时间
-#  @return None
-#  @remarks 函数详细说明.
-def DoResult(curPlayer, callFunName, funResult, tick):
-    GameWorld.DebugLog("GY_Query_NPCCnt DoResult() funResult=%s" % str(funResult))
-    #还原格式 '[]' -> []
-    funResult = eval(funResult)
-    if not funResult or len(funResult) < 2:
-        return
-    
-    tagMapID = funResult[0]
-    npcInfoDict = funResult[1]
-    # 发包
-    NPCCommon.SyncNPCCntInfo(curPlayer, tagMapID, npcInfoDict)
-    return
-
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_NPCCntCross.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_NPCCntCross.py
deleted file mode 100644
index 326eaec..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_NPCCntCross.py
+++ /dev/null
@@ -1,60 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-##@package Player.RemoteQuery.GY_Query_NPCCntCross
-#
-# @todo:查询跨服地图NPC数量信息
-# @author hxp
-# @date 2019-01-11
-# @version 1.0
-#
-# 详细描述: 查询跨服地图NPC数量信息
-#
-#-------------------------------------------------------------------------------
-#"""Version = 2019-01-11 20:30"""
-#-------------------------------------------------------------------------------
-
-import NPCCommon
-import GameWorld
-import ShareDefine
-
-#---------------------------------------------------------------------
-#全局变量
-#---------------------------------------------------------------------
-
-
-#---------------------------------------------------------------------
-#逻辑实现
-## 请求逻辑
-#  @param query_Type 请求类型
-#  @param query_ID 请求的玩家ID
-#  @param packCMDList 发包命令 [ ]
-#  @param tick 当前时间
-#  @return "True" or "False" or ""
-#  @remarks 函数详细说明.
-def DoLogic(query_Type, query_ID, packCMDInfo, tick):
-    GameWorld.DebugLog("GY_Query_NPCCntCross %s" % (packCMDInfo))
-    
-    serverGroupID = packCMDInfo["ServerGroupID"]
-    copyMapID = packCMDInfo["CopyMapID"]
-    
-    npcCntDict = NPCCommon.GetNPCCntInfo([], tick, copyMapID) # 跨服的一次查全部,都是遍历一遍,不过滤npcID
-    retMsg = {"Result":npcCntDict}
-    retMsg.update(packCMDInfo)
-    GameWorld.SendMsgToClientServer(ShareDefine.CrossServerMsg_NPCInfoRet, retMsg, [serverGroupID])
-    return
-#---------------------------------------------------------------------
-
-
-#执行结果
-## 执行结果
-#  @param curPlayer 发出请求的玩家
-#  @param callFunName 功能名称
-#  @param funResult 查询的结果
-#  @param tick 当前时间
-#  @return None
-#  @remarks 函数详细说明.
-def DoResult(curPlayer, callFunName, funResult, tick):
-    return
-
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_NPCInfo.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_NPCInfo.py
deleted file mode 100644
index 1c3115a..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_NPCInfo.py
+++ /dev/null
@@ -1,84 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-#-------------------------------------------------------------------------------
-#
-##@package Player.RemoteQuery.GY_Query_NPCInfo
-#
-# @todo:查询地图NPC信息
-# @author hxp
-# @date 2014-12-17
-# @version 1.1
-#
-# @change: "2015-01-16 17:00" hxp 地图信息查询增加线路id
-#
-# 详细描述: 查询地图NPC信息
-#
-#---------------------------------------------------------------------
-"""Version = 2015-01-16 17:00"""
-
-
-#导入
-import NPCCommon
-import GameWorld
-import IPY_GameWorld
-#---------------------------------------------------------------------
-#全局变量
-#---------------------------------------------------------------------
-
-
-#---------------------------------------------------------------------
-#逻辑实现
-## 请求逻辑
-#  @param query_Type 请求类型
-#  @param query_ID 请求的玩家ID
-#  @param packCMDList 发包命令 [ ]
-#  @param tick 当前时间
-#  @return "True" or "False" or ""
-#  @remarks 函数详细说明.
-def DoLogic(query_Type, query_ID, packCMDList, tick):
-    GameWorld.DebugLog("GY_Query_NPCInfo DoLogic() query_Type=%s,query_ID=%s,packCMDList=%s,tick=%s" % \
-                  (query_Type, query_ID, packCMDList, tick))
-    
-    if not packCMDList or len(packCMDList) < 3:
-        GameWorld.DebugLog("    DoLogic() return []")
-        return []
-    
-    tagMapID = packCMDList[0]  # 目标地图id
-    tagLineID = packCMDList[1]  # 线路id
-    queryNPCIDList = packCMDList[2]  # 查询的NPCID列表
-    
-    npcInfoDict = NPCCommon.GetNPCInfo(queryNPCIDList, tick)
-    gameWorld = IPY_GameWorld.IPY_GameWorld(tagLineID)
-    playerManager = gameWorld.GetMapCopyPlayerManagerByFbIndex(tagLineID)
-    playerCnt = 0
-    if playerManager:
-        playerCnt = playerManager.GetPlayerCount()
-    
-    return [tagMapID, playerCnt, npcInfoDict]
-#---------------------------------------------------------------------
-
-
-#执行结果
-## 执行结果
-#  @param curPlayer 发出请求的玩家
-#  @param callFunName 功能名称
-#  @param funResult 查询的结果
-#  @param tick 当前时间
-#  @return None
-#  @remarks 函数详细说明.
-def DoResult(curPlayer, callFunName, funResult, tick):
-    GameWorld.DebugLog("GY_Query_NPCInfo DoResult() funResult=%s" % str(funResult))
-    #还原格式 '[]' -> []
-    funResult = eval(funResult)
-    if not funResult or len(funResult) < 3:
-        return
-    
-    tagMapID = funResult[0]
-    playerCnt = funResult[1]
-    npcInfoDict = funResult[2]
-    # 发包
-    NPCCommon.SyncNPCInfo(curPlayer, tagMapID, playerCnt, npcInfoDict)
-    return
-
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_OpenFB.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_OpenFB.py
deleted file mode 100644
index 3dbeb61..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_OpenFB.py
+++ /dev/null
@@ -1,74 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-##@package Player.RemoteQuery.GY_Query_OpenFB
-#
-# @todo:开启副本线路
-# @author hxp
-# @date 2019-04-11
-# @version 1.0
-#
-# 详细描述: 开启副本线路
-#
-#-------------------------------------------------------------------------------
-#"""Version = 2019-04-11 14:30"""
-#-------------------------------------------------------------------------------
-
-import GameWorld
-import IPY_GameWorld
-import PyGameData
-
-
-#逻辑实现
-## 请求逻辑
-#  @param query_Type 请求类型
-#  @param query_ID 请求的玩家ID
-#  @param paramList 发包命令
-#  @param tick 当前时间
-#  @return "True" or "False" or ""
-#  @remarks 函数详细说明.
-def DoLogic(query_Type, query_ID, paramList, tick):
-    copyMapID, propertyID, funcLineDataCache = paramList
-    
-    gameWorldManager = GameWorld.GetGameWorld()
-    maxCopyCount = gameWorldManager.GetGameWorldCount()
-    if copyMapID >= maxCopyCount:
-        GameWorld.ErrLog("GY_Query_OpenFB 虚拟分线不存在! copyMapID=%s, propertyID=%s, maxCopyCount=%s" 
-                         % (copyMapID, propertyID, maxCopyCount))
-        return
-    
-    tagGameWorld = IPY_GameWorld.IPY_GameWorld(copyMapID)
-    if tagGameWorld.GetOpenState() != IPY_GameWorld.fbosClosed:
-        GameWorld.ErrLog("GY_Query_OpenFB 虚拟分线已经是开启状态! copyMapID=%s, propertyID=%s,  GetPropertyID=%s" 
-                         % (copyMapID, propertyID, tagGameWorld.GetPropertyID()))
-        return
-    
-    if tagGameWorld.GetFBFirstOpen():
-        GameWorld.ErrLog("GY_Query_OpenFB 虚拟分线已经在开启中! copyMapID=%s, propertyID=%s,  GetPropertyID=%s" 
-                         % (copyMapID, propertyID, tagGameWorld.GetPropertyID()))
-        return
-    
-    GameWorld.Log("GY_Query_OpenFB copyMapID=%s, propertyID=%s" % (copyMapID, propertyID))
-    tagGameWorld.SetFBFirstOpen(1) # 开启副本
-    tagGameWorld.SetPropertyID(propertyID)
-    if funcLineDataCache:
-        mapID = gameWorldManager.GetRealMapID()
-        key = (mapID, copyMapID)
-        PyGameData.g_crossFuncLineDataCache[key] = funcLineDataCache
-    return ''
-
-                
-#---------------------------------------------------------------------
-#执行结果
-## 执行结果
-#  @param curPlayer 发出请求的玩家
-#  @param callFunName 功能名称
-#  @param funResult 查询的结果
-#  @param tick 当前时间
-#  @return None
-#  @remarks 函数详细说明.
-def DoResult(curPlayer, callFunName, funResult, tick):
-    return
-
-
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_OpenFBEx.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_OpenFBEx.py
deleted file mode 100644
index b330dbe..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_OpenFBEx.py
+++ /dev/null
@@ -1,71 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-##@package Player.RemoteQuery.GY_Query_OpenFBEx
-#
-# @todo:开启副本线路
-# @author hxp
-# @date 2022-09-21
-# @version 1.0
-#
-# 详细描述: 开启副本线路
-#
-#-------------------------------------------------------------------------------
-#"""Version = 2022-09-21 21:30"""
-#-------------------------------------------------------------------------------
-
-import GameWorld
-import IPY_GameWorld
-
-#逻辑实现
-## 请求逻辑
-#  @param query_Type 请求类型
-#  @param query_ID 请求的玩家ID
-#  @param paramList 发包命令
-#  @param tick 当前时间
-#  @return "True" or "False" or ""
-#  @remarks 函数详细说明.
-def DoLogic(query_Type, query_ID, paramList, tick):
-    
-    gameWorldManager = GameWorld.GetGameWorld()
-    maxCopyCount = gameWorldManager.GetGameWorldCount()
-    GameWorld.Log("GY_Query_OpenFBEx! maxCopyCount=%s, paramList=%s" % (maxCopyCount, paramList))
-    
-    for copyMapID, propertyID in paramList:
-        if copyMapID >= maxCopyCount:
-            GameWorld.ErrLog("GY_Query_OpenFBEx 虚拟分线不存在! copyMapID=%s, propertyID=%s, maxCopyCount=%s" 
-                             % (copyMapID, propertyID, maxCopyCount))
-            continue
-        
-        tagGameWorld = IPY_GameWorld.IPY_GameWorld(copyMapID)
-        if tagGameWorld.GetOpenState() != IPY_GameWorld.fbosClosed:
-            GameWorld.ErrLog("GY_Query_OpenFBEx 虚拟分线已经是开启状态! copyMapID=%s, propertyID=%s, GetPropertyID=%s" 
-                             % (copyMapID, propertyID, tagGameWorld.GetPropertyID()))
-            continue
-        
-        if tagGameWorld.GetFBFirstOpen():
-            GameWorld.ErrLog("GY_Query_OpenFBEx 虚拟分线已经在开启中! copyMapID=%s, propertyID=%s, GetPropertyID=%s" 
-                             % (copyMapID, propertyID, tagGameWorld.GetPropertyID()))
-            continue
-        
-        GameWorld.Log("GY_Query_OpenFBEx copyMapID=%s, propertyID=%s" % (copyMapID, propertyID))
-        tagGameWorld.SetFBFirstOpen(1) # 开启副本
-        tagGameWorld.SetPropertyID(propertyID)
-        
-    return ''
-
-                
-#---------------------------------------------------------------------
-#执行结果
-## 执行结果
-#  @param curPlayer 发出请求的玩家
-#  @param callFunName 功能名称
-#  @param funResult 查询的结果
-#  @param tick 当前时间
-#  @return None
-#  @remarks 函数详细说明.
-def DoResult(curPlayer, callFunName, funResult, tick):
-    return
-
-
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_SetPlayerAttr.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_SetPlayerAttr.py
deleted file mode 100644
index b4781be..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_SetPlayerAttr.py
+++ /dev/null
@@ -1,59 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-##@package Player.RemoteQuery.GY_Query_SetPlayerAttr
-#
-# @todo:设置玩家属性
-# @author hxp
-# @date 2018-12-21
-# @version 1.0
-#
-# 详细描述: 设置玩家属性
-#
-#-------------------------------------------------------------------------------
-#"""Version = 2018-12-21 18:00"""
-#-------------------------------------------------------------------------------
-
-import GameWorld
-import PlayerControl
-import CrossRealmPlayer
-
-## 执行结果
-#  @param curPlayer 发出请求的玩家
-#  @param callFunName 功能名称
-#  @param funResult 查询的结果
-#  @param tick 当前时间
-#  @return None
-#  @remarks 函数详细说明.
-def DoResult(curPlayer, callFunName, funResult, tick):
-    if not funResult:
-        return
-    setInfo = eval(funResult)
-    if not isinstance(setInfo, list) or len(setInfo) < 2:
-        return
-    
-    attrName, value = setInfo[:2]
-    if hasattr(curPlayer, attrName):
-        # 要在更新值之前处理
-        if attrName == "SetExAttr5" and not GameWorld.IsCrossServer():
-            if value:
-                CrossRealmPlayer.DoEnterCrossRealm(curPlayer)
-            elif PlayerControl.GetCrossMapID(curPlayer):
-                CrossRealmPlayer.DoExitCrossRealm(curPlayer)
-                
-        callObj = getattr(curPlayer, attrName)
-        callObj(value)
-        GameWorld.Log("SetPlayerAttr curPlayer.%s, value=%s" % (attrName, value), curPlayer.GetPlayerID())
-        
-    elif hasattr(PlayerControl, attrName):
-        callObj = getattr(PlayerControl, attrName)
-        callObj(curPlayer, value)
-        GameWorld.Log("SetPlayerAttr PlayerControl.%s, value=%s" % (attrName, value), curPlayer.GetPlayerID())
-        
-    return 
-
-
-
-
-
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_Xiangong.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_Xiangong.py
deleted file mode 100644
index e4a2832..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_Xiangong.py
+++ /dev/null
@@ -1,48 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-##@package Player.RemoteQuery.GY_Query_Xiangong
-#
-# @todo:仙宫
-# @author hxp
-# @date 2024-09-04
-# @version 1.0
-#
-# 详细描述: 仙宫
-#
-#-------------------------------------------------------------------------------
-#"""Version = 2024-09-04 16:30"""
-#-------------------------------------------------------------------------------
-
-import GameWorld
-import PlayerXiangong
-
-#------------------------------------------------------------------------------ 
-## 跨服赛报名调用接口
-#  @param query_Type 请求类型
-#  @param query_ID 请求的玩家ID
-#  @param packCMDList 发包命令
-#  @param tick 当前时间
-#  @return "True" or "False" or ""
-#  @remarks 函数详细说明.
-def DoLogic(query_Type, query_ID, packCMDList, tick): 
-    return
-
-
-#------------------------------------------------------------------------------ 
-## 执行结果
-#  @param curPlayer 发出请求的玩家
-#  @param callFunName 功能名称
-#  @param funResult 查询的结果
-#  @param tick 当前时间
-#  @return None
-#  @remarks 函数详细说明.
-def DoResult(curPlayer, callFunName, funResult, tick):
-    GameWorld.DebugLog("GY_Query_Xiangong DoResult %s" % str(funResult), curPlayer.GetPlayerID())
-    if funResult != "":
-        PlayerXiangong.GameServer_Xiangong_DoResult(curPlayer, eval(funResult))
-    return
-
-    
-    
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py
index e6513b7..baa0492 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py
@@ -113,13 +113,7 @@
 g_luckyCloudBuyInfo = {} # 幸运云购最新一期信息
 
 g_crossZoneName = "" # 跨服分区名
-g_crossRegPlayerAttrDict = {} #跨服注册时登记的会影响战力的属性值 {playerID:[value, ...], ...}
-g_crossSyncTickDict = {} #需要同步跨服数据的玩家同步tick字典 {playerID:tick, ...}
-g_crossPlayerDictChangeInfo = {} #跨服玩家字典变化信息 {playerID:{(key, dType):value, ...}, ...}
-g_crossPlayerItemsChangeInfo = {} #跨服玩家物品变化信息 {playerID:{"背包类型-物品位":itemMD5, ...}, ...}
-g_crossPlayerSkillsChangeInfo = {} #跨服玩家技能变化信息 {playerID:[技能ID], ...}
 
-g_crossFuncLineDataCache = {} # 动态分配的跨服虚拟分线数据缓存 {(mapID, copyMapID):funcLineDataCache, ...}
 g_crossPlayerServerGroupIDInfo = {} #跨服玩家服务器组ID缓存,副本线路关闭时才释放,所以支持离线跨服玩家 {copyMapID:{playerID:serverGroupID, ...}, ...}
 g_elemntSkillDict = {} #{skillID:[attrID*100000+needValue,..]}
 
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
index 650e9f8..ee69cbf 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
@@ -184,56 +184,7 @@
 Def_Notify_WorldKey_CrossZoneName = "CrossZoneName"  # 跨服分区名
 Def_Notify_WorldKey_CrossServerTime = "CrossServerTime"  # 跨服时间
 
-Def_Notify_WorldKey_CrossPKZoneID = "CrossPKZoneID"  # 本服跨服PK所属赛区
-Def_Notify_WorldKey_CrossPKSeasonID = "CrossPKSeasonID"  # 本服跨服PK当前赛季
-Def_Notify_WorldKey_CrossPKSeasonState = "CrossPKSeasonState"  # 本服跨服PK赛季状态 0-关闭,1-开启中
-
-Def_Notify_WorldKey_CrossChampionshipState = "CrossChampionshipState"  # 跨服排位赛状态
-Def_Notify_WorldKey_CrossChampionshipStateError = "CrossChampionshipStateError"  # 跨服排位赛状态是否已经异常
-
-Def_Notify_WorldKey_LuckyCloudBuyInfo = "LuckyCloudBuyInfo"  # 本服幸运云购最新一期信息
-
 Def_Notify_WorldKey_FuncTeamMemIDInfo = "FuncTeamMemIDInfo" # 功能队伍成员ID信息
-
-CrossChampionshipState_Guess8 = 80 #8强竞猜
-CrossChampionshipState_Group64 = 641 #64强分组
-CrossChampionshipState_Enter64 = 642 #64强进场
-CrossChampionshipState_Fight64 = 643 #64强战斗
-CrossChampionshipState_Group32 = 321 #32强分组
-CrossChampionshipState_Enter32 = 322 #32强进场
-CrossChampionshipState_Fight32 = 323 #32强战斗
-CrossChampionshipState_Group16 = 161 #16强分组
-CrossChampionshipState_Enter16 = 162 #16强进场
-CrossChampionshipState_Fight16 = 163 #16强战斗
-CrossChampionshipState_Guess4 = 40 #4强竞猜
-CrossChampionshipState_Group8 = 81 #8强分组
-CrossChampionshipState_Enter8 = 82 #8强进场
-CrossChampionshipState_Fight8 = 83 #8强战斗
-CrossChampionshipState_GroupSemi = 41 #半决赛分组
-CrossChampionshipState_EnterSemi = 42 #半决赛进场
-CrossChampionshipState_FightSemi = 43 #半决赛战斗
-CrossChampionshipState_GroupFinal = 21 #决赛分组
-CrossChampionshipState_EnterFinal = 22 #决赛进场
-CrossChampionshipState_FightFinal = 23 #决赛战斗
-#跨服排位争霸赛状态流程列表,必须按顺序,中间不可跳过步骤
-CrossChampionshipStateList = [CrossChampionshipState_Guess8, 
-                              CrossChampionshipState_Group64, CrossChampionshipState_Enter64, CrossChampionshipState_Fight64,
-                              CrossChampionshipState_Group32, CrossChampionshipState_Enter32, CrossChampionshipState_Fight32,
-                              CrossChampionshipState_Group16, CrossChampionshipState_Enter16, CrossChampionshipState_Fight16,
-                              CrossChampionshipState_Guess4,
-                              CrossChampionshipState_Group8, CrossChampionshipState_Enter8, CrossChampionshipState_Fight8,
-                              CrossChampionshipState_GroupSemi, CrossChampionshipState_EnterSemi, CrossChampionshipState_FightSemi,
-                              CrossChampionshipState_GroupFinal, CrossChampionshipState_EnterFinal, CrossChampionshipState_FightFinal
-                              ]
-
-#跨服排位可进入战斗的状态信息 {状态:对应分组标识, ...}
-CrossChampionshipEnterStateInfo = {CrossChampionshipState_Enter64:64,
-                                   CrossChampionshipState_Enter32:32,
-                                   CrossChampionshipState_Enter16:16,
-                                   CrossChampionshipState_Enter8:8,
-                                   CrossChampionshipState_EnterSemi:4,
-                                   CrossChampionshipState_EnterFinal:2,
-                                   }
 
 Def_Notify_WorldKey_GameWorldBossRebornCross = 'BossRebornCross_%s_%s'   # 跨服世界boss重生, 参数为(zoneID, bossID)
 Def_Notify_WorldKey_GameWorldBossReborn = 'BossReborn_%s'   # 世界boss重生, 参数为(bossID)
@@ -256,7 +207,6 @@
 
 #运营活动表名定义
 OperationActionName_ExpRate = "ActExpRate" # 多倍经验活动
-OperationActionName_CostRebate = "ActCostRebate" # 消费返利活动
 OperationActionName_SpringSale = "ActSpringSale" # 限时特惠活动
 OperationActionName_FlashGiftbag = "ActFlashGiftbag" # 限时礼包活动
 OperationActionName_DailyGiftbag = "ActDailyGiftbag" # 每日礼包活动
@@ -266,13 +216,9 @@
 OperationActionName_FlashSale = "ActFlashSale" # 限时抢购活动
 OperationActionName_WishingWell = "ActWishingWell" # 许愿池活动
 OperationActionName_TotalRecharge = "ActTotalRecharge" # 累计充值活动
-OperationActionName_WeekParty = "ActWeekParty" # 周狂欢活动
 OperationActionName_LoginAward = "ActLoginAward" # 登录奖励活动
-OperationActionName_FeastWeekParty = "ActFeastWeekParty" # 节日巡礼狂欢活动
 OperationActionName_CollectWords = "ActCollectWords" # 集字活动
 OperationActionName_LuckyTreasure = "ActLuckyTreasure" # 幸运鉴宝活动
-OperationActionName_RechargePrize = "ActRechargePrize" # 充值返利活动(节日活动)
-OperationActionName_RechargeRebateGold = "ActRechargeRebateGold" # 充值返利仙玉活动(活动结束邮件发放,节日活动)
 OperationActionName_GrowupBuy = "ActGrowupBuy" # 成长必买活动
 OperationActionName_FeastLogin = "ActFeastLogin" # 节日登录活动
 OperationActionName_FeastWish = "ActFeastWish" # 节日祝福活动
@@ -288,19 +234,17 @@
 OperationActionName_Yunshi = "ActYunshi" # 运势活动
 OperationActionName_Lunhuidian = "ActLunhuidian" # 轮回殿活动
 #节日活动类型列表 - 该类型无视开服天,日期到了就开启
-FeastOperationActionNameList = [OperationActionName_FeastWeekParty,
-                                OperationActionName_RechargeRebateGold, OperationActionName_GrowupBuy,
+FeastOperationActionNameList = [OperationActionName_GrowupBuy,
                                 OperationActionName_FeastLogin,
                                 OperationActionName_FeastWish,
-                                OperationActionName_RechargePrize,
                                 ]
 #所有的运营活动列表,含节日活动
-OperationActionNameList = [OperationActionName_ExpRate, OperationActionName_CostRebate, 
+OperationActionNameList = [OperationActionName_ExpRate, 
                            OperationActionName_SpringSale, 
                            OperationActionName_FlashGiftbag, OperationActionName_FairyCeremony,
                            OperationActionName_RealmPoint, OperationActionName_FlashSale,
                            OperationActionName_WishingWell, OperationActionName_TotalRecharge,
-                           OperationActionName_WeekParty, OperationActionName_LoginAward, 
+                           OperationActionName_LoginAward, 
                            OperationActionName_NewFairyCeremony, OperationActionName_LuckyTreasure,
                            OperationActionName_DailyGiftbag, OperationActionName_SingleRecharge,
                            OperationActionName_CollectWords, OperationActionName_ManyDayRecharge,
@@ -316,10 +260,10 @@
 NeedWorldLVOperationActNameList = [OperationActionName_FairyCeremony, OperationActionName_WishingWell, 
                                    OperationActionName_NewFairyCeremony, OperationActionName_FlashSale,
                                    OperationActionName_TotalRecharge,
-                                   OperationActionName_CostRebate, OperationActionName_FlashGiftbag,
+                                   OperationActionName_FlashGiftbag,
                                    OperationActionName_SpringSale, OperationActionName_LuckyTreasure,
                                    OperationActionName_DailyGiftbag, OperationActionName_GrowupBuy,
-                                   OperationActionName_WeekParty, OperationActionName_Turntable,
+                                   OperationActionName_Turntable,
                                    OperationActionName_CollectWords,
                                    OperationActionName_FeastLogin,
                                    OperationActionName_FeastWish,
@@ -329,7 +273,7 @@
 
 #支持多活动分组编号的活动名
 MultiActNumOperationActNameList = [OperationActionName_TotalRecharge, OperationActionName_CollectWords,
-                                   OperationActionName_FlashGiftbag, OperationActionName_CostRebate,
+                                   OperationActionName_FlashGiftbag,
                                    OperationActionName_SpringSale, OperationActionName_FlashSale,
                                    OperationActionName_ManyDayRecharge, OperationActionName_SingleRecharge,
                                    OperationActionName_Turntable,
@@ -342,17 +286,13 @@
                                    ]
 
 #跨服运营活动表名定义
-CrossActName_CTGBillboard = "CrossActCTGBillboard" # 充值排行榜
-CrossActName_AllRecharge = "CrossActAllRecharge" # 全民充值
-CrossActName_LuckyCloudBuy = "CrossActLuckyCloudBuy" # 幸运云购
 CrossActName_Lianqi = "CrossActLianqi" # 炼器 - 跨服
 CrossActName_FamilyGCZ = "CrossActFamilyGCZ" # 仙盟攻城战
 
 #跨服运营活动列表
-CrossActNameList = [CrossActName_CTGBillboard, CrossActName_AllRecharge, CrossActName_LuckyCloudBuy, 
-                    CrossActName_Lianqi, CrossActName_FamilyGCZ]
+CrossActNameList = [CrossActName_Lianqi, CrossActName_FamilyGCZ]
 #需要锁定活动分区分配直到活动结束的跨服运营活动,即使热更分区配置,也不会改变正在活动中的分区设定,直到活动结束
-CrossActLockServerGroupIDList = [CrossActName_CTGBillboard, CrossActName_AllRecharge]
+CrossActLockServerGroupIDList = []
 
 #活动信息字典key定义
 ActKey_ID = "ID" # 活动ID,唯一标识的ID,一般是活动开启的time值
@@ -924,8 +864,8 @@
                                 Def_UniversalGameRecType_ActWorldLVLimitInfo, # 运营活动世界等级限制开启信息 18
                                 Def_UniversalGameRecType_19,
                                 Def_UniversalGameRecType_20,
-                                Def_UniversalGameRecType_LuckyCloudBuyNum, # 幸运云购购买号码记录 21
-                                Def_UniversalGameRecType_LuckyCloudBuyLottery, # 幸运云购开奖记录 22
+                                Def_UniversalGameRecType_21,
+                                Def_UniversalGameRecType_22,
                                 Def_UniversalGameRecType_CrossBattlefieldBuy, # 玩家购买的跨服战场 23
                                 Def_UniversalGameRecType_24,
                                 Def_UniversalGameRecType_BossDropGoodItemInfo,  # boss掉落好物品信息记录25
@@ -936,15 +876,15 @@
                                 Def_UniversalGameRecType_CrossBossInfo,  # 跨服boss信息 30
                                 Def_UniversalGameRecType_31,
                                 Def_UniversalGameRecType_CrossCollect,  # 跨服采集记录信息 32             
-                                Def_UniversalGameRecType_CrossChampionshipGroup, # 跨服排位争霸赛分组信息 33
-                                Def_UniversalGameRecType_CrossChampionshipGuess, # 跨服排位争霸赛竞猜记录信息 34
-                                Def_UniversalGameRecType_CrossChampionshipOfficial, # 跨服排位争霸赛最终排名官职信息 35
-                                Def_UniversalGameRecType_CrossChampionshipOffChallenge, # 跨服排位争霸赛官职挑战信息 36
-                                Def_UniversalGameRecType_CrossActAllRecharge, # 跨服全服充值活动信息 37
+                                Def_UniversalGameRecType_33,
+                                Def_UniversalGameRecType_34,
+                                Def_UniversalGameRecType_35,
+                                Def_UniversalGameRecType_36,
+                                Def_UniversalGameRecType_37,
                                 Def_UniversalGameRecType_CrossBattleChampionGroup, # 跨服战场冠军赛分组信息 38
-                                Def_UniversalGameRecType_CrossYaomoBossHurtInfo, # 跨服妖魔boss伤血信息 39
+                                Def_UniversalGameRecType_39,
                                 Def_UniversalGameRecType_40,
-                                Def_UniversalGameRecType_41,   # 红包产出结果记录41
+                                Def_UniversalGameRecType_41,
                                 Def_UniversalGameRecType_42,
                                 Def_UniversalGameRecType_43,
                                 Def_UniversalGameRecType_44,
@@ -960,15 +900,15 @@
                                 Def_UniversalGameRecType_54,
                                 Def_UniversalGameRecType_55,
                                 Def_UniversalGameRecType_56,
-                                Def_UniversalGameRecType_57, # 抢红包总记录57
-                                Def_UniversalGameRecType_58, # 抢红包可抢信息记录58
-                                Def_UniversalGameRecType_59, # 抢红包已抢完信息记录59
+                                Def_UniversalGameRecType_57,
+                                Def_UniversalGameRecType_58,
+                                Def_UniversalGameRecType_59,
                                 Def_UniversalGameRecType_60,
                                 Def_UniversalGameRecType_61,
                                 Def_UniversalGameRecType_62,
                                 Def_UniversalGameRecType_63,
-                                Def_UniversalGameRecType_64, # 仙盟红包总记录64
-                                Def_UniversalGameRecType_65, # 仙盟红包已抢信息记录65
+                                Def_UniversalGameRecType_64,
+                                Def_UniversalGameRecType_65,
                                 Def_UniversalGameRecType_DujieHelpAllRecord, # 渡劫副本护法总记录66
                                 Def_UniversalGameRecType_DujieHelpRecord, # 渡劫副本护法详细记录67
                                 Def_UniversalGameRecType_FamilyWarBattle, # 仙盟联赛对战表68
@@ -1158,8 +1098,6 @@
 CrossServerMsg_CrossActInfo = "CrossActInfo"            # 跨服运营活动信息
 CrossServerMsg_MailPlayerIDList = "MailPlayerIDList"    # 跨服邮件玩家ID通知,玩家目标服务器可能无法知道,被动推送
 CrossServerMsg_MailContent = "MailContent"              # 跨服邮件内容通知
-CrossServerMsg_LuckyCloudBuyNum = "LuckyCloudBuyNum"    # 幸运云购购买记录通知
-CrossServerMsg_LuckyCloudBuyLottery = "LuckyCloudBuyLottery"    # 幸运云购开奖记录通知
 CrossServerMsg_CrossServerTime = "CrossServerTime"      # 跨服时间同步
 CrossServerMsg_BattlefieldBuy = "BattlefieldBuy"        # 跨服战场购买信息
 CrossServerMsg_BattlefieldState = "BattlefieldState"    # 跨服战场状态信息
@@ -1167,14 +1105,6 @@
 CrossServerMsg_DebugAnswer = "DebugAnswer"              # DebugAnswer
 CrossServerMsg_ActDropSpecItem = "ActDropSpecItem"      # 特殊掉落验证返回
 CrossServerMsg_CrossAssist = "CrossAssist"              # 跨服协助
-CrossServerMsg_ChampionshipState = "ChampionshipState"  # 跨服排位争霸赛状态信息
-CrossServerMsg_ChampionshipPlayer = "ChampionshipPlayer"# 跨服排位争霸赛参赛玩家信息
-CrossServerMsg_ChampionshipGroup = "ChampionshipGroup"  # 跨服排位争霸赛分组信息
-CrossServerMsg_ChampionshipGuess = "ChampionshipGuess"  # 跨服排位争霸赛竞猜信息
-CrossServerMsg_ChampionshipOfficial = "ChampionshipOfficial"  # 跨服排位争霸赛官职信息
-CrossServerMsg_ChampionshipDailyOfficial = "ChampionshipDailyOfficial"  # 跨服排位争霸赛每日官职信息
-CrossServerMsg_ActAllRechargeInfo = "ActAllRechargeInfo"# 跨服全民充值信息
-CrossServerMsg_CrossYaomoBossHurtInfo = "CrossYaomoBossHurtInfo" # 跨服妖魔boss玩家伤害信息
 CrossServerMsg_FamilyFlagwarOver = "FamilyFlagwarOver"  # 逐鹿万界结算信息
 CrossServerMsg_Worship = "Worship"  # 膜拜信息
 CrossServerMsg_Xiangong = "Xiangong"  # 仙宫信息
@@ -1205,23 +1135,12 @@
 ClientServerMsg_CollectNPC = "CollectNPC"               # 采集NPC
 ClientServerMsg_EnterFB = "EnterFB"                     # 请求进入跨服副本
 ClientServerMsg_AddBuff = "AddBuff"                     # 添加BUFF
-ClientServerMsg_LuckyCloudBuy = "LuckyCloudBuy"         # 幸运云购
 ClientServerMsg_BattlefieldBuyOpen = "BattlefieldBuyOpen"   # 跨服战场购买召集
 ClientServerMsg_BattlefieldCallChange = "BattlefieldCallChange"  # 跨服战场召集 - 修改
 ClientServerMsg_BattlefieldCallJoin = "BattlefieldCallJoin"   # 跨服战场召集 - 加入
 ClientServerMsg_BattlefieldCallKick = "BattlefieldCallKick"   # 跨服战场召集 - 踢出
 ClientServerMsg_ActDropSpecItem = "ActDropSpecItem"     # 活动特殊掉落
 ClientServerMsg_CrossAssist = "CrossAssist"             # 跨服协助
-ClientServerMsg_ChampionshipPKOver = "ChampionshipPKOver" # 跨服排位PK结束
-ClientServerMsg_ChampionshipOfficialApply = "ChampionshipOfficialApply" # 跨服排位申请官职
-ClientServerMsg_ChampionshipOfficialApplyReply = "ChampionshipOfficialApplyReply" # 跨服排位官职申请回应
-ClientServerMsg_ChampionshipOfficialKick = "ChampionshipOfficialKick" # 跨服排位辞退下级仙官
-ClientServerMsg_ChampionshipOfficialLeave = "ChampionshipOfficialLeave" # 跨服排位主动离任仙官
-ClientServerMsg_ChampionshipOfficialChallenge = "ChampionshipOfficialChallenge" # 跨服排位挑战仙官
-ClientServerMsg_ChampionshipGuess = "ChampionshipGuess" # 跨服排位竞猜
-ClientServerMsg_ChampionshipWorship = "ChampionshipWorship" # 跨服排位膜拜
-ClientServerMsg_ActAllRechargeValue = "ActAllRechargeValue" # 跨服全民充值额度
-ClientServerMsg_CrossYaomoBossHurtAward = "CrossYaomoBossHurtAward" # 跨服妖魔boss玩家伤害领奖
 ClientServerMsg_CreateFuncTeam = "CreateFuncTeam"   # 创建功能队伍
 ClientServerMsg_ChangeFuncTeam = "ChangeFuncTeam"   # 修改功能队伍
 ClientServerMsg_FuncTeamMemOP = "FuncTeamMemOP"   # 功能队伍成员操作
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/BuffSkill.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/BuffSkill.py
index 9ba2bb3..ffdb313 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/BuffSkill.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/BuffSkill.py
@@ -23,7 +23,6 @@
 import ChNetSendPack
 import OperControlManager
 import GameObj
-import CrossPlayerData
 import AttackCommon
 #---------------------------------------------------------------------
 
@@ -169,9 +168,6 @@
     for i in range(len(plusValueList)):
         plusValueList[i] = min(plusValueList[i], ChConfig.Def_UpperLimit_DWord)
         
-    # 向跨服发送数据
-    CrossPlayerData.SendMergeData_Buff(curObj, curSkillID, plusValueList)
-    
     # buff层级
     layerMaxCnt = 0
     layerCalc = 0
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_508.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_508.py
deleted file mode 100644
index f7662d1..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_508.py
+++ /dev/null
@@ -1,71 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#
-# @todo: 给宠物增加已获得的某品质的宠物们总攻击百分比值,直接给宠物加的 并非加到人物属性中的 宠物攻击力
-#
-# @author: Alee
-# @date 2018-1-20 下午02:50:26
-# @version 1.0
-#
-# @note: 
-#
-#---------------------------------------------------------------------
-#导入
-import ChConfig
-import PlayerControl
-import GameFuncComm
-import ShareDefine
-import IpyGameDataPY
-import PetControl
-#---------------------------------------------------------------------
-
-## buff线性增加属性
-#  @param defender Buff承受者
-#  @param curEffect 技能效果
-#  @param calcDict 技能效果累加总表
-#  @return None
-def OnCalcBuffEx(defender, curEffect, calcDict, curBuff):
-    minAtk, maxAtk = GetPetAtkValueByQuality(defender, curEffect.GetEffectValue(0))
-    
-    calcDict[ChConfig.TYPE_Calc_AttrATKMin] = calcDict.get(ChConfig.TYPE_Calc_AttrATKMin, 0) + \
-            int(minAtk*curEffect.GetEffectValue(1)*1.0/ChConfig.Def_MaxRateValue)
-        
-    calcDict[ChConfig.TYPE_Calc_AttrATKMax] = calcDict.get(ChConfig.TYPE_Calc_AttrATKMax, 0) + \
-            int(maxAtk*curEffect.GetEffectValue(1)*1.0/ChConfig.Def_MaxRateValue)
-    return
-
-
-## 返回buff类型,线性与否
-#  @param 
-#  @return None
-#  @remarks 函数详细说明.  
-def GetCalcType():
-    return ChConfig.TYPE_Linear
-
-## 获取灵兽出战时的攻击力
-def GetPetAtkValueByQuality(curPet, quality):
-    curPlayer = PetControl.GetPetOwner(curPet)
-    if not curPlayer:
-        return 0, 0
-    if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_Pet):
-        #GameWorld.DebugLog(' 宠物功能未开启')
-        return 0, 0
-    
-    classAddAtk = 0
-    petPackIndex = ShareDefine.rptPet
-    petPack = curPlayer.GetItemManager().GetPack(petPackIndex)
-    for i in range(petPack.GetCount()):
-        packItem = petPack.GetAt(i)
-        if packItem.IsEmpty():
-            continue
-        if quality != packItem.GetUserAttr(ShareDefine.Def_IudetPet_QualityLV):
-            # 指定品质
-            continue
-        petItemNPCID = packItem.GetUserAttr(ShareDefine.Def_IudetPet_NPCID)
-        classlv = packItem.GetUserAttr(ShareDefine.Def_IudetPet_ClassLV)
-        
-        classIpyData = IpyGameDataPY.GetIpyGameData("PetClassCost", petItemNPCID, classlv + 1)
-        classAddAtk += (classIpyData.GetAtkAdd() if classIpyData else 0)
-    totalMinAtk = classAddAtk
-    totalMaxAtk = classAddAtk
-    return totalMinAtk, totalMaxAtk
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_509.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_509.py
deleted file mode 100644
index 14886b4..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_509.py
+++ /dev/null
@@ -1,65 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#
-# @todo: 已获得的某品质的宠物们总最大攻击百分比转换为给人物的生命
-#
-# @author: Alee
-# @date 2018-1-20 下午02:50:26
-# @version 1.0
-#
-# @note: 
-#
-#---------------------------------------------------------------------
-#导入
-import ChConfig
-import PlayerControl
-import GameFuncComm
-import ShareDefine
-import IpyGameDataPY
-#---------------------------------------------------------------------
-
-## buff线性增加属性
-#  @param defender Buff承受者
-#  @param curEffect 技能效果
-#  @param calcDict 技能效果累加总表
-#  @return None
-def OnCalcBuffEx(defender, curEffect, calcDict, curBuff):
-    minAtk, maxAtk = GetPetAtkValueByQuality(defender, curEffect.GetEffectValue(0))
-    
-    calcDict[ChConfig.TYPE_Calc_AttrMaxHP] = calcDict.get(ChConfig.TYPE_Calc_AttrMaxHP, 0) + \
-            int(maxAtk*curEffect.GetEffectValue(1)*1.0/ChConfig.Def_MaxRateValue)
-        
-    return
-
-
-## 返回buff类型,线性与否
-#  @param 
-#  @return None
-#  @remarks 函数详细说明.  
-def GetCalcType():
-    return ChConfig.TYPE_Linear
-
-## 获取灵兽出战时的攻击力
-def GetPetAtkValueByQuality(curPlayer, quality):
-    if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_Pet):
-        #GameWorld.DebugLog(' 宠物功能未开启')
-        return 0, 0
-    
-    classAddAtk = 0
-    petPackIndex = ShareDefine.rptPet
-    petPack = curPlayer.GetItemManager().GetPack(petPackIndex)
-    for i in range(petPack.GetCount()):
-        packItem = petPack.GetAt(i)
-        if packItem.IsEmpty():
-            continue
-        if quality != packItem.GetUserAttr(ShareDefine.Def_IudetPet_QualityLV):
-            # 指定品质
-            continue
-        petItemNPCID = packItem.GetUserAttr(ShareDefine.Def_IudetPet_NPCID)
-        classlv = packItem.GetUserAttr(ShareDefine.Def_IudetPet_ClassLV)
-        
-        classIpyData = IpyGameDataPY.GetIpyGameData("PetClassCost", petItemNPCID, classlv + 1)
-        classAddAtk += (classIpyData.GetAtkAdd() if classIpyData else 0)
-    totalMinAtk = classAddAtk
-    totalMaxAtk = classAddAtk
-    return totalMinAtk, totalMaxAtk
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillCommon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillCommon.py
index 7340f58..d5de7ba 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillCommon.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillCommon.py
@@ -25,11 +25,8 @@
 import ReadChConfig
 import random
 import BaseAttack
-import PetControl
 import SkillShell
 import DataRecordPack
-import ChPyNetSendPack
-import NetPackCommon
 import ShareDefine
 import GameObj
 import PassiveBuffEffMng
@@ -1153,7 +1150,7 @@
     elif curObjType == IPY_GameWorld.gotNPC:
         #宠物回血
         if curObj.GetGameNPCObjType() == IPY_GameWorld.gnotPet:
-            PetControl.SetPetHP(curObj, remainHP)
+            pass
         #普通NPC回血
         else:
             GameObj.SetHP(curObj, remainHP, False) # 先不通知
@@ -1214,7 +1211,7 @@
     if curObjType == IPY_GameWorld.gotNPC:
         #宠物特殊处理
         if curObj.GetGameNPCObjType() == IPY_GameWorld.gnotPet:
-            PetControl.SetPetHP(curObj, remainHP)
+            pass
         else:
             timeLostHPIpyData = IpyGameDataPY.GetIpyGameDataNotLog("NPCTimeLostHP", curObj.GetNPCID())
             if timeLostHPIpyData:
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_2102.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_2102.py
deleted file mode 100644
index 092058f..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_2102.py
+++ /dev/null
@@ -1,34 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#
-# @todo: 宠物主人被攻击后触发被动技能, 血量低于XX百分比
-#
-# @author: Alee
-# @date 2018-1-9 下午09:39:37
-# @version 1.0
-#
-# @note: 
-#
-#---------------------------------------------------------------------
-
-import ChConfig
-import GameWorld
-import GameObj
-import PlayerControl
-import PetControl
-
-def CheckCanHappen(attacker, defender, effect, curSkill):
-    # 未配置不验证血量百分比
-    if not effect.GetEffectValue(0):
-        return False
-    
-    petOwner = PetControl.GetPetOwner(attacker)
-    
-    if petOwner == None:
-        return False
-    
-    #血量条件判定
-    if GameObj.GetHP(petOwner)*ChConfig.Def_MaxRateValue/GameObj.GetMaxHP(petOwner) >= effect.GetEffectValue(0):
-        return False
-    
-    return True
\ No newline at end of file
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_2104.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_2104.py
deleted file mode 100644
index 779f0a1..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_2104.py
+++ /dev/null
@@ -1,34 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#
-# @todo: 宠物主人被攻击后触发被动技能, 血量低于XX百分比,有锁血功能
-#
-# @author: Alee
-# @date 2018-1-9 下午09:39:37
-# @version 1.0
-#
-# @note: 
-#
-#---------------------------------------------------------------------
-
-import ChConfig
-import GameWorld
-import GameObj
-import PlayerControl
-import PetControl
-
-def CheckCanHappen(attacker, defender, effect, curSkill):
-    # 未配置不验证血量百分比
-    if not effect.GetEffectValue(0):
-        return False
-    
-    petOwner = PetControl.GetPetOwner(attacker)
-    
-    if petOwner == None:
-        return False
-    
-    #血量条件判定
-    if GameObj.GetHP(petOwner)*ChConfig.Def_MaxRateValue/GameObj.GetMaxHP(petOwner) >= effect.GetEffectValue(0):
-        return False
-    
-    return True
\ No newline at end of file
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuffEffMng.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuffEffMng.py
index aaca356..18ed910 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuffEffMng.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuffEffMng.py
@@ -35,7 +35,6 @@
 import PyGameData
 import BaseAttack
 import NPCCommon
-import PetControl
 import ItemCommon
 import FBCommon
 
@@ -792,11 +791,6 @@
         # buff # 筛选buffType 否则NPC没有此接口会报错
         for buffType in [IPY_GameWorld.bfBuff, IPY_GameWorld.bfDeBuff, IPY_GameWorld.bfProcessBuff
                          , IPY_GameWorld.btPassiveBuf, IPY_GameWorld.bfActionBuff, IPY_GameWorld.bfProcessDeBuff]:
-            
-            if buffType == IPY_GameWorld.btPassiveBuf and gameObj.GetGameObjType() == IPY_GameWorld.gotNPC:
-                # NPC只有宠物有被动BUFF
-                if not PetControl.IsPet(gameObj):
-                    continue
             
             buffTuple = SkillCommon.GetBuffManagerByBuffType(gameObj, buffType)
             #通过类型获取目标的buff管理器为空,则跳出
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py
index 7e2e8f4..1d388c0 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py
@@ -27,7 +27,6 @@
 import FBLogic
 import ItemCommon
 import OperControlManager
-import PetControl
 import DataRecordPack
 #import ChItem
 import ShareDefine
@@ -617,16 +616,6 @@
 # @return 返回值真, 检查通过
 def IsToPetOwnerSkill(curNPC, skillTag):
     if skillTag != ChConfig.Def_UseSkillTag_PetMaster:
-        return False
-
-    if not PetControl.IsPet(curNPC):
-        GameWorld.ErrLog("NPCID %s AI %s 非宠物,无法获得主人释放技能"%(curNPC.GetNPCID(), curNPC.GetAIType()))
-        return False
-    
-    petOwner = PetControl.GetPetOwner(curNPC)
-    
-    if petOwner == None:
-        GameWorld.ErrLog("宠物(%s)对主人释放技能,找不到主人"%curNPC.GetRolePet().PetID)
         return False
         
     return True
@@ -1708,22 +1697,8 @@
         # 对自身释放或者无目标技能
         if skillAffectTag in ChConfig.Def_ST_CanNPCUseSkill or skillAim == ChConfig.Def_UseSkillAim_None:
             #释放自身类技能
-            return NPCUseSkill(attacker, curSkill, tick)  
-                  
-        # 宠物对主人释放技能
-        elif skillAffectTag == ChConfig.Def_UseSkillTag_PetMaster:
-            if not PetControl.IsPet(attacker):
-                GameWorld.ErrLog("该NPC非宠物,无法获得主人释放技能")
-                return False
-            
-            petOwner = PetControl.GetPetOwner(attacker)
-            
-            if petOwner == None:
-                GameWorld.ErrLog("宠物(%s)对主人释放技能,找不到主人"%attacker.GetRolePet().PetID)
-                return False
+            return NPCUseSkill(attacker, curSkill, tick)
         
-            curTag = petOwner            
-                  
         # 召唤兽对主人释放技能
         elif skillAffectTag == ChConfig.Def_UseSkillTag_SummonMaster:
             if not NPCCommon.IsSummonNPC(attacker):
@@ -3657,18 +3632,6 @@
         result = DoLogic_UseSkill(attacker, target, curSkill, tick, posX, posY, isEnhanceSkill=isEnhanceSkill)
     
     else:
-        if affectTag == ChConfig.Def_UseSkillTag_PetMaster:
-            if not PetControl.IsPet(attacker):
-                return False
-            
-            petOwner = PetControl.GetPetOwner(attacker)
-            if petOwner == None:
-                return False
-            
-            target = petOwner
-            if GameObj.GetHP(target) <= 0:
-                return False
-        
         if affectTag not in [ChConfig.Def_UseSkillTag_None, ChConfig.Def_UseSkillTag_Self]:
             if not target:
                 # 配置了可攻击目标,但没目标就不让触发

--
Gitblit v1.8.0