From 80760d7bb7ae12f127bd67613dab8a8a02d4400c Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期四, 12 二月 2026 15:29:30 +0800
Subject: [PATCH] 16 卡牌服务端(删除不需要旧功能:法器、炼体、魅力、情缘、仙宫、神兽、系统特权、印记;)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py               |    9 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py                      |    6 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py                      | 1528 ----------------
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py                  | 2831 -------------------------------
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/BuffProcess_1027.py |    4 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChItem.py                      |    1 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py               |    2 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/BuffProcess_1034.py |    2 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuffEffMng.py          |  122 -
 /dev/null                                                                                               |   26 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/BuffSkill.py                  |    6 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini                              |  145 -
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/ItemCommon.py          |    4 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py                    |  323 ---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py                  |  229 --
 PySysDB/PySysDBPY.h                                                                                     |  123 -
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py             |   43 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py        |    6 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillCommon.py     |    6 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py                         |   34 
 20 files changed, 23 insertions(+), 5,427 deletions(-)

diff --git a/PySysDB/PySysDBPY.h b/PySysDB/PySysDBPY.h
index 0156339..1904918 100644
--- a/PySysDB/PySysDBPY.h
+++ b/PySysDB/PySysDBPY.h
@@ -554,23 +554,6 @@
 	list		AwardItemList;	//奖励物品列表
 };
 
-//境界炼体属性表
-
-struct tagLianTi
-{
-	BYTE		_LianTiLV;	//炼体等级
-	list		FixedAttrType;	//固定属性类型(非累积)
-	list		FixedAttrValue;	//固定属性值(非累积)
-	list		PlusAttrType;	//增强属性类型(非累积)
-	list		PlusAttrRate;	//增强属性万分率(非累积)
-	list		EatItemAttrType;	//每x个培养丹增加属性类型,x=UpEatItemPerCount
-	list		EatItemAttrValue;	//每x个培养丹增加属性值,x=UpEatItemPerCount
-	WORD		NeedEatCount;	//升级所需个数(非累计)
-	WORD		EatPerCount;	//每次培养消耗x个
-	list		LVUpCostItemInfo;	//突破等级道具ID|个数
-	DWORD		ActivateSkillID;	//激活技能ID
-};
-
 //功能配置表格 #tagFuncConfig
 
 struct	tagFuncConfig
@@ -788,30 +771,6 @@
 	dict		LVLegendAttrLibNumInfo;	//属性ID等级段对应数值库编号 {属性ID:{等级:库编号, ...}}
 };
 
-//神兽表
-
-struct tagDogz
-{
-	BYTE		_DogzID;	//神兽ID
-	list		BaseAttrTypes;	//基础属性类型列表
-	list		BaseAttrValues;	//基础属性值列表
-	list		HelpBattleSkills;	//助战技能ID列表
-	DWORD		FightPowerEx;	//助战附加战力
-	list		EquipPlaceColorList;	//穿戴装备颜色限制
-	list		HelpBattleNotify;	//助战广播 ["广播key",[参数1,参数2,...],广播CD分钟]
-};
-
-//神兽强化表
-
-struct tagDogzEquipPlus
-{
-	BYTE		_EquipPlace;	//装备位
-	BYTE		_PlusLV;	//强化等级
-	list		PlusAttrTypes;	//强化属性类型列表
-	list		PlusAttrValues;	//强化属性值列表
-	DWORD		PlusLVUPTotalExp;	//升级所需累计熟练度总值
-};
-
 //洗练表 #tagEquipWash
 
 struct	tagEquipWash
@@ -858,19 +817,6 @@
 	WORD		_LV;	//等级
 	DWORD		UpNeedExp;	//升级所需经验数
 	dict		Attr;	//属性加成
-};
-
-//法器升级表
-
-struct tagFaQiLVUp
-{
-	BYTE		_FaQiLV;	//法器等级
-	WORD		NeedEatCount;	//升级所需个数(非累计)
-	list		LVAttrType;	//每级额外属性类型(非累积)
-	list		LVAttrValue;	//每级额外属性值(非累积)
-	list		UpItemAttrType;	//每x个培养丹增加属性类型,x=UpEatItemPerCount
-	list		UpItemAttrValue;	//每x个培养丹增加属性值,x=UpEatItemPerCount
-	DWORD		UpEatItemPerCount;	//每次培养消耗x个
 };
 
 //坐骑阶级表
@@ -2109,50 +2055,6 @@
 	BYTE		_QualityLV;	//品级
 };
 
-//情缘礼物表
-
-struct tagLoveGift
-{
-	BYTE		_GiftNum;	//聘礼ID
-	DWORD		GiftItemID;	//物品ID
-	BYTE		AllowBatch;	//是否允许批量赠送
-};
-
-//情缘提亲表
-
-struct tagMarry
-{
-	BYTE		_BridePriceID;	//聘礼ID
-	list		CostMoneyInfo;	//消耗货币类型|数值
-};
-
-//情缘情戒表
-
-struct tagLoveRing
-{
-	BYTE		_RingClassLV;	//情戒阶级
-	BYTE		_RingStarLV;	//情戒星级
-	list		CoupleAttrType;	//仙侣属性类型(非累积)
-	list		CoupleAttrValue;	//仙侣属性值(非累积)
-	list		StarAttrType;	//星级额外属性类型(非累积)
-	list		StarAttrValue;	//星级额外属性值(非累积)
-	list		UpItemAttrType;	//每x个培养丹增加属性类型,x=UpEatItemPerCount
-	list		UpItemAttrValue;	//每x个培养丹增加属性值,x=UpEatItemPerCount
-	DWORD		NeedEatCount;	//升级所需个数(非累计)
-	DWORD		UpEatItemPerCount;	//每次培养消耗x个
-};
-
-//情缘魅力属性表
-
-struct tagLoveCharm
-{
-	BYTE		_CharmLV;	//魅力等级
-	DWORD		UpNeedCharm;	//升下级所需总魅力
-	list		LVAttrType;	//属性类型
-	list		LVAttrValue;	//总属性值
-	list		LVAwardItemInfo;	//等级物品奖励[[物品ID,个数,是否拍品], ...]
-};
-
 //骑宠觉醒表
 
 struct tagHorsePetSkin
@@ -2163,15 +2065,6 @@
 	DWORD		NeedExp;	//升级需要经验
 	dict		AttrInfo;	//属性
 	BYTE		SkinIndex;	//外观
-};
-
-//功能特权奖励表
-
-struct tagFuncSysPrivilege
-{
-	BYTE		_FuncSysID;	//功能系统ID
-	BYTE		DayNum;		//第X天
-	list		DayAwardItemInfo;	// 奖励物品信息 [[物品ID,个数,是否拍品], ...]
 };
 
 //累计充值奖励表
@@ -2201,22 +2094,6 @@
 	list		FreeRewardItemList;	//免费奖励物品列表 [[物品ID,个数,是否拍品],...]
 	list		ZLRewardItemList;	//战令奖励物品列表 [[物品ID,个数,是否拍品],...]
 	list		ZLRewardItemListH;	//高级战令奖励物品列表 [[物品ID,个数,是否拍品],...]
-};
-
-//仙宫表
-
-struct tagXiangong
-{
-	WORD		_XiangongID;	//仙宫ID
-};
-
-//仙宫天道树
-
-struct tagTiandaoTree
-{
-	WORD		_AwardIndex;	//奖励索引
-	DWORD		NeedQiyun;	//所需气运值
-	list		AwardItemList;	//奖励物品列表
 };
 
 //祝福树
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
index 3461340..774f6b1 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
@@ -58,18 +58,6 @@
 PacketSubCMD_1=0x30
 PacketCallFunc_1=OnViewBillboard
 
-;法器
-[PlayerFaQi]
-ScriptName = Player\PlayerFaQi.py
-Writer = hxp
-Releaser = hxp
-RegType = 0
-RegisterPackCount = 1
-
-PacketCMD_1=0xA5
-PacketSubCMD_1=0x32
-PacketCallFunc_1=OnFaQiLVUp
-
 ;坐骑培养
 [PlayerHorse]
 ScriptName = Player\PlayerHorse.py
@@ -402,9 +390,9 @@
 PacketSubCMD_18=0x30
 PacketCallFunc_18=
 
-PacketCMD_19=0xA1
-PacketSubCMD_19=0x08
-PacketCallFunc_19=OnRefreshMainServerRole
+PacketCMD_19=
+PacketSubCMD_19=
+PacketCallFunc_19=
 
 PacketCMD_20=0xB2
 PacketSubCMD_20=0x06
@@ -422,13 +410,13 @@
 PacketSubCMD_23=0x35
 PacketCallFunc_23=OnSelectRealmDifficulty
 
-PacketCMD_24=0xA1
-PacketSubCMD_24=0x21
-PacketCallFunc_24=OnChangeJob
+PacketCMD_24=
+PacketSubCMD_24=
+PacketCallFunc_24=
 
-PacketCMD_25=0xA1
-PacketSubCMD_25=0x20
-PacketCallFunc_25=OnMoneyExchange
+PacketCMD_25=
+PacketSubCMD_25=
+PacketCallFunc_25=
 
 PacketCMD_26=0xA0
 PacketSubCMD_26=0x08
@@ -457,22 +445,6 @@
 PacketCMD_1 = 0xA5
 PacketSubCMD_1 = 0x23
 PacketCallFunc_1 = DoRealmLVUp
-
-;炼体
-[PlayerLianTi]
-ScriptName = Player\PlayerLianTi.py
-Writer = hxp
-Releaser = hxp
-RegType = 0
-RegisterPackCount = 2
-
-PacketCMD_1 = 0xA5
-PacketSubCMD_1 = 0x33
-PacketCallFunc_1 = OnLianTiUp
-
-PacketCMD_2 = 0xA5
-PacketSubCMD_2 = 0x34
-PacketCallFunc_2 = OnLianTiLVUp
 
 ;改名功能
 [UpdatePlayerName]
@@ -611,19 +583,6 @@
 PacketSubCMD_4=0x16
 PacketCallFunc_4=OnSelectSkillElement
 
-
-;印记
-[yinji]
-ScriptName = Player\PlayerYinji.py
-Writer = Alee
-Releaser = Alee
-RegType = 0
-RegisterPackCount = 1
-
-PacketCMD_1=0xB4
-PacketSubCMD_1=0x0D
-PacketCallFunc_1=OnYinji
-
 ;副本
 [FBCommon]
 ScriptName = GameWorldLogic\FBProcess\FBCommon.py
@@ -674,34 +633,6 @@
 PacketCMD_4=A3
 PacketSubCMD_4=27
 PacketCallFunc_4=OnLingQiTrain
-
-;神兽
-[PlayerDogz]
-ScriptName = Player\PlayerDogz.py
-Writer = hxp
-Releaser = hxp
-RegType = 0
-RegisterPackCount = 5
-
-PacketCMD_1=0xA5
-PacketSubCMD_1=0xC0
-PacketCallFunc_1=OnDogzEquipItem
-
-PacketCMD_2=0xA5
-PacketSubCMD_2=0xC1
-PacketCallFunc_2=OnDogzUnEquipItem
-
-PacketCMD_3=0xA5
-PacketSubCMD_3=0xC2
-PacketCallFunc_3=OnDogzBattleStateChange
-
-PacketCMD_4=0xA5
-PacketSubCMD_4=0xC3
-PacketCallFunc_4=OnDogzBuyBatteCount
-
-PacketCMD_5=0xA5
-PacketSubCMD_5=0xC4
-PacketCallFunc_5=OnDogzEquipPlus
 
 ;充值
 [PlayerCoin]
@@ -757,67 +688,11 @@
 Writer = hxp
 Releaser = hxp
 RegType = 0
-RegisterPackCount = 2
+RegisterPackCount = 1
 
 PacketCMD_1=0xB2
 PacketSubCMD_1=0x09
 PacketCallFunc_1=OnArenaMatch
-
-PacketCMD_2=
-PacketSubCMD_2=
-PacketCallFunc_2=
-
-;功能系统特权
-[PlayerFuncSysPrivilege]
-ScriptName = Player\PlayerFuncSysPrivilege.py
-Writer = hxp
-Releaser = hxp
-RegType = 0
-RegisterPackCount = 2
-
-PacketCMD_1=0xB2
-PacketSubCMD_1=0x11
-PacketCallFunc_1=OnActivateFuncSysPrivilege
-
-PacketCMD_2=0xB2
-PacketSubCMD_2=0x12
-PacketCallFunc_2=OnGetFuncSysPrivilegeAward
-
-;情缘
-[PlayerLove]
-ScriptName = Player\PlayerLove.py
-Writer = hxp
-Releaser = hxp
-RegType = 0
-RegisterPackCount = 7
-
-PacketCMD_1=0xB3
-PacketSubCMD_1=0x10
-PacketCallFunc_1=OnSendGifts
-
-PacketCMD_2=0xB3
-PacketSubCMD_2=0x11
-PacketCallFunc_2=OnMarryReq
-
-PacketCMD_3=0xB3
-PacketSubCMD_3=0x13
-PacketCallFunc_3=OnMarryEatCandy
-
-PacketCMD_4=0xB3
-PacketSubCMD_4=0x14
-PacketCallFunc_4=OnMarryBuyFireworks
-
-PacketCMD_5=0xB3
-PacketSubCMD_5=0x15
-PacketCallFunc_5=OnMarryBreak
-
-PacketCMD_6=0xB3
-PacketSubCMD_6=0x17
-PacketCallFunc_6=OnLoveRingUnlock
-
-PacketCMD_7=0xB3
-PacketSubCMD_7=0x18
-PacketCallFunc_7=OnLoveRingUp
 
 ;古宝
 [PlayerGubao]
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index ca959be..ae89eb9 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -3554,14 +3554,6 @@
 Def_PDict_FamilyGCZSQGridItemCnt = "FamilyGCZSQItemCnt_%s"  # 圣泉当前层格子抽中物品个数,参数(格子编号)
 #-------------------------------------------------------------------------------
 
-# 法器
-Def_PDict_FaQiLV = "FaQiLV"  # 法器等级
-Def_PDict_FaQiEatItemCount = "FaQiEatItemCount"  # 当前阶已吃丹个数
-
-# 炼体
-Def_PDict_LianTiLV = "LianTiLV"  # 炼体等级
-Def_PDict_LianTiEatItemCount = "LianTiEatItemCount"  # 当前级已吃丹个数
-
 # 坐骑
 Def_PDict_HorseClassLV = "HorseClassLV"  # 坐骑阶级
 Def_PDict_HorseLV = "HorseLV"  # 坐骑阶等级
@@ -3608,10 +3600,6 @@
 Def_PDict_EquipPartSuiteLV = "EQPartSuiteLV_%s_%s" #部位套装等级 参数 部位、套装类型
 Def_PDict_EquipPartSuiteActivate = "EQPartSuiteActivate_%s" #套装激活记录 参数 key编号
 
-#神兽
-Def_PDict_DogzFightState = "DogzFightState_%s" # 神兽助战状态,参数为key编号,按神兽ID二进制位存储
-Def_PDict_DogzBuyHelpbattleCount = "DogzBuyHelpbattleCount" # 额外购买的神兽助战位
-
 #装备部位星数
 Def_PDict_TotalEquipStar = "TotalEquipStar" #装备部位星数总数
 Def_PDict_EquipPartStar = "EQPartStar_%s" #装备部位星数 参数 装备背包格子索引
@@ -3623,18 +3611,6 @@
 #竞技场
 Def_PDict_ArenaScore = "ArenaScore" # 当前积分
 Def_PDict_ArenaWinCnt = "ArenaWinCnt" # 累计胜利次数
-
-#功能系统特权
-Def_PDict_FuncSysPrivilegeActTime = "FuncSysPrivilegeActTime_%s" # 系统功能特权激活时间戳,参数(系统功能ID)
-Def_PDict_FuncSysPrivilegeAward = "FuncSysPrivilegeAward_%s" # 系统功能特权领奖记录,参数(系统功能ID)
-
-#情缘
-Def_PDict_LoveRingClassLV = "LoveRingClassLV" # 情戒 - 阶级
-Def_PDict_LoveRingStarLV = "LoveRingStarLV" # 情戒 - 星级
-Def_PDict_LoveRingEatCount = "LoveRingEatCount" # 情戒 - 本星已淬炼道具数
-Def_PDict_LoveCoupleIntimacy = "LoveCoupleIntimacy" # 伴侣亲密度
-Def_PDict_LoveEatCandyToday = "LoveEatCandyToday" # 今日已吃喜糖次数
-Def_PDict_CharmLV = "CharmLV"  # 魅力等级
 
 #古宝
 Def_PDict_GubaoInfo = "Gubao_%s"  # 古宝信息,参数(古宝ID),特殊效果层*100000 + 等级*100 + 星级
@@ -3678,11 +3654,6 @@
 Def_PDict_GoldRushWarehouse = "GoldRushWarehouse_%s" # 仓库完成淘金ID,参数(仓库位置索引)
 Def_PDict_GoldRushRecoverTime = "GoldRushRecoverTime" # 上次恢复淘金令时间戳
 Def_PDict_GoldRushAutoEndTime = "GoldRushAutoEndTime" # 自动淘金到期时间戳
-
-#仙宫
-Def_PDict_XiangongLikeState = "XiangongLikeState_%s" # 指定仙宫今日是否已点赞,参数(仙宫ID),仙宫ID为0时代表每日的仙宫功能点赞
-Def_PDict_TiandaoQiyun = "TiandaoQiyun" # 天道树当前气运
-Def_PDict_TiandaoAward = "TiandaoAward_%s" # 天道树领奖记录,按奖励索引记录是否已领取,参数(key编号)
 
 #武将
 Def_PDict_HeroSkin = "HeroSkin_%s" # 武将皮肤解锁状态,按皮肤索引二进制存储,参数(武将ID)
@@ -4247,11 +4218,8 @@
 Def_Cost_BuyKillBossCnt:"BuyKillBossCnt",
 Def_Cost_EquipStar:"EquipStar",
 Def_Cost_ActivityPlace:"ActivityPlace",
-Def_Cost_FaQi:"FaQi",
-Def_Cost_Love:"Love",
 Def_Cost_BuyOrderInfo:"BuyOrderInfo",
 Def_Cost_CrossBattlefield:"CrossBattlefield",
-Def_Cost_LianTi:"LianTi",
 }
 ## -----------------------------------------------------
 
@@ -4465,9 +4433,7 @@
                    ItemDel_HorsePetAwake:"HorsePetAwake",
                    ItemDel_ActivityPlace:"ActivityPlace",
                    ItemDel_AuctionHouse:"AuctionHouse",
-                   ItemDel_FaQi:"FaQi",
                    ItemDel_BTGM:"BTGM",
-                   ItemDel_LianTi:"LianTi",
                    }
 
 ##==================================================================================================
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
index 7f6125f..8bb63c4 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
@@ -331,58 +331,6 @@
 
 
 #------------------------------------------------------
-# A1 21 转职业 #tagCMChangeJob
-
-class  tagCMChangeJob(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("TagJob", c_ubyte),    
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA1
-        self.SubCmd = 0x21
-        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 = 0xA1
-        self.SubCmd = 0x21
-        self.TagJob = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagCMChangeJob)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// A1 21 转职业 //tagCMChangeJob:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                TagJob:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.TagJob
-                                )
-        return DumpString
-
-
-m_NAtagCMChangeJob=tagCMChangeJob()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMChangeJob.Cmd,m_NAtagCMChangeJob.SubCmd))] = m_NAtagCMChangeJob
-
-
-#------------------------------------------------------
 # A1 25 代币购买充值商品编号商品 #tagCMCoinBuyOrderInfo
 
 class  tagCMCoinBuyOrderInfo(Structure):
@@ -461,66 +409,6 @@
 
 
 #------------------------------------------------------
-# A1 20 货币兑换 #tagCMMoneyExchange
-
-class  tagCMMoneyExchange(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("SrcMoneyType", c_ubyte),    # 源货币类型
-                  ("TagMoneyType", c_ubyte),    # 目标货币类型
-                  ("ExchangeValue", c_int),    # 兑换数量(消耗源货币的数量)
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA1
-        self.SubCmd = 0x20
-        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 = 0xA1
-        self.SubCmd = 0x20
-        self.SrcMoneyType = 0
-        self.TagMoneyType = 0
-        self.ExchangeValue = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagCMMoneyExchange)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// A1 20 货币兑换 //tagCMMoneyExchange:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                SrcMoneyType:%d,
-                                TagMoneyType:%d,
-                                ExchangeValue:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.SrcMoneyType,
-                                self.TagMoneyType,
-                                self.ExchangeValue
-                                )
-        return DumpString
-
-
-m_NAtagCMMoneyExchange=tagCMMoneyExchange()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMMoneyExchange.Cmd,m_NAtagCMMoneyExchange.SubCmd))] = m_NAtagCMMoneyExchange
-
-
-#------------------------------------------------------
 # A1 23 查询充值次数 #tagCMQueryCoinToGoldCount
 
 class  tagCMQueryCoinToGoldCount(Structure):
@@ -570,54 +458,6 @@
 
 m_NAtagCMQueryCoinToGoldCount=tagCMQueryCoinToGoldCount()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMQueryCoinToGoldCount.Cmd,m_NAtagCMQueryCoinToGoldCount.SubCmd))] = m_NAtagCMQueryCoinToGoldCount
-
-
-#------------------------------------------------------
-# A1 08 刷新主服角色信息 #tagCMRefreshMainServerRole
-
-class  tagCMRefreshMainServerRole(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA1
-        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 = 0xA1
-        self.SubCmd = 0x08
-        return
-
-    def GetLength(self):
-        return sizeof(tagCMRefreshMainServerRole)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// A1 08 刷新主服角色信息 //tagCMRefreshMainServerRole:
-                                Cmd:%s,
-                                SubCmd:%s
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd
-                                )
-        return DumpString
-
-
-m_NAtagCMRefreshMainServerRole=tagCMRefreshMainServerRole()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMRefreshMainServerRole.Cmd,m_NAtagCMRefreshMainServerRole.SubCmd))] = m_NAtagCMRefreshMainServerRole
 
 
 #------------------------------------------------------
@@ -5414,331 +5254,6 @@
 
 
 #------------------------------------------------------
-# A5 C2 神兽变更助战状态 #tagCMDogzBattleStateChange
-
-class  tagCMDogzBattleStateChange(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("DogzID", c_ubyte),    # 神兽ID
-                  ("BatteState", c_ubyte),    #助战状态,0-召回,1-助战
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA5
-        self.SubCmd = 0xC2
-        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 = 0xC2
-        self.DogzID = 0
-        self.BatteState = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagCMDogzBattleStateChange)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// A5 C2 神兽变更助战状态 //tagCMDogzBattleStateChange:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                DogzID:%d,
-                                BatteState:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.DogzID,
-                                self.BatteState
-                                )
-        return DumpString
-
-
-m_NAtagCMDogzBattleStateChange=tagCMDogzBattleStateChange()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMDogzBattleStateChange.Cmd,m_NAtagCMDogzBattleStateChange.SubCmd))] = m_NAtagCMDogzBattleStateChange
-
-
-#------------------------------------------------------
-# A5 C3 神兽购买助战位 #tagCMDogzBuyBatteCount
-
-class  tagCMDogzBuyBatteCount(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA5
-        self.SubCmd = 0xC3
-        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 = 0xC3
-        return
-
-    def GetLength(self):
-        return sizeof(tagCMDogzBuyBatteCount)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// A5 C3 神兽购买助战位 //tagCMDogzBuyBatteCount:
-                                Cmd:%s,
-                                SubCmd:%s
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd
-                                )
-        return DumpString
-
-
-m_NAtagCMDogzBuyBatteCount=tagCMDogzBuyBatteCount()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMDogzBuyBatteCount.Cmd,m_NAtagCMDogzBuyBatteCount.SubCmd))] = m_NAtagCMDogzBuyBatteCount
-
-
-#------------------------------------------------------
-# A5 C0 神兽穿戴装备 #tagCMDogzEquipItem
-
-class  tagCMDogzEquipItem(Structure):
-    Head = tagHead()
-    DogzID = 0    #(BYTE DogzID)// 神兽ID
-    EquipIndexCount = 0    #(BYTE EquipIndexCount)
-    EquipIndexList = list()    #(vector<BYTE> EquipIndexList)//神兽装备所在神兽背包索引列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xA5
-        self.Head.SubCmd = 0xC0
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.DogzID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.EquipIndexCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.EquipIndexCount):
-            value,_pos=CommFunc.ReadBYTE(_lpData,_pos)
-            self.EquipIndexList.append(value)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xA5
-        self.Head.SubCmd = 0xC0
-        self.DogzID = 0
-        self.EquipIndexCount = 0
-        self.EquipIndexList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        length += 1
-        length += 1 * self.EquipIndexCount
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.DogzID)
-        data = CommFunc.WriteBYTE(data, self.EquipIndexCount)
-        for i in range(self.EquipIndexCount):
-            data = CommFunc.WriteBYTE(data, self.EquipIndexList[i])
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                DogzID:%d,
-                                EquipIndexCount:%d,
-                                EquipIndexList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.DogzID,
-                                self.EquipIndexCount,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagCMDogzEquipItem=tagCMDogzEquipItem()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMDogzEquipItem.Head.Cmd,m_NAtagCMDogzEquipItem.Head.SubCmd))] = m_NAtagCMDogzEquipItem
-
-
-#------------------------------------------------------
-# A5 C4 神兽装备强化 #tagCMDogzEquipPlus
-
-class  tagCMDogzEquipPlus(Structure):
-    Head = tagHead()
-    EquipIndex = 0    #(BYTE EquipIndex)//神兽装备背包中索引
-    IndexCount = 0    #(BYTE IndexCount)//材料所在神兽物品背包索引的数量
-    IndexList = list()    #(vector<BYTE> IndexList)//材料所在神兽物品背包索引列表
-    IndexUseCountList = list()    #(vector<DWORD> IndexUseCountList)//材料所在神兽物品背包索引对应使用个数列表
-    IsDouble = 0    #(BYTE IsDouble)//是否双倍强化
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xA5
-        self.Head.SubCmd = 0xC4
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.EquipIndex,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.IndexCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.IndexCount):
-            value,_pos=CommFunc.ReadBYTE(_lpData,_pos)
-            self.IndexList.append(value)
-        for i in range(self.IndexCount):
-            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
-            self.IndexUseCountList.append(value)
-        self.IsDouble,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xA5
-        self.Head.SubCmd = 0xC4
-        self.EquipIndex = 0
-        self.IndexCount = 0
-        self.IndexList = list()
-        self.IndexUseCountList = list()
-        self.IsDouble = 0
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        length += 1
-        length += 1 * self.IndexCount
-        length += 4 * self.IndexCount
-        length += 1
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.EquipIndex)
-        data = CommFunc.WriteBYTE(data, self.IndexCount)
-        for i in range(self.IndexCount):
-            data = CommFunc.WriteBYTE(data, self.IndexList[i])
-        for i in range(self.IndexCount):
-            data = CommFunc.WriteDWORD(data, self.IndexUseCountList[i])
-        data = CommFunc.WriteBYTE(data, self.IsDouble)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                EquipIndex:%d,
-                                IndexCount:%d,
-                                IndexList:%s,
-                                IndexUseCountList:%s,
-                                IsDouble:%d
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.EquipIndex,
-                                self.IndexCount,
-                                "...",
-                                "...",
-                                self.IsDouble
-                                )
-        return DumpString
-
-
-m_NAtagCMDogzEquipPlus=tagCMDogzEquipPlus()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMDogzEquipPlus.Head.Cmd,m_NAtagCMDogzEquipPlus.Head.SubCmd))] = m_NAtagCMDogzEquipPlus
-
-
-#------------------------------------------------------
-# A5 C1 神兽卸下装备 #tagCMDogzUnEquipItem
-
-class  tagCMDogzUnEquipItem(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("DogzID", c_ubyte),    # 神兽ID
-                  ("EquipPlace", c_ubyte),    #卸下的装备位, 0代表卸下全部
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA5
-        self.SubCmd = 0xC1
-        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 = 0xC1
-        self.DogzID = 0
-        self.EquipPlace = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagCMDogzUnEquipItem)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// A5 C1 神兽卸下装备 //tagCMDogzUnEquipItem:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                DogzID:%d,
-                                EquipPlace:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.DogzID,
-                                self.EquipPlace
-                                )
-        return DumpString
-
-
-m_NAtagCMDogzUnEquipItem=tagCMDogzUnEquipItem()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMDogzUnEquipItem.Cmd,m_NAtagCMDogzUnEquipItem.SubCmd))] = m_NAtagCMDogzUnEquipItem
-
-
-#------------------------------------------------------
 # A5 C5 装备部位升星 #tagCMEquipPartStarUp
 
 class  tagCMEquipPartStarUp(Structure):
@@ -5894,62 +5409,6 @@
 
 
 #------------------------------------------------------
-# A5 32 法器升级 #tagCMFaQiLVUp
-
-class  tagCMFaQiLVUp(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("UseItemCnt", c_ushort),    #消耗材料个数
-                  ("IsAutoBuy", c_ubyte),    #是否自动购买
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA5
-        self.SubCmd = 0x32
-        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 = 0x32
-        self.UseItemCnt = 0
-        self.IsAutoBuy = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagCMFaQiLVUp)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// A5 32 法器升级 //tagCMFaQiLVUp:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                UseItemCnt:%d,
-                                IsAutoBuy:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.UseItemCnt,
-                                self.IsAutoBuy
-                                )
-        return DumpString
-
-
-m_NAtagCMFaQiLVUp=tagCMFaQiLVUp()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMFaQiLVUp.Cmd,m_NAtagCMFaQiLVUp.SubCmd))] = m_NAtagCMFaQiLVUp
-
-
-#------------------------------------------------------
 # A5 41 领取投资理财回报 #tagCMGetInvestReward
 
 class  tagCMGetInvestReward(Structure):
@@ -6059,110 +5518,6 @@
 
 m_NAtagCMGoldInvest=tagCMGoldInvest()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMGoldInvest.Cmd,m_NAtagCMGoldInvest.SubCmd))] = m_NAtagCMGoldInvest
-
-
-#------------------------------------------------------
-# A5 34 炼体突破 #tagCMLianTiLVUp
-
-class  tagCMLianTiLVUp(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA5
-        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 = 0xA5
-        self.SubCmd = 0x34
-        return
-
-    def GetLength(self):
-        return sizeof(tagCMLianTiLVUp)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// A5 34 炼体突破 //tagCMLianTiLVUp:
-                                Cmd:%s,
-                                SubCmd:%s
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd
-                                )
-        return DumpString
-
-
-m_NAtagCMLianTiLVUp=tagCMLianTiLVUp()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMLianTiLVUp.Cmd,m_NAtagCMLianTiLVUp.SubCmd))] = m_NAtagCMLianTiLVUp
-
-
-#------------------------------------------------------
-# A5 33 炼体提升 #tagCMLianTiUp
-
-class  tagCMLianTiUp(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("UseItemCnt", c_int),    #消耗材料个数
-                  ("IsAutoBuy", c_ubyte),    #是否自动购买
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA5
-        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 = 0xA5
-        self.SubCmd = 0x33
-        self.UseItemCnt = 0
-        self.IsAutoBuy = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagCMLianTiUp)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// A5 33 炼体提升 //tagCMLianTiUp:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                UseItemCnt:%d,
-                                IsAutoBuy:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.UseItemCnt,
-                                self.IsAutoBuy
-                                )
-        return DumpString
-
-
-m_NAtagCMLianTiUp=tagCMLianTiUp()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMLianTiUp.Cmd,m_NAtagCMLianTiUp.SubCmd))] = m_NAtagCMLianTiUp
 
 
 #------------------------------------------------------
@@ -8293,58 +7648,6 @@
 
 
 #------------------------------------------------------
-# A9 07 点赞仙宫 #tagCGLikeXiangong
-
-class  tagCGLikeXiangong(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("XiangongID", c_ushort),    # 仙宫ID,为0时代表每日的仙宫点赞
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA9
-        self.SubCmd = 0x07
-        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 = 0xA9
-        self.SubCmd = 0x07
-        self.XiangongID = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagCGLikeXiangong)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// A9 07 点赞仙宫 //tagCGLikeXiangong:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                XiangongID:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.XiangongID
-                                )
-        return DumpString
-
-
-m_NAtagCGLikeXiangong=tagCGLikeXiangong()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGLikeXiangong.Cmd,m_NAtagCGLikeXiangong.SubCmd))] = m_NAtagCGLikeXiangong
-
-
-#------------------------------------------------------
 # A9 A5 查看竞技场对战玩家最新信息 #tagCGQueryArenaBattlePlayer
 
 class  tagCGQueryArenaBattlePlayer(Structure):
@@ -8662,58 +7965,6 @@
 
 m_NAtagCGQueryRecommendFriends=tagCGQueryRecommendFriends()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGQueryRecommendFriends.Cmd,m_NAtagCGQueryRecommendFriends.SubCmd))] = m_NAtagCGQueryRecommendFriends
-
-
-#------------------------------------------------------
-# A9 06 查看仙宫仙名录 #tagCGQueryXiangongRecPlayers
-
-class  tagCGQueryXiangongRecPlayers(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("XiangongID", c_ushort),    # 仙宫ID
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA9
-        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 = 0xA9
-        self.SubCmd = 0x06
-        self.XiangongID = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagCGQueryXiangongRecPlayers)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// A9 06 查看仙宫仙名录 //tagCGQueryXiangongRecPlayers:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                XiangongID:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.XiangongID
-                                )
-        return DumpString
-
-
-m_NAtagCGQueryXiangongRecPlayers=tagCGQueryXiangongRecPlayers()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGQueryXiangongRecPlayers.Cmd,m_NAtagCGQueryXiangongRecPlayers.SubCmd))] = m_NAtagCGQueryXiangongRecPlayers
 
 
 #------------------------------------------------------
@@ -9701,73 +8952,6 @@
 
 
 #------------------------------------------------------
-# B2 11 激活功能系统特权奖励 #tagCMActivateFuncSysPrivilege
-
-class  tagCMActivateFuncSysPrivilege(Structure):
-    Head = tagHead()
-    ActivateCount = 0    #(BYTE ActivateCount)// 激活个数
-    ActivateFuncSysIDList = list()    #(vector<BYTE> ActivateFuncSysIDList)// 激活功能系统ID列表,全部激活则需要发所有ID列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xB2
-        self.Head.SubCmd = 0x11
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.ActivateCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.ActivateCount):
-            value,_pos=CommFunc.ReadBYTE(_lpData,_pos)
-            self.ActivateFuncSysIDList.append(value)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xB2
-        self.Head.SubCmd = 0x11
-        self.ActivateCount = 0
-        self.ActivateFuncSysIDList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        length += 1 * self.ActivateCount
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.ActivateCount)
-        for i in range(self.ActivateCount):
-            data = CommFunc.WriteBYTE(data, self.ActivateFuncSysIDList[i])
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                ActivateCount:%d,
-                                ActivateFuncSysIDList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.ActivateCount,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagCMActivateFuncSysPrivilege=tagCMActivateFuncSysPrivilege()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActivateFuncSysPrivilege.Head.Cmd,m_NAtagCMActivateFuncSysPrivilege.Head.SubCmd))] = m_NAtagCMActivateFuncSysPrivilege
-
-
-#------------------------------------------------------
 # B2 06 玩家加点 #tagCMAddPoint
 
 class  tagCMAddPoint(Structure):
@@ -10316,62 +9500,6 @@
 
 m_NAtagCSFuncPresetUpdName=tagCSFuncPresetUpdName()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCSFuncPresetUpdName.Head.Cmd,m_NAtagCSFuncPresetUpdName.Head.SubCmd))] = m_NAtagCSFuncPresetUpdName
-
-
-#------------------------------------------------------
-# B2 12 领取功能系统特权奖励 #tagCMGetFuncSysPrivilegeAward
-
-class  tagCMGetFuncSysPrivilegeAward(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("FuncSysID", c_ubyte),    # 功能系统ID
-                  ("DayNum", c_ubyte),    # 第X天,1为第1天
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xB2
-        self.SubCmd = 0x12
-        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 = 0xB2
-        self.SubCmd = 0x12
-        self.FuncSysID = 0
-        self.DayNum = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagCMGetFuncSysPrivilegeAward)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// B2 12 领取功能系统特权奖励 //tagCMGetFuncSysPrivilegeAward:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                FuncSysID:%d,
-                                DayNum:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.FuncSysID,
-                                self.DayNum
-                                )
-        return DumpString
-
-
-m_NAtagCMGetFuncSysPrivilegeAward=tagCMGetFuncSysPrivilegeAward()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMGetFuncSysPrivilegeAward.Cmd,m_NAtagCMGetFuncSysPrivilegeAward.SubCmd))] = m_NAtagCMGetFuncSysPrivilegeAward
 
 
 #------------------------------------------------------
@@ -11863,606 +10991,6 @@
 
 
 #------------------------------------------------------
-# B3 19 提升魅力等级 #tagCGCharmLVUp
-
-class  tagCGCharmLVUp(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xB3
-        self.SubCmd = 0x19
-        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 = 0xB3
-        self.SubCmd = 0x19
-        return
-
-    def GetLength(self):
-        return sizeof(tagCGCharmLVUp)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// B3 19 提升魅力等级 //tagCGCharmLVUp:
-                                Cmd:%s,
-                                SubCmd:%s
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd
-                                )
-        return DumpString
-
-
-m_NAtagCGCharmLVUp=tagCGCharmLVUp()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGCharmLVUp.Cmd,m_NAtagCGCharmLVUp.SubCmd))] = m_NAtagCGCharmLVUp
-
-
-#------------------------------------------------------
-# B3 09 魅力贡献榜查看 #tagCGCharmOfferBillboardQuery
-
-class  tagCGCharmOfferBillboardQuery(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("PlayerID", c_int),    # 魅力玩家ID
-                  ("QueryType", c_ubyte),    # 查看类型: 1-总榜,2-周榜,3-日榜
-                  ("QueryCount", c_ubyte),    # 查看名次数量,最大255
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xB3
-        self.SubCmd = 0x09
-        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 = 0xB3
-        self.SubCmd = 0x09
-        self.PlayerID = 0
-        self.QueryType = 0
-        self.QueryCount = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagCGCharmOfferBillboardQuery)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// B3 09 魅力贡献榜查看 //tagCGCharmOfferBillboardQuery:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                PlayerID:%d,
-                                QueryType:%d,
-                                QueryCount:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.PlayerID,
-                                self.QueryType,
-                                self.QueryCount
-                                )
-        return DumpString
-
-
-m_NAtagCGCharmOfferBillboardQuery=tagCGCharmOfferBillboardQuery()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGCharmOfferBillboardQuery.Cmd,m_NAtagCGCharmOfferBillboardQuery.SubCmd))] = m_NAtagCGCharmOfferBillboardQuery
-
-
-#------------------------------------------------------
-# B3 17 情戒解锁 #tagCMLoveRingUnlock
-
-class  tagCMLoveRingUnlock(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xB3
-        self.SubCmd = 0x17
-        return
-
-    def ReadData(self, stringData, _pos=0, _len=0):
-        self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
-
-    def Clear(self):
-        self.Cmd = 0xB3
-        self.SubCmd = 0x17
-        return
-
-    def GetLength(self):
-        return sizeof(tagCMLoveRingUnlock)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// B3 17 情戒解锁 //tagCMLoveRingUnlock:
-                                Cmd:%s,
-                                SubCmd:%s
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd
-                                )
-        return DumpString
-
-
-m_NAtagCMLoveRingUnlock=tagCMLoveRingUnlock()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMLoveRingUnlock.Cmd,m_NAtagCMLoveRingUnlock.SubCmd))] = m_NAtagCMLoveRingUnlock
-
-
-#------------------------------------------------------
-# B3 18 情戒升级 #tagCMLoveRingUp
-
-class  tagCMLoveRingUp(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("UseItemCnt", c_int),    #消耗材料个数
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xB3
-        self.SubCmd = 0x18
-        return
-
-    def ReadData(self, stringData, _pos=0, _len=0):
-        self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
-
-    def Clear(self):
-        self.Cmd = 0xB3
-        self.SubCmd = 0x18
-        self.UseItemCnt = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagCMLoveRingUp)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// B3 18 情戒升级 //tagCMLoveRingUp:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                UseItemCnt:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.UseItemCnt
-                                )
-        return DumpString
-
-
-m_NAtagCMLoveRingUp=tagCMLoveRingUp()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMLoveRingUp.Cmd,m_NAtagCMLoveRingUp.SubCmd))] = m_NAtagCMLoveRingUp
-
-
-#------------------------------------------------------
-# B3 15 离婚 #tagCMMarryBreak
-
-class  tagCMMarryBreak(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("BreakType", c_ubyte),    # 0-和平离婚;1-强制离婚
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xB3
-        self.SubCmd = 0x15
-        return
-
-    def ReadData(self, stringData, _pos=0, _len=0):
-        self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
-
-    def Clear(self):
-        self.Cmd = 0xB3
-        self.SubCmd = 0x15
-        self.BreakType = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagCMMarryBreak)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// B3 15 离婚 //tagCMMarryBreak:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                BreakType:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.BreakType
-                                )
-        return DumpString
-
-
-m_NAtagCMMarryBreak=tagCMMarryBreak()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMMarryBreak.Cmd,m_NAtagCMMarryBreak.SubCmd))] = m_NAtagCMMarryBreak
-
-
-#------------------------------------------------------
-# B3 16 和平离婚回应 #tagGCMarryBreakResponse
-
-class  tagGCMarryBreakResponse(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("IsOK", c_ubyte),    # 是否同意,0-否,1-是
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xB3
-        self.SubCmd = 0x16
-        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 = 0xB3
-        self.SubCmd = 0x16
-        self.IsOK = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagGCMarryBreakResponse)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// B3 16 和平离婚回应 //tagGCMarryBreakResponse:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                IsOK:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.IsOK
-                                )
-        return DumpString
-
-
-m_NAtagGCMarryBreakResponse=tagGCMarryBreakResponse()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCMarryBreakResponse.Cmd,m_NAtagGCMarryBreakResponse.SubCmd))] = m_NAtagGCMarryBreakResponse
-
-
-#------------------------------------------------------
-# B3 14 购买婚礼烟花 #tagCMMarryBuyFireworks
-
-class  tagCMMarryBuyFireworks(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("PlayerIDA", c_int),    # 喜糖所属玩家IDA
-                  ("PlayerIDB", c_int),    # 喜糖所属玩家IDB
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xB3
-        self.SubCmd = 0x14
-        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 = 0xB3
-        self.SubCmd = 0x14
-        self.PlayerIDA = 0
-        self.PlayerIDB = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagCMMarryBuyFireworks)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// B3 14 购买婚礼烟花 //tagCMMarryBuyFireworks:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                PlayerIDA:%d,
-                                PlayerIDB:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.PlayerIDA,
-                                self.PlayerIDB
-                                )
-        return DumpString
-
-
-m_NAtagCMMarryBuyFireworks=tagCMMarryBuyFireworks()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMMarryBuyFireworks.Cmd,m_NAtagCMMarryBuyFireworks.SubCmd))] = m_NAtagCMMarryBuyFireworks
-
-
-#------------------------------------------------------
-# B3 13 吃喜糖 #tagCMMarryEatCandy
-
-class  tagCMMarryEatCandy(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("PlayerIDA", c_int),    # 喜糖所属玩家IDA
-                  ("PlayerIDB", c_int),    # 喜糖所属玩家IDB
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xB3
-        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 = 0xB3
-        self.SubCmd = 0x13
-        self.PlayerIDA = 0
-        self.PlayerIDB = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagCMMarryEatCandy)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// B3 13 吃喜糖 //tagCMMarryEatCandy:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                PlayerIDA:%d,
-                                PlayerIDB:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.PlayerIDA,
-                                self.PlayerIDB
-                                )
-        return DumpString
-
-
-m_NAtagCMMarryEatCandy=tagCMMarryEatCandy()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMMarryEatCandy.Cmd,m_NAtagCMMarryEatCandy.SubCmd))] = m_NAtagCMMarryEatCandy
-
-
-#------------------------------------------------------
-# B3 11 提亲 #tagCMMarryReq
-
-class  tagCMMarryReq(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("TagPlayerID", c_int),    # 目标玩家ID
-                  ("BridePriceID", c_ubyte),    # 聘礼ID
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xB3
-        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 = 0xB3
-        self.SubCmd = 0x11
-        self.TagPlayerID = 0
-        self.BridePriceID = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagCMMarryReq)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// B3 11 提亲 //tagCMMarryReq:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                TagPlayerID:%d,
-                                BridePriceID:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.TagPlayerID,
-                                self.BridePriceID
-                                )
-        return DumpString
-
-
-m_NAtagCMMarryReq=tagCMMarryReq()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMMarryReq.Cmd,m_NAtagCMMarryReq.SubCmd))] = m_NAtagCMMarryReq
-
-
-#------------------------------------------------------
-# B3 12 提亲回应 #tagCGMarryResponse
-
-class  tagCGMarryResponse(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("ReqPlayerID", c_int),    # 提亲的玩家ID
-                  ("IsOK", c_ubyte),    # 是否同意,0-否,1-是
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xB3
-        self.SubCmd = 0x12
-        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 = 0xB3
-        self.SubCmd = 0x12
-        self.ReqPlayerID = 0
-        self.IsOK = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagCGMarryResponse)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// B3 12 提亲回应 //tagCGMarryResponse:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                ReqPlayerID:%d,
-                                IsOK:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.ReqPlayerID,
-                                self.IsOK
-                                )
-        return DumpString
-
-
-m_NAtagCGMarryResponse=tagCGMarryResponse()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGMarryResponse.Cmd,m_NAtagCGMarryResponse.SubCmd))] = m_NAtagCGMarryResponse
-
-
-#------------------------------------------------------
-# B3 10 送礼物 #tagCMSendGifts
-
-class  tagCMSendGifts(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("TagPlayerID", c_int),    # 目标玩家ID
-                  ("GiftNum", c_ushort),    # 赠送礼物编号
-                  ("GiftCount", c_int),    # 赠送礼物数量
-                  ("IsAutoBuy", c_ubyte),    # 是否自动购买
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xB3
-        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 = 0xB3
-        self.SubCmd = 0x10
-        self.TagPlayerID = 0
-        self.GiftNum = 0
-        self.GiftCount = 0
-        self.IsAutoBuy = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagCMSendGifts)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// B3 10 送礼物 //tagCMSendGifts:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                TagPlayerID:%d,
-                                GiftNum:%d,
-                                GiftCount:%d,
-                                IsAutoBuy:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.TagPlayerID,
-                                self.GiftNum,
-                                self.GiftCount,
-                                self.IsAutoBuy
-                                )
-        return DumpString
-
-
-m_NAtagCMSendGifts=tagCMSendGifts()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMSendGifts.Cmd,m_NAtagCMSendGifts.SubCmd))] = m_NAtagCMSendGifts
-
-
-#------------------------------------------------------
 #B3 04 加入黑名单 #tagCGAddBlackList
 
 class  tagCGAddBlackList(Structure):
@@ -13900,62 +12428,6 @@
 
 m_NAtagCMUseSkillEx=tagCMUseSkillEx()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMUseSkillEx.Cmd,m_NAtagCMUseSkillEx.SubCmd))] = m_NAtagCMUseSkillEx
-
-
-#------------------------------------------------------
-# B4 0D 战斗印记 #tagCMYinji
-
-class  tagCMYinji(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("Count", c_ubyte),    
-                  ("Type", c_ubyte),    # 0 加,1减
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xB4
-        self.SubCmd = 0x0D
-        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 = 0xB4
-        self.SubCmd = 0x0D
-        self.Count = 0
-        self.Type = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagCMYinji)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// B4 0D 战斗印记 //tagCMYinji:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                Count:%d,
-                                Type:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.Count,
-                                self.Type
-                                )
-        return DumpString
-
-
-m_NAtagCMYinji=tagCMYinji()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMYinji.Cmd,m_NAtagCMYinji.SubCmd))] = m_NAtagCMYinji
 
 
 #------------------------------------------------------
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
index aad6ec3..f22632b 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -1218,742 +1218,6 @@
 
 
 #------------------------------------------------------
-# A1 12 玩家初始化 #tagMCDBPlayer
-
-class  tagMCDBPlayer(Structure):
-    Head = tagHead()
-    AccID = ""    #(char AccID[65])//帐号名, 该角色所在的帐号的用户名
-    PlayerID = 0    #(DWORD PlayerID)
-    PlayerName = ""    #(char PlayerName[33])//size = 14
-    AccState = 0    #(BYTE AccState)//0: 未创建, 1: 创建OK,正常登录 2:封号 3:已删除
-    GMLevel = 0    #(BYTE GMLevel)//GM等级, 0:不是GM  >=1 : GM的等级
-    Sex = 0    #(BYTE Sex)//性别
-    Job = 0    #(BYTE Job)//职业, 0.新手 1.游侠 2.战士 3.弓箭手 4.术士 5.道士
-    ReincarnationLv = 0    #(WORD ReincarnationLv)// 转生等级
-    LV = 0    #(WORD LV)//等级
-    LVEx = 0    #(WORD LVEx)//玩家等级副本,用于转生
-    LV2 = 0    #(WORD LV2)//大师等级
-    ExpPoint = 0    #(DWORD ExpPoint)//扩充经验点数
-    TotalExp = 0    #(DWORD TotalExp)//总经验
-    Family = 0    #(DWORD Family)//家族
-    FamilyName = ""    #(char FamilyName[33])//家族名称
-    TeamHornor = 0    #(int TeamHornor)//组队荣誉
-    FamilyHornor = 0    #(int FamilyHornor)//家族荣耀
-    FamilyActiveValue = 0    #(int FamilyActiveValue)//家族活跃度
-    LastWeekFamilyActiveValue = 0    #(int LastWeekFamilyActiveValue)//上周家族活跃度
-    CountryHornor = 0    #(int CountryHornor)//本周国家功勋值
-    CountryLastWeekHornor = 0    #(int CountryLastWeekHornor)//上周国家功勋值
-    Mate = 0    #(DWORD Mate)
-    Gold = 0    #(DWORD Gold)//金子
-    GoldPaper = 0    #(DWORD GoldPaper)//金票
-    Silver = 0    #(DWORD Silver)//银子
-    SilverPaper = 0    #(DWORD SilverPaper)//银票
-    FightPoint = 0    #(DWORD FightPoint)//战斗值
-    HappyPoint = 0    #(DWORD HappyPoint)//脱机挂时长(秒)
-    LineID = 0    #(BYTE LineID)//角色所在线路
-    MapID = 0    #(WORD MapID)//角色所在地图
-    PosX = 0    #(WORD PosX)//角色坐标
-    PosY = 0    #(WORD PosY)
-    RebornMapID = 0    #(WORD RebornMapID)//重生点地图ID
-    RebornPosX = 0    #(WORD RebornPosX)
-    RebornPosY = 0    #(WORD RebornPosY)
-    State = 0    #(BYTE State)//角色状态   0.正常在线1.脱机挂在线 2脱机挂死亡
-    HP = 0    #(DWORD HP)//当前HP
-    XP = 0    #(DWORD XP)//当前XP
-    HPRestoreSetting = 0    #(WORD HPRestoreSetting)//少于这个值%自动喝血
-    MPRestoreSetting = 0    #(WORD MPRestoreSetting)//少于这个值%自动喝魔
-    FreePoint = 0    #(DWORD FreePoint)//未分配点数
-    FreeSkillPoint = 0    #(DWORD FreeSkillPoint)//未分配的技能点
-    BaseSTR = 0    #(int BaseSTR)//裸体力量
-    BasePNE = 0    #(int BasePNE)//裸体真元
-    BasePHY = 0    #(int BasePHY)//裸体筋骨
-    BaseCON = 0    #(int BaseCON)//裸体体魄
-    STR = 0    #(int STR)//力量
-    PNE = 0    #(int PNE)//真元
-    PHY = 0    #(int PHY)//筋骨
-    CON = 0    #(int CON)//体魄
-    PKValue = 0    #(WORD PKValue)//衡量PK能力的一项属性,由攻防计算而得
-    BackpackLV = 0    #(BYTE BackpackLV)//背包等级
-    WarehouseLV = 0    #(BYTE WarehouseLV)//仓库等级
-    TeamID = 0    #(DWORD TeamID)//队伍ID
-    UseGoldType = 0    #(BYTE UseGoldType)//默认用金子/金票		类型为MoneyType
-    UseSilverType = 0    #(BYTE UseSilverType)//默认用的银子/银票
-    AttackMode = 0    #(BYTE AttackMode)//攻击模式
-    LastWeekOnlineTime = 0    #(DWORD LastWeekOnlineTime)//上周在线时间
-    FBID = 0    #(BYTE FBID)//fb id
-    FamilyLV = 0    #(BYTE FamilyLV)//家族等级
-    FriendFavor = 0    #(DWORD FriendFavor)//好友人气值
-    Energy = 0    #(DWORD Energy)//精力值
-    EquipShowSwitch = 0    #(DWORD EquipShowSwitch)//装备显示开关
-    LuckValue = 0    #(DWORD LuckValue)//幸运值
-    ExAttr1 = 0    #(DWORD ExAttr1)//扩展属性1,各项目专用
-    ExAttr2 = 0    #(DWORD ExAttr2)//扩展属性2,各项目专用
-    ExAttr3 = 0    #(DWORD ExAttr3)//扩展属性3,各项目专用
-    ExAttr4 = 0    #(DWORD ExAttr4)//扩展属性4,各项目专用
-    ExAttr5 = 0    #(DWORD ExAttr5)//扩展属性5,各项目专用
-    Faction = 0    #(BYTE Faction)//阵营
-    InfamyValue = 0    #(DWORD InfamyValue)//恶名值
-    OfficialRank = 0    #(BYTE OfficialRank)//官阶,官职等级
-    ChangeCoinPointTotal = 0    #(DWORD ChangeCoinPointTotal)//兑换的点数总计
-    VIPLv = 0    #(BYTE VIPLv)//VIP等级
-    VIPLvForPhone = 0    #(BYTE VIPLvForPhone)//移动VIP等级
-    ExAttr6 = 0    #(DWORD ExAttr6)//扩展属性6,各项目专用
-    ExAttr7 = 0    #(DWORD ExAttr7)//扩展属性7,各项目专用
-    ExAttr8 = 0    #(DWORD ExAttr8)//扩展属性8,各项目专用
-    ExAttr9 = 0    #(DWORD ExAttr9)//扩展属性9,各项目专用
-    ExAttr10 = 0    #(DWORD ExAttr10)//扩展属性10,各项目专用
-    ModelMark = 0    #(DWORD ModelMark)// 变形模型mark
-    ExAttr11 = 0    #(DWORD ExAttr11)//预留的扩展属性字段,用来存放项目特定的属性
-    ExAttr12 = 0    #(DWORD ExAttr12)//预留的扩展属性字段,用来存放项目特定的属性
-    ExAttr13 = 0    #(DWORD ExAttr13)//预留的扩展属性字段,用来存放项目特定的属性
-    ExAttr14 = 0    #(DWORD ExAttr14)//预留的扩展属性字段,用来存放项目特定的属性
-    OperateInfo = 0    #(DWORD OperateInfo)//玩家附加运营商信息
-    Operate = ""    #(char Operate[15])//所属运营商平台名
-    ServerID = 0    #(DWORD ServerID)//所属区服ID
-    ExAttr15 = 0    #(DWORD ExAttr15)//预留的扩展属性字段,用来存放项目特定的属性
-    ExAttr16 = 0    #(DWORD ExAttr16)//预留的扩展属性字段,用来存放项目特定的属性
-    ExAttr17 = 0    #(DWORD ExAttr17)//预留的扩展属性字段,用来存放项目特定的属性
-    ExAttr18 = 0    #(DWORD ExAttr18)//预留的扩展属性字段,用来存放项目特定的属性
-    ExAttr19 = 0    #(DWORD ExAttr19)//预留的扩展属性字段,用来存放项目特定的属性
-    ExAttr20 = 0    #(DWORD ExAttr20)//预留的扩展属性字段,用来存放项目特定的属性
-    HPEx = 0    #(DWORD HPEx)//当前血量 超过E的记录
-    Face = 0    #(DWORD Face)//基本脸型
-    FacePic = 0    #(DWORD FacePic)//头像框
-    RoleType = 0    #(DWORD RoleType)//角色类型(各项目可自定义含义,如种族,与职业区分)
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xA1
-        self.Head.SubCmd = 0x12
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.AccID,_pos = CommFunc.ReadString(_lpData, _pos,65)
-        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33)
-        self.AccState,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.GMLevel,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.Sex,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.ReincarnationLv,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.LVEx,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.LV2,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.ExpPoint,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.TotalExp,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Family,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.FamilyName,_pos = CommFunc.ReadString(_lpData, _pos,33)
-        self.TeamHornor,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.FamilyHornor,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.FamilyActiveValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.LastWeekFamilyActiveValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.CountryHornor,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.CountryLastWeekHornor,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Mate,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Gold,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.GoldPaper,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Silver,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.SilverPaper,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.FightPoint,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.HappyPoint,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.LineID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.MapID,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.PosX,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.PosY,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.RebornMapID,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.RebornPosX,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.RebornPosY,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.State,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.HP,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.XP,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.HPRestoreSetting,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.MPRestoreSetting,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.FreePoint,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.FreeSkillPoint,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.BaseSTR,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.BasePNE,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.BasePHY,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.BaseCON,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.STR,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.PNE,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.PHY,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.CON,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.PKValue,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.BackpackLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.WarehouseLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.TeamID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.UseGoldType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.UseSilverType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.AttackMode,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.LastWeekOnlineTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.FBID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.FamilyLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.FriendFavor,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Energy,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.EquipShowSwitch,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.LuckValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.ExAttr1,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.ExAttr2,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.ExAttr3,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.ExAttr4,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.ExAttr5,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Faction,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.InfamyValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.OfficialRank,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.ChangeCoinPointTotal,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.VIPLv,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.VIPLvForPhone,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.ExAttr6,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.ExAttr7,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.ExAttr8,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.ExAttr9,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.ExAttr10,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.ModelMark,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.ExAttr11,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.ExAttr12,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.ExAttr13,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.ExAttr14,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.OperateInfo,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Operate,_pos = CommFunc.ReadString(_lpData, _pos,15)
-        self.ServerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.ExAttr15,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.ExAttr16,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.ExAttr17,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.ExAttr18,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.ExAttr19,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.ExAttr20,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.HPEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.RoleType,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xA1
-        self.Head.SubCmd = 0x12
-        self.AccID = ""
-        self.PlayerID = 0
-        self.PlayerName = ""
-        self.AccState = 0
-        self.GMLevel = 0
-        self.Sex = 0
-        self.Job = 0
-        self.ReincarnationLv = 0
-        self.LV = 0
-        self.LVEx = 0
-        self.LV2 = 0
-        self.ExpPoint = 0
-        self.TotalExp = 0
-        self.Family = 0
-        self.FamilyName = ""
-        self.TeamHornor = 0
-        self.FamilyHornor = 0
-        self.FamilyActiveValue = 0
-        self.LastWeekFamilyActiveValue = 0
-        self.CountryHornor = 0
-        self.CountryLastWeekHornor = 0
-        self.Mate = 0
-        self.Gold = 0
-        self.GoldPaper = 0
-        self.Silver = 0
-        self.SilverPaper = 0
-        self.FightPoint = 0
-        self.HappyPoint = 0
-        self.LineID = 0
-        self.MapID = 0
-        self.PosX = 0
-        self.PosY = 0
-        self.RebornMapID = 0
-        self.RebornPosX = 0
-        self.RebornPosY = 0
-        self.State = 0
-        self.HP = 0
-        self.XP = 0
-        self.HPRestoreSetting = 0
-        self.MPRestoreSetting = 0
-        self.FreePoint = 0
-        self.FreeSkillPoint = 0
-        self.BaseSTR = 0
-        self.BasePNE = 0
-        self.BasePHY = 0
-        self.BaseCON = 0
-        self.STR = 0
-        self.PNE = 0
-        self.PHY = 0
-        self.CON = 0
-        self.PKValue = 0
-        self.BackpackLV = 0
-        self.WarehouseLV = 0
-        self.TeamID = 0
-        self.UseGoldType = 0
-        self.UseSilverType = 0
-        self.AttackMode = 0
-        self.LastWeekOnlineTime = 0
-        self.FBID = 0
-        self.FamilyLV = 0
-        self.FriendFavor = 0
-        self.Energy = 0
-        self.EquipShowSwitch = 0
-        self.LuckValue = 0
-        self.ExAttr1 = 0
-        self.ExAttr2 = 0
-        self.ExAttr3 = 0
-        self.ExAttr4 = 0
-        self.ExAttr5 = 0
-        self.Faction = 0
-        self.InfamyValue = 0
-        self.OfficialRank = 0
-        self.ChangeCoinPointTotal = 0
-        self.VIPLv = 0
-        self.VIPLvForPhone = 0
-        self.ExAttr6 = 0
-        self.ExAttr7 = 0
-        self.ExAttr8 = 0
-        self.ExAttr9 = 0
-        self.ExAttr10 = 0
-        self.ModelMark = 0
-        self.ExAttr11 = 0
-        self.ExAttr12 = 0
-        self.ExAttr13 = 0
-        self.ExAttr14 = 0
-        self.OperateInfo = 0
-        self.Operate = ""
-        self.ServerID = 0
-        self.ExAttr15 = 0
-        self.ExAttr16 = 0
-        self.ExAttr17 = 0
-        self.ExAttr18 = 0
-        self.ExAttr19 = 0
-        self.ExAttr20 = 0
-        self.HPEx = 0
-        self.Face = 0
-        self.FacePic = 0
-        self.RoleType = 0
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 65
-        length += 4
-        length += 33
-        length += 1
-        length += 1
-        length += 1
-        length += 1
-        length += 2
-        length += 2
-        length += 2
-        length += 2
-        length += 4
-        length += 4
-        length += 4
-        length += 33
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 1
-        length += 2
-        length += 2
-        length += 2
-        length += 2
-        length += 2
-        length += 2
-        length += 1
-        length += 4
-        length += 4
-        length += 2
-        length += 2
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 2
-        length += 1
-        length += 1
-        length += 4
-        length += 1
-        length += 1
-        length += 1
-        length += 4
-        length += 1
-        length += 1
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 1
-        length += 4
-        length += 1
-        length += 4
-        length += 1
-        length += 1
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 15
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteString(data, 65, self.AccID)
-        data = CommFunc.WriteDWORD(data, self.PlayerID)
-        data = CommFunc.WriteString(data, 33, self.PlayerName)
-        data = CommFunc.WriteBYTE(data, self.AccState)
-        data = CommFunc.WriteBYTE(data, self.GMLevel)
-        data = CommFunc.WriteBYTE(data, self.Sex)
-        data = CommFunc.WriteBYTE(data, self.Job)
-        data = CommFunc.WriteWORD(data, self.ReincarnationLv)
-        data = CommFunc.WriteWORD(data, self.LV)
-        data = CommFunc.WriteWORD(data, self.LVEx)
-        data = CommFunc.WriteWORD(data, self.LV2)
-        data = CommFunc.WriteDWORD(data, self.ExpPoint)
-        data = CommFunc.WriteDWORD(data, self.TotalExp)
-        data = CommFunc.WriteDWORD(data, self.Family)
-        data = CommFunc.WriteString(data, 33, self.FamilyName)
-        data = CommFunc.WriteDWORD(data, self.TeamHornor)
-        data = CommFunc.WriteDWORD(data, self.FamilyHornor)
-        data = CommFunc.WriteDWORD(data, self.FamilyActiveValue)
-        data = CommFunc.WriteDWORD(data, self.LastWeekFamilyActiveValue)
-        data = CommFunc.WriteDWORD(data, self.CountryHornor)
-        data = CommFunc.WriteDWORD(data, self.CountryLastWeekHornor)
-        data = CommFunc.WriteDWORD(data, self.Mate)
-        data = CommFunc.WriteDWORD(data, self.Gold)
-        data = CommFunc.WriteDWORD(data, self.GoldPaper)
-        data = CommFunc.WriteDWORD(data, self.Silver)
-        data = CommFunc.WriteDWORD(data, self.SilverPaper)
-        data = CommFunc.WriteDWORD(data, self.FightPoint)
-        data = CommFunc.WriteDWORD(data, self.HappyPoint)
-        data = CommFunc.WriteBYTE(data, self.LineID)
-        data = CommFunc.WriteWORD(data, self.MapID)
-        data = CommFunc.WriteWORD(data, self.PosX)
-        data = CommFunc.WriteWORD(data, self.PosY)
-        data = CommFunc.WriteWORD(data, self.RebornMapID)
-        data = CommFunc.WriteWORD(data, self.RebornPosX)
-        data = CommFunc.WriteWORD(data, self.RebornPosY)
-        data = CommFunc.WriteBYTE(data, self.State)
-        data = CommFunc.WriteDWORD(data, self.HP)
-        data = CommFunc.WriteDWORD(data, self.XP)
-        data = CommFunc.WriteWORD(data, self.HPRestoreSetting)
-        data = CommFunc.WriteWORD(data, self.MPRestoreSetting)
-        data = CommFunc.WriteDWORD(data, self.FreePoint)
-        data = CommFunc.WriteDWORD(data, self.FreeSkillPoint)
-        data = CommFunc.WriteDWORD(data, self.BaseSTR)
-        data = CommFunc.WriteDWORD(data, self.BasePNE)
-        data = CommFunc.WriteDWORD(data, self.BasePHY)
-        data = CommFunc.WriteDWORD(data, self.BaseCON)
-        data = CommFunc.WriteDWORD(data, self.STR)
-        data = CommFunc.WriteDWORD(data, self.PNE)
-        data = CommFunc.WriteDWORD(data, self.PHY)
-        data = CommFunc.WriteDWORD(data, self.CON)
-        data = CommFunc.WriteWORD(data, self.PKValue)
-        data = CommFunc.WriteBYTE(data, self.BackpackLV)
-        data = CommFunc.WriteBYTE(data, self.WarehouseLV)
-        data = CommFunc.WriteDWORD(data, self.TeamID)
-        data = CommFunc.WriteBYTE(data, self.UseGoldType)
-        data = CommFunc.WriteBYTE(data, self.UseSilverType)
-        data = CommFunc.WriteBYTE(data, self.AttackMode)
-        data = CommFunc.WriteDWORD(data, self.LastWeekOnlineTime)
-        data = CommFunc.WriteBYTE(data, self.FBID)
-        data = CommFunc.WriteBYTE(data, self.FamilyLV)
-        data = CommFunc.WriteDWORD(data, self.FriendFavor)
-        data = CommFunc.WriteDWORD(data, self.Energy)
-        data = CommFunc.WriteDWORD(data, self.EquipShowSwitch)
-        data = CommFunc.WriteDWORD(data, self.LuckValue)
-        data = CommFunc.WriteDWORD(data, self.ExAttr1)
-        data = CommFunc.WriteDWORD(data, self.ExAttr2)
-        data = CommFunc.WriteDWORD(data, self.ExAttr3)
-        data = CommFunc.WriteDWORD(data, self.ExAttr4)
-        data = CommFunc.WriteDWORD(data, self.ExAttr5)
-        data = CommFunc.WriteBYTE(data, self.Faction)
-        data = CommFunc.WriteDWORD(data, self.InfamyValue)
-        data = CommFunc.WriteBYTE(data, self.OfficialRank)
-        data = CommFunc.WriteDWORD(data, self.ChangeCoinPointTotal)
-        data = CommFunc.WriteBYTE(data, self.VIPLv)
-        data = CommFunc.WriteBYTE(data, self.VIPLvForPhone)
-        data = CommFunc.WriteDWORD(data, self.ExAttr6)
-        data = CommFunc.WriteDWORD(data, self.ExAttr7)
-        data = CommFunc.WriteDWORD(data, self.ExAttr8)
-        data = CommFunc.WriteDWORD(data, self.ExAttr9)
-        data = CommFunc.WriteDWORD(data, self.ExAttr10)
-        data = CommFunc.WriteDWORD(data, self.ModelMark)
-        data = CommFunc.WriteDWORD(data, self.ExAttr11)
-        data = CommFunc.WriteDWORD(data, self.ExAttr12)
-        data = CommFunc.WriteDWORD(data, self.ExAttr13)
-        data = CommFunc.WriteDWORD(data, self.ExAttr14)
-        data = CommFunc.WriteDWORD(data, self.OperateInfo)
-        data = CommFunc.WriteString(data, 15, self.Operate)
-        data = CommFunc.WriteDWORD(data, self.ServerID)
-        data = CommFunc.WriteDWORD(data, self.ExAttr15)
-        data = CommFunc.WriteDWORD(data, self.ExAttr16)
-        data = CommFunc.WriteDWORD(data, self.ExAttr17)
-        data = CommFunc.WriteDWORD(data, self.ExAttr18)
-        data = CommFunc.WriteDWORD(data, self.ExAttr19)
-        data = CommFunc.WriteDWORD(data, self.ExAttr20)
-        data = CommFunc.WriteDWORD(data, self.HPEx)
-        data = CommFunc.WriteDWORD(data, self.Face)
-        data = CommFunc.WriteDWORD(data, self.FacePic)
-        data = CommFunc.WriteDWORD(data, self.RoleType)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                AccID:%s,
-                                PlayerID:%d,
-                                PlayerName:%s,
-                                AccState:%d,
-                                GMLevel:%d,
-                                Sex:%d,
-                                Job:%d,
-                                ReincarnationLv:%d,
-                                LV:%d,
-                                LVEx:%d,
-                                LV2:%d,
-                                ExpPoint:%d,
-                                TotalExp:%d,
-                                Family:%d,
-                                FamilyName:%s,
-                                TeamHornor:%d,
-                                FamilyHornor:%d,
-                                FamilyActiveValue:%d,
-                                LastWeekFamilyActiveValue:%d,
-                                CountryHornor:%d,
-                                CountryLastWeekHornor:%d,
-                                Mate:%d,
-                                Gold:%d,
-                                GoldPaper:%d,
-                                Silver:%d,
-                                SilverPaper:%d,
-                                FightPoint:%d,
-                                HappyPoint:%d,
-                                LineID:%d,
-                                MapID:%d,
-                                PosX:%d,
-                                PosY:%d,
-                                RebornMapID:%d,
-                                RebornPosX:%d,
-                                RebornPosY:%d,
-                                State:%d,
-                                HP:%d,
-                                XP:%d,
-                                HPRestoreSetting:%d,
-                                MPRestoreSetting:%d,
-                                FreePoint:%d,
-                                FreeSkillPoint:%d,
-                                BaseSTR:%d,
-                                BasePNE:%d,
-                                BasePHY:%d,
-                                BaseCON:%d,
-                                STR:%d,
-                                PNE:%d,
-                                PHY:%d,
-                                CON:%d,
-                                PKValue:%d,
-                                BackpackLV:%d,
-                                WarehouseLV:%d,
-                                TeamID:%d,
-                                UseGoldType:%d,
-                                UseSilverType:%d,
-                                AttackMode:%d,
-                                LastWeekOnlineTime:%d,
-                                FBID:%d,
-                                FamilyLV:%d,
-                                FriendFavor:%d,
-                                Energy:%d,
-                                EquipShowSwitch:%d,
-                                LuckValue:%d,
-                                ExAttr1:%d,
-                                ExAttr2:%d,
-                                ExAttr3:%d,
-                                ExAttr4:%d,
-                                ExAttr5:%d,
-                                Faction:%d,
-                                InfamyValue:%d,
-                                OfficialRank:%d,
-                                ChangeCoinPointTotal:%d,
-                                VIPLv:%d,
-                                VIPLvForPhone:%d,
-                                ExAttr6:%d,
-                                ExAttr7:%d,
-                                ExAttr8:%d,
-                                ExAttr9:%d,
-                                ExAttr10:%d,
-                                ModelMark:%d,
-                                ExAttr11:%d,
-                                ExAttr12:%d,
-                                ExAttr13:%d,
-                                ExAttr14:%d,
-                                OperateInfo:%d,
-                                Operate:%s,
-                                ServerID:%d,
-                                ExAttr15:%d,
-                                ExAttr16:%d,
-                                ExAttr17:%d,
-                                ExAttr18:%d,
-                                ExAttr19:%d,
-                                ExAttr20:%d,
-                                HPEx:%d,
-                                Face:%d,
-                                FacePic:%d,
-                                RoleType:%d
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.AccID,
-                                self.PlayerID,
-                                self.PlayerName,
-                                self.AccState,
-                                self.GMLevel,
-                                self.Sex,
-                                self.Job,
-                                self.ReincarnationLv,
-                                self.LV,
-                                self.LVEx,
-                                self.LV2,
-                                self.ExpPoint,
-                                self.TotalExp,
-                                self.Family,
-                                self.FamilyName,
-                                self.TeamHornor,
-                                self.FamilyHornor,
-                                self.FamilyActiveValue,
-                                self.LastWeekFamilyActiveValue,
-                                self.CountryHornor,
-                                self.CountryLastWeekHornor,
-                                self.Mate,
-                                self.Gold,
-                                self.GoldPaper,
-                                self.Silver,
-                                self.SilverPaper,
-                                self.FightPoint,
-                                self.HappyPoint,
-                                self.LineID,
-                                self.MapID,
-                                self.PosX,
-                                self.PosY,
-                                self.RebornMapID,
-                                self.RebornPosX,
-                                self.RebornPosY,
-                                self.State,
-                                self.HP,
-                                self.XP,
-                                self.HPRestoreSetting,
-                                self.MPRestoreSetting,
-                                self.FreePoint,
-                                self.FreeSkillPoint,
-                                self.BaseSTR,
-                                self.BasePNE,
-                                self.BasePHY,
-                                self.BaseCON,
-                                self.STR,
-                                self.PNE,
-                                self.PHY,
-                                self.CON,
-                                self.PKValue,
-                                self.BackpackLV,
-                                self.WarehouseLV,
-                                self.TeamID,
-                                self.UseGoldType,
-                                self.UseSilverType,
-                                self.AttackMode,
-                                self.LastWeekOnlineTime,
-                                self.FBID,
-                                self.FamilyLV,
-                                self.FriendFavor,
-                                self.Energy,
-                                self.EquipShowSwitch,
-                                self.LuckValue,
-                                self.ExAttr1,
-                                self.ExAttr2,
-                                self.ExAttr3,
-                                self.ExAttr4,
-                                self.ExAttr5,
-                                self.Faction,
-                                self.InfamyValue,
-                                self.OfficialRank,
-                                self.ChangeCoinPointTotal,
-                                self.VIPLv,
-                                self.VIPLvForPhone,
-                                self.ExAttr6,
-                                self.ExAttr7,
-                                self.ExAttr8,
-                                self.ExAttr9,
-                                self.ExAttr10,
-                                self.ModelMark,
-                                self.ExAttr11,
-                                self.ExAttr12,
-                                self.ExAttr13,
-                                self.ExAttr14,
-                                self.OperateInfo,
-                                self.Operate,
-                                self.ServerID,
-                                self.ExAttr15,
-                                self.ExAttr16,
-                                self.ExAttr17,
-                                self.ExAttr18,
-                                self.ExAttr19,
-                                self.ExAttr20,
-                                self.HPEx,
-                                self.Face,
-                                self.FacePic,
-                                self.RoleType
-                                )
-        return DumpString
-
-
-m_NAtagMCDBPlayer=tagMCDBPlayer()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCDBPlayer.Head.Cmd,m_NAtagMCDBPlayer.Head.SubCmd))] = m_NAtagMCDBPlayer
-
-
-#------------------------------------------------------
 #A1 05 元宝消费记录 #tagMCGoldCostReport
 
 class  tagMCGoldCostReport(Structure):
@@ -4395,114 +3659,6 @@
 
 
 #------------------------------------------------------
-# A3 C1 神兽助战状态刷新 #tagMCDogzHelpbattleState
-
-class  tagMCDogzHelpbattleState(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("DogzID", c_ubyte),    # 神兽ID
-                  ("BatteState", c_ubyte),    #是否已助战, 0否1是
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA3
-        self.SubCmd = 0xC1
-        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 = 0xA3
-        self.SubCmd = 0xC1
-        self.DogzID = 0
-        self.BatteState = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCDogzHelpbattleState)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// A3 C1 神兽助战状态刷新 //tagMCDogzHelpbattleState:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                DogzID:%d,
-                                BatteState:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.DogzID,
-                                self.BatteState
-                                )
-        return DumpString
-
-
-m_NAtagMCDogzHelpbattleState=tagMCDogzHelpbattleState()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCDogzHelpbattleState.Cmd,m_NAtagMCDogzHelpbattleState.SubCmd))] = m_NAtagMCDogzHelpbattleState
-
-
-#------------------------------------------------------
-# A3 C0 神兽信息 #tagMCDogzInfo
-
-class  tagMCDogzInfo(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("BuyHelpbattleCount", c_ubyte),    #额外购买的助战数
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA3
-        self.SubCmd = 0xC0
-        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 = 0xA3
-        self.SubCmd = 0xC0
-        self.BuyHelpbattleCount = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCDogzInfo)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// A3 C0 神兽信息 //tagMCDogzInfo:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                BuyHelpbattleCount:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.BuyHelpbattleCount
-                                )
-        return DumpString
-
-
-m_NAtagMCDogzInfo=tagMCDogzInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCDogzInfo.Cmd,m_NAtagMCDogzInfo.SubCmd))] = m_NAtagMCDogzInfo
-
-
-#------------------------------------------------------
 # A3 1C 通知装备分解信息 #tagMCEquipDecomposeInfo
 
 class  tagMCEquipDecomposeInfo(Structure):
@@ -5020,62 +4176,6 @@
 
 m_NAtagMCEquipPartXLAttrInfo=tagMCEquipPartXLAttrInfo()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCEquipPartXLAttrInfo.Head.Cmd,m_NAtagMCEquipPartXLAttrInfo.Head.SubCmd))] = m_NAtagMCEquipPartXLAttrInfo
-
-
-#------------------------------------------------------
-# A3 54 法器信息 #tagMCFaQiInfo
-
-class  tagMCFaQiInfo(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("LV", c_ubyte),    #等阶
-                  ("EatItemCount", c_int),    #当前阶已吃丹个数
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA3
-        self.SubCmd = 0x54
-        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 = 0xA3
-        self.SubCmd = 0x54
-        self.LV = 0
-        self.EatItemCount = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCFaQiInfo)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// A3 54 法器信息 //tagMCFaQiInfo:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                LV:%d,
-                                EatItemCount:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.LV,
-                                self.EatItemCount
-                                )
-        return DumpString
-
-
-m_NAtagMCFaQiInfo=tagMCFaQiInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFaQiInfo.Cmd,m_NAtagMCFaQiInfo.SubCmd))] = m_NAtagMCFaQiInfo
 
 
 #------------------------------------------------------
@@ -5815,62 +4915,6 @@
 
 m_NAtagSCInvestInfo=tagSCInvestInfo()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagSCInvestInfo.Cmd,m_NAtagSCInvestInfo.SubCmd))] = m_NAtagSCInvestInfo
-
-
-#------------------------------------------------------
-# A3 55 炼体信息 #tagMCLianTiInfo
-
-class  tagMCLianTiInfo(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("LianTiLV", c_ubyte),    #炼体等级
-                  ("EatItemCount", c_int),    #当前等级已吃丹个数
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA3
-        self.SubCmd = 0x55
-        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 = 0xA3
-        self.SubCmd = 0x55
-        self.LianTiLV = 0
-        self.EatItemCount = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCLianTiInfo)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// A3 55 炼体信息 //tagMCLianTiInfo:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                LianTiLV:%d,
-                                EatItemCount:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.LianTiLV,
-                                self.EatItemCount
-                                )
-        return DumpString
-
-
-m_NAtagMCLianTiInfo=tagMCLianTiInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCLianTiInfo.Cmd,m_NAtagMCLianTiInfo.SubCmd))] = m_NAtagMCLianTiInfo
 
 
 #------------------------------------------------------
@@ -15590,114 +14634,6 @@
 
 
 #------------------------------------------------------
-# A9 04 通知神兽副本NPC刷新时间 #tagGCDogzNPCRefreshTime
-
-class  tagDogzTimeInfoObj(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("NPCID", c_int),    # npcid
-                  ("RefreshSecond", 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.NPCID = 0
-        self.RefreshSecond = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagDogzTimeInfoObj)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// A9 04 通知神兽副本NPC刷新时间 //tagGCDogzNPCRefreshTime:
-                                NPCID:%d,
-                                RefreshSecond:%d
-                                '''\
-                                %(
-                                self.NPCID,
-                                self.RefreshSecond
-                                )
-        return DumpString
-
-
-class  tagGCDogzNPCRefreshTime(Structure):
-    Head = tagHead()
-    Cnt = 0    #(BYTE Cnt)//信息个数
-    InfoList = list()    #(vector<tagDogzTimeInfoObj> InfoList)//信息列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xA9
-        self.Head.SubCmd = 0x04
-        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):
-            temInfoList = tagDogzTimeInfoObj()
-            _pos = temInfoList.ReadData(_lpData, _pos)
-            self.InfoList.append(temInfoList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xA9
-        self.Head.SubCmd = 0x04
-        self.Cnt = 0
-        self.InfoList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        for i in range(self.Cnt):
-            length += self.InfoList[i].GetLength()
-
-        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.WriteString(data, self.InfoList[i].GetLength(), self.InfoList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                Cnt:%d,
-                                InfoList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.Cnt,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagGCDogzNPCRefreshTime=tagGCDogzNPCRefreshTime()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCDogzNPCRefreshTime.Head.Cmd,m_NAtagGCDogzNPCRefreshTime.Head.SubCmd))] = m_NAtagGCDogzNPCRefreshTime
-
-
-#------------------------------------------------------
 # A9 A9 通知好友互赠精力信息 #tagGCFriendSendEnergyInfo
 
 class  tagGCFriendSendEnergyInfo(Structure):
@@ -17120,384 +16056,6 @@
 
 m_NAtagGCStoreServerBuyCntInfo=tagGCStoreServerBuyCntInfo()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCStoreServerBuyCntInfo.Head.Cmd,m_NAtagGCStoreServerBuyCntInfo.Head.SubCmd))] = m_NAtagGCStoreServerBuyCntInfo
-
-
-#------------------------------------------------------
-# A9 27 仙宫新晋玩家信息 #tagGCXiangongNewPlayerInfo
-
-class  tagGCXiangongNewPlayer(Structure):
-    AddTime = 0    #(DWORD AddTime)// 新晋时间戳
-    ServerID = 0    #(DWORD ServerID)
-    PlayerID = 0    #(DWORD PlayerID)
-    NameLen = 0    #(BYTE NameLen)
-    Name = ""    #(String Name)// 玩家名,size = NameLen
-    LV = 0    #(WORD LV)// 玩家等级
-    Job = 0    #(BYTE Job)// 玩家职业
-    RealmLV = 0    #(WORD RealmLV)// 玩家境界
-    Face = 0    #(DWORD Face)//基本脸型
-    FacePic = 0    #(DWORD FacePic)//头像框
-    EquipShowSwitch = 0    #(DWORD EquipShowSwitch)
-    EquipShowIDCount = 0    #(BYTE EquipShowIDCount)
-    EquipShowID = list()    #(vector<DWORD> EquipShowID)
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.AddTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.ServerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
-        self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.EquipShowSwitch,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.EquipShowIDCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.EquipShowIDCount):
-            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
-            self.EquipShowID.append(value)
-        return _pos
-
-    def Clear(self):
-        self.AddTime = 0
-        self.ServerID = 0
-        self.PlayerID = 0
-        self.NameLen = 0
-        self.Name = ""
-        self.LV = 0
-        self.Job = 0
-        self.RealmLV = 0
-        self.Face = 0
-        self.FacePic = 0
-        self.EquipShowSwitch = 0
-        self.EquipShowIDCount = 0
-        self.EquipShowID = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 4
-        length += 4
-        length += 4
-        length += 1
-        length += len(self.Name)
-        length += 2
-        length += 1
-        length += 2
-        length += 4
-        length += 4
-        length += 4
-        length += 1
-        length += 4 * self.EquipShowIDCount
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteDWORD(data, self.AddTime)
-        data = CommFunc.WriteDWORD(data, self.ServerID)
-        data = CommFunc.WriteDWORD(data, self.PlayerID)
-        data = CommFunc.WriteBYTE(data, self.NameLen)
-        data = CommFunc.WriteString(data, self.NameLen, self.Name)
-        data = CommFunc.WriteWORD(data, self.LV)
-        data = CommFunc.WriteBYTE(data, self.Job)
-        data = CommFunc.WriteWORD(data, self.RealmLV)
-        data = CommFunc.WriteDWORD(data, self.Face)
-        data = CommFunc.WriteDWORD(data, self.FacePic)
-        data = CommFunc.WriteDWORD(data, self.EquipShowSwitch)
-        data = CommFunc.WriteBYTE(data, self.EquipShowIDCount)
-        for i in range(self.EquipShowIDCount):
-            data = CommFunc.WriteDWORD(data, self.EquipShowID[i])
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                AddTime:%d,
-                                ServerID:%d,
-                                PlayerID:%d,
-                                NameLen:%d,
-                                Name:%s,
-                                LV:%d,
-                                Job:%d,
-                                RealmLV:%d,
-                                Face:%d,
-                                FacePic:%d,
-                                EquipShowSwitch:%d,
-                                EquipShowIDCount:%d,
-                                EquipShowID:%s
-                                '''\
-                                %(
-                                self.AddTime,
-                                self.ServerID,
-                                self.PlayerID,
-                                self.NameLen,
-                                self.Name,
-                                self.LV,
-                                self.Job,
-                                self.RealmLV,
-                                self.Face,
-                                self.FacePic,
-                                self.EquipShowSwitch,
-                                self.EquipShowIDCount,
-                                "..."
-                                )
-        return DumpString
-
-
-class  tagGCXiangongNewPlayerInfo(Structure):
-    Head = tagHead()
-    XiangongID = 0    #(WORD XiangongID)// 仙宫ID
-    NewPlayerCount = 0    #(BYTE NewPlayerCount)
-    NewPlayerList = list()    #(vector<tagGCXiangongNewPlayer> NewPlayerList)
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xA9
-        self.Head.SubCmd = 0x27
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.XiangongID,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.NewPlayerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.NewPlayerCount):
-            temNewPlayerList = tagGCXiangongNewPlayer()
-            _pos = temNewPlayerList.ReadData(_lpData, _pos)
-            self.NewPlayerList.append(temNewPlayerList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xA9
-        self.Head.SubCmd = 0x27
-        self.XiangongID = 0
-        self.NewPlayerCount = 0
-        self.NewPlayerList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 2
-        length += 1
-        for i in range(self.NewPlayerCount):
-            length += self.NewPlayerList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteWORD(data, self.XiangongID)
-        data = CommFunc.WriteBYTE(data, self.NewPlayerCount)
-        for i in range(self.NewPlayerCount):
-            data = CommFunc.WriteString(data, self.NewPlayerList[i].GetLength(), self.NewPlayerList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                XiangongID:%d,
-                                NewPlayerCount:%d,
-                                NewPlayerList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.XiangongID,
-                                self.NewPlayerCount,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagGCXiangongNewPlayerInfo=tagGCXiangongNewPlayerInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCXiangongNewPlayerInfo.Head.Cmd,m_NAtagGCXiangongNewPlayerInfo.Head.SubCmd))] = m_NAtagGCXiangongNewPlayerInfo
-
-
-#------------------------------------------------------
-# A9 28 仙宫仙名录玩家信息 #tagGCXiangongRecPlayerInfo
-
-class  tagGCXiangongRecPlayer(Structure):
-    AddTime = 0    #(DWORD AddTime)// 新晋时间戳
-    ServerID = 0    #(DWORD ServerID)
-    PlayerID = 0    #(DWORD PlayerID)
-    NameLen = 0    #(BYTE NameLen)
-    Name = ""    #(String Name)// 玩家名,size = NameLen
-    LV = 0    #(WORD LV)// 玩家等级
-    Job = 0    #(BYTE Job)// 玩家职业
-    RealmLV = 0    #(WORD RealmLV)// 玩家境界
-    Face = 0    #(DWORD Face)//基本脸型
-    FacePic = 0    #(DWORD FacePic)//头像框
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.AddTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.ServerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
-        self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        return _pos
-
-    def Clear(self):
-        self.AddTime = 0
-        self.ServerID = 0
-        self.PlayerID = 0
-        self.NameLen = 0
-        self.Name = ""
-        self.LV = 0
-        self.Job = 0
-        self.RealmLV = 0
-        self.Face = 0
-        self.FacePic = 0
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 4
-        length += 4
-        length += 4
-        length += 1
-        length += len(self.Name)
-        length += 2
-        length += 1
-        length += 2
-        length += 4
-        length += 4
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteDWORD(data, self.AddTime)
-        data = CommFunc.WriteDWORD(data, self.ServerID)
-        data = CommFunc.WriteDWORD(data, self.PlayerID)
-        data = CommFunc.WriteBYTE(data, self.NameLen)
-        data = CommFunc.WriteString(data, self.NameLen, self.Name)
-        data = CommFunc.WriteWORD(data, self.LV)
-        data = CommFunc.WriteBYTE(data, self.Job)
-        data = CommFunc.WriteWORD(data, self.RealmLV)
-        data = CommFunc.WriteDWORD(data, self.Face)
-        data = CommFunc.WriteDWORD(data, self.FacePic)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                AddTime:%d,
-                                ServerID:%d,
-                                PlayerID:%d,
-                                NameLen:%d,
-                                Name:%s,
-                                LV:%d,
-                                Job:%d,
-                                RealmLV:%d,
-                                Face:%d,
-                                FacePic:%d
-                                '''\
-                                %(
-                                self.AddTime,
-                                self.ServerID,
-                                self.PlayerID,
-                                self.NameLen,
-                                self.Name,
-                                self.LV,
-                                self.Job,
-                                self.RealmLV,
-                                self.Face,
-                                self.FacePic
-                                )
-        return DumpString
-
-
-class  tagGCXiangongRecPlayerInfo(Structure):
-    Head = tagHead()
-    XiangongID = 0    #(WORD XiangongID)// 仙宫ID
-    RecPlayerCount = 0    #(BYTE RecPlayerCount)
-    RecPlayerList = list()    #(vector<tagGCXiangongRecPlayer> RecPlayerList)
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xA9
-        self.Head.SubCmd = 0x28
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.XiangongID,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.RecPlayerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.RecPlayerCount):
-            temRecPlayerList = tagGCXiangongRecPlayer()
-            _pos = temRecPlayerList.ReadData(_lpData, _pos)
-            self.RecPlayerList.append(temRecPlayerList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xA9
-        self.Head.SubCmd = 0x28
-        self.XiangongID = 0
-        self.RecPlayerCount = 0
-        self.RecPlayerList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 2
-        length += 1
-        for i in range(self.RecPlayerCount):
-            length += self.RecPlayerList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteWORD(data, self.XiangongID)
-        data = CommFunc.WriteBYTE(data, self.RecPlayerCount)
-        for i in range(self.RecPlayerCount):
-            data = CommFunc.WriteString(data, self.RecPlayerList[i].GetLength(), self.RecPlayerList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                XiangongID:%d,
-                                RecPlayerCount:%d,
-                                RecPlayerList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.XiangongID,
-                                self.RecPlayerCount,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagGCXiangongRecPlayerInfo=tagGCXiangongRecPlayerInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCXiangongRecPlayerInfo.Head.Cmd,m_NAtagGCXiangongRecPlayerInfo.Head.SubCmd))] = m_NAtagGCXiangongRecPlayerInfo
 
 
 #------------------------------------------------------
@@ -23891,118 +22449,6 @@
 
 
 #------------------------------------------------------
-# B1 11 功能系统特权信息 #tagMCFuncSysPrivilegeInfoList
-
-class  tagMCFuncSysPrivilegeInfo(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("FuncSysID", c_ubyte),    # 功能系统ID
-                  ("ActivateTime", c_int),    # 激活时间戳
-                  ("AwardState", 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.FuncSysID = 0
-        self.ActivateTime = 0
-        self.AwardState = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCFuncSysPrivilegeInfo)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// B1 11 功能系统特权信息 //tagMCFuncSysPrivilegeInfoList:
-                                FuncSysID:%d,
-                                ActivateTime:%d,
-                                AwardState:%d
-                                '''\
-                                %(
-                                self.FuncSysID,
-                                self.ActivateTime,
-                                self.AwardState
-                                )
-        return DumpString
-
-
-class  tagMCFuncSysPrivilegeInfoList(Structure):
-    Head = tagHead()
-    PrivilegeCount = 0    #(BYTE PrivilegeCount)// 特权个数
-    PrivilegeInfoList = list()    #(vector<tagMCFuncSysPrivilegeInfo> PrivilegeInfoList)// 特权信息列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xB1
-        self.Head.SubCmd = 0x11
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.PrivilegeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.PrivilegeCount):
-            temPrivilegeInfoList = tagMCFuncSysPrivilegeInfo()
-            _pos = temPrivilegeInfoList.ReadData(_lpData, _pos)
-            self.PrivilegeInfoList.append(temPrivilegeInfoList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xB1
-        self.Head.SubCmd = 0x11
-        self.PrivilegeCount = 0
-        self.PrivilegeInfoList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        for i in range(self.PrivilegeCount):
-            length += self.PrivilegeInfoList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.PrivilegeCount)
-        for i in range(self.PrivilegeCount):
-            data = CommFunc.WriteString(data, self.PrivilegeInfoList[i].GetLength(), self.PrivilegeInfoList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                PrivilegeCount:%d,
-                                PrivilegeInfoList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.PrivilegeCount,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagMCFuncSysPrivilegeInfoList=tagMCFuncSysPrivilegeInfoList()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFuncSysPrivilegeInfoList.Head.Cmd,m_NAtagMCFuncSysPrivilegeInfoList.Head.SubCmd))] = m_NAtagMCFuncSysPrivilegeInfoList
-
-
-#------------------------------------------------------
 # B1 31 宿缘信息 #tagSCHeroFatesInfo
 
 class  tagSCHeroFates(Structure):
@@ -25176,54 +23622,6 @@
 
 
 #------------------------------------------------------
-#B1 08 开始印记流失时间 #tagMCYinjiStartTime
-
-class  tagMCYinjiStartTime(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xB1
-        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 = 0xB1
-        self.SubCmd = 0x08
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCYinjiStartTime)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''//B1 08 开始印记流失时间 //tagMCYinjiStartTime:
-                                Cmd:%s,
-                                SubCmd:%s
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd
-                                )
-        return DumpString
-
-
-m_NAtagMCYinjiStartTime=tagMCYinjiStartTime()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCYinjiStartTime.Cmd,m_NAtagMCYinjiStartTime.SubCmd))] = m_NAtagMCYinjiStartTime
-
-
-#------------------------------------------------------
 # B1 10 当前任务信息 #tagMCTaskInfo
 
 class  tagMCTask(Structure):
@@ -25337,80 +23735,6 @@
 
 m_NAtagMCTaskInfo=tagMCTaskInfo()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCTaskInfo.Head.Cmd,m_NAtagMCTaskInfo.Head.SubCmd))] = m_NAtagMCTaskInfo
-
-
-#------------------------------------------------------
-# B1 15 天道树信息 #tagMCTiandaoTreeInfo
-
-class  tagMCTiandaoTreeInfo(Structure):
-    Head = tagHead()
-    Qiyun = 0    #(DWORD Qiyun)// 当前气运值
-    AwardCount = 0    #(BYTE AwardCount)// 天道果领取记录值个数
-    AwardStateList = list()    #(vector<DWORD> AwardStateList)// 天道果领取记录值列表,按奖励索引位二进制记录是否已领取,一个值可存31位,如值1存0~30,值2存31~61,...
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xB1
-        self.Head.SubCmd = 0x15
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.Qiyun,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.AwardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.AwardCount):
-            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
-            self.AwardStateList.append(value)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xB1
-        self.Head.SubCmd = 0x15
-        self.Qiyun = 0
-        self.AwardCount = 0
-        self.AwardStateList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 4
-        length += 1
-        length += 4 * self.AwardCount
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteDWORD(data, self.Qiyun)
-        data = CommFunc.WriteBYTE(data, self.AwardCount)
-        for i in range(self.AwardCount):
-            data = CommFunc.WriteDWORD(data, self.AwardStateList[i])
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                Qiyun:%d,
-                                AwardCount:%d,
-                                AwardStateList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.Qiyun,
-                                self.AwardCount,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagMCTiandaoTreeInfo=tagMCTiandaoTreeInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCTiandaoTreeInfo.Head.Cmd,m_NAtagMCTiandaoTreeInfo.Head.SubCmd))] = m_NAtagMCTiandaoTreeInfo
 
 
 #------------------------------------------------------
@@ -25811,121 +24135,6 @@
 
 m_NAtagMCUseMoneyTotalInfo=tagMCUseMoneyTotalInfo()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCUseMoneyTotalInfo.Head.Cmd,m_NAtagMCUseMoneyTotalInfo.Head.SubCmd))] = m_NAtagMCUseMoneyTotalInfo
-
-
-#------------------------------------------------------
-# B1 14 仙宫信息 #tagMCXiangongInfo
-
-class  tagMCXiangong(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("XiangongID", c_ushort),    # 仙宫ID
-                  ("LikeStateToday", 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.XiangongID = 0
-        self.LikeStateToday = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCXiangong)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// B1 14 仙宫信息 //tagMCXiangongInfo:
-                                XiangongID:%d,
-                                LikeStateToday:%d
-                                '''\
-                                %(
-                                self.XiangongID,
-                                self.LikeStateToday
-                                )
-        return DumpString
-
-
-class  tagMCXiangongInfo(Structure):
-    Head = tagHead()
-    LikeStateToday = 0    #(BYTE LikeStateToday)// 今日是否已点赞,指仙宫的外层点赞,非某个指定仙宫
-    XiangongCount = 0    #(BYTE XiangongCount)
-    XiangongList = list()    #(vector<tagMCXiangong> XiangongList)
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xB1
-        self.Head.SubCmd = 0x14
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.LikeStateToday,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.XiangongCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.XiangongCount):
-            temXiangongList = tagMCXiangong()
-            _pos = temXiangongList.ReadData(_lpData, _pos)
-            self.XiangongList.append(temXiangongList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xB1
-        self.Head.SubCmd = 0x14
-        self.LikeStateToday = 0
-        self.XiangongCount = 0
-        self.XiangongList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        length += 1
-        for i in range(self.XiangongCount):
-            length += self.XiangongList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.LikeStateToday)
-        data = CommFunc.WriteBYTE(data, self.XiangongCount)
-        for i in range(self.XiangongCount):
-            data = CommFunc.WriteString(data, self.XiangongList[i].GetLength(), self.XiangongList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                LikeStateToday:%d,
-                                XiangongCount:%d,
-                                XiangongList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.LikeStateToday,
-                                self.XiangongCount,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagMCXiangongInfo=tagMCXiangongInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCXiangongInfo.Head.Cmd,m_NAtagMCXiangongInfo.Head.SubCmd))] = m_NAtagMCXiangongInfo
 
 
 #------------------------------------------------------
@@ -26407,904 +24616,6 @@
 
 
 #------------------------------------------------------
-# B3 24 喜糖列表 #tagGCCandyList
-
-class  tagGCCandyInfo(Structure):
-    PlayerIDA = 0    #(DWORD PlayerIDA)// 玩家ID - 请求方
-    NameALen = 0    #(BYTE NameALen)
-    PlayerNameA = ""    #(String PlayerNameA)
-    PlayerIDB = 0    #(DWORD PlayerIDB)// 玩家ID - 接受方
-    NameBLen = 0    #(BYTE NameBLen)
-    PlayerNameB = ""    #(String PlayerNameB)
-    BridePriceID = 0    #(BYTE BridePriceID)// 聘礼ID
-    MarryTime = 0    #(DWORD MarryTime)// 成亲时间戳,秒
-    EndTime = 0    #(DWORD EndTime)// 结束时间戳,秒
-    Prosperity = 0    #(DWORD Prosperity)// 当前繁荣度
-    FireworksTotalBuyCount = 0    #(BYTE FireworksTotalBuyCount)// 烟花总已购买次数
-    FireworksPlayerBuyCount = 0    #(BYTE FireworksPlayerBuyCount)// 烟花玩家已购买次数
-    PlayerFreeEatCandyCount = 0    #(BYTE PlayerFreeEatCandyCount)// 玩家已免费吃该喜糖总次数,包含免费次数、烟花赠送次数
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.PlayerIDA,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.NameALen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.PlayerNameA,_pos = CommFunc.ReadString(_lpData, _pos,self.NameALen)
-        self.PlayerIDB,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.NameBLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.PlayerNameB,_pos = CommFunc.ReadString(_lpData, _pos,self.NameBLen)
-        self.BridePriceID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.MarryTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.EndTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Prosperity,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.FireworksTotalBuyCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.FireworksPlayerBuyCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.PlayerFreeEatCandyCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        return _pos
-
-    def Clear(self):
-        self.PlayerIDA = 0
-        self.NameALen = 0
-        self.PlayerNameA = ""
-        self.PlayerIDB = 0
-        self.NameBLen = 0
-        self.PlayerNameB = ""
-        self.BridePriceID = 0
-        self.MarryTime = 0
-        self.EndTime = 0
-        self.Prosperity = 0
-        self.FireworksTotalBuyCount = 0
-        self.FireworksPlayerBuyCount = 0
-        self.PlayerFreeEatCandyCount = 0
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 4
-        length += 1
-        length += len(self.PlayerNameA)
-        length += 4
-        length += 1
-        length += len(self.PlayerNameB)
-        length += 1
-        length += 4
-        length += 4
-        length += 4
-        length += 1
-        length += 1
-        length += 1
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteDWORD(data, self.PlayerIDA)
-        data = CommFunc.WriteBYTE(data, self.NameALen)
-        data = CommFunc.WriteString(data, self.NameALen, self.PlayerNameA)
-        data = CommFunc.WriteDWORD(data, self.PlayerIDB)
-        data = CommFunc.WriteBYTE(data, self.NameBLen)
-        data = CommFunc.WriteString(data, self.NameBLen, self.PlayerNameB)
-        data = CommFunc.WriteBYTE(data, self.BridePriceID)
-        data = CommFunc.WriteDWORD(data, self.MarryTime)
-        data = CommFunc.WriteDWORD(data, self.EndTime)
-        data = CommFunc.WriteDWORD(data, self.Prosperity)
-        data = CommFunc.WriteBYTE(data, self.FireworksTotalBuyCount)
-        data = CommFunc.WriteBYTE(data, self.FireworksPlayerBuyCount)
-        data = CommFunc.WriteBYTE(data, self.PlayerFreeEatCandyCount)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                PlayerIDA:%d,
-                                NameALen:%d,
-                                PlayerNameA:%s,
-                                PlayerIDB:%d,
-                                NameBLen:%d,
-                                PlayerNameB:%s,
-                                BridePriceID:%d,
-                                MarryTime:%d,
-                                EndTime:%d,
-                                Prosperity:%d,
-                                FireworksTotalBuyCount:%d,
-                                FireworksPlayerBuyCount:%d,
-                                PlayerFreeEatCandyCount:%d
-                                '''\
-                                %(
-                                self.PlayerIDA,
-                                self.NameALen,
-                                self.PlayerNameA,
-                                self.PlayerIDB,
-                                self.NameBLen,
-                                self.PlayerNameB,
-                                self.BridePriceID,
-                                self.MarryTime,
-                                self.EndTime,
-                                self.Prosperity,
-                                self.FireworksTotalBuyCount,
-                                self.FireworksPlayerBuyCount,
-                                self.PlayerFreeEatCandyCount
-                                )
-        return DumpString
-
-
-class  tagGCCandyList(Structure):
-    Head = tagHead()
-    CandyCount = 0    #(WORD CandyCount)
-    CandyInfoList = list()    #(vector<tagGCCandyInfo> CandyInfoList)// 可吃喜糖列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xB3
-        self.Head.SubCmd = 0x24
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.CandyCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        for i in range(self.CandyCount):
-            temCandyInfoList = tagGCCandyInfo()
-            _pos = temCandyInfoList.ReadData(_lpData, _pos)
-            self.CandyInfoList.append(temCandyInfoList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xB3
-        self.Head.SubCmd = 0x24
-        self.CandyCount = 0
-        self.CandyInfoList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 2
-        for i in range(self.CandyCount):
-            length += self.CandyInfoList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteWORD(data, self.CandyCount)
-        for i in range(self.CandyCount):
-            data = CommFunc.WriteString(data, self.CandyInfoList[i].GetLength(), self.CandyInfoList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                CandyCount:%d,
-                                CandyInfoList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.CandyCount,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagGCCandyList=tagGCCandyList()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCandyList.Head.Cmd,m_NAtagGCCandyList.Head.SubCmd))] = m_NAtagGCCandyList
-
-
-#------------------------------------------------------
-# B3 19 魅力贡献榜 #tagGCCharmOfferBillboardDataList
-
-class  tagGCCharmOfferBillboardData(Structure):
-    OrderIndex = 0    #(DWORD OrderIndex)//名次索引,0代表第一名
-    PlayerID = 0    #(DWORD PlayerID)// 玩家ID - 贡献者
-    NameLen = 0    #(BYTE NameLen)
-    PlayerName = ""    #(String PlayerName)
-    CharmValue = 0    #(DWORD CharmValue)//贡献魅力值
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.OrderIndex,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
-        self.CharmValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        return _pos
-
-    def Clear(self):
-        self.OrderIndex = 0
-        self.PlayerID = 0
-        self.NameLen = 0
-        self.PlayerName = ""
-        self.CharmValue = 0
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 4
-        length += 4
-        length += 1
-        length += len(self.PlayerName)
-        length += 4
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteDWORD(data, self.OrderIndex)
-        data = CommFunc.WriteDWORD(data, self.PlayerID)
-        data = CommFunc.WriteBYTE(data, self.NameLen)
-        data = CommFunc.WriteString(data, self.NameLen, self.PlayerName)
-        data = CommFunc.WriteDWORD(data, self.CharmValue)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                OrderIndex:%d,
-                                PlayerID:%d,
-                                NameLen:%d,
-                                PlayerName:%s,
-                                CharmValue:%d
-                                '''\
-                                %(
-                                self.OrderIndex,
-                                self.PlayerID,
-                                self.NameLen,
-                                self.PlayerName,
-                                self.CharmValue
-                                )
-        return DumpString
-
-
-class  tagGCCharmOfferBillboardDataList(Structure):
-    Head = tagHead()
-    PlayerID = 0    #(DWORD PlayerID)// 魅力玩家ID
-    QueryType = 0    #(BYTE QueryType)// 查看类型: 1-总榜,2-周榜,3-日榜
-    DataCount = 0    #(BYTE DataCount)
-    OfferBillboardDataList = list()    #(vector<tagGCCharmOfferBillboardData> OfferBillboardDataList)
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xB3
-        self.Head.SubCmd = 0x19
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.QueryType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.DataCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.DataCount):
-            temOfferBillboardDataList = tagGCCharmOfferBillboardData()
-            _pos = temOfferBillboardDataList.ReadData(_lpData, _pos)
-            self.OfferBillboardDataList.append(temOfferBillboardDataList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xB3
-        self.Head.SubCmd = 0x19
-        self.PlayerID = 0
-        self.QueryType = 0
-        self.DataCount = 0
-        self.OfferBillboardDataList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 4
-        length += 1
-        length += 1
-        for i in range(self.DataCount):
-            length += self.OfferBillboardDataList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteDWORD(data, self.PlayerID)
-        data = CommFunc.WriteBYTE(data, self.QueryType)
-        data = CommFunc.WriteBYTE(data, self.DataCount)
-        for i in range(self.DataCount):
-            data = CommFunc.WriteString(data, self.OfferBillboardDataList[i].GetLength(), self.OfferBillboardDataList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                PlayerID:%d,
-                                QueryType:%d,
-                                DataCount:%d,
-                                OfferBillboardDataList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.PlayerID,
-                                self.QueryType,
-                                self.DataCount,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagGCCharmOfferBillboardDataList=tagGCCharmOfferBillboardDataList()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCharmOfferBillboardDataList.Head.Cmd,m_NAtagGCCharmOfferBillboardDataList.Head.SubCmd))] = m_NAtagGCCharmOfferBillboardDataList
-
-
-#------------------------------------------------------
-# B3 26 伴侣信息 #tagGCCoupleInfo
-
-class  tagGCCoupleInfo(Structure):
-    Head = tagHead()
-    CoupleID = 0    #(DWORD CoupleID)// 伴侣玩家ID,一定是好友,社交信息从好友系统中获取
-    NameLen = 0    #(BYTE NameLen)
-    CoupleName = ""    #(String CoupleName)
-    NewMarryTime = 0    #(DWORD NewMarryTime)// 新婚时间戳, 秒,计算结婚天数按该时间计算
-    MarryTime = 0    #(DWORD MarryTime)// 最近一次提亲成功时间戳, 秒,计算可离婚时间按该时间计算
-    BridePriceState = 0    #(DWORD BridePriceState)// 聘礼状态,按位存储已购买次数,如205代表ID1买了5次,ID2买了0次,ID3买了2次,最高9次
-    BreakRequestID = 0    #(DWORD BreakRequestID)// 当前请求中的和离时间戳 - 请求方ID,0代表没人发起请求
-    BreakRequestTime = 0    #(DWORD BreakRequestTime)// 当前请求中的和离时间戳, 秒,用于计算和离回应有效期
-    PlayerBreakRequestTime = 0    #(DWORD PlayerBreakRequestTime)// 玩家最近一次和离请求时间戳, 秒,用于计算自身的请求和离CD
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xB3
-        self.Head.SubCmd = 0x26
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.CoupleID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.CoupleName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
-        self.NewMarryTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.MarryTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.BridePriceState,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.BreakRequestID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.BreakRequestTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.PlayerBreakRequestTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xB3
-        self.Head.SubCmd = 0x26
-        self.CoupleID = 0
-        self.NameLen = 0
-        self.CoupleName = ""
-        self.NewMarryTime = 0
-        self.MarryTime = 0
-        self.BridePriceState = 0
-        self.BreakRequestID = 0
-        self.BreakRequestTime = 0
-        self.PlayerBreakRequestTime = 0
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 4
-        length += 1
-        length += len(self.CoupleName)
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteDWORD(data, self.CoupleID)
-        data = CommFunc.WriteBYTE(data, self.NameLen)
-        data = CommFunc.WriteString(data, self.NameLen, self.CoupleName)
-        data = CommFunc.WriteDWORD(data, self.NewMarryTime)
-        data = CommFunc.WriteDWORD(data, self.MarryTime)
-        data = CommFunc.WriteDWORD(data, self.BridePriceState)
-        data = CommFunc.WriteDWORD(data, self.BreakRequestID)
-        data = CommFunc.WriteDWORD(data, self.BreakRequestTime)
-        data = CommFunc.WriteDWORD(data, self.PlayerBreakRequestTime)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                CoupleID:%d,
-                                NameLen:%d,
-                                CoupleName:%s,
-                                NewMarryTime:%d,
-                                MarryTime:%d,
-                                BridePriceState:%d,
-                                BreakRequestID:%d,
-                                BreakRequestTime:%d,
-                                PlayerBreakRequestTime:%d
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.CoupleID,
-                                self.NameLen,
-                                self.CoupleName,
-                                self.NewMarryTime,
-                                self.MarryTime,
-                                self.BridePriceState,
-                                self.BreakRequestID,
-                                self.BreakRequestTime,
-                                self.PlayerBreakRequestTime
-                                )
-        return DumpString
-
-
-m_NAtagGCCoupleInfo=tagGCCoupleInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCoupleInfo.Head.Cmd,m_NAtagGCCoupleInfo.Head.SubCmd))] = m_NAtagGCCoupleInfo
-
-
-#------------------------------------------------------
-# B3 30 情缘相关信息 #tagMCLoveInfo
-
-class  tagMCLoveInfo(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("EatCandyToday", c_int),    # 今日已吃喜糖次数,包含免费及付费的所有次数
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xB3
-        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 = 0xB3
-        self.SubCmd = 0x30
-        self.EatCandyToday = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCLoveInfo)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// B3 30 情缘相关信息 //tagMCLoveInfo:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                EatCandyToday:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.EatCandyToday
-                                )
-        return DumpString
-
-
-m_NAtagMCLoveInfo=tagMCLoveInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCLoveInfo.Cmd,m_NAtagMCLoveInfo.SubCmd))] = m_NAtagMCLoveInfo
-
-
-#------------------------------------------------------
-# B3 27 情戒信息 #tagMCLoveRingInfo
-
-class  tagMCLoveRingInfo(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("ClassLV", c_ubyte),    # 阶
-                  ("StarLV", c_ubyte),    # 星
-                  ("EatCount", c_int),    # 本星已淬炼道具数
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xB3
-        self.SubCmd = 0x27
-        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 = 0xB3
-        self.SubCmd = 0x27
-        self.ClassLV = 0
-        self.StarLV = 0
-        self.EatCount = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCLoveRingInfo)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// B3 27 情戒信息 //tagMCLoveRingInfo:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                ClassLV:%d,
-                                StarLV:%d,
-                                EatCount:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.ClassLV,
-                                self.StarLV,
-                                self.EatCount
-                                )
-        return DumpString
-
-
-m_NAtagMCLoveRingInfo=tagMCLoveRingInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCLoveRingInfo.Cmd,m_NAtagMCLoveRingInfo.SubCmd))] = m_NAtagMCLoveRingInfo
-
-
-#------------------------------------------------------
-# B3 29 情戒解锁成功 #tagMCLoveRingUnlockOK
-
-class  tagMCLoveRingUnlockOK(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xB3
-        self.SubCmd = 0x29
-        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 = 0xB3
-        self.SubCmd = 0x29
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCLoveRingUnlockOK)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// B3 29 情戒解锁成功 //tagMCLoveRingUnlockOK:
-                                Cmd:%s,
-                                SubCmd:%s
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd
-                                )
-        return DumpString
-
-
-m_NAtagMCLoveRingUnlockOK=tagMCLoveRingUnlockOK()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCLoveRingUnlockOK.Cmd,m_NAtagMCLoveRingUnlockOK.SubCmd))] = m_NAtagMCLoveRingUnlockOK
-
-
-#------------------------------------------------------
-# B3 22 收到提亲信息 #tagGCMarryReqInfo
-
-class  tagGCMarryReqInfo(Structure):
-    Head = tagHead()
-    PlayerID = 0    #(DWORD PlayerID)// 同一个玩家ID多次提亲时可能同步多次,前端覆盖数据即可
-    NameLen = 0    #(BYTE NameLen)
-    PlayerName = ""    #(String PlayerName)
-    BridePriceID = 0    #(BYTE BridePriceID)// 聘礼ID
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xB3
-        self.Head.SubCmd = 0x22
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
-        self.BridePriceID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xB3
-        self.Head.SubCmd = 0x22
-        self.PlayerID = 0
-        self.NameLen = 0
-        self.PlayerName = ""
-        self.BridePriceID = 0
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 4
-        length += 1
-        length += len(self.PlayerName)
-        length += 1
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteDWORD(data, self.PlayerID)
-        data = CommFunc.WriteBYTE(data, self.NameLen)
-        data = CommFunc.WriteString(data, self.NameLen, self.PlayerName)
-        data = CommFunc.WriteBYTE(data, self.BridePriceID)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                PlayerID:%d,
-                                NameLen:%d,
-                                PlayerName:%s,
-                                BridePriceID:%d
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.PlayerID,
-                                self.NameLen,
-                                self.PlayerName,
-                                self.BridePriceID
-                                )
-        return DumpString
-
-
-m_NAtagGCMarryReqInfo=tagGCMarryReqInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCMarryReqInfo.Head.Cmd,m_NAtagGCMarryReqInfo.Head.SubCmd))] = m_NAtagGCMarryReqInfo
-
-
-#------------------------------------------------------
-# B3 21 提亲发送成功 #tagGCMarryReqOK
-
-class  tagGCMarryReqOK(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xB3
-        self.SubCmd = 0x21
-        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 = 0xB3
-        self.SubCmd = 0x21
-        return
-
-    def GetLength(self):
-        return sizeof(tagGCMarryReqOK)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// B3 21 提亲发送成功 //tagGCMarryReqOK:
-                                Cmd:%s,
-                                SubCmd:%s
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd
-                                )
-        return DumpString
-
-
-m_NAtagGCMarryReqOK=tagGCMarryReqOK()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCMarryReqOK.Cmd,m_NAtagGCMarryReqOK.SubCmd))] = m_NAtagGCMarryReqOK
-
-
-#------------------------------------------------------
-# B3 23 提亲回应结果 #tagGCMarryResponseRet
-
-class  tagGCMarryResponseRet(Structure):
-    Head = tagHead()
-    PlayerIDA = 0    #(DWORD PlayerIDA)// 玩家ID - 请求方
-    NameALen = 0    #(BYTE NameALen)
-    PlayerNameA = ""    #(String PlayerNameA)
-    PlayerIDB = 0    #(DWORD PlayerIDB)// 玩家ID - 接受方
-    NameBLen = 0    #(BYTE NameBLen)
-    PlayerNameB = ""    #(String PlayerNameB)
-    IsOK = 0    #(BYTE IsOK)// 是否同意,0-否,1-是;  如果同意则双方都会收到该包,根据玩家ID判断自己是请求或接受方,显示不同的同意结果界面;不同意只有请求方会收到
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xB3
-        self.Head.SubCmd = 0x23
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.PlayerIDA,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.NameALen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.PlayerNameA,_pos = CommFunc.ReadString(_lpData, _pos,self.NameALen)
-        self.PlayerIDB,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.NameBLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.PlayerNameB,_pos = CommFunc.ReadString(_lpData, _pos,self.NameBLen)
-        self.IsOK,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xB3
-        self.Head.SubCmd = 0x23
-        self.PlayerIDA = 0
-        self.NameALen = 0
-        self.PlayerNameA = ""
-        self.PlayerIDB = 0
-        self.NameBLen = 0
-        self.PlayerNameB = ""
-        self.IsOK = 0
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 4
-        length += 1
-        length += len(self.PlayerNameA)
-        length += 4
-        length += 1
-        length += len(self.PlayerNameB)
-        length += 1
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteDWORD(data, self.PlayerIDA)
-        data = CommFunc.WriteBYTE(data, self.NameALen)
-        data = CommFunc.WriteString(data, self.NameALen, self.PlayerNameA)
-        data = CommFunc.WriteDWORD(data, self.PlayerIDB)
-        data = CommFunc.WriteBYTE(data, self.NameBLen)
-        data = CommFunc.WriteString(data, self.NameBLen, self.PlayerNameB)
-        data = CommFunc.WriteBYTE(data, self.IsOK)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                PlayerIDA:%d,
-                                NameALen:%d,
-                                PlayerNameA:%s,
-                                PlayerIDB:%d,
-                                NameBLen:%d,
-                                PlayerNameB:%s,
-                                IsOK:%d
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.PlayerIDA,
-                                self.NameALen,
-                                self.PlayerNameA,
-                                self.PlayerIDB,
-                                self.NameBLen,
-                                self.PlayerNameB,
-                                self.IsOK
-                                )
-        return DumpString
-
-
-m_NAtagGCMarryResponseRet=tagGCMarryResponseRet()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCMarryResponseRet.Head.Cmd,m_NAtagGCMarryResponseRet.Head.SubCmd))] = m_NAtagGCMarryResponseRet
-
-
-#------------------------------------------------------
-# B3 25 玩家魅力值信息 #tagGCPlayerCharmValueInfo
-
-class  tagGCPlayerCharmValueInfo(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("CharmValueTotal", c_int),    #当前魅力值 - 总
-                  ("CharmValueWeek", c_int),    #当前魅力值 - 周
-                  ("CharmValueDay", c_int),    #当前魅力值 - 日
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xB3
-        self.SubCmd = 0x25
-        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 = 0xB3
-        self.SubCmd = 0x25
-        self.CharmValueTotal = 0
-        self.CharmValueWeek = 0
-        self.CharmValueDay = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagGCPlayerCharmValueInfo)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// B3 25 玩家魅力值信息 //tagGCPlayerCharmValueInfo:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                CharmValueTotal:%d,
-                                CharmValueWeek:%d,
-                                CharmValueDay:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.CharmValueTotal,
-                                self.CharmValueWeek,
-                                self.CharmValueDay
-                                )
-        return DumpString
-
-
-m_NAtagGCPlayerCharmValueInfo=tagGCPlayerCharmValueInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCPlayerCharmValueInfo.Cmd,m_NAtagGCPlayerCharmValueInfo.SubCmd))] = m_NAtagGCPlayerCharmValueInfo
-
-
-#------------------------------------------------------
 # B3 15 相关玩家在线状态变更同步 #tagGCRelatedPlayerOnlineState
 
 class  tagGCRelatedPlayerOnlineState(Structure):
@@ -27362,148 +24673,6 @@
 
 m_NAtagGCRelatedPlayerOnlineState=tagGCRelatedPlayerOnlineState()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCRelatedPlayerOnlineState.Cmd,m_NAtagGCRelatedPlayerOnlineState.SubCmd))] = m_NAtagGCRelatedPlayerOnlineState
-
-
-#------------------------------------------------------
-# B3 20 送礼物成功通知 #tagGCSendGiftsOKList
-
-class  tagGCSendGiftsOK(Structure):
-    NameLen = 0    #(BYTE NameLen)
-    Name = ""    #(String Name)// 赠送方玩家名
-    PlayerID = 0    #(DWORD PlayerID)// 赠送方玩家ID
-    GiftNum = 0    #(WORD GiftNum)// 赠送礼物编号
-    GiftCount = 0    #(DWORD GiftCount)// 赠送礼物数量
-    SendTime = 0    #(DWORD SendTime)// 赠送时间戳
-    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.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
-        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.GiftNum,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.GiftCount,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.SendTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        return _pos
-
-    def Clear(self):
-        self.NameLen = 0
-        self.Name = ""
-        self.PlayerID = 0
-        self.GiftNum = 0
-        self.GiftCount = 0
-        self.SendTime = 0
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 1
-        length += len(self.Name)
-        length += 4
-        length += 2
-        length += 4
-        length += 4
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteBYTE(data, self.NameLen)
-        data = CommFunc.WriteString(data, self.NameLen, self.Name)
-        data = CommFunc.WriteDWORD(data, self.PlayerID)
-        data = CommFunc.WriteWORD(data, self.GiftNum)
-        data = CommFunc.WriteDWORD(data, self.GiftCount)
-        data = CommFunc.WriteDWORD(data, self.SendTime)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                NameLen:%d,
-                                Name:%s,
-                                PlayerID:%d,
-                                GiftNum:%d,
-                                GiftCount:%d,
-                                SendTime:%d
-                                '''\
-                                %(
-                                self.NameLen,
-                                self.Name,
-                                self.PlayerID,
-                                self.GiftNum,
-                                self.GiftCount,
-                                self.SendTime
-                                )
-        return DumpString
-
-
-class  tagGCSendGiftsOKList(Structure):
-    Head = tagHead()
-    Count = 0    #(WORD Count)
-    SendGiftsOKList = list()    #(vector<tagGCSendGiftsOK> SendGiftsOKList)
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xB3
-        self.Head.SubCmd = 0x20
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        for i in range(self.Count):
-            temSendGiftsOKList = tagGCSendGiftsOK()
-            _pos = temSendGiftsOKList.ReadData(_lpData, _pos)
-            self.SendGiftsOKList.append(temSendGiftsOKList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xB3
-        self.Head.SubCmd = 0x20
-        self.Count = 0
-        self.SendGiftsOKList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 2
-        for i in range(self.Count):
-            length += self.SendGiftsOKList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteWORD(data, self.Count)
-        for i in range(self.Count):
-            data = CommFunc.WriteString(data, self.SendGiftsOKList[i].GetLength(), self.SendGiftsOKList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                Count:%d,
-                                SendGiftsOKList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.Count,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagGCSendGiftsOKList=tagGCSendGiftsOKList()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCSendGiftsOKList.Head.Cmd,m_NAtagGCSendGiftsOKList.Head.SubCmd))] = m_NAtagGCSendGiftsOKList
 
 
 #------------------------------------------------------
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Charm.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Charm.py
deleted file mode 100644
index a98ddbb..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Charm.py
+++ /dev/null
@@ -1,75 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-##@package GM.Commands.Charm
-#
-# @todo:魅力
-# @author hxp
-# @date 2021-12-03
-# @version 1.0
-#
-# 详细描述: 魅力
-#
-#-------------------------------------------------------------------------------
-#"""Version = 2021-12-03 19:00"""
-#-------------------------------------------------------------------------------
-
-import GameWorld
-import PlayerControl
-import IpyGameDataPY
-import PlayerCharm
-
-
-def __Help(curPlayer):
-    GameWorld.DebugAnswer(curPlayer, "---------- %s" % GameWorld.GetCurrentDataTimeStr())
-    GameWorld.DebugAnswer(curPlayer, "清空魅力: Charm 0")
-    GameWorld.DebugAnswer(curPlayer, "魅力等级: Charm 等级")
-    GameWorld.DebugAnswer(curPlayer, "随机魅力: Charm 1 人数  贡献人数 [选填 随机范围值A B]")
-    GameWorld.DebugAnswer(curPlayer, "随机范围值不填的话默认10~1000")
-    GameWorld.DebugAnswer(curPlayer, "增加魅力: Charm 2 数值 [选填 贡献玩家ID 获得玩家ID]")
-    GameWorld.DebugAnswer(curPlayer, "玩家ID不填的话均默认自己")
-    return
-
-## GM命令执行入口
-#  @param curPlayer 当前玩家
-#  @param msgList 参数列表 [addSkillID]
-#  @return None
-#  @remarks 函数详细说明.
-def OnExec(curPlayer, msgList):
-    
-    if not msgList:
-        __Help(curPlayer)
-        return
-    
-    value1 = msgList[0]
-    
-    # 设置魅力等级
-    if value1 > 0 and len(msgList) == 1:
-        maxIpyData = IpyGameDataPY.IPY_Data().GetLoveCharmByIndex(IpyGameDataPY.IPY_Data().GetLoveCharmCount() - 1)
-        if maxIpyData:
-            value1 = min(value1, maxIpyData.GetCharmLV())
-        GameWorld.DebugAnswer(curPlayer, "设置魅力等级: %s" % value1)
-        PlayerControl.SetCharmLV(curPlayer, value1)
-        PlayerCharm.RefreshCharmAttr(curPlayer)
-        return
-    
-    isSendGameServer = True
-    # 清空魅力
-    if value1 == 0:
-        PlayerControl.SetCharmLV(curPlayer, value1)
-        PlayerCharm.RefreshCharmAttr(curPlayer)
-        
-    # 随机魅力
-    elif value1 == 1 and len(msgList) >= 3:
-        pass
-    
-    # 增加魅力
-    elif value1 == 2 and len(msgList) >= 2:
-        pass
-    
-    else:
-        __Help(curPlayer)
-        return
-    
-    return isSendGameServer
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/ClearFuncSysPrivilege.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/ClearFuncSysPrivilege.py
deleted file mode 100644
index f10ea68..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/ClearFuncSysPrivilege.py
+++ /dev/null
@@ -1,62 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-##@package GM.Commands.ClearFuncSysPrivilege
-#
-# @todo:重置功能系统特权
-# @author hxp
-# @date 2021-04-13
-# @version 1.0
-#
-# 详细描述: 重置功能系统特权
-#
-#-------------------------------------------------------------------------------
-#"""Version = 2021-04-13 16:00"""
-#-------------------------------------------------------------------------------
-
-import ChConfig
-import PlayerControl
-import PlayerFuncSysPrivilege
-import IpyGameDataPY
-import GameWorld
-
-#---------------------------------------------------------------------
-#全局变量
-#---------------------------------------------------------------------
-
-#---------------------------------------------------------------------
-#逻辑实现
-## GM命令执行入口
-#  @param curPlayer 当前玩家
-#  @param list 参数列表 [npcID]
-#  @return None
-#  @remarks 函数详细说明.
-def OnExec(curPlayer, paramList):
-    
-    if not paramList:
-        GameWorld.DebugAnswer(curPlayer, "重置所有: ClearFuncSysPrivilege 0")
-        GameWorld.DebugAnswer(curPlayer, "重置指定: ClearFuncSysPrivilege 功能系统ID")
-        return
-    
-    ipyDataMgr = IpyGameDataPY.IPY_Data()
-    lastIpyData = ipyDataMgr.GetFuncSysPrivilegeByIndex(ipyDataMgr.GetFuncSysPrivilegeCount() - 1)
-    maxFuncID = lastIpyData.GetFuncSysID()
-    
-    resetID = paramList[0]
-    if resetID == 0:
-        resetIDList = range(1, maxFuncID + 1)
-    elif resetID > maxFuncID:
-        GameWorld.DebugAnswer(curPlayer, "该功能系统ID不存在!")
-        return
-    else:
-        resetIDList = [resetID]
-        
-    for funcSysID in resetIDList:
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FuncSysPrivilegeActTime % funcSysID, 0)
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FuncSysPrivilegeAward % funcSysID, 0)
-        
-    GameWorld.DebugAnswer(curPlayer, "重置功能系统特权OK!%s" % resetIDList)
-    PlayerFuncSysPrivilege.Sync_FuncSysPrivilege(curPlayer, resetIDList)
-    return
-
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/FaQi.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/FaQi.py
deleted file mode 100644
index 0db5f2c..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/FaQi.py
+++ /dev/null
@@ -1,58 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-##@package GM.Commands.FaQi
-#
-# @todo:法器
-# @author hxp
-# @date 2021-10-14
-# @version 1.0
-#
-# 详细描述: 法器
-#
-#-------------------------------------------------------------------------------
-#"""Version = 2021-10-14 15:00"""
-#-------------------------------------------------------------------------------
-
-import ChConfig
-import GameWorld
-import PlayerControl
-import PlayerFaQi
-
-#---------------------------------------------------------------------
-#逻辑实现
-
-## GM命令执行入口
-#  @param curPlayer 当前玩家
-#  @param msgList 参数列表
-#  @return None
-#  @remarks 函数详细说明.
-def OnExec(curPlayer, msgList):
-    
-    if not msgList:
-        GameWorld.DebugAnswer(curPlayer, "重置法器: FaQi 0")
-        GameWorld.DebugAnswer(curPlayer, "设置法器: FaQi 等阶 本阶已吃丹数")
-        return
-    
-    if len(msgList) == 1:
-        if msgList[0] == 0:
-            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FaQiLV, 1)
-            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FaQiEatItemCount, 0)
-            
-    elif len(msgList) == 2:
-        lv, eatItemCount = msgList
-        if lv < 1:
-            GameWorld.DebugAnswer(curPlayer, "等级不能小于1")
-            return
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FaQiLV, lv)
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FaQiEatItemCount, eatItemCount)
-        
-    else:
-        return
-    
-    PlayerFaQi.RefreshFaQiAttr(curPlayer)
-    PlayerFaQi.PlayerFaQiLogin(curPlayer)
-    return
-
-
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/LianTi.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/LianTi.py
deleted file mode 100644
index 042ca6f..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/LianTi.py
+++ /dev/null
@@ -1,75 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-##@package GM.Commands.LianTi
-#
-# @todo:炼体
-# @author hxp
-# @date 2022-22-23
-# @version 1.0
-#
-# 详细描述: 炼体
-#
-#-------------------------------------------------------------------------------
-#"""Version = 2022-22-23 15:30"""
-#-------------------------------------------------------------------------------
-
-import ChConfig
-import GameWorld
-import PlayerControl
-import PlayerLianTi
-import IpyGameDataPY
-import SkillCommon
-
-#---------------------------------------------------------------------
-#逻辑实现
-
-## GM命令执行入口
-#  @param curPlayer 当前玩家
-#  @param msgList 参数列表
-#  @return None
-#  @remarks 函数详细说明.
-def OnExec(curPlayer, msgList):
-    
-    if not msgList:
-        GameWorld.DebugAnswer(curPlayer, "重置炼体: LianTi 0")
-        GameWorld.DebugAnswer(curPlayer, "设置炼体: LianTi 等级 本级已吃丹数")
-        return
-    
-    if len(msgList) == 1:
-        if msgList[0] == 0:
-            if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_LianTiLV):
-                PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_LianTiLV, 1)
-                PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_LianTiEatItemCount, 0)
-            
-    elif len(msgList) == 2:
-        lv, eatItemCount = msgList
-        if lv < 1:
-            GameWorld.DebugAnswer(curPlayer, "等级不能小于1")
-            return
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_LianTiLV, lv)
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_LianTiEatItemCount, eatItemCount)
-        
-        skillIDList = []
-        ipyDataMgr = IpyGameDataPY.IPY_Data()
-        for index in xrange(ipyDataMgr.GetLianTiCount()):
-            lvupIpyData = ipyDataMgr.GetLianTiByIndex(index)
-            dataLV = lvupIpyData.GetLianTiLV()
-            if dataLV > lv:
-                break
-            activateSkillID = lvupIpyData.GetActivateSkillID()
-            if activateSkillID:
-                skillIDList.append(activateSkillID)
-        
-        if skillIDList:
-            SkillCommon.GivePlayerSkillByJobSkill(curPlayer, skillIDList)
-            
-    else:
-        return
-    
-    PlayerLianTi.RefreshLianTiAttr(curPlayer)
-    PlayerLianTi.SyncLianTiInfo(curPlayer)
-    return
-
-
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/LoveRing.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/LoveRing.py
deleted file mode 100644
index aff06ab..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/LoveRing.py
+++ /dev/null
@@ -1,49 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-##@package GM.Commands.LoveRing
-#
-# @todo:情戒
-# @author hxp
-# @date 2021-11-09
-# @version 1.0
-#
-# 详细描述: 情戒
-#
-#-------------------------------------------------------------------------------
-#"""Version = 2021-11-09 20:00"""
-#-------------------------------------------------------------------------------
-
-import GameWorld
-import PlayerControl
-import PlayerLove
-import ChConfig
-
-## GM命令执行入口
-#  @param curPlayer 当前玩家
-#  @param msgList 参数列表 [addSkillID]
-#  @return None
-#  @remarks 函数详细说明.
-def OnExec(curPlayer, msgList):
-    
-    if not msgList:
-        GameWorld.DebugAnswer(curPlayer, "重置情戒: LoveRing 0")
-        GameWorld.DebugAnswer(curPlayer, "设置情戒: LoveRing 阶  [可选星  已吃个数]")
-        return
-    
-    classLV = msgList[0] if len(msgList) > 0 else 1
-    if classLV == 0:
-        starLV, eatCount = 0, 0
-    else:
-        starLV = msgList[1] if len(msgList) > 1 else 1
-        eatCount = msgList[2] if len(msgList) > 2 else 0
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_LoveRingClassLV, classLV)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_LoveRingStarLV, starLV)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_LoveRingEatCount, eatCount)
-    PlayerLove.Sync_LoveRingInfo(curPlayer)
-    PlayerLove.RefreshLoveAttr(curPlayer)
-    GameWorld.DebugAnswer(curPlayer, "设置情戒: 阶:%s 星:%s 颗:%s" % (classLV, starLV, eatCount))
-    return
-
-
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Xiangong.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Xiangong.py
deleted file mode 100644
index 4f1a805..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Xiangong.py
+++ /dev/null
@@ -1,71 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-##@package GM.Commands.Xiangong
-#
-# @todo:仙宫
-# @author hxp
-# @date 2024-09-04
-# @version 1.0
-#
-# 详细描述: 仙宫
-#
-#-------------------------------------------------------------------------------
-#"""Version = 2024-09-04 16:30"""
-#-------------------------------------------------------------------------------
-
-import GameWorld
-import PlayerControl
-import IpyGameDataPY
-import PlayerXiangong
-import ChConfig
-
-#-------------------------------------------------------------------------------
-#逻辑实现
-## GM命令执行入口
-#  @param curPlayer 当前玩家
-#  @param list 参数列表 [npcID]
-#  @return None
-#  @remarks 函数详细说明.
-def OnExec(curPlayer, msgList):
-    
-    if not msgList:
-        GameWorld.DebugAnswer(curPlayer, "---------- %s" % GameWorld.GetCurrentDataTimeStr())
-        GameWorld.DebugAnswer(curPlayer, "重置仙宫点赞: Xiangong 0 like")
-        GameWorld.DebugAnswer(curPlayer, "重置气运奖励: Xiangong 0 tree")
-        GameWorld.DebugAnswer(curPlayer, "设置当前气运: Xiangong q 气运值")
-        return True
-    
-    if msgList[0] == 0:
-        if len(msgList) == 1 or msgList[1] == "like":
-            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_XiangongLikeState % 0, 0)
-            xiangongIDList = []
-            ipyMgr = IpyGameDataPY.IPY_Data()
-            for index in range(ipyMgr.GetXiangongCount()):
-                ipyData = ipyMgr.GetXiangongByIndex(index)
-                xiangongID = ipyData.GetXiangongID()
-                if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_XiangongLikeState % xiangongID):
-                    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_XiangongLikeState % xiangongID, 0)
-                    xiangongIDList.append(xiangongID)
-            PlayerXiangong.SyncXiangongInfo(curPlayer, xiangongIDList)
-            GameWorld.DebugAnswer(curPlayer, "重置仙宫点赞:%s" % xiangongIDList)
-            
-        if len(msgList) == 1 or msgList[1] == "tree":
-            for keyNum in range(50):
-                PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TiandaoAward % keyNum, 0)
-            PlayerXiangong.SyncTiandaoTreeInfo(curPlayer)
-            GameWorld.DebugAnswer(curPlayer, "重置气运奖励!")
-            
-        return
-    
-    if msgList[0] == "q":
-        setQiyun = msgList[1] if len(msgList) > 1 else 0
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TiandaoQiyun, setQiyun)
-        PlayerXiangong.SyncTiandaoTreeInfo(curPlayer)
-        GameWorld.DebugAnswer(curPlayer, "设置当前气运:%s" % setQiyun)
-        return
-    
-    return True
-
-
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
index 6ae3f33..8f85a04 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -500,20 +500,6 @@
                         ("list", "AwardItemList", 0),
                         ),
 
-                "LianTi":(
-                        ("BYTE", "LianTiLV", 1),
-                        ("list", "FixedAttrType", 0),
-                        ("list", "FixedAttrValue", 0),
-                        ("list", "PlusAttrType", 0),
-                        ("list", "PlusAttrRate", 0),
-                        ("list", "EatItemAttrType", 0),
-                        ("list", "EatItemAttrValue", 0),
-                        ("WORD", "NeedEatCount", 0),
-                        ("WORD", "EatPerCount", 0),
-                        ("list", "LVUpCostItemInfo", 0),
-                        ("DWORD", "ActivateSkillID", 0),
-                        ),
-
                 "FuncConfig":(
                         ("char", "Key", 1),
                         ("char", "Numerical1", 0),
@@ -672,24 +658,6 @@
                         ("dict", "LVLegendAttrLibNumInfo", 0),
                         ),
 
-                "Dogz":(
-                        ("BYTE", "DogzID", 1),
-                        ("list", "BaseAttrTypes", 0),
-                        ("list", "BaseAttrValues", 0),
-                        ("list", "HelpBattleSkills", 0),
-                        ("DWORD", "FightPowerEx", 0),
-                        ("list", "EquipPlaceColorList", 0),
-                        ("list", "HelpBattleNotify", 0),
-                        ),
-
-                "DogzEquipPlus":(
-                        ("BYTE", "EquipPlace", 1),
-                        ("BYTE", "PlusLV", 1),
-                        ("list", "PlusAttrTypes", 0),
-                        ("list", "PlusAttrValues", 0),
-                        ("DWORD", "PlusLVUPTotalExp", 0),
-                        ),
-
                 "EquipWash":(
                         ("BYTE", "WashType", 1),
                         ("BYTE", "WashLV", 1),
@@ -726,16 +694,6 @@
                         ("WORD", "LV", 1),
                         ("DWORD", "UpNeedExp", 0),
                         ("dict", "Attr", 0),
-                        ),
-
-                "FaQiLVUp":(
-                        ("BYTE", "FaQiLV", 1),
-                        ("WORD", "NeedEatCount", 0),
-                        ("list", "LVAttrType", 0),
-                        ("list", "LVAttrValue", 0),
-                        ("list", "UpItemAttrType", 0),
-                        ("list", "UpItemAttrValue", 0),
-                        ("DWORD", "UpEatItemPerCount", 0),
                         ),
 
                 "HorseClass":(
@@ -1687,38 +1645,6 @@
                         ("BYTE", "QualityLV", 1),
                         ),
 
-                "LoveGift":(
-                        ("BYTE", "GiftNum", 1),
-                        ("DWORD", "GiftItemID", 0),
-                        ("BYTE", "AllowBatch", 0),
-                        ),
-
-                "Marry":(
-                        ("BYTE", "BridePriceID", 1),
-                        ("list", "CostMoneyInfo", 0),
-                        ),
-
-                "LoveRing":(
-                        ("BYTE", "RingClassLV", 1),
-                        ("BYTE", "RingStarLV", 1),
-                        ("list", "CoupleAttrType", 0),
-                        ("list", "CoupleAttrValue", 0),
-                        ("list", "StarAttrType", 0),
-                        ("list", "StarAttrValue", 0),
-                        ("list", "UpItemAttrType", 0),
-                        ("list", "UpItemAttrValue", 0),
-                        ("DWORD", "NeedEatCount", 0),
-                        ("DWORD", "UpEatItemPerCount", 0),
-                        ),
-
-                "LoveCharm":(
-                        ("BYTE", "CharmLV", 1),
-                        ("DWORD", "UpNeedCharm", 0),
-                        ("list", "LVAttrType", 0),
-                        ("list", "LVAttrValue", 0),
-                        ("list", "LVAwardItemInfo", 0),
-                        ),
-
                 "HorsePetSkin":(
                         ("BYTE", "Type", 1),
                         ("DWORD", "ID", 1),
@@ -1726,12 +1652,6 @@
                         ("DWORD", "NeedExp", 0),
                         ("dict", "AttrInfo", 0),
                         ("BYTE", "SkinIndex", 0),
-                        ),
-
-                "FuncSysPrivilege":(
-                        ("BYTE", "FuncSysID", 1),
-                        ("BYTE", "DayNum", 0),
-                        ("list", "DayAwardItemInfo", 0),
                         ),
 
                 "HistoryRechargeAward":(
@@ -1752,16 +1672,6 @@
                         ("list", "FreeRewardItemList", 0),
                         ("list", "ZLRewardItemList", 0),
                         ("list", "ZLRewardItemListH", 0),
-                        ),
-
-                "Xiangong":(
-                        ("WORD", "XiangongID", 1),
-                        ),
-
-                "TiandaoTree":(
-                        ("WORD", "AwardIndex", 1),
-                        ("DWORD", "NeedQiyun", 0),
-                        ("list", "AwardItemList", 0),
                         ),
 
                 "TreeLV":(
@@ -2468,25 +2378,6 @@
     def GetNeedValueList(self): return self.attrTuple[3] # 所需值列表 list
     def GetAwardItemList(self): return self.attrTuple[4] # 奖励物品列表 list
 
-# 境界炼体属性表
-class IPY_LianTi():
-    
-    def __init__(self):
-        self.attrTuple = None
-        return
-        
-    def GetLianTiLV(self): return self.attrTuple[0] # 炼体等级 BYTE
-    def GetFixedAttrType(self): return self.attrTuple[1] # 固定属性类型(非累积) list
-    def GetFixedAttrValue(self): return self.attrTuple[2] # 固定属性值(非累积) list
-    def GetPlusAttrType(self): return self.attrTuple[3] # 增强属性类型(非累积) list
-    def GetPlusAttrRate(self): return self.attrTuple[4] # 增强属性万分率(非累积) list
-    def GetEatItemAttrType(self): return self.attrTuple[5] # 每x个培养丹增加属性类型,x=UpEatItemPerCount list
-    def GetEatItemAttrValue(self): return self.attrTuple[6] # 每x个培养丹增加属性值,x=UpEatItemPerCount list
-    def GetNeedEatCount(self): return self.attrTuple[7] # 升级所需个数(非累计) WORD
-    def GetEatPerCount(self): return self.attrTuple[8] # 每次培养消耗x个 WORD
-    def GetLVUpCostItemInfo(self): return self.attrTuple[9] # 突破等级道具ID|个数 list
-    def GetActivateSkillID(self): return self.attrTuple[10] # 激活技能ID DWORD
-
 # 功能配置表格
 class IPY_FuncConfig():
     
@@ -2740,34 +2631,6 @@
     def GetItemQuality(self): return self.attrTuple[4] # 物品星级 BYTE
     def GetLVLegendAttrLibNumInfo(self): return self.attrTuple[5] # 属性ID等级段对应数值库编号 {属性ID:{等级:库编号, ...}} dict
 
-# 神兽表
-class IPY_Dogz():
-    
-    def __init__(self):
-        self.attrTuple = None
-        return
-        
-    def GetDogzID(self): return self.attrTuple[0] # 神兽ID BYTE
-    def GetBaseAttrTypes(self): return self.attrTuple[1] # 基础属性类型列表 list
-    def GetBaseAttrValues(self): return self.attrTuple[2] # 基础属性值列表 list
-    def GetHelpBattleSkills(self): return self.attrTuple[3] # 助战技能ID列表 list
-    def GetFightPowerEx(self): return self.attrTuple[4] # 助战附加战力 DWORD
-    def GetEquipPlaceColorList(self): return self.attrTuple[5] # 穿戴装备颜色限制 list
-    def GetHelpBattleNotify(self): return self.attrTuple[6] # 助战广播 ["广播key",[参数1,参数2,...],广播CD分钟] list
-
-# 神兽强化表
-class IPY_DogzEquipPlus():
-    
-    def __init__(self):
-        self.attrTuple = None
-        return
-        
-    def GetEquipPlace(self): return self.attrTuple[0] # 装备位 BYTE
-    def GetPlusLV(self): return self.attrTuple[1] # 强化等级 BYTE
-    def GetPlusAttrTypes(self): return self.attrTuple[2] # 强化属性类型列表 list
-    def GetPlusAttrValues(self): return self.attrTuple[3] # 强化属性值列表 list
-    def GetPlusLVUPTotalExp(self): return self.attrTuple[4] # 升级所需累计熟练度总值 DWORD
-
 # 洗练表
 class IPY_EquipWash():
     
@@ -2820,21 +2683,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_FaQiLVUp():
-    
-    def __init__(self):
-        self.attrTuple = None
-        return
-        
-    def GetFaQiLV(self): return self.attrTuple[0] # 法器等级 BYTE
-    def GetNeedEatCount(self): return self.attrTuple[1] # 升级所需个数(非累计) WORD
-    def GetLVAttrType(self): return self.attrTuple[2] # 每级额外属性类型(非累积) list
-    def GetLVAttrValue(self): return self.attrTuple[3] # 每级额外属性值(非累积) list
-    def GetUpItemAttrType(self): return self.attrTuple[4] # 每x个培养丹增加属性类型,x=UpEatItemPerCount list
-    def GetUpItemAttrValue(self): return self.attrTuple[5] # 每x个培养丹增加属性值,x=UpEatItemPerCount list
-    def GetUpEatItemPerCount(self): return self.attrTuple[6] # 每次培养消耗x个 DWORD
 
 # 坐骑阶级表
 class IPY_HorseClass():
@@ -4275,58 +4123,6 @@
     def GetPointID(self): return self.attrTuple[1] # 灵根ID DWORD
     def GetQualityLV(self): return self.attrTuple[2] # 品级 BYTE
 
-# 情缘礼物表
-class IPY_LoveGift():
-    
-    def __init__(self):
-        self.attrTuple = None
-        return
-        
-    def GetGiftNum(self): return self.attrTuple[0] # 聘礼ID BYTE
-    def GetGiftItemID(self): return self.attrTuple[1] # 物品ID DWORD
-    def GetAllowBatch(self): return self.attrTuple[2] # 是否允许批量赠送 BYTE
-
-# 情缘提亲表
-class IPY_Marry():
-    
-    def __init__(self):
-        self.attrTuple = None
-        return
-        
-    def GetBridePriceID(self): return self.attrTuple[0] # 聘礼ID BYTE
-    def GetCostMoneyInfo(self): return self.attrTuple[1] # 消耗货币类型|数值 list
-
-# 情缘情戒表
-class IPY_LoveRing():
-    
-    def __init__(self):
-        self.attrTuple = None
-        return
-        
-    def GetRingClassLV(self): return self.attrTuple[0] # 情戒阶级 BYTE
-    def GetRingStarLV(self): return self.attrTuple[1] # 情戒星级 BYTE
-    def GetCoupleAttrType(self): return self.attrTuple[2] # 仙侣属性类型(非累积) list
-    def GetCoupleAttrValue(self): return self.attrTuple[3] # 仙侣属性值(非累积) list
-    def GetStarAttrType(self): return self.attrTuple[4] # 星级额外属性类型(非累积) list
-    def GetStarAttrValue(self): return self.attrTuple[5] # 星级额外属性值(非累积) list
-    def GetUpItemAttrType(self): return self.attrTuple[6] # 每x个培养丹增加属性类型,x=UpEatItemPerCount list
-    def GetUpItemAttrValue(self): return self.attrTuple[7] # 每x个培养丹增加属性值,x=UpEatItemPerCount list
-    def GetNeedEatCount(self): return self.attrTuple[8] # 升级所需个数(非累计) DWORD
-    def GetUpEatItemPerCount(self): return self.attrTuple[9] # 每次培养消耗x个 DWORD
-
-# 情缘魅力属性表
-class IPY_LoveCharm():
-    
-    def __init__(self):
-        self.attrTuple = None
-        return
-        
-    def GetCharmLV(self): return self.attrTuple[0] # 魅力等级 BYTE
-    def GetUpNeedCharm(self): return self.attrTuple[1] # 升下级所需总魅力 DWORD
-    def GetLVAttrType(self): return self.attrTuple[2] # 属性类型 list
-    def GetLVAttrValue(self): return self.attrTuple[3] # 总属性值 list
-    def GetLVAwardItemInfo(self): return self.attrTuple[4] # 等级物品奖励[[物品ID,个数,是否拍品], ...] list
-
 # 骑宠觉醒表
 class IPY_HorsePetSkin():
     
@@ -4340,17 +4136,6 @@
     def GetNeedExp(self): return self.attrTuple[3] # 升级需要经验 DWORD
     def GetAttrInfo(self): return self.attrTuple[4] # 属性 dict
     def GetSkinIndex(self): return self.attrTuple[5] # 外观 BYTE
-
-# 功能特权奖励表
-class IPY_FuncSysPrivilege():
-    
-    def __init__(self):
-        self.attrTuple = None
-        return
-        
-    def GetFuncSysID(self): return self.attrTuple[0] # 功能系统ID BYTE
-    def GetDayNum(self): return self.attrTuple[1] # 第X天 BYTE
-    def GetDayAwardItemInfo(self): return self.attrTuple[2] #  奖励物品信息 [[物品ID,个数,是否拍品], ...] list
 
 # 累计充值奖励表
 class IPY_HistoryRechargeAward():
@@ -4386,26 +4171,6 @@
     def GetFreeRewardItemList(self): return self.attrTuple[3] # 免费奖励物品列表 [[物品ID,个数,是否拍品],...] list
     def GetZLRewardItemList(self): return self.attrTuple[4] # 战令奖励物品列表 [[物品ID,个数,是否拍品],...] list
     def GetZLRewardItemListH(self): return self.attrTuple[5] # 高级战令奖励物品列表 [[物品ID,个数,是否拍品],...] list
-
-# 仙宫表
-class IPY_Xiangong():
-    
-    def __init__(self):
-        self.attrTuple = None
-        return
-        
-    def GetXiangongID(self): return self.attrTuple[0] # 仙宫ID WORD
-
-# 仙宫天道树
-class IPY_TiandaoTree():
-    
-    def __init__(self):
-        self.attrTuple = None
-        return
-        
-    def GetAwardIndex(self): return self.attrTuple[0] # 奖励索引 WORD
-    def GetNeedQiyun(self): return self.attrTuple[1] # 所需气运值 DWORD
-    def GetAwardItemList(self): return self.attrTuple[2] # 奖励物品列表 list
 
 # 祝福树
 class IPY_TreeLV():
@@ -4577,7 +4342,6 @@
         self.__LoadFileData("RealmXXZL", onlyCheck)
         self.__LoadFileData("Realm", onlyCheck)
         self.__LoadFileData("RealmLVUPTask", onlyCheck)
-        self.__LoadFileData("LianTi", onlyCheck)
         self.__LoadFileData("FuncConfig", onlyCheck)
         self.__LoadFileData("FuncOpenLV", onlyCheck)
         self.__LoadFileData("ItemCompound", onlyCheck)
@@ -4597,12 +4361,9 @@
         self.__LoadFileData("EquipLegendAttrType", onlyCheck)
         self.__LoadFileData("EquipLegendAttrLib", onlyCheck)
         self.__LoadFileData("EquipLegendAttrValue", onlyCheck)
-        self.__LoadFileData("Dogz", onlyCheck)
-        self.__LoadFileData("DogzEquipPlus", onlyCheck)
         self.__LoadFileData("EquipWash", onlyCheck)
         self.__LoadFileData("AttrFruit", onlyCheck)
         self.__LoadFileData("EquipDecompose", onlyCheck)
-        self.__LoadFileData("FaQiLVUp", onlyCheck)
         self.__LoadFileData("HorseClass", onlyCheck)
         self.__LoadFileData("HorseSkin", onlyCheck)
         self.__LoadFileData("Gubao", onlyCheck)
@@ -4701,17 +4462,10 @@
         self.__LoadFileData("ItemWashMax", onlyCheck)
         self.__LoadFileData("SkillElement", onlyCheck)
         self.__LoadFileData("LingGenEffect", onlyCheck)
-        self.__LoadFileData("LoveGift", onlyCheck)
-        self.__LoadFileData("Marry", onlyCheck)
-        self.__LoadFileData("LoveRing", onlyCheck)
-        self.__LoadFileData("LoveCharm", onlyCheck)
         self.__LoadFileData("HorsePetSkin", onlyCheck)
-        self.__LoadFileData("FuncSysPrivilege", onlyCheck)
         self.__LoadFileData("HistoryRechargeAward", onlyCheck)
         self.__LoadFileData("CustomAward", onlyCheck)
         self.__LoadFileData("Zhanling", onlyCheck)
-        self.__LoadFileData("Xiangong", onlyCheck)
-        self.__LoadFileData("TiandaoTree", onlyCheck)
         self.__LoadFileData("TreeLV", onlyCheck)
         self.__LoadFileData("LLMJ", onlyCheck)
         self.__LoadFileData("GoldRushCamp", onlyCheck)
@@ -5202,13 +4956,6 @@
         self.CheckLoadData("RealmLVUPTask")
         return self.ipyRealmLVUPTaskCache[index]
 
-    def GetLianTiCount(self):
-        self.CheckLoadData("LianTi")
-        return self.ipyLianTiLen
-    def GetLianTiByIndex(self, index):
-        self.CheckLoadData("LianTi")
-        return self.ipyLianTiCache[index]
-
     def GetFuncConfigCount(self):
         self.CheckLoadData("FuncConfig")
         return self.ipyFuncConfigLen
@@ -5342,20 +5089,6 @@
         self.CheckLoadData("EquipLegendAttrValue")
         return self.ipyEquipLegendAttrValueCache[index]
 
-    def GetDogzCount(self):
-        self.CheckLoadData("Dogz")
-        return self.ipyDogzLen
-    def GetDogzByIndex(self, index):
-        self.CheckLoadData("Dogz")
-        return self.ipyDogzCache[index]
-
-    def GetDogzEquipPlusCount(self):
-        self.CheckLoadData("DogzEquipPlus")
-        return self.ipyDogzEquipPlusLen
-    def GetDogzEquipPlusByIndex(self, index):
-        self.CheckLoadData("DogzEquipPlus")
-        return self.ipyDogzEquipPlusCache[index]
-
     def GetEquipWashCount(self):
         self.CheckLoadData("EquipWash")
         return self.ipyEquipWashLen
@@ -5376,13 +5109,6 @@
     def GetEquipDecomposeByIndex(self, index):
         self.CheckLoadData("EquipDecompose")
         return self.ipyEquipDecomposeCache[index]
-
-    def GetFaQiLVUpCount(self):
-        self.CheckLoadData("FaQiLVUp")
-        return self.ipyFaQiLVUpLen
-    def GetFaQiLVUpByIndex(self, index):
-        self.CheckLoadData("FaQiLVUp")
-        return self.ipyFaQiLVUpCache[index]
 
     def GetHorseClassCount(self):
         self.CheckLoadData("HorseClass")
@@ -6070,47 +5796,12 @@
         self.CheckLoadData("LingGenEffect")
         return self.ipyLingGenEffectCache[index]
 
-    def GetLoveGiftCount(self):
-        self.CheckLoadData("LoveGift")
-        return self.ipyLoveGiftLen
-    def GetLoveGiftByIndex(self, index):
-        self.CheckLoadData("LoveGift")
-        return self.ipyLoveGiftCache[index]
-
-    def GetMarryCount(self):
-        self.CheckLoadData("Marry")
-        return self.ipyMarryLen
-    def GetMarryByIndex(self, index):
-        self.CheckLoadData("Marry")
-        return self.ipyMarryCache[index]
-
-    def GetLoveRingCount(self):
-        self.CheckLoadData("LoveRing")
-        return self.ipyLoveRingLen
-    def GetLoveRingByIndex(self, index):
-        self.CheckLoadData("LoveRing")
-        return self.ipyLoveRingCache[index]
-
-    def GetLoveCharmCount(self):
-        self.CheckLoadData("LoveCharm")
-        return self.ipyLoveCharmLen
-    def GetLoveCharmByIndex(self, index):
-        self.CheckLoadData("LoveCharm")
-        return self.ipyLoveCharmCache[index]
-
     def GetHorsePetSkinCount(self):
         self.CheckLoadData("HorsePetSkin")
         return self.ipyHorsePetSkinLen
     def GetHorsePetSkinByIndex(self, index):
         self.CheckLoadData("HorsePetSkin")
         return self.ipyHorsePetSkinCache[index]
-
-    def GetFuncSysPrivilegeCount(self):
-        self.CheckLoadData("FuncSysPrivilege")
-        return self.ipyFuncSysPrivilegeLen
-    def GetFuncSysPrivilegeByIndex(self, index):
-        self.CheckLoadData("FuncSysPrivilege")
-        return self.ipyFuncSysPrivilegeCache[index]
 
     def GetHistoryRechargeAwardCount(self):
         self.CheckLoadData("HistoryRechargeAward")
@@ -6132,20 +5823,6 @@
     def GetZhanlingByIndex(self, index):
         self.CheckLoadData("Zhanling")
         return self.ipyZhanlingCache[index]
-
-    def GetXiangongCount(self):
-        self.CheckLoadData("Xiangong")
-        return self.ipyXiangongLen
-    def GetXiangongByIndex(self, index):
-        self.CheckLoadData("Xiangong")
-        return self.ipyXiangongCache[index]
-
-    def GetTiandaoTreeCount(self):
-        self.CheckLoadData("TiandaoTree")
-        return self.ipyTiandaoTreeLen
-    def GetTiandaoTreeByIndex(self, index):
-        self.CheckLoadData("TiandaoTree")
-        return self.ipyTiandaoTreeCache[index]
 
     def GetTreeLVCount(self):
         self.CheckLoadData("TreeLV")
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChItem.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChItem.py
index 0674ece..e7cd57d 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChItem.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChItem.py
@@ -585,7 +585,6 @@
     itemEffIdCallFuncDic = {
                             ChConfig.Def_Effect_ItemAddLV:"Item_AddLV", #升级道具
                             ChConfig.Def_Effect_PrizeCoin:"Item_PrizeCoin", # 奖励充值点券
-                            ChConfig.Def_Effect_TiandaoQiyun:"Item_TiandaoQiyun", # 天道树气运
                             ChConfig.Def_Effect_TrainRealmLV:"Item_TrainRealmLV", # 境界培养卡
                             ChConfig.Def_Effect_AddFBCnt:"Item_AddFBCnt", # 增加副本可进入次数
                             ChConfig.Def_Effect_EmojiPack:"Item_EmojiPack",
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py
index 824ef4f..5c90268 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py
@@ -28,7 +28,6 @@
 import PlayerActivity
 import ChPyNetSendPack
 import NetPackCommon
-import PlayerXiangong
 import IpyGameDataPY
 import PlayerGubao
 import PyGameData
@@ -924,14 +923,6 @@
             tagItem.Clear()
             return True
         
-        #气运
-        if itemEff.GetEffectID() == ChConfig.Def_Effect_TiandaoQiyun:
-            isAutoUse = itemEff.GetEffectValue(1)
-            if isAutoUse:
-                addQiyun = itemEff.GetEffectValue(0) * tagItemCount
-                PlayerXiangong.AddTiandaoQiyun(curPlayer, addQiyun, {"ItemID":itemID, "ItemCount":tagItemCount, "isAutoUse":1})
-                tagItem.Clear()
-                return True
         #增加副本次数
         if itemEff.GetEffectID() == ChConfig.Def_Effect_AddFBCnt:
             isAutoUse = itemEff.GetEffectValue(1)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/ItemCommon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/ItemCommon.py
index 19e6d2b..ca1fdfe 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/ItemCommon.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/ItemCommon.py
@@ -913,10 +913,6 @@
         initCount = IpyGameDataPY.GetFuncCfg("InitDepotCellCount", 1)
     elif packType == ShareDefine.rptTreasure:
         initCount = IpyGameDataPY.GetFuncCfg("TreasureSet", 3)
-    elif packType == ShareDefine.rptDogzItem:
-        initCount = IpyGameDataPY.GetFuncCfg("DogzPack", 1)
-    elif packType == ShareDefine.rptDogzEquip:
-        initCount = IpyGameDataPY.GetFuncCfg("DogzPack", 2)
         
     if not initCount:
         bagInitCntDict = IpyGameDataPY.GetFuncEvalCfg("InitBagCellCount", 2, {})
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/Item_TiandaoQiyun.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/Item_TiandaoQiyun.py
deleted file mode 100644
index 40d6dc1..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/Item_TiandaoQiyun.py
+++ /dev/null
@@ -1,34 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-##@package UseItem.Item_TiandaoQiyun
-#
-# @todo:天道气运
-# @author hxp
-# @date 2024-09-04
-# @version 1.0
-#
-# 详细描述: 天道气运
-#
-#-------------------------------------------------------------------------------
-#"""Version = 2024-09-04 16:30"""
-#-------------------------------------------------------------------------------
-
-import ItemCommon
-import PlayerXiangong
-
-def BatchUseItem(curPlayer, curRoleItem, tick, useCnt, exData):
-    ##批量使用物品
-    
-    curEff = curRoleItem.GetEffectByIndex(0)
-    addValue = curEff.GetEffectValue(0) * useCnt
-    
-    PlayerXiangong.AddTiandaoQiyun(curPlayer, addValue, {"ItemID":curRoleItem.GetItemTypeID(), "ItemCount":useCnt})
-    
-    succCnt = useCnt # 默认值使用1个
-    ItemCommon.DelItem(curPlayer, curRoleItem, succCnt)
-    return True, succCnt
-    
-    
-
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 2764be9..25906c0 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
@@ -56,29 +56,20 @@
 import PlayerActFamilyCTGAssist
 import PlayerActManyDayRecharge
 import PlayerActSingleRecharge
-import PlayerFuncSysPrivilege
 import OpenServerActivity
 import ChNetSendPack
 import PlayerArena
 import PyGameData
 import PlayerCoin
-import PlayerCharm
-import PlayerDogz
 import PlayerFB
-import PlayerFaQi
 import SkillShell
 import PlayerGubao
 import PlayerCustomAward
 import PlayerZhanling
 import PlayerTree
 import PlayerLLMJ
-import PlayerLianTi
 import PlayerTask
-import PlayerYinji
-import PlayerLove
 import GameObj
-import PlayerChangeJob
-import PlayerXiangong
 import PlayerGoldRush
 import PlayerActLoginNew
 import PlayerActBuyCountGift
@@ -148,194 +139,6 @@
     if FBLogic.PlayerLoginInFBCheck(curPlayer, tick):
         #玩家是第一次登录, 并且玩家需要踢回原来地图
         return
-    return
-
-#// A1 20 货币兑换 #tagCMMoneyExchange
-#
-#struct    tagCMMoneyExchange
-#{
-#    tagHead         Head;
-#    BYTE        SrcMoneyType;    // 源货币类型
-#    BYTE        TagMoneyType;    // 目标货币类型
-#    DWORD        ExchangeValue;    // 兑换数量(消耗源货币的数量)
-#};
-def OnMoneyExchange(index, clientData, tick):
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    srcMoneyType = clientData.SrcMoneyType
-    tagMoneyType = clientData.TagMoneyType
-    exchangeValue = clientData.ExchangeValue
-    
-    exchangeMoneyInfo = IpyGameDataPY.GetFuncEvalCfg("EqualValueMoney", 1, {})
-    if str(srcMoneyType) not in exchangeMoneyInfo:
-        return
-    exchangeInfo = exchangeMoneyInfo[str(srcMoneyType)]
-    if tagMoneyType != exchangeInfo[0]:
-        return
-    multiple = exchangeInfo[1]
-    if exchangeValue <= 0:
-        return
-    
-    if not PlayerControl.PayMoney(curPlayer, srcMoneyType, exchangeValue, "MoneyExchange"):
-        return
-    
-    tagMoneyAdd = exchangeValue * multiple
-    PlayerControl.GiveMoney(curPlayer, tagMoneyType, tagMoneyAdd, "MoneyExchange")
-    GameWorld.Log("货币兑换: srcMoneyType=%s,exchangeValue=%s,tagMoneyType=%s,tagMoneyAdd=%s" 
-                  % (srcMoneyType, exchangeValue, tagMoneyType, tagMoneyAdd), curPlayer.GetPlayerID())
-    return
-
-#// A1 21 转职业 #tagCMChangeJob
-#
-#struct    tagCMChangeJob
-#{
-#    tagHead        Head;
-#    BYTE        TagJob;
-#};
-def OnChangeJob(index, clientData, tick):
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    PlayerChangeJob.DoChangeJob(curPlayer, curPlayer.GetJob(), clientData.TagJob)
-    return
-
-#// A1 08 刷新主服角色信息 #tagCMRefreshMainServerRole
-#
-#struct tagCMRefreshMainServerRole
-#{
-#    tagHead        Head;
-#};
-def OnRefreshMainServerRole(index, clientData, tick):
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    
-    Sync_DBPlayer(curPlayer)
-    
-    # 死亡复活
-    if GameObj.GetHP(curPlayer) <=0 or curPlayer.GetPlayerAction() == IPY_GameWorld.paDie:
-        PlayerRebornByType(curPlayer, ChConfig.rebornType_System, tick)
-        
-    # 强刷一次属性,刷之前重置还没同步过所有属性
-    curPlayer.SetDict(ChConfig.Def_PlayerKey_NotifyAllAttrState, 0)
-    playerControl = PlayerControl.PlayerControl(curPlayer)
-    playerControl.ReCalcAllState()
-    
-    # 同步所有buff
-    __Sync_ClientBuff(curPlayer)
-    
-    PlayerState.Sync_PKBossState(curPlayer)
-    
-    # 恢复视野,刷新自己的视野
-    curPlayer.SetVisible(True)
-    PlayerControl.SetSight(curPlayer, 0)
-    curPlayer.RefreshView()
-    PlayerControl.SetSight(curPlayer, ChConfig.Def_PlayerSight_Default)
-    curPlayer.RefreshView()
-    
-    msgInfo = ""
-    GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(curPlayer.GetPlayerID(), 0, 0, "RefreshMainServerRole", msgInfo, len(msgInfo))
-    return
-
-def Sync_DBPlayer(curPlayer):
-    ## 同步DBPlayer信息,同0102封包
-    dbPlayer = ChPyNetSendPack.tagMCDBPlayer()
-    dbPlayer.AccID = curPlayer.GetAccID()
-    dbPlayer.PlayerID = curPlayer.GetPlayerID()
-    dbPlayer.PlayerName = curPlayer.GetPlayerName()
-    dbPlayer.AccState = curPlayer.GetAccState()
-    dbPlayer.GMLevel = curPlayer.GetGMLevel()
-    dbPlayer.Sex = curPlayer.GetSex()
-    dbPlayer.Job = curPlayer.GetJob()
-    dbPlayer.ReincarnationLv = curPlayer.GetReincarnationLv()
-    dbPlayer.LV = curPlayer.GetLV()
-    dbPlayer.LVEx = curPlayer.GetLVEx()
-    dbPlayer.LV2 = curPlayer.GetLV2()
-    dbPlayer.ExpPoint = curPlayer.GetExpPoint()
-    dbPlayer.TotalExp = curPlayer.GetTotalExp()
-    dbPlayer.Family = curPlayer.GetFamilyID()
-    dbPlayer.FamilyName = curPlayer.GetFamilyName()
-    dbPlayer.TeamHornor = curPlayer.GetTeamHornor()
-    dbPlayer.FamilyHornor = curPlayer.GetFamilyHornor()
-    dbPlayer.FamilyActiveValue = curPlayer.GetFamilyActiveValue()
-    dbPlayer.LastWeekFamilyActiveValue = curPlayer.GetLastWeekFamilyActiveValue()
-    dbPlayer.CountryHornor = curPlayer.GetCountryHornor()
-    dbPlayer.CountryLastWeekHornor = curPlayer.GetCountryLastWeekHornor()
-    dbPlayer.Mate = curPlayer.GetMate()
-    dbPlayer.Gold = curPlayer.GetGold()
-    dbPlayer.GoldPaper = curPlayer.GetGoldPaper()
-    dbPlayer.Silver = curPlayer.GetSilver()
-    dbPlayer.SilverPaper = curPlayer.GetSilverPaper()
-    dbPlayer.FightPoint = curPlayer.GetFightPoint()
-    dbPlayer.HappyPoint = curPlayer.GetHappyPoint()
-    dbPlayer.LineID = curPlayer.GetLineID()
-    dbPlayer.MapID = curPlayer.GetMapID() # 玩家身上的 GetMapID 返回的就是 GetDataMapID
-    dbPlayer.PosX = curPlayer.GetPosX()
-    dbPlayer.PosY = curPlayer.GetPosY()
-    dbPlayer.RebornMapID = curPlayer.GetRebornMapID()
-    dbPlayer.RebornPosX = curPlayer.GetRebornPosX()
-    dbPlayer.RebornPosY = curPlayer.GetRebornPosY()
-    dbPlayer.State = curPlayer.GetState()
-    dbPlayer.HP = curPlayer.GetHP()
-    dbPlayer.HPEx = curPlayer.GetHPEx()
-    dbPlayer.XP = curPlayer.GetXP()
-    dbPlayer.HPRestoreSetting = curPlayer.GetHPRestoreSetting()
-    dbPlayer.MPRestoreSetting = curPlayer.GetMPRestoreSetting()
-    dbPlayer.FreePoint = curPlayer.GetFreePoint()
-    dbPlayer.FreeSkillPoint = curPlayer.GetFreeSkillPoint()
-    dbPlayer.BaseSTR = curPlayer.GetBaseSTR()
-    dbPlayer.BasePNE = curPlayer.GetBasePNE()
-    dbPlayer.BasePHY = curPlayer.GetBasePHY()
-    dbPlayer.BaseCON = curPlayer.GetBaseCON()
-    dbPlayer.STR = curPlayer.GetSTR()
-    dbPlayer.PNE = curPlayer.GetPNE()
-    dbPlayer.PHY = curPlayer.GetPHY()
-    dbPlayer.CON = curPlayer.GetCON()
-    #dbPlayer.Setting = curPlayer.GetSetting() # 没有
-    dbPlayer.PKValue = curPlayer.GetPKValue()
-    #dbPlayer.ActiveValue = curPlayer.GetActiveValue() # 没有
-    dbPlayer.BackpackLV = curPlayer.GetBackpackLV()
-    dbPlayer.WarehouseLV = curPlayer.GetWarehouseLV()
-    dbPlayer.TeamID = curPlayer.GetTeamID()
-    dbPlayer.UseGoldType = curPlayer.GetUseGoldType()
-    dbPlayer.UseSilverType = curPlayer.GetUseSilverType()
-    dbPlayer.AttackMode = curPlayer.GetAttackMode()
-    dbPlayer.LastWeekOnlineTime = curPlayer.GetLastWeekOnlineTime()
-    dbPlayer.FBID = curPlayer.GetClientLineID()
-    dbPlayer.FamilyLV = curPlayer.GetFamilyLV()
-    dbPlayer.FriendFavor = curPlayer.GetFriendFavor()
-    dbPlayer.Energy = curPlayer.GetEnergy()
-    dbPlayer.EquipShowSwitch = curPlayer.GetEquipShowSwitch()
-    dbPlayer.LuckValue = curPlayer.GetLuckValue()
-    dbPlayer.ExAttr1 = curPlayer.GetExAttr1()
-    dbPlayer.ExAttr2 = curPlayer.GetExAttr2()
-    dbPlayer.ExAttr3 = curPlayer.GetExAttr3()
-    dbPlayer.ExAttr4 = curPlayer.GetExAttr4()
-    dbPlayer.ExAttr5 = curPlayer.GetExAttr5()
-    dbPlayer.Faction = curPlayer.GetFaction()
-    dbPlayer.InfamyValue = curPlayer.GetInfamyValue()
-    dbPlayer.OfficialRank = curPlayer.GetOfficialRank()
-    dbPlayer.ChangeCoinPointTotal = curPlayer.GetChangeCoinPointTotal()
-    dbPlayer.VIPLv = curPlayer.GetVIPLv()
-    dbPlayer.VIPLvForPhone = curPlayer.GetVIPLvForPhone()
-    dbPlayer.ExAttr6 = curPlayer.GetExAttr6()
-    dbPlayer.ExAttr7 = curPlayer.GetExAttr7()
-    dbPlayer.ExAttr8 = curPlayer.GetExAttr8()
-    dbPlayer.ExAttr9 = curPlayer.GetExAttr9()
-    dbPlayer.ExAttr10 = curPlayer.GetExAttr10()
-    dbPlayer.ModelMark = curPlayer.GetModelMark()
-    dbPlayer.ExAttr11 = curPlayer.GetExAttr11()
-    dbPlayer.ExAttr12 = curPlayer.GetExAttr12()
-    dbPlayer.ExAttr13 = curPlayer.GetExAttr13()
-    dbPlayer.ExAttr14 = curPlayer.GetExAttr14()
-    dbPlayer.OperateInfo = curPlayer.GetOperateInfo()
-    dbPlayer.Operate = curPlayer.GetOperate()
-    dbPlayer.ServerID = curPlayer.GetServerID()
-    dbPlayer.ExAttr15 = curPlayer.GetExAttr15()
-    dbPlayer.ExAttr16 = curPlayer.GetExAttr16()
-    dbPlayer.ExAttr17 = curPlayer.GetExAttr17()
-    dbPlayer.ExAttr18 = curPlayer.GetExAttr18()
-    dbPlayer.ExAttr19 = curPlayer.GetExAttr19()
-    dbPlayer.ExAttr20 = curPlayer.GetExAttr20()
-    dbPlayer.Face = curPlayer.GetFace()
-    dbPlayer.FacePic = curPlayer.GetFacePic()
-    dbPlayer.RoleType = curPlayer.GetRoleType()
-    NetPackCommon.SendFakePack(curPlayer, dbPlayer)
     return
 
 #---------------------------------------------------------------------
@@ -490,12 +293,6 @@
     # 坐骑相关通知
     PlayerHorse.PlayerHorseLogin(curPlayer)
     
-    # 法器
-    PlayerFaQi.PlayerFaQiLogin(curPlayer)
-    
-    # 炼体
-    PlayerLianTi.OnPlayerLogin(curPlayer)
-    
     PlayerTreasure.OnTreasureLogin(curPlayer)
     
     # 副本进入时间
@@ -506,12 +303,6 @@
     
     #成就
     PlayerSuccess.SuccOnLogin(curPlayer)
-    
-    #魅力
-    PlayerCharm.OnPlayerLogin(curPlayer)
-    
-    #情缘
-    PlayerLove.DoPlayerLogin(curPlayer)
     
     #同步自动战斗配置记录
 #    Sync_AutoFightSetting(curPlayer)
@@ -553,8 +344,6 @@
     SyncPackDownloadAward(curPlayer)
     # 登录触发功能开启(老号处理)
     GameFuncComm.DoFuncOpenLogic(curPlayer)
-    # 神兽
-    PlayerDogz.OnPlayerLogin(curPlayer)
     # 小助手
     SyncLittleHelper(curPlayer)
     PlayerFB.OnLogin(curPlayer)
@@ -564,8 +353,6 @@
     Sync_CreateRoleAwardInfo(curPlayer)
     #自定义奖励
     PlayerCustomAward.OnPlayerLogin(curPlayer)
-    #功能系统特权
-    PlayerFuncSysPrivilege.OnPlayerLogin(curPlayer)
     #玩法前瞻奖励
     gameNoticeAwardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GameNoticeAwardState)
     if gameNoticeAwardState:
@@ -615,7 +402,6 @@
         PlayerHero.OnPlayerLogin(curPlayer)
         PlayerMail.OnPlayerLogin(curPlayer)
         PlayerHJG.OnPlayerLogin(curPlayer)
-        PlayerXiangong.OnPlayerLogin(curPlayer)
         PlayerGubao.OnPlayerLogin(curPlayer)
         PlayerZhanling.OnPlayerLogin(curPlayer)
         PlayerTask.OnPlayerLogin(curPlayer)
@@ -1324,13 +1110,6 @@
     #初始化寻宝背包
     PlayerControl.Init_PackCount(curPlayer, ShareDefine.rptTreasure)
     
-    #初始化神兽物品背包
-    #curPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptDogzItem)
-    #curPack.SetCount(ItemCommon.GetPackInitCount(ShareDefine.rptDogzItem))
-    #curPack.Sync_PackCanUseCount()
-    #初始化神兽装备背包
-    #curPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptDogzEquip)
-    #curPack.SetCount(ItemCommon.GetPackInitCount(ShareDefine.rptDogzEquip))
     #curPack.Sync_PackCanUseCount()
     #初始化垃圾分类背包
     #curPack = itemManager.GetPack(ShareDefine.rptGarbage)
@@ -1536,8 +1315,7 @@
         SyncPKModel(curPlayer)
         GameWorld.DebugLog("进入地图强制切换PK模式: %s" % initAttackModel)
     
-    PassiveBuffEffMng.OnLoadMapGFPassive(curPlayer)
-    PlayerYinji.OnLoadMap(curPlayer)
+    #PassiveBuffEffMng.OnLoadMapGFPassive(curPlayer)
     
     #EndLoadMap需放在最后, 0403 tagPlayerLoginLoadOK
     curPlayer.EndLoadMap()
@@ -2881,7 +2659,7 @@
     GameObj.SetHP(curPlayer, GameObj.GetMaxHP(curPlayer) * resetHpPercent / ChConfig.Def_MaxRateValue)
     #curPlayer.SetMP(curPlayer.GetMaxMP() * resetMpPercent / ChConfig.Def_MaxRateValue)
     #护盾
-    PlayerControl.SetProDef(curPlayer, PlayerControl.GetMaxProDef(curPlayer))
+    #PlayerControl.SetProDef(curPlayer, PlayerControl.GetMaxProDef(curPlayer))
     
     #玩家复活后副本处理
     FBLogic.OnPlayerRebornOver(curPlayer, rebornType)
@@ -3384,9 +3162,6 @@
     # 仙盟攻城战活动奖励
     elif rewardType == ChConfig.Def_RewardType_FamilyGCZ:
         PlayerActFamilyGCZ.GetFamilyGCZAward(curPlayer, dataEx, tick)
-    # 天道树奖励
-    elif rewardType == ChConfig.Def_RewardType_TiandaoTree:
-        PlayerXiangong.GetTiandaoTreeAward(curPlayer, dataEx)
     # 寻宝累计次数奖励
     elif rewardType == ChConfig.Def_RewardType_TreasureCntAward:
         PlayerTreasure.GetTreasureCntAward(curPlayer, dataEx, dataExStr)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerChangeJob.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerChangeJob.py
deleted file mode 100644
index 2f22959..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerChangeJob.py
+++ /dev/null
@@ -1,312 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-##@package Player.PlayerChangeJob
-#
-# @todo:转职业
-# @author hxp
-# @date 2022-10-14
-# @version 1.0
-#
-# 详细描述: 转职业
-#
-#-------------------------------------------------------------------------------
-#"""Version = 2022-10-14 19:00"""
-#-------------------------------------------------------------------------------
-
-import GameWorld
-import ShareDefine
-import IpyGameDataPY
-import IPY_GameWorld
-import PlayerBillboard
-import DataRecordPack
-import PlayerControl
-import ItemControler
-import ItemCommon
-import ChConfig
-
-
-def DoChangeJob(curPlayer, curJob, tagJob, isFree=False):
-    ''' 转换职业,为防止转职业过程失败,该函数可重复执行调用,如果玩家转职出现异常,可通过后台GM直接执行命令重复操作转职
-    '''
-    
-    playerID = curPlayer.GetPlayerID()
-    GameWorld.Log("玩家转职业: playerJob=%s,curJob=%s,tagJob=%s,isFree=%s" 
-                  % (curPlayer.GetJob(), curJob, tagJob, isFree), playerID)
-    if curJob == tagJob:
-        return
-    jobList = IpyGameDataPY.GetFuncEvalCfg("OpenJob", 1)
-    if curJob not in jobList or tagJob not in jobList:
-        return
-    
-    if not isFree:
-        costItemInfo = IpyGameDataPY.GetFuncEvalCfg("ChangeJob", 1) # 所需物品ID|个数
-        costItemID, costItemCount = costItemInfo
-        
-        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), playerID)
-            return
-        
-    ipyDataMgr = IpyGameDataPY.IPY_Data()
-    
-    # 1.技能(人族法宝技能,普攻技能,驭灵卷技能,翻滚技能,境界技能,专精)
-    # 五行专精 直接重置
-    delSkillIDList = [] # 需要删除的技能ID列表
-    replaceSkillDict = {} # 需要替换的技能信息 {skillID:替换技能ID, ...}
-    skillManager = curPlayer.GetSkillManager()
-    for i in range(skillManager.GetSkillCount()):
-        curSkill = skillManager.GetSkillByIndex(i)
-        if not curSkill:
-            continue
-        
-        skillUseType = curSkill.GetUseType()
-        if skillUseType == 0:
-            # 无职业限制
-            continue
-        if not skillUseType & pow(2, curJob):
-            continue
-        
-        funcType = curSkill.GetFuncType()
-        skillID = curSkill.GetSkillID()
-        skillTypeID = curSkill.GetSkillTypeID()
-        if funcType in [ChConfig.Def_SkillFuncType_FbSPSkill]:
-            delSkillIDList.append(skillID)
-        else:
-            replaceSkillDict[skillTypeID] = [skillID, curSkill.GetSkillLV(), 0]
-            
-    # 1.1 普攻
-    curJobCommAtkSkillIDList = IpyGameDataPY.GetFuncEvalCfg("JobFitterSkill", curJob)
-    tagJobCommAtkSkillIDList = IpyGameDataPY.GetFuncEvalCfg("JobFitterSkill", tagJob)
-    if len(curJobCommAtkSkillIDList) != len(tagJobCommAtkSkillIDList):
-        GameWorld.ErrLog("转职业普攻对应技能配置错误! curJob=%s,tagJob=%s" % (curJob, tagJob), playerID)
-        return
-    for i, skillTypeID in enumerate(curJobCommAtkSkillIDList):
-        if skillTypeID in replaceSkillDict:
-            replaceSkillDict[skillTypeID][-1] = tagJobCommAtkSkillIDList[i]
-            
-    # 1.2 法宝 - 主动技能
-    for index in range(ipyDataMgr.GetTreasureUpCount()):
-        ipyData = ipyDataMgr.GetTreasureUpByIndex(index)
-        UnLockSkillList = ipyData.GetUnLockSkill()
-        for skillTypeID in UnLockSkillList:
-            if skillTypeID not in replaceSkillDict:
-                continue
-            if tagJob > len(UnLockSkillList):
-                GameWorld.ErrLog("法宝升级表未配置转职业对应技能! skillTypeID=%s,tagJob=%s" % (skillTypeID, tagJob), playerID)
-                return
-            replaceSkillDict[skillTypeID][-1] = UnLockSkillList[tagJob - 1]
-            break
-        
-    # 1.3 境界 - 被动技能
-    for index in range(ipyDataMgr.GetRealmCount()):
-        ipyData = ipyDataMgr.GetRealmByIndex(index)
-        LearnSkillIDInfo = {}
-        if str(curJob) not in LearnSkillIDInfo:
-            continue
-        curJobLearnSkillIDList = LearnSkillIDInfo[str(curJob)]
-        tagJobLearnSkillIDList = LearnSkillIDInfo.get(str(tagJob), [])
-        for i, skillTypeID in enumerate(curJobLearnSkillIDList):
-            if skillTypeID not in replaceSkillDict:
-                continue
-            if i >= len(tagJobLearnSkillIDList):
-                GameWorld.ErrLog("境界表未配置转职业对应技能! skillTypeID=%s,tagJob=%s" % (skillTypeID, tagJob), playerID)
-                return
-            replaceSkillDict[skillTypeID][-1] = tagJobLearnSkillIDList[i]
-            break
-        
-    for skillTypeID, repInfo in replaceSkillDict.items():
-        skillID, skillLV, repSkillTypeID = repInfo
-        if not repSkillTypeID or not GameWorld.GetGameData().GetSkillBySkillID(repSkillTypeID):
-            GameWorld.ErrLog("玩家转职业时找不到可替换的目标职业技能数据! skillTypeID=%s,skillID=%s,skillLV=%s,repSkillTypeID=%s,tagJob=%s" 
-                             % (skillTypeID, skillID, skillLV, repSkillTypeID, tagJob), playerID)
-            return
-        
-    # 2. 物品: 职业装备、翅膀、时装
-    itemColorMin = IpyGameDataPY.GetFuncCfg("ChangeJob", 2) # 背包中需要转换的最低装备颜色品质
-    auctionItemNeed = IpyGameDataPY.GetFuncCfg("ChangeJob", 3) # 背包中拍品是否转换
-    jobWingIDListInfo = IpyGameDataPY.GetFuncEvalCfg("ChangeJob", 4, {}) # 职业对应翅膀ID突破顺序列表 {职业:[翅膀物品ID, ...], ...}
-    costItemIDList = [] # 时装装备物品ID组列表 [[职业1时装ID, 职业2时装ID, ...], ...]
-    for index in range(ipyDataMgr.GetCoatCount()):
-        ipyData = ipyDataMgr.GetCoatByIndex(index)
-        costItemIDList.append(ipyData.GetEquipItemID())
-        
-    replaceItemList = []
-    for packType in [IPY_GameWorld.rptItem, IPY_GameWorld.rptWarehouse, IPY_GameWorld.rptEquip]:
-        equipPack = curPlayer.GetItemManager().GetPack(packType)
-        for index in range(equipPack.GetCount()):
-            curItem = equipPack.GetAt(index)
-            if not curItem or curItem.IsEmpty():
-                continue
-            
-            itemID = curItem.GetItemTypeID()
-            itemPlace = curItem.GetEquipPlace()
-            itemColor = curItem.GetItemColor()
-            
-            # 背包、仓库 额外条件
-            if packType in [IPY_GameWorld.rptItem, IPY_GameWorld.rptWarehouse]:
-                if ItemCommon.CheckItemIsEquip(curItem) and itemPlace != ShareDefine.retWing:
-                    if itemColor < itemColorMin:
-                        continue
-                    if not auctionItemNeed and ItemControler.GetIsAuctionItem(curItem):
-                        continue
-                    
-            itemJobLimit = curItem.GetJobLimit()
-            if not itemJobLimit:
-                continue
-            
-            if itemJobLimit != curJob:
-                # 非需要转换的职业物品不处理
-                continue
-            
-            # 基础部位, 直接按装备物品ID首位为对应职业进行替换
-            if itemPlace in ChConfig.EquipPlace_Base:
-                tagJobItemID = GameWorld.ToIntDef("%s%s" % (tagJob, str(itemID)[1:]))
-                replaceItemList.append([packType, curItem, tagJobItemID])
-                
-            # 时装
-            elif itemPlace in [ShareDefine.retWeaponSkin, ShareDefine.retClothesSkin, ShareDefine.retWeapon2Skin]:
-                tagJobItemID = 0
-                for costJobItemIDList in costItemIDList:
-                    if itemID not in costJobItemIDList:
-                        continue
-                    if tagJob > len(costJobItemIDList):
-                        GameWorld.ErrLog("时装表未配置转职业对应时装! itemID=%s,tagJob=%s" % (itemID, tagJob), playerID)
-                        return
-                    tagJobItemID = costJobItemIDList[tagJob - 1]
-                    break
-                replaceItemList.append([packType, curItem, tagJobItemID])
-                
-            # 翅膀
-            elif itemPlace == ShareDefine.retWing:
-                curJobWingIDList = jobWingIDListInfo.get(curJob, [])
-                tagJobWingIDList = jobWingIDListInfo.get(tagJob, [])
-                if len(curJobWingIDList) != len(tagJobWingIDList):
-                    GameWorld.ErrLog("功能配置表转职业对应翅膀ID长度配置不一致! curJob=%s,tagJob=%s" % (curJob, tagJob), playerID)
-                    return
-                if itemID in curJobWingIDList:
-                    tagJobItemID = tagJobWingIDList[curJobWingIDList.index(itemID)]
-                    replaceItemList.append([packType, curItem, tagJobItemID])
-                    
-            else:
-                GameWorld.ErrLog("转职业未知转换逻辑的物品ID! itemID=%s,tagJob=%s" % (itemID, tagJob), playerID)
-                
-    assignItemList = []
-    for packType, curItem, tagJobItemID in replaceItemList:
-        tagItem = ItemControler.GetOutPutItemObj(tagJobItemID, curItem.GetCount(), curPlayer=curPlayer)
-        if not tagItem:
-            GameWorld.ErrLog("转职业时创建物品异常! tagJobItemID=%s,tagJob=%s" % (tagJobItemID, tagJob), playerID)
-            return
-        assignItemList.append([packType, curItem, tagItem])
-        
-    ## -------- 以上为验证都没有任何问题后,开始执行转职业替换 ----------
-    DR_ChangeJob(curPlayer, {"curJob":curJob, "tagJob":tagJob})
-    delSkillIDList.sort()
-    DR_ChangeJob(curPlayer, {"delSkillIDList":delSkillIDList, "replaceSkillDict":replaceSkillDict, "assignItemCount":len(assignItemList)})
-    # 处理技能
-    GameWorld.Log("删除技能: 个数=%s,delSkillIDList=%s" % (len(delSkillIDList), delSkillIDList), playerID)
-    for num, delSkillID in enumerate(delSkillIDList, 1):
-        skillData = GameWorld.GetGameData().GetSkillBySkillID(delSkillID)
-        skillName = skillData.GetSkillName() if skillData else ""
-        skillManager.DeleteSkillBySkillID(delSkillID, False)
-        GameWorld.Log("    删除技能 %s: delSkillID=%s(%s)" % (num, delSkillID, skillName), playerID)
-        DR_ChangeJob(curPlayer, {"delSkillID":delSkillID, "skillName":skillName})
-        
-    repSkillTypeIDList = replaceSkillDict.keys()
-    repSkillTypeIDList.sort()
-    GameWorld.Log("替换技能: 个数=%s,repSkillTypeIDList=%s" % (len(repSkillTypeIDList), repSkillTypeIDList), playerID)
-    for num, skillTypeID in enumerate(repSkillTypeIDList, 1):
-        skillID, skillLV, repSkillTypeID = replaceSkillDict[skillTypeID]
-        skillManager.DeleteSkillBySkillID(skillID, False)
-        for _ in range(skillLV):
-            skillManager.LVUpSkillBySkillTypeID(repSkillTypeID)
-        repSkill = skillManager.FindSkillBySkillTypeID(repSkillTypeID)
-        repSkillID = repSkill.GetSkillID() if repSkill else 0
-        skillData = GameWorld.GetGameData().GetSkillBySkillID(skillID)
-        skillName = skillData.GetSkillName() if skillData else ""
-        repSkillData = GameWorld.GetGameData().GetSkillBySkillID(repSkillID)
-        repSkillName = repSkillData.GetSkillName() if repSkillData else ""
-        GameWorld.Log("    替换技能 %s: skillTypeID=%s,skillID=%s(%s),skillLV=%s,tagJob=%s,repSkillTypeID=%s,repSkillID=%s(%s)" 
-                      % (num, skillTypeID, skillID, skillName, skillLV, tagJob, repSkillTypeID, repSkillID, repSkillName), playerID)
-        DR_ChangeJob(curPlayer, {"skillTypeID":skillTypeID, "skillID":skillID, "skillLV":skillLV, "skillName":skillName,
-                                 "repSkillTypeID":repSkillTypeID, "repSkillID":repSkillID, "repSkillName":repSkillName})
-        
-    GameWorld.Log("删除专精相关字典记录数据", playerID)
-    for index in range(ipyDataMgr.GetSkillElementCount()):
-        ipyData = ipyDataMgr.GetSkillElementByIndex(index)
-        elementSkillID = ipyData.GetElementSkillID()
-        mainSkillID = ipyData.GetMainSkillID()
-        selectElementSkillID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_SkillElementID % mainSkillID)
-        if selectElementSkillID:
-            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_SkillElementID % mainSkillID, 0)
-            mainSkillData = GameWorld.GetGameData().GetSkillBySkillID(mainSkillID)
-            mainSkillName = mainSkillData.GetSkillName() if mainSkillData else ""
-            selSkillData = GameWorld.GetGameData().GetSkillBySkillID(selectElementSkillID)
-            selSkillName = selSkillData.GetSkillName() if selSkillData else ""
-            GameWorld.Log("    取消使用中的专精: mainSkillID=%s(%s),selectElementSkillID=%s(%s)" 
-                          % (mainSkillID, mainSkillName, selectElementSkillID, selSkillName), playerID)
-            
-        elementSkillIDLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_SkillElementLV % elementSkillID)
-        if elementSkillIDLV:
-            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_SkillElementLV % elementSkillID, 0)            
-            elmSkillData = GameWorld.GetGameData().GetSkillBySkillID(elementSkillID)
-            elmSkillName = elmSkillData.GetSkillName() if elmSkillData else ""
-            GameWorld.Log("    重置专精记录等级: elementSkillID=%s(%s),elementSkillIDLV=%s" % (elementSkillID, elmSkillName, elementSkillIDLV), playerID)
-            
-    #Item_ResetAttrPoint.DoResetAttrPoint(curPlayer, 0, 0)
-    
-    # 处理物品
-    GameWorld.Log("替换物品: 个数=%s" % len(assignItemList), playerID)
-    for num, itemInfo in enumerate(assignItemList, 1):
-        packType, curItem, tagItem = itemInfo
-        curItemID = curItem.GetItemTypeID()
-        curItemName = curItem.GetName()
-        curUserData = curItem.GetUserData()
-        curAuctionItem = ItemControler.GetIsAuctionItem(curItem)
-        curItemScore = ItemCommon.GetEquipGearScore(curItem)
-        
-        tagItemID = tagItem.GetItemTypeID()
-        tagItemName = tagItem.GetName()        
-        tagUserData = tagItem.GetUserData()
-        tagAuctionItem = ItemControler.GetIsAuctionItem(tagItem)
-        
-        if curAuctionItem != tagAuctionItem:
-            ItemControler.SetIsAuctionItem(tagItem, curAuctionItem, curPlayer)
-        tagItem.SetUserData(curUserData, len(curUserData)) # 继承物品自定义数据
-        ItemCommon.MakeEquipGS(tagItem)
-        tagItemScore = ItemCommon.GetEquipGearScore(tagItem)
-        
-        GameWorld.Log("    替换物品 %s: packType=%s,curItemID=%s(%s),curAuctionItem=%s,curItemScore=%s,tagJob=%s,tagItemID=%s(%s),tagItemScore=%s,curUserData=%s,tagUserData=%s" 
-                      % (num, packType, curItemID, curItemName, curAuctionItem, curItemScore, tagJob, tagItemID, tagItemName, tagItemScore, curUserData, tagUserData), playerID)
-        
-        curItemDRDict = ItemCommon.GetItemNoteDict(curItem, curItem.GetCount())
-        curItemDRDict.update({"ItemScore":curItemScore})
-        tagItemDRDict = ItemCommon.GetItemNoteDict(tagItem, tagItem.GetCount())
-        tagItemDRDict.update({"ItemScore":tagItemScore})
-        DR_ChangeJob(curPlayer, {"packType":packType, "curItem":curItemDRDict, "tagItem":tagItemDRDict})
-        curItem.AssignItem(tagItem)
-        
-    # 扣除消耗
-    if not isFree and costItemCount:
-        ItemCommon.DelCostItemByBind(curPlayer, costItemIndexList, bindCnt, unBindCnt, costItemCount, "ChangeJob")
-        
-    curPlayer.SetJob(tagJob)
-    GameWorld.Log("=== 转职业完毕: SetJob=%s ===" % tagJob, playerID)
-    DR_ChangeJob(curPlayer, {"SetJob":tagJob})
-    
-    PlayerControl.PlayerControl(curPlayer).ReCalcAllState()
-    PlayerBillboard.UpdatePlayerBillboardOnLeaveServer(curPlayer, isAll=True)
-    
-    # 踢下线
-    curPlayer.Kick(IPY_GameWorld.disMapServerClose)
-    return
-
-def DR_ChangeJob(curPlayer, dataDict):
-    dataDict.update({"PlayerID":curPlayer.GetPlayerID(), "AccID":curPlayer.GetAccID()})
-    DataRecordPack.SendEventPack("ChangeJob", dataDict, curPlayer)
-    return
-
-
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCharm.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCharm.py
deleted file mode 100644
index d969883..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCharm.py
+++ /dev/null
@@ -1,93 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-##@package Player.PlayerCharm
-#
-# @todo:魅力
-# @author hxp
-# @date 2021-12-03
-# @version 1.0
-#
-# 详细描述: 魅力
-#
-#-------------------------------------------------------------------------------
-#"""Version = 2021-12-03 19:00"""
-#-------------------------------------------------------------------------------
-
-import ChConfig
-import PlayerControl
-import IpyGameDataPY
-import ItemControler
-import GameWorld
-
-def OnPlayerLogin(curPlayer):
-    
-    # 重新设置,触发上线通知
-    if PlayerControl.GetCharmLV(curPlayer):
-        PlayerControl.SetCharmLV(curPlayer, PlayerControl.GetCharmLV(curPlayer))
-        
-    return
-
-def GameServer_DoLogic_Charm(curPlayer, msgData):
-    
-    msgType = msgData[0]
-    
-    ## 魅力等级提升
-    if msgType == "CharmLVUp":
-        totalCharm = msgData[1]
-        __DoCharmLVUp(curPlayer, totalCharm)
-        
-    return
-
-def __DoCharmLVUp(curPlayer, totalCharm):
-    
-    playerID = curPlayer.GetPlayerID()
-    charmLV = PlayerControl.GetCharmLV(curPlayer)
-    ipyData = IpyGameDataPY.GetIpyGameData("LoveCharm", charmLV)
-    if not ipyData:
-        return
-    
-    if not ipyData.GetUpNeedCharm():
-        GameWorld.DebugLog("魅力等级已满级,无法升级! charmLV=%s" % charmLV, playerID)
-        return
-    
-    if totalCharm < ipyData.GetUpNeedCharm():
-        GameWorld.DebugLog("魅力值不足,无法升级! totalCharm=%s < %s, charmLV=%s" % (totalCharm, ipyData.GetUpNeedCharm(), charmLV), playerID)
-        return
-    
-    charmLV += 1
-    nextLVIpyData = IpyGameDataPY.GetIpyGameData("LoveCharm", charmLV)
-    if not nextLVIpyData:
-        return
-    awardItemList = nextLVIpyData.GetLVAwardItemInfo()
-    GameWorld.DebugLog("魅力等级升级! charmLV=%s" % charmLV, playerID)
-    PlayerControl.SetCharmLV(curPlayer, charmLV)
-    ItemControler.GivePlayerItemOrMail(curPlayer, awardItemList)
-    RefreshCharmAttr(curPlayer)
-    return
-
-def RefreshCharmAttr(curPlayer):
-    CalcCharmAttr(curPlayer)
-    PlayerControl.PlayerControl(curPlayer).RefreshPlayerAttrState()
-    return
-
-def CalcCharmAttr(curPlayer):
-    
-    allAttrList = [{} for _ in range(4)]
-    
-    charmLV = PlayerControl.GetCharmLV(curPlayer)
-    
-    ipyData = IpyGameDataPY.GetIpyGameData("LoveCharm", charmLV)
-    if ipyData:
-        lvAttrTypeList = ipyData.GetLVAttrType()
-        lvAttrValueList = ipyData.GetLVAttrValue()
-        for i, attrID in enumerate(lvAttrTypeList):
-            attrValue = lvAttrValueList[i]
-            PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrList)
-            
-    # 保存计算值
-    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Charm, allAttrList)
-    return
-
-
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 143459c..8347eea 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
@@ -4532,17 +4532,6 @@
     NetPackCommon.SendFakePack(curPlayer, clientPack)
     return
 
-## 魅力等级
-def GetCharmLV(curPlayer): return curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CharmLV)
-def SetCharmLV(curPlayer, charmLV):
-    NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CharmLV, charmLV)
-    SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_CharmLV, charmLV)
-    return
-
-def GetTotalLingGenPoint(curPlayer):
-    # 总灵根点数(金木水火土+自由点数)
-    return 0
-
 # 灵根 - 金木水火土
 def GetMetal(curPlayer): return 0
 def GetWood(curPlayer): return 0
@@ -4556,9 +4545,6 @@
 def GetReduceSkillCDPer(curPlayer): return 0
 def SetReduceSkillCDPer(curPlayer, reducePer): return
 
-# 血瓶恢复效果
-def GetHPCureEnhance(curPlayer): return 0
-
 # 仙盟职位,使用 GetReceivedSalary,因为FamilyMemberLV没有入库
 def GetFamilyMemberLV(curPlayer): return curPlayer.GetReceivedSalary()
 def SetFamilyMemberLV(curPlayer, fmLV):
@@ -4566,35 +4552,6 @@
     curPlayer.SetReceivedSalary(fmLV)
     curPlayer.SetFamilyMemberLV(fmLV) # 也同步设置该值,防止有些地方直接调用 curPlayer.GetFamilyMemberLV()
     return
-
-#---当前防护值,需存DB----
-def GetProDef(curPlayer): return 0
-def SetProDef(curPlayer, value): return
-
-#---最大防护值----
-def GetMaxProDef(curPlayer): return 0
-def SetMaxProDef(curPlayer, value): return
-
-# 每X秒自动消失一个印记, 毫秒记录
-def GetLostYinjiTime(curPlayer): return 0
-def SetLostYinjiTime(curPlayer, value): return
-
-# 当前印记数
-def GetYinjiCnt(curPlayer): return 0
-def SetYinjiCnt(curPlayer, value): return
-
-# 减少指定技能组CD XX%
-def GetTheFBSkillsCD(curPlayer): return 0
-def SetTheFBSkillsCD(curPlayer, value): return
-# 灼烧固定伤害
-def GetBurnValue(curPlayer): return 0
-def SetBurnValue(curPlayer, value): return
-# 延长灼烧时间百分比
-def GetBurnTimePer(curPlayer): return 0
-def SetBurnTimePer(curPlayer, value): return
-# 减移动速度百分比
-def GetSubSpeedPer(curPlayer): return 0
-def SetSubSpeedPer(curPlayer, value): 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
deleted file mode 100644
index 94d6dd6..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerDogz.py
+++ /dev/null
@@ -1,690 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-##@package Player.PlayerDogz
-#
-# @todo:神兽系统
-# @author hxp
-# @date 2018-08-20
-# @version 1.0
-#
-# 详细描述: 神兽系统
-#
-#-------------------------------------------------------------------------------
-#"""Version = 2018-08-20 17:00"""
-#-------------------------------------------------------------------------------
-
-import GameWorld
-import ItemCommon
-import ShareDefine
-import PlayerControl
-import ChPyNetSendPack
-import NetPackCommon
-import IPY_GameWorld
-import IpyGameDataPY
-import ChConfig
-import ChEquip
-import PassiveBuffEffMng
-import SkillCommon
-import SkillShell
-import DataRecordPack
-
-import time
-
-'''
-神兽编号: 1~20,上线后不可修改
-神兽装备位: 101~105 物品表中的装备位配置
-神兽装备类型:119~123,策划说打死不会再加类型了,固定5个神兽装备类型
-
-神兽物品背包(类型32,暂开放100格),存放神兽装备(类型119~123),及强化材料(类型70),
-神兽装备背包(类型33,暂开放100格),所有神兽共用,每只神兽5格,(格子索引/5)+1=对应神兽编号,(格子索引%5)+100+1=对应神兽装备位
-'''
-
-DogzEquipCount = 5 # 神兽装备位数量,固定5个,策划说打死也不改
-
-g_helpBattleNotifyTimeDict = {} # 助战广播时间记录 {神兽ID:广播time, ...}
-
-def GetDogzEquipPlaceIndex(equipPlace):
-    ## 获取神兽装备位对应的索引
-    return equipPlace - 1 - 100
-
-def GetDogzEquipPackIndex(dogzID, equipPlaceIndex):
-    ## 获取神兽装备在神兽装备背包中的固定位置索引
-    return (dogzID - 1) * DogzEquipCount + equipPlaceIndex
-
-def GetDogzIsHelpFight(curPlayer, dogzID):
-    ## 神兽是否助战状态
-    return GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_DogzFightState, dogzID - 1)
-
-def SetDogzIsHelpFight(curPlayer, dogzID, isFight):
-    ## 设置神兽是否助战状态
-    GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_PDict_DogzFightState, dogzID - 1, 1 if isFight else 0)
-    Sync_DogzHelpbattleState(curPlayer, dogzID, isFight)
-    
-    # 设置成功后才能刷技能
-    PassiveBuffEffMng.PlayerDogzSkill(curPlayer)
-    if not isFight:
-        DataRecordPack.Cache_FightPowerChangeInfo(curPlayer, ChConfig.PowerDownType_Dogz, {'dogzID':dogzID})
-    return
-
-
-def OnPlayerLogin(curPlayer):
-    
-    if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_DogzBuyHelpbattleCount):
-        Sync_DogzInfo(curPlayer)
-        
-    ipyDataMgr = IpyGameDataPY.IPY_Data()
-    for i in xrange(ipyDataMgr.GetDogzCount()):
-        ipyData = ipyDataMgr.GetDogzByIndex(i)
-        if GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_DogzFightState, i):
-            Sync_DogzHelpbattleState(curPlayer, ipyData.GetDogzID(), 1)
-            
-    return
-
-#// A5 C0 神兽穿戴装备 #tagCMDogzEquipItem
-#
-#struct    tagCMDogzEquipItem
-#
-#{
-#    tagHead        Head;
-#    BYTE        DogzID;    // 神兽ID
-#    BYTE        EquipIndexCount;
-#    BYTE        EquipIndexList[EquipIndexCount];    //神兽装备所在神兽背包索引列表
-#};
-def OnDogzEquipItem(index, clientData, tick):
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    playerID = curPlayer.GetPlayerID()
-    dogzID = clientData.DogzID
-    equipIndexList = clientData.EquipIndexList
-    
-    ipyData = IpyGameDataPY.GetIpyGameData("Dogz", dogzID)
-    if not ipyData:
-        return
-    
-    GameWorld.DebugLog("神兽穿戴装备: dogzID=%s,equipIndexList=%s" % (dogzID, equipIndexList), playerID)
-    if not equipIndexList:
-        return
-    
-    succIndexList = []
-    for equipIndex in equipIndexList:
-        dogzItemPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptDogzItem)
-        curEquip = dogzItemPack.GetAt(equipIndex)
-        if not ItemCommon.CheckItemCanUse(curEquip):
-            GameWorld.DebugLog("物品为空或不可用: equipIndex=%s" % equipIndex, playerID)
-            continue
-        if not ItemCommon.GetIsDogzEquip(curEquip):
-            GameWorld.DebugLog("非神兽装备: equipIndex=%s" % equipIndex, playerID)
-            continue
-        
-        equipPlace = curEquip.GetEquipPlace()
-        equipPlaceIndex = GetDogzEquipPlaceIndex(equipPlace)
-        equipPlaceColorList = ipyData.GetEquipPlaceColorList()
-        if equipPlaceIndex < 0 or equipPlaceIndex >= len(equipPlaceColorList):
-            GameWorld.ErrLog("神兽装备位异常: equipIndex=%s,equipPlace=%s,equipPlaceIndex=%s" 
-                             % (equipIndex, equipPlace, equipPlaceIndex), playerID)
-            continue
-        
-        dogzEquipPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptDogzEquip)
-        equipPackIndex = GetDogzEquipPackIndex(dogzID, equipPlaceIndex)
-        if equipPackIndex < 0 or equipPackIndex >= dogzEquipPack.GetCount():
-            GameWorld.ErrLog("神兽装备背包索引异常: dogzID=%s,equipIndex=%s,equipPlace=%s,equipPackIndex=%s" 
-                             % (dogzID, equipIndex, equipPlace, equipPackIndex), playerID)
-            continue
-        
-        equipColor = curEquip.GetItemColor()
-        limitColor = equipPlaceColorList[equipPlaceIndex]
-        if equipColor < limitColor:
-            GameWorld.Log("神兽装备位穿戴颜色限制:dogzID=%s,equipIndex=%s,equipPlaceIndex=%s,limitColor=%s > equipColor=%s" 
-                          % (dogzID, equipIndex, equipPlaceIndex, limitColor, equipColor), playerID)
-            continue
-        
-        destEquip = dogzEquipPack.GetAt(equipPackIndex)
-        desItemID, desUserData = [0, ''] if destEquip.IsEmpty() else [destEquip.GetItemTypeID(), destEquip.GetUserData()]
-        srcItemID, srcUserData = curEquip.GetItemTypeID(), curEquip.GetUserData()
-        if ItemCommon.DoLogicSwitchItem(curPlayer, curEquip, destEquip, ShareDefine.rptDogzEquip):
-            succIndexList.append(equipIndex)
-            dataDict = {'dotype':'EquipDogzItem', 'desItemID':desItemID, 'desUserData':desUserData,'srcItemID':srcItemID,'srcUserData':srcUserData}
-            DataRecordPack.Cache_FightPowerChangeInfo(curPlayer, ChConfig.PowerDownType_EquipChange, dataDict)
-    
-    GameWorld.DebugLog("    穿戴成功索引列表: %s" % succIndexList, playerID)
-    if not succIndexList:
-        return
-    
-    # 助战状态换装需要刷属性
-    if GetDogzIsHelpFight(curPlayer, dogzID):
-        RefreshDogzAttr(curPlayer, True)
-        PlayerControl.PlayerControl(curPlayer).RefreshPlayerAttrState()
-    return
-
-
-#// A5 C1 神兽卸下装备 #tagCMDogzUnEquipItem
-#
-#struct    tagCMDogzUnEquipItem
-#
-#{
-#    tagHead        Head;
-#    BYTE        DogzID;    // 神兽ID
-#    BYTE        EquipPlace;    //卸下的装备位, 0代表卸下全部
-#};
-def OnDogzUnEquipItem(index, clientData, tick):
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    playerID = curPlayer.GetPlayerID()
-    dogzID = clientData.DogzID
-    equipPlace = clientData.EquipPlace
-    
-    if equipPlace and equipPlace not in ShareDefine.DogzEquipPlace:
-        GameWorld.DebugLog("非神兽装备位,无法卸下!equipPlace=%s" % equipPlace, playerID)
-        return
-    
-    ipyData = IpyGameDataPY.GetIpyGameData("Dogz", dogzID)
-    if not ipyData:
-        return
-    
-    # 卸下全部
-    if equipPlace == 0:
-        unEquipIndexList = [] # 需要脱下的神兽装备索引
-        dogzEquipPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptDogzEquip)
-        equipPackCount = dogzEquipPack.GetCount()
-        startIndex = (dogzID - 1) * DogzEquipCount
-        for i in range(startIndex, startIndex + DogzEquipCount):
-            if i < 0 or i >= equipPackCount:
-                return
-            curItem = dogzEquipPack.GetAt(i)            
-            if not curItem.IsEmpty():
-                unEquipIndexList.append(i)
-                
-        if not unEquipIndexList:
-            GameWorld.DebugLog("没有穿戴神兽装备!dogzID=%s" % dogzID, playerID)
-            return
-        
-        unEquipCount = len(unEquipIndexList)
-        emptyIndexList = []
-        
-        dogzItemPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptDogzItem)
-        for i in xrange(dogzItemPack.GetCount()):
-            curItem = dogzItemPack.GetAt(i)
-            if curItem.IsEmpty():
-                emptyIndexList.append(i)
-                if len(emptyIndexList) >= unEquipCount:
-                    break
-                
-        if len(emptyIndexList) < unEquipCount:
-            PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_676165", [ShareDefine.rptDogzItem])
-            #GameWorld.DebugLog("神兽背包空格不足,无法脱下所有装备")
-            return
-        
-        for i in xrange(unEquipCount):
-            ItemCommon.DoLogicSwitchItemEx(curPlayer, ShareDefine.rptDogzEquip, ShareDefine.rptDogzItem,
-                                           unEquipIndexList[i], emptyIndexList[i])
-            
-    else:
-        equipPackIndex = GetDogzEquipPackIndex(dogzID, GetDogzEquipPlaceIndex(equipPlace))
-        emptyIndex = ItemCommon.GetEmptyIndexInPack(curPlayer, ShareDefine.rptDogzItem)
-        
-        if not ItemCommon.DoLogicSwitchItemEx(curPlayer, ShareDefine.rptDogzEquip, ShareDefine.rptDogzItem, equipPackIndex, emptyIndex):
-            GameWorld.DebugLog("神兽卸下装备失败: dogzID=%s,equipPlace=%s" % (dogzID, equipPlace), playerID)
-            return
-    
-    # 助战状态换装需要刷属性
-    if GetDogzIsHelpFight(curPlayer, dogzID):
-        SetDogzIsHelpFight(curPlayer, dogzID, False) # 因为脱下了状态,所以必须设置为非助战状态
-        RefreshDogzAttr(curPlayer, True)
-        PlayerControl.PlayerControl(curPlayer).RefreshPlayerAttrState()
-        
-    return
-
-
-#// A5 C2 神兽变更助战状态 #tagCMDogzBattleStateChange
-#
-#struct    tagCMDogzBattleStateChange
-#
-#{
-#    tagHead        Head;
-#    BYTE        DogzID;    // 神兽ID
-#    BYTE        BatteState;    //助战状态,0-召回,1-助战
-#};
-def OnDogzBattleStateChange(index, clientData, tick):
-    global g_helpBattleNotifyTimeDict
-    
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    playerID = curPlayer.GetPlayerID()
-    dogzID = clientData.DogzID
-    batteState = clientData.BatteState
-    
-    ipyData = IpyGameDataPY.GetIpyGameData("Dogz", dogzID)
-    if not ipyData:
-        return
-    
-    curState = GetDogzIsHelpFight(curPlayer, dogzID)
-    if curState == batteState:
-        GameWorld.DebugLog("神兽已经是该状态,无需变更助战状态! dogzID=%s,batteState=%s,curState=%s" 
-                           % (dogzID, batteState, curState), playerID)
-        return
-    
-    # 变为助战状态需检查神兽装备是否穿满
-    if batteState:
-        helpbattleInitCount = IpyGameDataPY.GetFuncEvalCfg("DogzAssist", 1)[0]
-        helpbattleBuyCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_DogzBuyHelpbattleCount)
-        canHelpFightCount = helpbattleInitCount + helpbattleBuyCount
-        
-        curHelpFightCount = 0
-        dogzCount = IpyGameDataPY.IPY_Data().GetDogzCount()
-        for i in xrange(dogzCount):
-            if GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_DogzFightState, i):
-                curHelpFightCount += 1
-                
-        if curHelpFightCount >= canHelpFightCount:
-            GameWorld.DebugLog("当前神兽助战数已满,无法助战!canHelpFightCount=%s <= curHelpFightCount=%s" 
-                               % (canHelpFightCount, curHelpFightCount), playerID)
-            return
-        
-        dogzEquipPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptDogzEquip)
-        equipPackCount = dogzEquipPack.GetCount()
-        startIndex = (dogzID - 1) * DogzEquipCount
-        for i in range(startIndex, startIndex + DogzEquipCount):
-            if i < 0 or i >= equipPackCount:
-                return
-            curItem = dogzEquipPack.GetAt(i)            
-            if curItem.IsEmpty():
-                GameWorld.DebugLog("神兽有装备未穿戴,无法助战!dogzID=%s,packIndex=%s" % (dogzID, i), playerID)
-                return
-        
-    isFight = True if batteState else False
-    GameWorld.DebugLog("神兽助战状态变更!dogzID=%s,isFight=%s" % (dogzID, isFight), playerID)
-    SetDogzIsHelpFight(curPlayer, dogzID, isFight)
-    RefreshDogzAttr(curPlayer, True)
-    PlayerControl.PlayerControl(curPlayer).RefreshPlayerAttrState()
-    
-    #if isFight and ipyData.GetHelpBattleNotify():
-    #    curTime = int(time.time())
-    #    playerName = curPlayer.GetPlayerName()
-    #    notifyKey, notifyParamList, notifyCD = ipyData.GetHelpBattleNotify()
-    #    lastNotifyTime = g_helpBattleNotifyTimeDict.get(dogzID, 0)
-    #    if curTime - lastNotifyTime >= notifyCD * 60: 
-    #        PlayerControl.WorldNotify(0, notifyKey, [playerName] + notifyParamList)
-    #        g_helpBattleNotifyTimeDict[dogzID] = curTime
-    return
-
-
-#// A5 C3 神兽购买助战位 #tagCMDogzBuyBatteCount
-#
-#struct    tagCMDogzBuyBatteCount
-#
-#{
-#    tagHead        Head;
-#};
-def OnDogzBuyBatteCount(index, clientData, tick):
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    playerID = curPlayer.GetPlayerID()
-    
-    helpbattleInitCount, helpbattleMaxCount = IpyGameDataPY.GetFuncEvalCfg("DogzAssist", 1)
-    helpbattleBuyCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_DogzBuyHelpbattleCount)
-    curHelpFightCount = helpbattleInitCount + helpbattleBuyCount
-    if curHelpFightCount >= helpbattleMaxCount:
-        GameWorld.DebugLog("已超过最大神兽助战数,无法购买!curHelpFightCount=%s,helpbattleMaxCount=%s" 
-                           % (curHelpFightCount, helpbattleMaxCount), playerID)
-        return
-    
-    needItemID = IpyGameDataPY.GetFuncCfg("DogzAssist", 2)
-    needCountList = IpyGameDataPY.GetFuncEvalCfg("DogzAssist", 3)
-    needCount = needCountList[-1] if helpbattleBuyCount >= len(needCountList) else needCountList[helpbattleBuyCount]
-    
-    itemData = GameWorld.GetGameData().GetItemByTypeID(needItemID)
-    if not itemData:
-        return
-    
-    packType = ChConfig.GetItemPackType(itemData)
-    costItemIndexList, bindCnt, unBindCnt = ItemCommon.GetPackItemBindStateIndexInfo(curPlayer, needItemID, packType=packType)
-    if bindCnt + unBindCnt < needCount:
-        GameWorld.DebugLog("购买神兽助战位所需道具不足 !needItemID=%s,needCount=%s,packType=%s" % (needItemID, needCount, packType), playerID)
-        return
-    ItemCommon.DelCostItemByBind(curPlayer, costItemIndexList, bindCnt, unBindCnt, needCount, "DogzBuyHelpFight", packType=packType)
-    
-    updBuyCount = helpbattleBuyCount + 1
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_DogzBuyHelpbattleCount, updBuyCount)
-    GameWorld.DebugLog("购买神兽助战位! updBuyCount=%s" % updBuyCount, playerID)
-    
-    Sync_DogzInfo(curPlayer)
-    PlayerControl.WorldNotify(0, "DogzNumberUp", [curPlayer.GetPlayerName(), needItemID, curHelpFightCount + 1])
-    return
-
-
-#// A5 C4 神兽装备强化 #tagCMDogzEquipPlus
-#
-#struct    tagCMDogzEquipPlus
-#
-#{
-#    tagHead        Head;
-#    BYTE        EquipIndex;    //神兽装备背包中索引
-#    BYTE        IndexCount;        //材料所在神兽物品背包索引的数量
-#    BYTE        IndexList[IndexCount];    //材料所在神兽物品背包索引列表
-#    BYTE        IndexUseCountList[IndexCount];    //材料所在神兽物品背包索引对应使用个数列表
-#    BYTE        IsDouble;        //是否双倍强化
-#};
-def OnDogzEquipPlus(index, clientData, tick):
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    playerID = curPlayer.GetPlayerID()
-    equipIndex = clientData.EquipIndex
-    indexList = clientData.IndexList
-    indexUseCountList = clientData.IndexUseCountList
-    isDouble = clientData.IsDouble
-    GameWorld.DebugLog("神兽装备强化: equipIndex=%s,indexList=%s,indexUseCountList=%s,isDouble=%s" 
-                       % (equipIndex, indexList, indexUseCountList, isDouble), playerID)
-    
-    if len(indexList) != len(indexUseCountList):
-        GameWorld.DebugLog("    指定消耗的个数数据长度错误!")
-        return
-    
-    dogzEquipPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptDogzEquip)
-    curEquip = dogzEquipPack.GetAt(equipIndex)
-    if not ItemCommon.CheckItemCanUse(curEquip) or not ItemCommon.GetIsDogzEquip(curEquip):
-        GameWorld.DebugLog("    非神兽装备,无法强化!equipIndex=%s,itemID=%s" 
-                           % (equipIndex, curEquip.GetItemTypeID()), playerID)
-        return
-    
-    equipColor = curEquip.GetItemColor()
-    colorPlusMaxLVDict = IpyGameDataPY.GetFuncEvalCfg("DogzAssist", 4) # {颜色:等级上限, ...}
-    if equipColor not in colorPlusMaxLVDict:
-        return
-    maxPlusLV = colorPlusMaxLVDict[equipColor]
-    
-    equipPlace = curEquip.GetEquipPlace()
-    curPlusLV = curEquip.GetUserAttrByIndex(ShareDefine.Def_IudetDogzEquipPlus, 0)
-    curPlusExpTotal = curEquip.GetUserAttrByIndex(ShareDefine.Def_IudetDogzEquipPlus, 1)
-    if curPlusLV >= maxPlusLV:
-        GameWorld.Log("神兽装备已满级, 无法强化!equipColor=%s,curPlusLV=%s,maxPlusLV=%s" % (equipColor, curPlusLV, maxPlusLV), playerID)
-        return
-    
-    ipyData = IpyGameDataPY.GetIpyGameData("DogzEquipPlus", equipPlace, curPlusLV)
-    if not ipyData:
-        return
-    lvUPTotalExp = ipyData.GetPlusLVUPTotalExp()
-    if not lvUPTotalExp:
-        GameWorld.Log("神兽装备升级所需总经验为0, 无法强化!equipPlace=%s,curPlusLV=%s" % (equipPlace, curPlusLV), playerID)
-        return
-        
-    costGoldTotal = 0
-    addExpTotal = 0
-    delItemList = []
-    dogzItemPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptDogzItem)
-    dogzItemPackCount = dogzItemPack.GetCount()
-    for listIndex, i in enumerate(indexList):
-        if i < 0 or i >= dogzItemPackCount:
-            GameWorld.ErrLog("神兽背包索引不存在,无法强化!i=%s" % (i), playerID)
-            return
-        curItem = dogzItemPack.GetAt(i)
-        if curItem.IsEmpty():
-            GameWorld.ErrLog("神兽背包物品为空,无法强化!i=%s" % (i), playerID)
-            return
-        effect = ItemCommon.GetItemEffectByEffectID(curItem, ChConfig.Def_Effect_DogzEquipPlusExp)
-        if not effect:
-            GameWorld.ErrLog("神兽背包物品无经验效果,无法强化!i=%s,itemID=%s" % (i, curItem.GetItemTypeID()), playerID)
-            return
-        
-        delCount = max(1, min(curItem.GetCount(), indexUseCountList[listIndex]))
-        baseExp = effect.GetEffectValue(0)
-        doubleCostGold = effect.GetEffectValue(1)
-        
-        addExp = baseExp * delCount
-        plusInfoCount = curItem.GetUserAttrCount(ShareDefine.Def_IudetDogzEquipPlus)
-        if not plusInfoCount:
-            if isDouble and doubleCostGold:
-                addExp = (baseExp * 2 * delCount)
-                costGoldTotal += doubleCostGold * delCount
-            GameWorld.DebugLog("    强化: addExp=%s,delCount=%s,baseExp=%s,isDouble=%s,doubleCostGold=%s,costGoldTotal=%s" 
-                               % (addExp, delCount, baseExp, isDouble, doubleCostGold, costGoldTotal), playerID)
-        else:
-            #plusLV = curItem.GetUserAttrByIndex(ShareDefine.Def_IudetDogzEquipPlus, 0)
-            plusExpTotal = curItem.GetUserAttrByIndex(ShareDefine.Def_IudetDogzEquipPlus, 1)
-            addExp += plusExpTotal
-            GameWorld.DebugLog("    强化: addExp=%s,delCount=%s,baseExp=%s,plusExpTotal=%s" % (addExp, delCount, baseExp, plusExpTotal), playerID)
-        addExpTotal += addExp
-        delItemList.append([curItem, delCount])
-        
-    if not delItemList:
-        GameWorld.DebugLog("    没有材料可强化!", playerID)
-        return
-    
-    updPlusExpTotal = curPlusExpTotal + addExpTotal
-    infoDict = {"updPlusExpTotal":updPlusExpTotal}
-    
-    if costGoldTotal:
-        if not PlayerControl.PayMoney(curPlayer, IPY_GameWorld.TYPE_Price_Gold_Money, costGoldTotal, 
-                                      ChConfig.Def_Cost_DogzEquipPlus, infoDict):
-            return
-        
-    for delItem, delCount in delItemList:
-        ItemCommon.DelItem(curPlayer, delItem, delCount, False, ChConfig.ItemDel_DogzEquipPlus, infoDict)
-        
-    updPlusLV = curPlusLV
-    doCount, maxDoCount = 0, maxPlusLV * 2
-    while updPlusExpTotal >= lvUPTotalExp and updPlusLV < maxPlusLV and doCount < maxDoCount:
-        doCount += 1
-        nextLV = updPlusLV + 1
-        nextLVIpyData = IpyGameDataPY.GetIpyGameDataNotLog("DogzEquipPlus", equipPlace, nextLV)
-        if not nextLVIpyData:
-            GameWorld.DebugLog("    没有下一级数据,不能升级!nextLV=%s" % (nextLV), playerID)
-            break
-        updPlusLV = nextLV
-        lvUPTotalExp = nextLVIpyData.GetPlusLVUPTotalExp()
-        GameWorld.DebugLog("    升级: equipPlace=%s,maxPlusLV=%s,updPlusLV=%s,updPlusExpTotal=%s,lvUPTotalExp=%s" 
-                           % (equipPlace, maxPlusLV, updPlusLV, updPlusExpTotal, lvUPTotalExp), playerID)
-        
-    isRefreshAtrr = False
-    # 未强化过
-    if not curPlusExpTotal:
-        curEquip.AddUserAttr(ShareDefine.Def_IudetDogzEquipPlus, updPlusLV)
-        curEquip.AddUserAttr(ShareDefine.Def_IudetDogzEquipPlus, updPlusExpTotal)
-        isRefreshAtrr = (updPlusLV > 0)
-    else:
-        if curPlusLV != updPlusLV:
-            isRefreshAtrr = True
-            curEquip.UpdataUserAttrByIndex(ShareDefine.Def_IudetDogzEquipPlus, 0, updPlusLV)
-        curEquip.UpdataUserAttrByIndex(ShareDefine.Def_IudetDogzEquipPlus, 1, updPlusExpTotal)
-        
-    GameWorld.DebugLog("    curPlus(LV=%s,EXP=%s),addExpTotal=%s,updPlus(LV=%s,EXP=%s)" 
-                       % (curPlusLV, curPlusExpTotal, addExpTotal, updPlusLV, updPlusExpTotal), playerID)
-    
-    if isRefreshAtrr:
-        RefreshDogzAttr(curPlayer, True)
-        PlayerControl.PlayerControl(curPlayer).RefreshPlayerAttrState()
-        
-    curPlayer.Sync_MakeItemAnswer(ShareDefine.Def_mitDogzEquipPlus, 1)
-    return
-
-def GetDogzEquipPlusLVExpInfo(equipColor, equipPlace, totalExp):
-    ## 获取当前神兽装备最高强化等级的强化熟练度
-    retLV, retExp = 0, 0
-    colorPlusMaxLVDict = IpyGameDataPY.GetFuncEvalCfg("DogzAssist", 4) # {颜色:等级上限, ...}
-    if equipColor not in colorPlusMaxLVDict:
-        return retLV, retExp
-    maxPlusLV = colorPlusMaxLVDict[equipColor]
-    for lv in xrange(maxPlusLV + 1):
-        ipyData = IpyGameDataPY.GetIpyGameDataNotLog("DogzEquipPlus", equipPlace, lv)
-        if lv and not ipyData:
-            break
-        
-        lvUPTotalExp = ipyData.GetPlusLVUPTotalExp()
-        if not lvUPTotalExp:
-            break
-        
-        if totalExp < lvUPTotalExp:
-            return lv, totalExp
-        retLV, retExp = lv, lvUPTotalExp
-        
-    return retLV, retExp
-
-def RefreshDogzAttr(curPlayer, isUpdateSucc=False):
-    ## 刷新神兽属性
-    return
-    totalPlusLv = 0 #出战神兽装备总强化等级
-    fightPowerEx = 0
-    allAttrList = [{} for _ in range(4)]
-    allAttrListEquip = [{} for _ in range(4)]
-    allAttrListEquipPlus = [{} for _ in range(4)]
-    equipScoreTotal = 0 #为解决装备评分、战力不一致的情况,装备战力改为由评分作为参数计算战力
-    
-    dogzEquipPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptDogzEquip)
-    equipPackCount = dogzEquipPack.GetCount()
-    ipyDataMgr = IpyGameDataPY.IPY_Data()
-    for dogzIndex in xrange(ipyDataMgr.GetDogzCount()):
-        if not GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_DogzFightState, dogzIndex):
-            continue
-        
-        ipyData = ipyDataMgr.GetDogzByIndex(dogzIndex)
-        dogzID = ipyData.GetDogzID()
-        #GameWorld.DebugLog("神兽属性: dogzID=%s" % dogzID)
-        
-        # 1. 基础属性
-        attrTypeList = ipyData.GetBaseAttrTypes()
-        attrValueList = ipyData.GetBaseAttrValues()
-        if attrTypeList and len(attrTypeList) == len(attrValueList):
-            for attrIndex, baseAttrID in enumerate(attrTypeList):
-                baseAttrValue = attrValueList[attrIndex]
-                PlayerControl.CalcAttrDict_Type(baseAttrID, baseAttrValue, allAttrList)
-                #GameWorld.DebugLog("    基础属性: baseAttrID=%s,baseAttrValue=%s, %s" % (baseAttrID, baseAttrValue, allAttrList))
-                
-        # 2. 装备属性
-        startIndex = (dogzID - 1) * DogzEquipCount
-        for equipIndex in range(startIndex, startIndex + DogzEquipCount):
-            if equipIndex < 0 or equipIndex >= equipPackCount:
-                break
-            curEquip = dogzEquipPack.GetAt(equipIndex)            
-            if curEquip.IsEmpty():
-                continue
-            
-            equipScoreTotal += ItemCommon.GetEquipGearScore(curEquip)
-            
-            #itemID = curEquip.GetItemTypeID()
-            # 装备基础属性
-            for effIndex in xrange(curEquip.GetEffectCount()):
-                curEffect = curEquip.GetEffectByIndex(effIndex)
-                if not curEffect or not curEffect.GetEffectID():
-                    break
-                effID = curEffect.GetEffectID()
-                if not effID or effID == ChConfig.Def_Effect_DogzEquipPlusExp:
-                    continue
-                effValue = curEffect.GetEffectValue(0)
-                PlayerControl.CalcAttrDict_Type(effID, effValue, allAttrListEquip)
-                #GameWorld.DebugLog("    装备基础: itemID=%s,effID=%s,effValue=%s, %s" % (itemID, effID, effValue, allAttrListEquip))
-                
-            # 强化属性
-            curPlusLV = curEquip.GetUserAttrByIndex(ShareDefine.Def_IudetDogzEquipPlus, 0)
-            totalPlusLv += curPlusLV
-            plusIpyData = IpyGameDataPY.GetIpyGameData("DogzEquipPlus", curEquip.GetEquipPlace(), curPlusLV)
-            if plusIpyData:
-                plusAttrTypeList = plusIpyData.GetPlusAttrTypes()
-                plusAttrValueList = plusIpyData.GetPlusAttrValues()
-                if plusAttrTypeList and len(plusAttrTypeList) == len(plusAttrValueList):
-                    for plusIndex, plusAttrID in enumerate(plusAttrTypeList):
-                        plusAttrValue = plusAttrValueList[plusIndex]
-                        PlayerControl.CalcAttrDict_Type(plusAttrID, plusAttrValue, allAttrListEquipPlus)
-                        #GameWorld.DebugLog("    装备强化: itemID=%s,plusAttrID=%s, plusAttrValue=%s, %s" % (itemID, plusAttrID, plusAttrValue, allAttrListEquipPlus))
-                        
-            # 传奇属性
-            ChEquip.CalcAttr_LegendAttr(curPlayer, curEquip, allAttrListEquip)
-            #GameWorld.DebugLog("    装备传奇: itemID=%s,%s" % (itemID, allAttrListEquip))
-            
-        # 附加战力
-        fightPowerEx += ipyData.GetFightPowerEx()
-        
-    # 保存计算值
-    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Dogz, allAttrList)
-    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_DogzEquip, allAttrListEquip)
-    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_DogzEquipPlus, allAttrListEquipPlus)
-    
-    #计算装备基础属性附加战力 (目前组成: 评分战力 + ...)
-    equipFightPowerEx = eval(IpyGameDataPY.GetFuncCompileCfg("FightpowerFormula", 2))
-    #GameWorld.DebugLog("神兽装备评分战力: equipScoreTotal=%s,equipFightPowerEx=%s" % (equipScoreTotal, equipFightPowerEx))
-    fightPowerEx += equipFightPowerEx
-    PlayerControl.SetMFPExFightPower(curPlayer, ShareDefine.Def_MFPType_Dogz, fightPowerEx)
-    
-    # 技能属性,从Def_CalcAttrFunc_Dogz获取
-    skillAttrList = CalcDogzBattleSkillAttr(curPlayer)
-    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_DogzBattleSkill, skillAttrList)
-    return
-
-def GetFightDogzTotalPlusLv(curPlayer):
-    #出战的神兽装备总强化等级
-    totalPlusLv = 0
-    dogzEquipPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptDogzEquip)
-    equipPackCount = dogzEquipPack.GetCount()
-    ipyDataMgr = IpyGameDataPY.IPY_Data()
-    for dogzIndex in xrange(ipyDataMgr.GetDogzCount()):
-        if not GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_DogzFightState, dogzIndex):
-            continue
-        ipyData = ipyDataMgr.GetDogzByIndex(dogzIndex)
-        dogzID = ipyData.GetDogzID()
-        startIndex = (dogzID - 1) * DogzEquipCount
-        for equipIndex in range(startIndex, startIndex + DogzEquipCount):
-            if equipIndex < 0 or equipIndex >= equipPackCount:
-                break
-            curEquip = dogzEquipPack.GetAt(equipIndex)            
-            if curEquip.IsEmpty():
-                continue
-            curPlusLV = curEquip.GetUserAttrByIndex(ShareDefine.Def_IudetDogzEquipPlus, 0)
-            totalPlusLv += curPlusLV
-    return totalPlusLv
-
-# 助战神兽技能属性,必须在 SetDogzIsHelpFight后调用
-def CalcDogzBattleSkillAttr(curPlayer):
-    skillAttrList = [{} for _ in range(4)]
-    skillManager = curPlayer.GetSkillManager()
-
-    for i in range(0 , skillManager.GetSkillCount()):
-        curSkill = skillManager.GetSkillByIndex(i)
-        if not curSkill:
-            continue
-        
-        if curSkill.GetFuncType() != ChConfig.Def_SkillFuncType_Dogz:
-            continue
-        
-        if not SkillCommon.isPassiveAttr(curSkill):
-            continue
-        
-        
-        for effectIndex in xrange(curSkill.GetEffectCount()):
-            curEffect = curSkill.GetEffect(effectIndex)
-            SkillShell.CalcBuffEffAttr(curPlayer, curEffect, skillAttrList)
-            
-    # Def_SkillType_AttrSkillNoLearn 非学习属性技能 叠加属性计算
-    ipyDataMgr = IpyGameDataPY.IPY_Data()
-    for i in xrange(ipyDataMgr.GetDogzCount()):
-        ipyData = ipyDataMgr.GetDogzByIndex(i)
-        if not GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_DogzFightState, i):
-            #未助战
-            continue
-        
-        for skillID in ipyData.GetHelpBattleSkills():
-
-            skillData = GameWorld.GetGameData().GetSkillBySkillID(skillID)
-            if not skillData:
-                continue
-            # 同技能类型ID可多个叠加的属性时直接取表
-            if skillData.GetSkillType() != ChConfig.Def_SkillType_AttrSkillNoLearn:
-                continue
-            
-            for effectIndex in xrange(skillData.GetEffectCount()):
-                curEffect = skillData.GetEffect(effectIndex)
-                SkillShell.CalcBuffEffAttr(curPlayer, curEffect, skillAttrList)
-    
-    #GameWorld.DebugLog("神兽技能属性: skillFPEx=%s, %s" % ( skillFPEx, skillAttrList))
-    return skillAttrList
-
-
-def Sync_DogzInfo(curPlayer):
-    ## 同步神兽信息
-    dogzInfoPack = ChPyNetSendPack.tagMCDogzInfo()
-    dogzInfoPack.BuyHelpbattleCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_DogzBuyHelpbattleCount)
-    NetPackCommon.SendFakePack(curPlayer, dogzInfoPack)
-    return
-
-def Sync_DogzHelpbattleState(curPlayer, dogzID, batteState):
-    ## 同步神兽助战状态
-    helpbattleState = ChPyNetSendPack.tagMCDogzHelpbattleState()
-    helpbattleState.DogzID = dogzID
-    helpbattleState.BatteState = 1 if batteState else 0
-    NetPackCommon.SendFakePack(curPlayer, helpbattleState)
-    return
-
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 e191eca..9cf7868 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
@@ -41,12 +41,10 @@
 import PlayerOfflineSupport
 import PlayerTreasure
 import PlayerZhanling
-import PlayerLove
 import IpyGameDataPY
 import PlayerArena
 import PyGameData
 import OpenServerActivity
-import PlayerXiangong
 import PlayerBillboard
 import PlayerViewCache
 import GameFuncComm
@@ -288,10 +286,6 @@
     #寻宝
     PlayerTreasure.OnDay(curPlayer)
     PlayerGoldGift.OnDay(curPlayer)
-    #情缘
-    PlayerLove.DoPlayerOnDay(curPlayer)
-    #仙宫
-    PlayerXiangong.PlayerOnDay(curPlayer)
     PlayerControl.PlayerOnDay(curPlayer)
     ChPlayer.PlayerOnDay(curPlayer)
     PlayerActivity.OnDay(curPlayer)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFaQi.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFaQi.py
deleted file mode 100644
index 6704927..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFaQi.py
+++ /dev/null
@@ -1,178 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-##@package Player.PlayerFaQi
-#
-# @todo:法器系统
-# @author hxp
-# @date 2021-10-13
-# @version 1.0
-#
-# 详细描述: 法器系统
-#
-# 注: 与法宝系统没有关系
-#-------------------------------------------------------------------------------
-#"""Version = 2021-10-14 15:00"""
-#-------------------------------------------------------------------------------
-
-import GameWorld
-import IPY_GameWorld
-import PlayerControl
-import ChPyNetSendPack
-import FunctionNPCCommon
-import NetPackCommon
-import IpyGameDataPY
-import ItemCommon
-import ChConfig
-
-def DoFaQiOpen(curPlayer):
-    ## 功能开启
-    faQiLV = 1
-    ipyData = IpyGameDataPY.GetIpyGameData("FaQiLVUp", faQiLV)
-    if not ipyData:
-        return
-    
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FaQiLV, faQiLV)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FaQiEatItemCount, 0)
-    
-    GameWorld.DebugLog("法器功能开启! faQiLV=%s" % faQiLV)
-    Sync_FaQiLVInfo(curPlayer)
-    RefreshFaQiAttr(curPlayer)
-    return True
-
-def PlayerFaQiLogin(curPlayer):
-    if not curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FaQiLV):
-        return
-    Sync_FaQiLVInfo(curPlayer)
-    return
-
-#// A5 32 法器升级 #tagCMFaQiLVUp
-#
-#struct    tagCMFaQiLVUp
-#{
-#    tagHead        Head;
-#    WORD        UseItemCnt;        //消耗材料个数
-#    BYTE        IsAutoBuy;        //是否自动购买
-#};
-def OnFaQiLVUp(index, curPackData, tick):
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    costItemCount = curPackData.UseItemCnt # 消耗材料个数
-    isAutoBuy = curPackData.IsAutoBuy # 是否自动购买
-    
-    faQiLV = max(1, curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FaQiLV))
-    curEatItemCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FaQiEatItemCount)
-    
-    ipyData = IpyGameDataPY.GetIpyGameData("FaQiLVUp", faQiLV)
-    if not ipyData:
-        return
-    
-    needEatCount = ipyData.GetNeedEatCount()
-    if not needEatCount:
-        GameWorld.DebugLog("法器已满级!faQiLV=%s" % faQiLV)
-        return
-    
-    costItemID = IpyGameDataPY.GetFuncCfg("FaQiUpItem", 1)
-    autoBuyShopIndex = IpyGameDataPY.GetFuncCfg("FaQiUpItem", 2)
-    if not costItemID or not costItemCount:
-        return
-    
-    costItemIndexList, bindCnt, unBindCnt = ItemCommon.GetPackItemBindStateIndexInfo(curPlayer, costItemID, costItemCount)
-    lackCnt = costItemCount - bindCnt - unBindCnt
-    if lackCnt > 0 and not isAutoBuy:
-        GameWorld.DebugLog("消耗道具不足,无法升级法器!costItemID=%s,costItemCount=%s,bindCnt=%s,unBindCnt=%s,lackCnt=%s" 
-                           % (costItemID, costItemCount, bindCnt, unBindCnt, lackCnt))
-        return
-    
-    delCnt = costItemCount
-    if lackCnt > 0:
-        autoBuyMoneyType = IPY_GameWorld.TYPE_Price_Gold_Money
-        infoDict = {ChConfig.Def_Cost_Reason_SonKey:costItemID}
-        if not FunctionNPCCommon.PayAutoBuyItem(curPlayer, {costItemID:lackCnt}, autoBuyMoneyType, ChConfig.Def_Cost_FaQi, infoDict, shopItemIndexDict={costItemID:autoBuyShopIndex}):
-            return
-        delCnt -= lackCnt
-        
-    # 扣除消耗
-    if delCnt:
-        ItemCommon.DelCostItemByBind(curPlayer, costItemIndexList, bindCnt, unBindCnt, delCnt, ChConfig.ItemDel_FaQi)
-        
-    updClassLV = faQiLV
-    updEatItemCount = curEatItemCount + costItemCount
-    GameWorld.DebugLog("法器培养: faQiLV=%s,curEatItemCount=%s,costItemCount=%s,updEatItemCount=%s,needEatCount=%s" 
-                       % (faQiLV, curEatItemCount, costItemCount, updEatItemCount, needEatCount))
-    
-    if updEatItemCount >= needEatCount:
-        updClassLV += 1
-        updEatItemCount -= needEatCount
-        GameWorld.DebugLog("    升阶: updClassLV=%s,updEatItemCount=%s" % (updClassLV, updEatItemCount))
-        
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FaQiLV, updClassLV)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FaQiEatItemCount, updEatItemCount)
-    
-    # 升阶
-    if updClassLV > faQiLV:
-        pass
-    
-    Sync_FaQiLVInfo(curPlayer)
-    # 刷属性,更新排行榜
-    RefreshFaQiAttr(curPlayer)
-    return
-
-def RefreshFaQiAttr(curPlayer):
-    CalcFaQiAttr(curPlayer)
-    PlayerControl.PlayerControl(curPlayer).RefreshPlayerAttrState()
-    return
-
-def CalcFaQiAttr(curPlayer):
-    
-    faQiLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FaQiLV)
-    if not faQiLV:
-        return
-    
-    allAttrList = [{} for _ in range(4)]
-    customAttrDictFaQi = {}
-    faQiAllAttrInfo = {}
-    
-    ipyDataMgr = IpyGameDataPY.IPY_Data()
-    for index in xrange(ipyDataMgr.GetFaQiLVUpCount()):
-        lvupIpyData = ipyDataMgr.GetFaQiLVUpByIndex(index)
-        dataLV = lvupIpyData.GetFaQiLV()
-        if dataLV > faQiLV:
-            break
-        elif dataLV == faQiLV:
-            upItemCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FaQiEatItemCount)
-        else:
-            upItemCount = lvupIpyData.GetNeedEatCount()
-            
-        # 等阶额外属性
-        lvAttrTypeList = lvupIpyData.GetLVAttrType()
-        lvAttrValueList = lvupIpyData.GetLVAttrValue()
-        for i, attrID in enumerate(lvAttrTypeList):
-            attrValue = lvAttrValueList[i]
-            faQiAllAttrInfo[attrID] = faQiAllAttrInfo.get(attrID, 0) + attrValue
-            PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrList)
-            
-        # 培养丹增加属性
-        upItemPerCount = lvupIpyData.GetUpEatItemPerCount()
-        if upItemCount and upItemPerCount:
-            upItemAttrTypeList = lvupIpyData.GetUpItemAttrType()
-            upItemAttrValueList = lvupIpyData.GetUpItemAttrValue()
-            attrMultiple = upItemCount / upItemPerCount
-            for i, attrID in enumerate(upItemAttrTypeList):
-                attrValue = upItemAttrValueList[i]
-                faQiAllAttrInfo[attrID] = faQiAllAttrInfo.get(attrID, 0) + attrValue
-                PlayerControl.CalcAttrDict_Type(attrID, attrValue * attrMultiple, allAttrList)
-                
-    customAttrDictFaQi["faQiAllAttrInfo"] = faQiAllAttrInfo
-    # 保存计算值
-    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_FaQi, allAttrList, customAttrDict=customAttrDictFaQi)
-    return
-
-def Sync_FaQiLVInfo(curPlayer):
-    clientPack = ChPyNetSendPack.tagMCFaQiInfo()
-    clientPack.Clear()
-    clientPack.LV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FaQiLV)
-    clientPack.EatItemCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FaQiEatItemCount)
-    NetPackCommon.SendFakePack(curPlayer, clientPack)
-    return
-
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFuncSysPrivilege.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFuncSysPrivilege.py
deleted file mode 100644
index ab71e39..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFuncSysPrivilege.py
+++ /dev/null
@@ -1,177 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-##@package Player.PlayerFuncSysPrivilege
-#
-# @todo:功能系统特权奖励
-# @author hxp
-# @date 2021-04-13
-# @version 1.0
-#
-# 详细描述: 功能系统特权奖励
-#
-#-------------------------------------------------------------------------------
-#"""Version = 2021-04-13 16:00"""
-#-------------------------------------------------------------------------------
-
-import GameWorld
-import IpyGameDataPY
-import PlayerControl
-import ItemControler
-import ChPyNetSendPack
-import NetPackCommon
-import IPY_GameWorld
-import ShareDefine
-import ChConfig
-
-import time
-
-def OnPlayerLogin(curPlayer):
-    Sync_FuncSysPrivilege(curPlayer)
-    return
-
-#// B2 11 激活功能系统特权奖励 #tagCMActivateFuncSysPrivilege
-#
-#struct    tagCMActivateFuncSysPrivilege
-#{
-#    tagHead         Head;
-#    BYTE        ActivateCount;    // 激活个数
-#    BYTE        ActivateFuncSysIDList[ActivateCount];    // 激活功能系统ID列表,全部激活则需要发所有ID列表
-#};
-def OnActivateFuncSysPrivilege(index, clientData, tick):
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    activateFuncSysIDList = clientData.ActivateFuncSysIDList
-    
-    GameWorld.DebugLog("请求激活功能系统特权: %s" % activateFuncSysIDList)
-    
-    curTime = int(time.time())
-    canActivateList = []
-    for funcSysID in activateFuncSysIDList:
-        ipyDatList = IpyGameDataPY.GetIpyGameDataList("FuncSysPrivilege", funcSysID)
-        if not ipyDatList:
-            continue
-        
-        actTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FuncSysPrivilegeActTime % funcSysID)
-        if actTime:
-            maxDays = len(ipyDatList)
-            diffDays = GameWorld.GetDiff_Day(curTime, actTime)
-            if diffDays < maxDays:
-                GameWorld.DebugLog("    未超过奖励最大天,不可激活: funcSysID=%s,diffDays(%s) < maxDays(%s)" % (funcSysID, diffDays, maxDays))
-                continue
-            
-            isGetAll = True
-            awardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FuncSysPrivilegeAward % funcSysID)
-            for ipyData in ipyDatList:
-                dayNum = ipyData.GetDayNum()
-                if not awardState & pow(2, dayNum):
-                    isGetAll = False
-                    GameWorld.DebugLog("    还有未领取的奖励,不可激活: funcSysID=%s,dayNum=%s" % (funcSysID, dayNum))
-                    break
-                
-            if not isGetAll:
-                continue
-        canActivateList.append(funcSysID)
-        
-    GameWorld.DebugLog("    可激活的功能系统特权: %s" % canActivateList)
-    if not canActivateList:
-        return
-    
-    needMoney = len(canActivateList) # 开通1个花费1
-    infoDict = {ChConfig.Def_Cost_Reason_SonKey:canActivateList}
-    if not PlayerControl.PayMoney(curPlayer, ShareDefine.TYPE_Price_FuncSysPrivilege, needMoney, infoDict=infoDict):
-        GameWorld.DebugLog("    货币不足! needMoney=%s" % needMoney)
-        return
-    
-    for funcSysID in canActivateList:
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FuncSysPrivilegeActTime % funcSysID, curTime)
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FuncSysPrivilegeAward % funcSysID, 0)
-        
-    Sync_FuncSysPrivilege(curPlayer, canActivateList)
-    return
-
-#// B2 12 领取功能系统特权奖励 #tagCMGetFuncSysPrivilegeAward
-#
-#struct    tagCMGetFuncSysPrivilegeAward
-#{
-#    tagHead         Head;
-#    BYTE        FuncSysID;    // 功能系统ID
-#    BYTE        DayNum;        // 第X天,1为第1天
-#};
-def OnGetFuncSysPrivilegeAward(index, clientData, tick):
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    funcSysID = clientData.FuncSysID
-    dayNum = clientData.DayNum
-    
-    actTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FuncSysPrivilegeActTime % funcSysID)
-    if not actTime:
-        GameWorld.DebugLog("未激活,不可领奖!funcSysID=%s" % (funcSysID))
-        return
-    
-    curTime = int(time.time())
-    canGetMaxDayNum = GameWorld.GetDiff_Day(curTime, actTime) + 1
-    if dayNum > canGetMaxDayNum:
-        GameWorld.DebugLog("未达到领奖天,不可领奖!funcSysID=%s,dayNum(%s) > canGetMaxDayNum(%s), actTime=%s" 
-                           % (funcSysID, dayNum, canGetMaxDayNum, GameWorld.ChangeTimeNumToStr(actTime)))
-        return
-    
-    awardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FuncSysPrivilegeAward % funcSysID)
-    if awardState & pow(2, dayNum):
-        GameWorld.DebugLog("已领取过该天奖励!funcSysID=%s,dayNum=%s,awardState=%s" % (funcSysID, dayNum, awardState))
-        return
-    
-    ipyDatList = IpyGameDataPY.GetIpyGameDataList("FuncSysPrivilege", funcSysID)
-    if not ipyDatList:
-        return
-    
-    findIpyData = None
-    for ipyData in ipyDatList:
-        if ipyData.GetFuncSysID() == funcSysID and ipyData.GetDayNum() == dayNum:
-            findIpyData = ipyData
-            break
-    if not findIpyData:
-        GameWorld.DebugLog("找不到该天奖励!funcSysID=%s,dayNum=%s" % (funcSysID, dayNum))
-        return
-    
-    awardItemList = findIpyData.GetDayAwardItemInfo()
-    if not ItemControler.CheckPackSpaceEnough(curPlayer, awardItemList):
-        return
-    
-    updAwardState = awardState | pow(2, dayNum)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FuncSysPrivilegeAward % funcSysID, updAwardState)
-    
-    for itemID, itemCount, isAuctionItem in awardItemList:
-        ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, isAuctionItem, [IPY_GameWorld.rptItem], 
-                                     event=["FuncSysPrivilegeAward", False, {}])
-    ItemControler.NotifyGiveAwardInfo(curPlayer, awardItemList, "FuncSysPrivilegeAward")
-    
-    Sync_FuncSysPrivilege(curPlayer, [funcSysID])
-    return
-
-def Sync_FuncSysPrivilege(curPlayer, syncIDList=None):
-    if syncIDList == None:
-        syncIDList = []
-        ipyDataMgr = IpyGameDataPY.IPY_Data()
-        lastIpyData = ipyDataMgr.GetFuncSysPrivilegeByIndex(ipyDataMgr.GetFuncSysPrivilegeCount() - 1)
-        maxFuncID = lastIpyData.GetFuncSysID()
-        for funcSysID in xrange(1, maxFuncID + 1):
-            if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FuncSysPrivilegeActTime % funcSysID):
-                syncIDList.append(funcSysID)
-        
-        if not syncIDList:
-            return
-        
-    clientPack = ChPyNetSendPack.tagMCFuncSysPrivilegeInfoList()
-    clientPack.PrivilegeInfoList = []
-    for funcSysID in syncIDList:
-        info = ChPyNetSendPack.tagMCFuncSysPrivilegeInfo()
-        info.FuncSysID = funcSysID
-        info.ActivateTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FuncSysPrivilegeActTime % funcSysID)
-        info.AwardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FuncSysPrivilegeAward % funcSysID)
-        
-        clientPack.PrivilegeInfoList.append(info)
-    clientPack.PrivilegeCount = len(clientPack.PrivilegeInfoList)
-    NetPackCommon.SendFakePack(curPlayer, clientPack)
-    return
-
-
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerLianTi.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerLianTi.py
deleted file mode 100644
index bbf4056..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerLianTi.py
+++ /dev/null
@@ -1,248 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-##@package Player.PlayerLianTi
-#
-# @todo:炼体
-# @author hxp
-# @date 2022-22-23
-# @version 1.0
-#
-# 详细描述: 炼体
-#
-#-------------------------------------------------------------------------------
-#"""Version = 2022-22-23 15:30"""
-#-------------------------------------------------------------------------------
-
-import GameWorld
-import IpyGameDataPY
-import PlayerControl
-import FunctionNPCCommon
-import ChPyNetSendPack
-import NetPackCommon
-import ItemCommon
-import ChConfig
-import SkillCommon
-
-def DoLianTiOpen(curPlayer):
-    ## 功能开启
-    lianTiLV = 1
-    ipyData = IpyGameDataPY.GetIpyGameData("LianTi", lianTiLV)
-    if not ipyData:
-        return
-    
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_LianTiLV, lianTiLV)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_LianTiEatItemCount, 0)
-    
-    GameWorld.DebugLog("炼体功能开启! lianTiLV=%s" % lianTiLV)
-    SyncLianTiInfo(curPlayer)
-    RefreshLianTiAttr(curPlayer)
-    return True
-
-def OnPlayerLogin(curPlayer):
-    if not curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_LianTiLV):
-        return
-    SyncLianTiInfo(curPlayer)
-    return
-
-#// A5 33 炼体提升 #tagCMLianTiUp
-#
-#struct    tagCMLianTiUp
-#{
-#    tagHead        Head;
-#    DWORD        UseItemCnt;    //消耗材料个数
-#    BYTE        IsAutoBuy;    //是否自动购买
-#};
-def OnLianTiUp(index, clientData, tick):
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    costItemCount = clientData.UseItemCnt # 消耗材料个数
-    isAutoBuy = clientData.IsAutoBuy # 是否自动购买
-    
-    lianTiLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_LianTiLV)
-    curEatItemCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_LianTiEatItemCount)
-    
-    if not lianTiLV:
-        return
-    
-    ipyData = IpyGameDataPY.GetIpyGameData("LianTi", lianTiLV)
-    if not ipyData:
-        return
-    
-    needEatCount = ipyData.GetNeedEatCount()
-    if not needEatCount:
-        GameWorld.DebugLog("炼体已满级! lianTiLV=%s" % lianTiLV)
-        return
-        
-    if curEatItemCount >= needEatCount:
-        GameWorld.DebugLog("本级已吃满! lianTiLV=%s,curEatItemCount=%s >= %s" % (lianTiLV, curEatItemCount, needEatCount))
-        return
-    
-    costItemID = IpyGameDataPY.GetFuncCfg("LianTiUpItem", 1)
-    if not costItemID or not costItemCount:
-        return
-    
-    costItemIndexList, bindCnt, unBindCnt = ItemCommon.GetPackItemBindStateIndexInfo(curPlayer, costItemID, costItemCount)
-    lackCnt = costItemCount - bindCnt - unBindCnt
-    if lackCnt > 0 and not isAutoBuy:
-        GameWorld.DebugLog("道具不足,无法提升炼体! costItemID=%s,costItemCount=%s,bindCnt=%s,unBindCnt=%s,lackCnt=%s" 
-                           % (costItemID, costItemCount, bindCnt, unBindCnt, lackCnt))
-        return
-    
-    delCnt = costItemCount
-    if lackCnt > 0:
-        autoBuyMoneyType = IpyGameDataPY.GetFuncCfg("LianTiUpItem", 2)
-        if not autoBuyMoneyType:
-            return
-        infoDict = {ChConfig.Def_Cost_Reason_SonKey:costItemID}
-        if not FunctionNPCCommon.PayAutoBuyItem(curPlayer, {costItemID:lackCnt}, autoBuyMoneyType, ChConfig.Def_Cost_LianTi, infoDict):
-            return
-        delCnt -= lackCnt
-        
-    # 扣除消耗
-    if delCnt:
-        ItemCommon.DelCostItemByBind(curPlayer, costItemIndexList, bindCnt, unBindCnt, delCnt, ChConfig.ItemDel_LianTi)
-        
-    updEatItemCount = curEatItemCount + costItemCount
-    GameWorld.DebugLog("炼体提升: lianTiLV=%s,curEatItemCount=%s,costItemCount=%s,updEatItemCount=%s,needEatCount=%s" 
-                       % (lianTiLV, curEatItemCount, costItemCount, updEatItemCount, needEatCount))
-    
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_LianTiEatItemCount, updEatItemCount)
-    
-    SyncLianTiInfo(curPlayer)
-    RefreshLianTiAttr(curPlayer)
-    return
-
-#// A5 34 炼体突破 #tagCMLianTiLVUp
-#
-#struct    tagCMLianTiLVUp
-#{
-#    tagHead        Head;
-#};
-def OnLianTiLVUp(index, clientData, tick):
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-        
-    lianTiLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_LianTiLV)
-    curEatItemCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_LianTiEatItemCount)
-    
-    if not lianTiLV:
-        return
-    
-    ipyData = IpyGameDataPY.GetIpyGameData("LianTi", lianTiLV)
-    if not ipyData:
-        return
-    
-    needEatCount = ipyData.GetNeedEatCount()
-    if not needEatCount:
-        GameWorld.DebugLog("炼体已满级! lianTiLV=%s" % lianTiLV)
-        return
-    
-    if curEatItemCount < needEatCount:
-        GameWorld.DebugLog("炼体培养物品个数不足,无法突破! lianTiLV=%s,curEatItemCount=%s < %s" % (lianTiLV, curEatItemCount, needEatCount))
-        return
-    
-    costItemInfo = ipyData.GetLVUpCostItemInfo()
-    if not costItemInfo or len(costItemInfo) != 2:
-        return
-    costItemID, costItemCount = costItemInfo
-    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
-    
-    nextLianTiLv = lianTiLV + 1
-    nextIpyData = IpyGameDataPY.GetIpyGameDataNotLog("LianTi", nextLianTiLv)
-    if not nextIpyData:
-        return
-    
-    curRealmLV = curPlayer.GetOfficialRank()
-    if nextLianTiLv > curRealmLV:
-        GameWorld.DebugLog("炼体突破不能超过当前境界! nextLianTiLv=%s > curRealmLV(%s)" % (nextLianTiLv, curRealmLV))
-        return
-    
-    # 扣除消耗
-    ItemCommon.DelCostItemByBind(curPlayer, costItemIndexList, bindCnt, unBindCnt, costItemCount, ChConfig.ItemDel_LianTi)
-    
-    updEatItemCount = curEatItemCount - needEatCount
-    activateSkillID = nextIpyData.GetActivateSkillID()
-    GameWorld.DebugLog("炼体突破: lianTiLV=%s,curEatItemCount=%s,needEatCount=%s,updEatItemCount=%s,nextLianTiLv=%s,activateSkillID=%s" 
-                       % (lianTiLV, curEatItemCount, needEatCount, updEatItemCount, nextLianTiLv, activateSkillID))
-    
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_LianTiLV, nextLianTiLv)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_LianTiEatItemCount, updEatItemCount)
-    
-    if activateSkillID:
-        SkillCommon.GivePlayerSkillByJobSkill(curPlayer, [activateSkillID])
-        
-    SyncLianTiInfo(curPlayer)
-    RefreshLianTiAttr(curPlayer)
-    return
-
-def RefreshLianTiAttr(curPlayer):
-    CalcLianTiAttr(curPlayer)
-    PlayerControl.PlayerControl(curPlayer).RefreshPlayerAttrState()
-    return
-
-def CalcLianTiAttr(curPlayer):
-    
-    lianTiLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_LianTiLV)
-    if not lianTiLV:
-        return
-    
-    allAttrList = [{} for _ in range(4)]
-    
-    ipyDataMgr = IpyGameDataPY.IPY_Data()
-    for index in xrange(ipyDataMgr.GetLianTiCount()):
-        lvupIpyData = ipyDataMgr.GetLianTiByIndex(index)
-        dataLV = lvupIpyData.GetLianTiLV()
-        if dataLV > lianTiLV:
-            break
-        
-        upItemCount = lvupIpyData.GetNeedEatCount()
-        if dataLV == lianTiLV:
-            upItemCount = min(curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_LianTiEatItemCount), upItemCount)
-        #GameWorld.DebugLog("dataLV=%s,upItemCount=%s" % (dataLV, upItemCount))
-        
-        # 固定属性
-        fixedAttrTypeList = lvupIpyData.GetFixedAttrType()
-        fixedAttrValueList = lvupIpyData.GetFixedAttrValue()
-        for i, attrID in enumerate(fixedAttrTypeList):
-            attrValue = fixedAttrValueList[i] if len(fixedAttrValueList) > i else 0
-            PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrList)
-            #GameWorld.DebugLog("    %s, attrID=%s,attrValue=%s,%s" % (i, attrID, attrValue, allAttrList))
-            
-        # 培养丹增加属性
-        upItemPerCount = lvupIpyData.GetEatPerCount()
-        if upItemCount and upItemPerCount:
-            upItemAttrTypeList = lvupIpyData.GetEatItemAttrType()
-            upItemAttrValueList = lvupIpyData.GetEatItemAttrValue()
-            attrMultiple = upItemCount / upItemPerCount
-            #GameWorld.DebugLog("    upItemCount=%s,upItemPerCount=%s,attrMultiple=%s" % (upItemCount, upItemPerCount, attrMultiple))
-            for i, attrID in enumerate(upItemAttrTypeList):
-                attrValue = upItemAttrValueList[i] if len(upItemAttrValueList) > i else 0
-                attrValue *= attrMultiple
-                PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrList)
-                #GameWorld.DebugLog("    %s, attrID=%s,attrValue=%s,%s" % (i, attrID, attrValue, allAttrList))
-                
-        # 增强属性万分率累加
-        plusAttrTypeList = lvupIpyData.GetPlusAttrType()
-        plusAttrRateList = lvupIpyData.GetPlusAttrRate()
-        for i, attrID in enumerate(plusAttrTypeList):
-            attrValue = plusAttrRateList[i] if len(plusAttrRateList) > i else 0
-            PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrList)
-            
-    #GameWorld.DebugLog("    allAttrList=%s" % allAttrList)
-    # 保存计算值
-    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_LianTi, allAttrList)
-    return
-
-def SyncLianTiInfo(curPlayer):
-    clientPack = ChPyNetSendPack.tagMCLianTiInfo()
-    clientPack.LianTiLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_LianTiLV)
-    clientPack.EatItemCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_LianTiEatItemCount)
-    NetPackCommon.SendFakePack(curPlayer, clientPack)
-    return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerLove.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerLove.py
deleted file mode 100644
index e86bf90..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerLove.py
+++ /dev/null
@@ -1,625 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-##@package Player.PlayerLove
-#
-# @todo:情缘系统
-# @author hxp
-# @date 2021-11-09
-# @version 1.0
-#
-# 详细描述: 情缘系统
-#
-#-------------------------------------------------------------------------------
-#"""Version = 2021-11-09 20:00"""
-#-------------------------------------------------------------------------------
-
-import GameWorld
-import ItemCommon
-import PlayerControl
-import IpyGameDataPY
-import ChPyNetSendPack
-import FunctionNPCCommon
-import IPY_GameWorld
-import ItemControler
-import NetPackCommon
-import ChConfig
-import SkillCommon
-import BuffSkill
-import PyGameData
-
-def DoPlayerOnDay(curPlayer):
-    if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_LoveEatCandyToday):
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_LoveEatCandyToday, 0)
-        Sync_LoveInfo(curPlayer)
-    return
-
-def DoPlayerLogin(curPlayer):
-    Sync_LoveInfo(curPlayer)
-    Sync_LoveRingInfo(curPlayer)
-    return
-
-#// B3 10 送礼物 #tagCMSendGifts
-#
-#struct    tagCMSendGifts
-#{
-#    tagHead        Head;
-#    DWORD        TagPlayerID;    // 目标玩家ID
-#    WORD        GiftNum;        // 赠送礼物编号
-#    DWORD        GiftCount;    // 赠送礼物数量
-#    BYTE        IsAutoBuy;    // 是否自动购买
-#};
-def OnSendGifts(index, clientData, tick):
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    tagPlayerID = clientData.TagPlayerID
-    giftNum = clientData.GiftNum
-    giftCount = clientData.GiftCount
-    isAutoBuy = clientData.IsAutoBuy
-    
-    if giftNum <= 0 or giftCount <= 0:
-        return
-    
-    ipyData = IpyGameDataPY.GetIpyGameData("LoveGift", giftNum)
-    if not ipyData:
-        return
-    
-    giftItemID = ipyData.GetGiftItemID()
-    if not ipyData.GetAllowBatch():
-        giftCount = 1 # 不允许批量赠送的默认赠送1个
-        
-    _, bindCnt, unBindCnt = ItemCommon.GetPackItemBindStateIndexInfo(curPlayer, giftItemID, giftCount)
-    lackCnt = giftCount - bindCnt - unBindCnt
-    if lackCnt > 0:
-        if not isAutoBuy:
-            GameWorld.DebugLog("礼物道具不足,无法赠送! giftItemID=%s,giftCount=%s,bindCnt=%s,unBindCnt=%s,lackCnt=%s" 
-                               % (giftItemID, giftCount, bindCnt, unBindCnt, lackCnt))
-            return
-        
-        moneyType = IpyGameDataPY.GetFuncCfg("LoveGift", 1)
-        infoDict = {ChConfig.Def_Cost_Reason_SonKey:giftItemID}
-        if not FunctionNPCCommon.PayAutoBuyItem(curPlayer, {giftItemID:lackCnt}, moneyType, ChConfig.Def_Cost_Love, infoDict, isCheck=True):
-            return
-        
-    if not GameWorld.SetPlayerTickTime(curPlayer, ChConfig.TYPE_Player_Tick_Love, tick):
-        PlayerControl.NotifyCode(curPlayer, "RequestLater")
-        return
-    
-    dataMsg = [tagPlayerID, giftNum, giftItemID, giftCount, isAutoBuy]
-    SendToGameServer_Love(curPlayer, "SendGiftsReq", dataMsg)
-    return
-
-#// B3 11 提亲 #tagCMMarryReq
-#
-#struct    tagCMMarryReq
-#{
-#    tagHead        Head;
-#    DWORD        TagPlayerID;    // 目标玩家ID
-#    BYTE        BridePriceID;    // 聘礼ID
-#};
-def OnMarryReq(index, clientData, tick):
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    tagPlayerID = clientData.TagPlayerID
-    bridePriceID = clientData.BridePriceID
-    
-    ipyData = IpyGameDataPY.GetIpyGameData("Marry", bridePriceID)
-    if not ipyData:
-        return
-    costMoneyInfo = ipyData.GetCostMoneyInfo()
-    if len(costMoneyInfo) != 2:
-        return
-    moneyType, moneyValue = costMoneyInfo
-    
-    if not PlayerControl.HaveMoney(curPlayer, moneyType, moneyValue):
-        return
-    
-    if not GameWorld.SetPlayerTickTime(curPlayer, ChConfig.TYPE_Player_Tick_Love, tick):
-        PlayerControl.NotifyCode(curPlayer, "RequestLater")
-        return
-    
-    dataMsg = [tagPlayerID, bridePriceID]
-    SendToGameServer_Love(curPlayer, "MarryReq", dataMsg)
-    return
-
-#// B3 13 吃喜糖 #tagCMMarryEatCandy
-#
-#struct    tagCMMarryEatCandy
-#{
-#    tagHead        Head;
-#    DWORD        PlayerIDA;    // 喜糖所属玩家IDA
-#    DWORD        PlayerIDB;    // 喜糖所属玩家IDB
-#};
-def OnMarryEatCandy(index, clientData, tick):
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    
-    playerIDA = clientData.PlayerIDA
-    playerIDB = clientData.PlayerIDB
-    
-    playerID = curPlayer.GetPlayerID()
-    
-    EatCandyMax = IpyGameDataPY.GetFuncCfg("LoveCandy", 4)
-    if EatCandyMax:
-        eatCandyToday = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_LoveEatCandyToday)
-        if eatCandyToday >= EatCandyMax:
-            GameWorld.DebugLog("已达今日吃喜糖次数上限. eatCandyToday=%s >= %s" % (eatCandyToday, EatCandyMax), playerID)
-            return
-        
-    if not GameWorld.SetPlayerTickTime(curPlayer, ChConfig.TYPE_Player_Tick_Love, tick):
-        PlayerControl.NotifyCode(curPlayer, "RequestLater")
-        return
-    
-    costMoneyType, costMoneyValue = IpyGameDataPY.GetFuncEvalCfg("LoveCandy", 2)
-    playerMoneyValue = PlayerControl.GetMoney(curPlayer, costMoneyType)
-    
-    dataMsg = [playerIDA, playerIDB, playerID, costMoneyType, costMoneyValue, playerMoneyValue]
-    SendToGameServer_Love(curPlayer, "MarryEatCandy", dataMsg)
-    return
-
-
-#// B3 14 购买婚礼烟花 #tagCMMarryBuyFireworks
-#
-#struct    tagCMMarryBuyFireworks
-#{
-#    tagHead        Head;
-#    DWORD        PlayerIDA;    // 喜糖所属玩家IDA
-#    DWORD        PlayerIDB;    // 喜糖所属玩家IDB
-#};
-def OnMarryBuyFireworks(index, clientData, tick):
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    
-    playerIDA = clientData.PlayerIDA
-    playerIDB = clientData.PlayerIDB
-    
-    playerID = curPlayer.GetPlayerID()
-    
-    costMoneyType, costMoneyValue = IpyGameDataPY.GetFuncEvalCfg("LoveCandyFire", 2)
-    if not PlayerControl.HaveMoney(curPlayer, costMoneyType, costMoneyValue):
-        return
-    playerMoneyValue = PlayerControl.GetMoney(curPlayer, costMoneyType)    
-    
-    if not GameWorld.SetPlayerTickTime(curPlayer, ChConfig.TYPE_Player_Tick_Love, tick):
-        PlayerControl.NotifyCode(curPlayer, "RequestLater")
-        return
-    
-    dataMsg = [playerIDA, playerIDB, playerID, costMoneyType, costMoneyValue, playerMoneyValue]
-    SendToGameServer_Love(curPlayer, "MarryBuyFireworks", dataMsg)
-    return
-
-#// B3 15 离婚 #tagCMMarryBreak
-#
-#struct    tagCMMarryBreak
-#{
-#    tagHead        Head;
-#    BYTE        BreakType;    // 0-和平离婚;1-强制离婚
-#};
-def OnMarryBreak(index, clientData, tick):
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    breakType = clientData.BreakType
-    playerID = curPlayer.GetPlayerID()
-    
-    moneyType, moneyValue = 0, 0
-    if breakType == 1:
-        costMoneyInfo = IpyGameDataPY.GetFuncEvalCfg("LoveMarryBreak", 3)
-        if len(costMoneyInfo) != 2:
-            return
-        moneyType, moneyValue = costMoneyInfo
-        
-        if not PlayerControl.HaveMoney(curPlayer, moneyType, moneyValue):
-            return
-        
-    if not GameWorld.SetPlayerTickTime(curPlayer, ChConfig.TYPE_Player_Tick_Love, tick):
-        PlayerControl.NotifyCode(curPlayer, "RequestLater")
-        return
-    
-    dataMsg = [playerID, breakType, moneyType, moneyValue]
-    SendToGameServer_Love(curPlayer, "MarryBreakReq", dataMsg)
-    return
-
-def SendToGameServer_Love(curPlayer, msgType, dataMsg):
-    ## 发送信息到跨服服务器
-    msgList = str([msgType, dataMsg])
-    GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(curPlayer.GetPlayerID(), 0, 0, "Love", msgList, len(msgList))
-    GameWorld.Log("情缘发送GameServer: %s, %s" % (msgType, dataMsg), curPlayer.GetPlayerID())
-    return
-
-def GameServer_Love_DoLogic(curPlayer, msgData):
-    
-    msgType, dataMsg = msgData[:2]
-    
-    ## 结婚成功
-    if msgType == "MarrySuccess":
-        __DoMarrySuccess(curPlayer, dataMsg)
-    
-    ## 离婚成功
-    elif msgType == "ClearCoupleSocial":
-        __ClearCoupleSocial(curPlayer, dataMsg)
-    
-    ## 同步亲密度
-    elif msgType == "SyncMapServerIntimacy":
-        SyncMapServerIntimacy(curPlayer, dataMsg)
-        
-    return
-
-def GameServer_Love_DoResult(curPlayer, msgData):
-    
-    msgType, dataMsg, ret = msgData
-    
-    ## 送礼物请求返回
-    if msgType == "SendGiftsReq":
-        if not ret:
-            return
-        __DoSendGiftsReq(curPlayer, dataMsg)
-        
-    ## 吃喜糖返回
-    elif msgType == "MarryEatCandy":
-        if not ret:
-            return
-        __DoMarryEatCandy(curPlayer, ret)
-        
-    ## 购买婚礼烟花返回
-    elif msgType == "MarryBuyFireworks":
-        if not ret:
-            return
-        __DoMarryBuyFireworks(curPlayer, ret)
-        
-    ## 离婚请求返回
-    elif msgType == "MarryBreakReq":
-        if not ret:
-            return
-        __DoMarryBreakReq(curPlayer, ret)
-        
-    return
-
-def __DoSendGiftsReq(curPlayer, dataMsg):
-    ## 送礼物方处理
-    
-    playerID = curPlayer.GetPlayerID()
-    tagPlayerID, giftNum, giftItemID, giftCount, isAutoBuy = dataMsg
-    
-    costItemIndexList, bindCnt, unBindCnt = ItemCommon.GetPackItemBindStateIndexInfo(curPlayer, giftItemID, giftCount)
-    lackCnt = giftCount - bindCnt - unBindCnt
-    delCnt = giftCount
-    if lackCnt > 0:
-        if not isAutoBuy:
-            GameWorld.ErrLog("礼物道具不足,无法赠送! giftItemID=%s,giftCount=%s,bindCnt=%s,unBindCnt=%s,lackCnt=%s" 
-                             % (giftItemID, giftCount, bindCnt, unBindCnt, lackCnt))
-            return
-        
-        moneyType = IpyGameDataPY.GetFuncCfg("LoveGift", 1)
-        infoDict = {ChConfig.Def_Cost_Reason_SonKey:giftItemID}
-        if not FunctionNPCCommon.PayAutoBuyItem(curPlayer, {giftItemID:lackCnt}, moneyType, ChConfig.Def_Cost_Love, infoDict):
-            return
-        delCnt -= lackCnt
-        
-    GameWorld.Log("赠送礼物: tagPlayerID=%s,giftNum=%s,giftItemID=%s,giftCount=%s,isAutoBuy=%s" 
-                  % (tagPlayerID, giftNum, giftItemID, giftCount, isAutoBuy), playerID)
-    
-    # 扣除消耗
-    if delCnt > 0:
-        ItemCommon.DelCostItemByBind(curPlayer, costItemIndexList, bindCnt, unBindCnt, delCnt, "Love")
-        
-    SendToGameServer_Love(curPlayer, "SendGiftsOK", dataMsg)
-    return
-
-def __DoMarryEatCandy(curPlayer, retInfo):
-    ## 执行吃喜糖结果
-    
-    canBuy, isFree, costMoneyType, costMoneyValue, candyItemInfo = retInfo
-    
-    if not isFree:
-        if not PlayerControl.HaveMoney(curPlayer, costMoneyType, costMoneyValue):
-            return
-        
-    if not canBuy:
-        return
-    
-    updEatCandyToday = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_LoveEatCandyToday) + 1
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_LoveEatCandyToday, updEatCandyToday)
-    Sync_LoveInfo(curPlayer)
-    
-    GameWorld.Log("吃喜糖结果: isFree=%s,updEatCandyToday=%s" % (isFree, updEatCandyToday), curPlayer.GetPlayerID())
-    
-    if not isFree:
-        infoDict = {ChConfig.Def_Cost_Reason_SonKey:"EatCandy"}
-        PlayerControl.PayMoney(curPlayer, costMoneyType, costMoneyValue, ChConfig.Def_Cost_Love, infoDict, isMinus=True)
-        
-    ItemControler.GivePlayerItemOrMail(curPlayer, candyItemInfo)
-    return
-    
-def __DoMarryBuyFireworks(curPlayer, retInfo):
-    ## 执行购买婚礼烟花结果
-    
-    costMoneyType, costMoneyValue = retInfo
-    GameWorld.Log("执行购买婚礼烟花结果: costMoneyType=%s, costMoneyValue=%s" % (costMoneyType, costMoneyValue), curPlayer.GetPlayerID())
-    
-    infoDict = {ChConfig.Def_Cost_Reason_SonKey:"MarryBuyFireworks"}
-    PlayerControl.PayMoney(curPlayer, costMoneyType, costMoneyValue, ChConfig.Def_Cost_Love, infoDict, isMinus=True)
-    return
-    
-def __DoMarryBreakReq(curPlayer, retInfo):
-    ## 离婚请求结果返回
-    
-    costMoneyType, costMoneyValue = retInfo
-    GameWorld.Log("执行强制离婚请求结果: costMoneyType=%s, costMoneyValue=%s" % (costMoneyType, costMoneyValue), curPlayer.GetPlayerID())
-    
-    infoDict = {ChConfig.Def_Cost_Reason_SonKey:"MarryBreak"}
-    PlayerControl.PayMoney(curPlayer, costMoneyType, costMoneyValue, ChConfig.Def_Cost_Love, infoDict, isMinus=True)
-    return
-
-def __DoMarrySuccess(curPlayer, dataMsg):
-    ## 执行成亲成功
-    reqPlayerID, bridePriceID, mapServerCoupleInfo, coupleIntimacy = dataMsg
-    playerID = curPlayer.GetPlayerID()
-    PlayerControl.SetCoupleInfo(playerID, mapServerCoupleInfo)
-    
-    GameWorld.Log("执行成亲成功! reqPlayerID=%s,bridePriceID=%s,coupleIntimacy=%s" % (reqPlayerID, bridePriceID, coupleIntimacy), playerID)
-    
-    if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_LoveRingClassLV) == 0:
-        GameWorld.DebugLog("激活情戒!")
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_LoveRingClassLV, 1)
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_LoveRingStarLV, 1)
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_LoveRingEatCount, 0)
-        Sync_LoveRingInfo(curPlayer)
-        
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_LoveCoupleIntimacy, coupleIntimacy)
-    RefreshCoupleTeamBuff(curPlayer)
-    
-    # 提亲的玩家扣除消耗
-    if playerID == reqPlayerID:
-        ipyData = IpyGameDataPY.GetIpyGameData("Marry", bridePriceID)
-        if ipyData:
-            moneyType, moneyValue = ipyData.GetCostMoneyInfo()
-            infoDict = {ChConfig.Def_Cost_Reason_SonKey:"MarrySuccess", "bridePriceID":bridePriceID}
-            PlayerControl.PayMoney(curPlayer, moneyType, moneyValue, ChConfig.Def_Cost_Love, infoDict, isMinus=True)
-            
-    RefreshLoveAttr(curPlayer)
-    return
-
-def __ClearCoupleSocial(curPlayer, dataMsg):
-    ## 离婚 - 清除伴侣关系
-    
-    playerID = curPlayer.GetPlayerID()
-    
-    coupleID = PlayerControl.GetCoupleID(curPlayer)
-    PlayerControl.SetCoupleInfo(playerID, None)
-    
-    GameWorld.Log("清除伴侣关系成功! coupleID=%s" % (coupleID), playerID)
-    
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_LoveCoupleIntimacy, 0)
-    RefreshCoupleTeamBuff(curPlayer)
-    
-    RefreshLoveAttr(curPlayer)
-    return
-
-#// B3 17 情戒解锁 #tagCMLoveRingUnlock
-#
-#struct    tagCMLoveRingUnlock
-#{
-#    tagHead        Head;
-#};
-def OnLoveRingUnlock(index, clientData, tick):
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    playerID = curPlayer.GetPlayerID()
-    unlockItemID = IpyGameDataPY.GetFuncCfg("LoveRing", 1)
-    
-    unlockItem = ItemCommon.FindItemInPackByItemID(curPlayer, unlockItemID, IPY_GameWorld.rptItem)
-    if not ItemCommon.CheckItemCanUse(unlockItem):
-        GameWorld.DebugLog("物品解锁情戒缺少道具! unlockItemID=%s" % unlockItemID, playerID)
-        return
-    ItemCommon.DelItem(curPlayer, unlockItem, 1)
-    
-    classLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_LoveRingClassLV)
-    if classLV < 1:
-        GameWorld.DebugLog("物品解锁情戒!", playerID)
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_LoveRingClassLV, 1)
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_LoveRingStarLV, 1)
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_LoveRingEatCount, 0)
-        Sync_LoveRingInfo(curPlayer)
-        RefreshLoveAttr(curPlayer)
-        
-    NetPackCommon.SendFakePack(curPlayer, ChPyNetSendPack.tagMCLoveRingUnlockOK())
-    return
-
-#// B3 18 情戒升级 #tagCMLoveRingUp
-#
-#struct    tagCMLoveRingUp
-#{
-#    tagHead        Head;
-#    DWORD        UseItemCnt;        //消耗材料个数
-#};
-def OnLoveRingUp(index, clientData, tick):
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    costItemCount = clientData.UseItemCnt # 消耗材料个数
-    #isAutoBuy = False # 本功能暂不提供自动购买
-    playerID = curPlayer.GetPlayerID()
-    
-    classLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_LoveRingClassLV)
-    if not classLV:
-        GameWorld.DebugLog("情戒未解锁!", playerID)
-        return
-    
-    starLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_LoveRingStarLV)
-    curEatItemCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_LoveRingEatCount)
-    
-    ringIpyData = IpyGameDataPY.GetIpyGameData("LoveRing", classLV, starLV)
-    if not ringIpyData:
-        return
-    needEatCount = ringIpyData.GetNeedEatCount()
-    
-    if not needEatCount:
-        GameWorld.DebugLog("情戒已满级!classLV=%s,starLV=%s" % (classLV, starLV), playerID)
-        return
-    
-    costItemID = IpyGameDataPY.GetFuncCfg("LoveRing", 2)
-    if not costItemID or costItemCount <= 0:
-        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), playerID)
-        return
-    delCnt = costItemCount
-    
-    updClassLV, updStarLV = classLV, starLV
-    updEatItemCount = curEatItemCount + costItemCount
-    GameWorld.DebugLog("情戒升级: classLV=%s,starLV=%s,curEatItemCount=%s,costItemCount=%s,updEatItemCount=%s,needEatCount=%s" 
-                       % (classLV, starLV, curEatItemCount, costItemCount, updEatItemCount, needEatCount), playerID)
-    
-    ringUpType = ""
-    if updEatItemCount >= needEatCount:
-        ringUpType = "starUp"
-        updStarLV += 1
-        nextRingIpyData = IpyGameDataPY.GetIpyGameDataNotLog("LoveRing", updClassLV, updStarLV)
-        if not nextRingIpyData:
-            updClassLV += 1
-            updStarLV = 1
-            nextRingIpyData = IpyGameDataPY.GetIpyGameData("LoveRing", updClassLV, updStarLV)
-            if not nextRingIpyData:
-                GameWorld.ErrLog("情戒升级数据异常: classLV=%s,starLV=%s,curEatItemCount=%s,costItemCount=%s,updEatItemCount=%s,needEatCount=%s" 
-                       % (classLV, starLV, curEatItemCount, costItemCount, updEatItemCount, needEatCount), playerID)
-                return
-            ringUpType = "classUp"
-        updEatItemCount -= needEatCount
-        
-    # 扣除消耗
-    if delCnt:
-        ItemCommon.DelCostItemByBind(curPlayer, costItemIndexList, bindCnt, unBindCnt, delCnt, "Love")
-        
-    # 升星
-    if ringUpType == "starUp":
-        GameWorld.DebugLog("    升星: updClassLV=%s,updStarLV=%s,updEatItemCount=%s" % (updClassLV, updStarLV, updEatItemCount), playerID)
-        
-    # 升阶
-    elif ringUpType == "classUp":
-        GameWorld.DebugLog("    升阶: updClassLV=%s,updStarLV=%s,updEatItemCount=%s" % (updClassLV, updStarLV, updEatItemCount), playerID)
-        
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_LoveRingClassLV, updClassLV)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_LoveRingStarLV, updStarLV)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_LoveRingEatCount, updEatItemCount)
-    
-    Sync_LoveRingInfo(curPlayer)
-    RefreshLoveAttr(curPlayer)
-    return
-
-def RefreshLoveAttr(curPlayer):
-    CalcLoveAttr(curPlayer)
-    PlayerControl.PlayerControl(curPlayer).RefreshPlayerAttrState()
-    return
-
-def CalcLoveAttr(curPlayer):
-    
-    classLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_LoveRingClassLV)
-    starLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_LoveRingStarLV)
-    
-    coupleID = PlayerControl.GetCoupleID(curPlayer)
-    
-    allAttrList = [{} for _ in range(4)]
-    allAttrListCouple = [{} for _ in range(4)]
-    
-    ipyDataMgr = IpyGameDataPY.IPY_Data()
-    for index in xrange(ipyDataMgr.GetLoveRingCount()):
-        ringIpyData = ipyDataMgr.GetLoveRingByIndex(index)
-        dataClassLV = ringIpyData.GetRingClassLV()
-        dataStarLV = ringIpyData.GetRingStarLV()
-        if dataClassLV > classLV or (dataClassLV == classLV and dataStarLV > starLV):
-            break
-        elif dataClassLV == classLV and dataStarLV == starLV:
-            upItemCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_LoveRingEatCount)
-        else:
-            upItemCount = ringIpyData.GetNeedEatCount()
-            
-        # 阶星属性
-        starAttrTypeList = ringIpyData.GetStarAttrType()
-        starAttrValueList = ringIpyData.GetStarAttrValue()
-        for i, attrID in enumerate(starAttrTypeList):
-            attrValue = starAttrValueList[i]
-            PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrList)
-        
-        # 升级个数属性
-        upItemPerCount = ringIpyData.GetUpEatItemPerCount()
-        if upItemCount and upItemPerCount:
-            upItemAttrTypeList = ringIpyData.GetUpItemAttrType()
-            upItemAttrValueList = ringIpyData.GetUpItemAttrValue()
-            attrMultiple = upItemCount / upItemPerCount
-            for i, attrID in enumerate(upItemAttrTypeList):
-                attrValue = upItemAttrValueList[i]
-                PlayerControl.CalcAttrDict_Type(attrID, attrValue * attrMultiple, allAttrList)
-                
-        # 仙侣属性
-        if coupleID:
-            coupleAttrTypeList = ringIpyData.GetCoupleAttrType()
-            coupleAttrValueList = ringIpyData.GetCoupleAttrValue()
-            for i, attrID in enumerate(coupleAttrTypeList):
-                attrValue = coupleAttrValueList[i]
-                PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrListCouple)
-                
-    #GameWorld.DebugLog("情戒基础属性: classLV=%s,starLV=%s,allAttrList=%s" % (classLV, starLV, allAttrList))
-    #GameWorld.DebugLog("情戒仙侣属性: classLV=%s,starLV=%s,allAttrListCouple=%s" % (classLV, starLV, allAttrListCouple))
-    
-    # 保存计算值
-    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_LoveRing, allAttrList)
-    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_LoveRingCouple, allAttrListCouple)
-    return
-
-def Sync_LoveRingInfo(curPlayer):
-    ## 同步情戒信息
-    clientPack = ChPyNetSendPack.tagMCLoveRingInfo()
-    clientPack.ClassLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_LoveRingClassLV)
-    clientPack.StarLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_LoveRingStarLV)
-    clientPack.EatCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_LoveRingEatCount)
-    NetPackCommon.SendFakePack(curPlayer, clientPack)
-    return
-
-def Sync_LoveInfo(curPlayer):
-    ## 同步情缘相关信息
-    clientPack = ChPyNetSendPack.tagMCLoveInfo()
-    clientPack.EatCandyToday = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_LoveEatCandyToday)
-    NetPackCommon.SendFakePack(curPlayer, clientPack)
-    return
-
-def SyncMapServerIntimacy(curPlayer, dataMsg):
-    tagID, intimacyValue = dataMsg
-    coupleID = PlayerControl.GetCoupleID(curPlayer)
-    if coupleID == tagID:
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_LoveCoupleIntimacy, intimacyValue)
-        RefreshCoupleTeamBuff(curPlayer)
-    return
-
-def RefreshCoupleTeamBuff(curPlayer):
-    ## 刷新伴侣组队buff
-    
-    teamID = curPlayer.GetTeamID()
-    playerID = curPlayer.GetPlayerID()
-    cupleID = PlayerControl.GetCoupleID(curPlayer)
-    teamPlayerInfoDict = PyGameData.g_teamPlayerInfoDict.get(teamID, {}) if teamID else {}
-    teamPlayerIDList = teamPlayerInfoDict.keys()
-    skillLV = 0
-    skillTypeID = IpyGameDataPY.GetFuncCfg("IntimacyBuff", 2)
-    coupleIntimacy = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_LoveCoupleIntimacy)
-    if cupleID and cupleID in teamPlayerIDList:
-        skillLVIntimacyList = IpyGameDataPY.GetFuncEvalCfg("IntimacyBuff", 1)
-        for lv, lvIntimacy in enumerate(skillLVIntimacyList, 1):
-            if coupleIntimacy >= lvIntimacy:
-                skillLV = lv
-            else:
-                break
-            
-    GameWorld.DebugLog("刷新伴侣组队Buff: cupleID=%s,coupleIntimacy=%s,teamID=%s,teamPlayerIDList=%s,skillTypeID=%s,skillLV=%s" 
-                       % (cupleID, coupleIntimacy, teamID, teamPlayerIDList, skillTypeID, skillLV), playerID)
-    tick = GameWorld.GetGameWorld().GetTick()
-    if skillLV > 0:
-        findBuff = SkillCommon.FindBuffByID(curPlayer, skillTypeID)[0]
-        if findBuff:
-            if skillLV == findBuff.GetSkill().GetSkillLV():
-                return
-            BuffSkill.DelBuffBySkillID(curPlayer, skillTypeID, tick)
-        SkillCommon.AddBuffBySkillType(curPlayer, skillTypeID, tick, skillLV)
-    else:
-        if BuffSkill.DelBuffBySkillID(curPlayer, skillTypeID, tick):
-            #统一刷新状态
-            playerControl = PlayerControl.PlayerControl(curPlayer)
-            playerControl.RefreshPlayerAttrByBuff()
-            
-    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 f72b7e7..1f41466 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py
@@ -1015,8 +1015,6 @@
     #if curPlayerAction == IPY_GameWorld.paPreparing :
     #    ProcessPlayerPrepareState(curPlayer, tick)
     
-    #PlayerYinji.ProcessPlayerYinji(curPlayer, tick)
-    
     #刷新组队状态
     #ProcessTeamState(curPlayer, tick)
 
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerXiangong.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerXiangong.py
deleted file mode 100644
index 3c60073..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerXiangong.py
+++ /dev/null
@@ -1,171 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-##@package Player.PlayerXiangong
-#
-# @todo:仙宫
-# @author hxp
-# @date 2024-09-04
-# @version 1.0
-#
-# 详细描述: 仙宫
-#
-#-------------------------------------------------------------------------------
-#"""Version = 2024-09-04 16:30"""
-#-------------------------------------------------------------------------------
-
-import ChConfig
-import IpyGameDataPY
-import PlayerControl
-import ChPyNetSendPack
-import DataRecordPack
-import NetPackCommon
-import ItemControler
-import GameWorld
-
-def OnPlayerLogin(curPlayer):
-    SyncXiangongInfo(curPlayer)
-    SyncTiandaoTreeInfo(curPlayer, True)
-    return
-
-def PlayerOnDay(curPlayer):
-    
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_XiangongLikeState % 0, 0)
-    
-    xiangongIDList = []
-    ipyMgr = IpyGameDataPY.IPY_Data()
-    for index in range(ipyMgr.GetXiangongCount()):
-        ipyData = ipyMgr.GetXiangongByIndex(index)
-        xiangongID = ipyData.GetXiangongID()
-        if not curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_XiangongLikeState % xiangongID):
-            continue
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_XiangongLikeState % xiangongID, 0)
-        xiangongIDList.append(xiangongID)
-        
-    if xiangongIDList:
-        SyncXiangongInfo(curPlayer, xiangongIDList)
-        
-    return
-
-def AddTiandaoQiyun(curPlayer, addValue, addDict={}):
-    curQiyun = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TiandaoQiyun)
-    updQiyun = min(curQiyun + addValue, ChConfig.Def_UpperLimit_DWord)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TiandaoQiyun, updQiyun)
-    PlayerControl.NotifyCode(curPlayer, "AddQiyun", [addValue])
-    dataDict = {'PlayerID':curPlayer.GetPlayerID(), "PlayerName":curPlayer.GetPlayerName(), 
-                'AccID':curPlayer.GetAccID(), "updQiyun":updQiyun, "addValue":addValue}
-    dataDict.update(addDict)
-    DataRecordPack.SendEventPack("AddTiandaoQiyun", dataDict, curPlayer)
-    SyncTiandaoTreeInfo(curPlayer)
-    return updQiyun
-
-def GameServer_Xiangong_DoResult(curPlayer, msgData):
-    
-    msgType = msgData[0]
-    dataMsg = msgData[1]
-    
-    ## 点赞仙宫
-    if msgType == "LikeXiangong":
-        __DoLikeXiangong(curPlayer, dataMsg)
-        
-    return
-
-def __DoLikeXiangong(curPlayer, dataMsg):
-    
-    xiangongID, moneyType, moneyValue = dataMsg
-    
-    playerID = curPlayer.GetPlayerID()
-    likeState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_XiangongLikeState % xiangongID)
-    if likeState:
-        GameWorld.DebugLog("该仙宫已点赞! xiangongID=%s" % xiangongID, playerID)
-        return
-    GameWorld.DebugLog("仙宫点赞! xiangongID=%s,moneyType=%s,moneyValue=%s" % (xiangongID, moneyType, moneyValue), playerID)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_XiangongLikeState % xiangongID, 1)
-    SyncXiangongInfo(curPlayer, [xiangongID])
-    PlayerControl.GiveMoney(curPlayer, moneyType, moneyValue, "LikeXiangong", {"xiangongID":xiangongID})
-    ItemControler.NotifyGiveAwardInfo(curPlayer, [], "LikeXiangong", moneyInfo={moneyType:moneyValue})
-    return
-
-def GetTiandaoTreeAward(curPlayer, awardIndex):
-    ## 领取天道树奖励
-    
-    playerID = curPlayer.GetPlayerID()
-    ipyData = IpyGameDataPY.GetIpyGameData("TiandaoTree", awardIndex)
-    if not ipyData:
-        return
-    if GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_TiandaoAward, awardIndex):
-        GameWorld.DebugLog("该天道树奖励已领奖! awardIndex=%s" % awardIndex, playerID)
-        return
-    
-    needQiyun = ipyData.GetNeedQiyun()
-    awardItemList = ipyData.GetAwardItemList()
-    
-    qiyun = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TiandaoQiyun)
-    if qiyun < needQiyun:
-        GameWorld.DebugLog("当前天道树气运不足,无法领奖! awardIndex=%s,qiyun=%s < %s" % (awardIndex, qiyun, needQiyun), playerID)
-        return
-    
-    GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_PDict_TiandaoAward, awardIndex, 1)
-    
-    ItemControler.GivePlayerItemOrMail(curPlayer, awardItemList, event=["TiandaoTree", False, {}])
-    
-    SyncTiandaoTreeInfo(curPlayer)
-    return
-
-def SyncXiangongInfo(curPlayer, xiangongIDList=None):
-    syncXiangongIDList = []
-    if xiangongIDList == None:
-        ipyMgr = IpyGameDataPY.IPY_Data()
-        for index in range(ipyMgr.GetXiangongCount()):
-            ipyData = ipyMgr.GetXiangongByIndex(index)
-            syncXiangongIDList.append(ipyData.GetXiangongID())
-    else:
-        syncXiangongIDList = xiangongIDList
-        
-    xiangongList = []
-    for xiangongID in syncXiangongIDList:
-        if not xiangongID:
-            continue
-        likeState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_XiangongLikeState % xiangongID)
-        if not likeState and xiangongIDList == None:
-            continue
-        xg = ChPyNetSendPack.tagMCXiangong()
-        xg.XiangongID = xiangongID
-        xg.LikeStateToday = likeState
-        xiangongList.append(xg)
-        
-    likeStateToday = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_XiangongLikeState % 0)
-    if xiangongIDList == None and not xiangongList and not likeStateToday:
-        return
-    
-    clientPack = ChPyNetSendPack.tagMCXiangongInfo()
-    clientPack.LikeStateToday = likeStateToday
-    clientPack.XiangongList = xiangongList
-    clientPack.XiangongCount = len(clientPack.XiangongList)
-    NetPackCommon.SendFakePack(curPlayer, clientPack)
-    return
-
-def SyncTiandaoTreeInfo(curPlayer, isLogin=False):
-    ipyMgr = IpyGameDataPY.IPY_Data()
-    treeCount = ipyMgr.GetTiandaoTreeCount()
-    if not treeCount:
-        return
-    lastIpyData = ipyMgr.GetTiandaoTreeByIndex(treeCount - 1)
-    if not lastIpyData:
-        return
-    keyNumMax = lastIpyData.GetAwardIndex() / 31 + 1
-    awardStateList = []
-    for keyNum in range(keyNumMax):
-        awardStateList.append(curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TiandaoAward % keyNum))
-        
-    qiyun = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TiandaoQiyun)
-    if isLogin and not qiyun and awardStateList.count(0) == len(awardStateList):
-        return
-    
-    clientPack = ChPyNetSendPack.tagMCTiandaoTreeInfo()
-    clientPack.Qiyun = qiyun
-    clientPack.AwardStateList = awardStateList
-    clientPack.AwardCount = len(clientPack.AwardStateList)
-    NetPackCommon.SendFakePack(curPlayer, clientPack)
-    return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerYinji.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerYinji.py
deleted file mode 100644
index 85d9dbe..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerYinji.py
+++ /dev/null
@@ -1,87 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#
-##@package
-#
-# @todo: 印记为玩家选择战士木灵根后会获得的能量点,SP技能会附带加成或者消耗印记点
-#        
-# @author: Alee
-# @date 2019-4-26 下午03:05:54
-# @version 1.0
-#
-# @note: 用XP接口记录
-#
-#---------------------------------------------------------------------
-
-import IpyGameDataPY
-import PlayerControl
-import GameWorld
-import ChPyNetSendPack
-import NetPackCommon
-import ChConfig
-import ShareDefine
-
-Def_LastYinji_Tick = "lastyjtick"   # 上一次印记消失时间
-
-def AddYinji(curPlayer, cnt):
-    beforeCnt = PlayerControl.GetYinjiCnt(curPlayer)
-    #上限    X个
-    PlayerControl.SetYinjiCnt(curPlayer, min(beforeCnt + cnt, IpyGameDataPY.GetFuncCfg('Yinji', 2)))
-    
-    if beforeCnt == 0:
-        # 第一次加印记需重计时
-        StartYinjiTick(curPlayer)
-    
-    return
-
-def SubYinji(curPlayer, cnt):
-    PlayerControl.SetYinjiCnt(curPlayer, max(PlayerControl.GetYinjiCnt(curPlayer) - cnt, 0))
-    return
-
-
-
-# 每X秒自动减少1个印记
-def ProcessPlayerYinji(curPlayer, tick):
-    if PlayerControl.GetYinjiCnt(curPlayer) == 0:
-        return
-    
-    if tick - curPlayer.GetDictByKey(Def_LastYinji_Tick) < PlayerControl.GetLostYinjiTime(curPlayer):
-        return
-    
-    StartYinjiTick(curPlayer)
-    
-    
-    SubYinji(curPlayer, 1)
-    
-    
-def StartYinjiTick(curPlayer):
-    curPlayer.SetDict(Def_LastYinji_Tick, GameWorld.GetGameWorld().GetTick())
-    pack = ChPyNetSendPack.tagMCYinjiStartTime()
-
-    NetPackCommon.SendFakePack(curPlayer, pack)
-    
-    
-def OnLoadMap(curPlayer):
-    PlayerControl.SetYinjiCnt(curPlayer, 0)
-    return
-    
-#===============================================================================
-# // B4 0D 战斗印记 #tagCMYinji
-# 
-# struct    tagCMYinji
-# {
-#    tagHead        Head;
-#    BYTE        Count;
-#    BYTE        Type;    // 0 加,1减
-# };
-#===============================================================================
-def OnYinji(index, clientData, tick):
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    if curPlayer.GetSightLevel() == 0:
-        return
-    if clientData.Type == 0:
-        AddYinji(curPlayer, clientData.Count)
-    elif clientData.Type == 1:
-        SubYinji(curPlayer, clientData.Count)
-    return
-
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
index 7b4759e..ddc2529 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
@@ -662,7 +662,7 @@
 #                 }
 
 #需要记录累计消耗的货币类型
-UseTotalPriceTypeList = [TYPE_Price_TiandaoFruit]
+UseTotalPriceTypeList = []
 
 # 自定义积分及通知字典 {货币类型:通知客户端刷新类型, ...} , 如果不通知的话刷新类型则配置 None
 TYPE_Price_CurrencyDict = {
@@ -687,14 +687,12 @@
                            #TYPE_Price_SoulCore:CDBPlayerRefresh_SoulCore,
                            #TYPE_Price_Honor:CDBPlayerRefresh_Honor,
                            #TYPE_Price_BossActScore:CDBPlayerRefresh_BossActScore,
-                           #TYPE_Price_FuncSysPrivilege:CDBPlayerRefresh_FuncSysPrivilege,
                            #TYPE_Price_Environment:CDBPlayerRefresh_Environment,
                            #TYPE_Price_BTGMPoint:CDBPlayerRefresh_BTGMPoint,
                            #TYPE_Price_GuShenMoney:CDBPlayerRefresh_GuShenMoney,
                            #TYPE_Price_GongdePoint:CDBPlayerRefresh_GongdePoint,
                            #TYPE_Price_FamilyFlagWarPoint:CDBPlayerRefresh_FamilyFlagWarPoint,
                            #TYPE_Price_GatherSoul:CDBPlayerRefresh_GatherSoul,
-                           #TYPE_Price_TiandaoFruit:CDBPlayerRefresh_TiandaoFruit,
                            #TYPE_Price_XianyuanScore:CDBPlayerRefresh_XianyuanScore,
                            #TYPE_Price_HuanjinggeScore:CDBPlayerRefresh_HuanjinggeScore,
                            }
@@ -1068,7 +1066,6 @@
 CrossServerMsg_CrossAssist = "CrossAssist"              # 跨服协助
 CrossServerMsg_FamilyFlagwarOver = "FamilyFlagwarOver"  # 逐鹿万界结算信息
 CrossServerMsg_Worship = "Worship"  # 膜拜信息
-CrossServerMsg_Xiangong = "Xiangong"  # 仙宫信息
 CrossServerMsg_FuncTeamInfo = "FuncTeamInfo"  # 功能队伍信息同步
 CrossServerMsg_FuncTeamDel = "FuncTeamDel"  # 功能队伍删除同步
 CrossServerMsg_FuncTeamList = "FuncTeamList"  # 功能队伍列表同步
@@ -1106,7 +1103,6 @@
 ClientServerMsg_ChangeFuncTeam = "ChangeFuncTeam"   # 修改功能队伍
 ClientServerMsg_FuncTeamMemOP = "FuncTeamMemOP"   # 功能队伍成员操作
 ClientServerMsg_QueryFuncTeam = "QueryFuncTeam"   # 查询功能队伍
-ClientServerMsg_QueryXiangong = "QueryXiangong" # 查看仙宫仙名录
 ClientServerMsg_LianqiScore = "LianqiScore" # 炼器积分
 ClientServerMsg_SyncFamilyInfo = "SyncFamilyInfo" # 仙盟信息同步
 ClientServerMsg_QueryCrossFamily = "QueryCrossFamily" # 查询跨服仙盟
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 ffdb313..3f602b2 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/BuffSkill.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/BuffSkill.py
@@ -110,9 +110,9 @@
     buffTime = curSkill.GetLastTime() 
     if not attacker:
         return buffTime 
-    if curSkill.GetEffect(0).GetEffectID() == ChConfig.Def_Skill_Effect_Burn:
-        # 灼烧的时间特殊处理
-        buffTime = buffTime*(ChConfig.Def_MaxRateValue + PlayerControl.GetBurnTimePer(attacker))/ChConfig.Def_MaxRateValue
+    #if curSkill.GetEffect(0).GetEffectID() == ChConfig.Def_Skill_Effect_Burn:
+    #    # 灼烧的时间特殊处理
+    #    buffTime = buffTime*(ChConfig.Def_MaxRateValue + PlayerControl.GetBurnTimePer(attacker))/ChConfig.Def_MaxRateValue
     
     buffTime += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(attacker, None, curSkill, ChConfig.TriggerType_BuffTime)
     return buffTime
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/BuffProcess_1027.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/BuffProcess_1027.py
index d0c355c..9d17086 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/BuffProcess_1027.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/BuffProcess_1027.py
@@ -38,7 +38,7 @@
     recoverHP = curBuff.GetValue() # 固定值
     
     # 血瓶恢复效果加成
-    recoverHP += PlayerControl.GetHPCureEnhance(defender)
+    #recoverHP += PlayerControl.GetHPCureEnhance(defender)
     SkillCommon.SkillAddHP(defender, curBuff.GetBuffID(), recoverHP)
     return
 
@@ -62,7 +62,7 @@
         return
     
     recoverHP = curBuff.GetValue()
-    recoverHP += PlayerControl.GetHPCureEnhance(defender)
+    #recoverHP += PlayerControl.GetHPCureEnhance(defender)
     SkillCommon.SkillAddHP(defender, curSkill.GetSkillID(), recoverHP*count)
     return
 
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/BuffProcess_1034.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/BuffProcess_1034.py
index a342279..be5d78b 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/BuffProcess_1034.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/BuffProcess_1034.py
@@ -66,7 +66,7 @@
     skillPer += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(attacker, defender, curSkill, ChConfig.TriggerType_BurnPer)
     skillPer += PassiveBuffEffMng.GetValueByPassiveBuffTriggerType(attacker, defender, curSkill, ChConfig.TriggerType_BurnPer)
     
-    skillEnhance = curEffect.GetEffectValue(1) + PlayerControl.GetBurnValue(attacker)
+    skillEnhance = curEffect.GetEffectValue(1)
     skillPer = skillPer*1.0/ChConfig.Def_MaxRateValue
     # 灼烧特殊公式
     hurtValue, hurtType = AttackCommon.CalcHurtHP(attacker, defender, curSkill, 
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/BuffProcess_1090.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/BuffProcess_1090.py
deleted file mode 100644
index 9c71126..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/BuffProcess_1090.py
+++ /dev/null
@@ -1,60 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#
-##@package
-#
-# @todo: 两个人之间有一条特效连接,配合9999用于判断距离
-#
-# @author: Alee
-# @date 2019-5-6 下午04:30:33
-# @version 1.0
-#
-# @note: 
-#
-#---------------------------------------------------------------------
-#导入
-import SkillCommon
-import GameWorld
-import ChConfig
-import PlayerControl
-
-def ProcessBuff(defender, curBuff, curEffect, processBuffTick, tick):
-    buffOwner = SkillCommon.GetBuffOwner(curBuff)
-    
-    if not buffOwner:
-        curBuff.SetRemainTime(0)
-        return
-    
-    if GameWorld.GetDistEx(defender.GetPosX(), defender.GetPosY(), buffOwner.GetPosX(), buffOwner.GetPosY()) > curEffect.GetEffectValue(0):
-        curBuff.SetRemainTime(0)
-        return    
-    return
-
-
-def OnCalcBuffEx(defender, curEffect, calcDict, curBuff):
-    
-    attrType = curEffect.GetEffectValue(1)
-    value = curEffect.GetEffectValue(2) + curBuff.GetValue2()
-    calcDict[attrType] = calcDict.get(attrType, 0) - value
-        
-    return 
-
-## 返回buff类型,线性与否
-#  @param 
-#  @return None
-#  @remarks 函数详细说明.  
-def GetCalcType():
-    return ChConfig.TYPE_NoLinear
-
-## 添加BUFF后的逻辑
-#  @param None
-#  @return None
-def DoAddBuffOver(curObj, addBuff, curEffect, tick, buffOwner):
-    if not buffOwner:
-        return
-    if curEffect.GetEffectValue(1) != ChConfig.TYPE_Calc_AttrSpeed:
-        return
-    
-    addBuff.SetValue2(PlayerControl.GetSubSpeedPer(buffOwner))
-    return
-
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_550.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_550.py
deleted file mode 100644
index d1ac624..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_550.py
+++ /dev/null
@@ -1,41 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#
-# @todo: 全体出战神兽(包括装备)XX属性值+xx%
-#
-# @author: Alee
-# @date 2018-1-20 下午02:50:26
-# @version 1.0
-#
-# @note: 
-#
-#---------------------------------------------------------------------
-#导入
-import ChConfig
-import PlayerControl
-#---------------------------------------------------------------------
-
-## buff线性增加属性
-#  @param defender Buff承受者
-#  @param curEffect 技能效果
-#  @param calcDict 技能效果累加总表
-#  @return None
-def OnCalcBuffEx(defender, curEffect, calcDict, curBuff):
-    attrType = curEffect.GetEffectValue(1)
-    attrList = PlayerControl.GetCalcAttrListValue(defender, [ChConfig.Def_CalcAttrFunc_Dogz, ChConfig.Def_CalcAttrFunc_DogzEquip, ChConfig.Def_CalcAttrFunc_DogzEquipPlus])[0]
-    value = int(attrList[2].get(attrType, 0)*curEffect.GetEffectValue(0)*1.0/ChConfig.Def_MaxRateValue)
-
-    calcDict[attrType] = calcDict.get(attrType, 0) + value
-    
-    return
-
-
-## 返回buff类型,线性与否
-#  @param 
-#  @return None
-#  @remarks 函数详细说明.  
-def GetCalcType():
-    return ChConfig.TYPE_Linear
-
-
-
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_551.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_551.py
deleted file mode 100644
index 79c717c..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_551.py
+++ /dev/null
@@ -1,102 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#
-# @todo: 当前神兽(包括装备)属性项(如生命)+xx%,可多配
-#
-# @author: Alee
-# @date 2018-1-20 下午02:50:26
-# @version 1.0
-#
-# @note: 
-#
-#---------------------------------------------------------------------
-#导入
-import ChConfig
-import PlayerControl
-import ShareDefine
-import IpyGameDataPY
-import PlayerDogz
-import ChEquip
-#---------------------------------------------------------------------
-
-## buff线性增加属性
-#  @param defender Buff承受者
-#  @param curEffect 技能效果
-#  @param calcDict 技能效果累加总表
-#  @return None
-def OnCalcBuffEx(defender, curEffect, calcDict, curBuff):
-    attrType = curEffect.GetEffectValue(1)
-    attrList = GetTheDogzAttr(defender, curEffect.GetEffectValue(2))
-    value = int(attrList[2].get(attrType, 0)*curEffect.GetEffectValue(0)*1.0/ChConfig.Def_MaxRateValue)
-    
-    calcDict[attrType] = calcDict.get(attrType, 0) + value
-    
-    return
-
-
-## 返回buff类型,线性与否
-#  @param 
-#  @return None
-#  @remarks 函数详细说明.  
-def GetCalcType():
-    return ChConfig.TYPE_Linear
-
-# 指定神兽属性
-def GetTheDogzAttr(curPlayer, dogzID):
-    allAttrList = [{} for _ in range(4)]
-    
-    dogzEquipPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptDogzEquip)
-    equipPackCount = dogzEquipPack.GetCount()
-    ipyData = IpyGameDataPY.GetIpyGameData("Dogz", dogzID)
-    if not ipyData:
-        return allAttrList
-    
-    # 1. 基础属性
-    attrTypeList = ipyData.GetBaseAttrTypes()
-    attrValueList = ipyData.GetBaseAttrValues()
-    if attrTypeList and len(attrTypeList) == len(attrValueList):
-        for attrIndex, baseAttrID in enumerate(attrTypeList):
-            baseAttrValue = attrValueList[attrIndex]
-            PlayerControl.CalcAttrDict_Type(baseAttrID, baseAttrValue, allAttrList)
-            #GameWorld.DebugLog("    基础属性: baseAttrID=%s,baseAttrValue=%s, %s" % (baseAttrID, baseAttrValue, allAttrList))
-            
-    # 2. 装备属性
-    startIndex = (dogzID - 1) * PlayerDogz.DogzEquipCount
-    for equipIndex in range(startIndex, startIndex + PlayerDogz.DogzEquipCount):
-        if equipIndex < 0 or equipIndex >= equipPackCount:
-            break
-        curEquip = dogzEquipPack.GetAt(equipIndex)            
-        if curEquip.IsEmpty():
-            continue
-        
-        #itemID = curEquip.GetItemTypeID()
-        # 装备基础属性
-        for effIndex in xrange(curEquip.GetEffectCount()):
-            curEffect = curEquip.GetEffectByIndex(effIndex)
-            if not curEffect or not curEffect.GetEffectID():
-                break
-            effID = curEffect.GetEffectID()
-            if not effID or effID == ChConfig.Def_Effect_DogzEquipPlusExp:
-                continue
-            effValue = curEffect.GetEffectValue(0)
-            PlayerControl.CalcAttrDict_Type(effID, effValue, allAttrList)
-            #GameWorld.DebugLog("    装备基础: itemID=%s,effID=%s,effValue=%s, %s" % (itemID, effID, effValue, allAttrList))
-            
-        # 强化属性
-        curPlusLV = curEquip.GetUserAttrByIndex(ShareDefine.Def_IudetDogzEquipPlus, 0)
-        plusIpyData = IpyGameDataPY.GetIpyGameData("DogzEquipPlus", curEquip.GetEquipPlace(), curPlusLV)
-        if plusIpyData:
-            plusAttrTypeList = plusIpyData.GetPlusAttrTypes()
-            plusAttrValueList = plusIpyData.GetPlusAttrValues()
-            if plusAttrTypeList and len(plusAttrTypeList) == len(plusAttrValueList):
-                for plusIndex, plusAttrID in enumerate(plusAttrTypeList):
-                    plusAttrValue = plusAttrValueList[plusIndex]
-                    PlayerControl.CalcAttrDict_Type(plusAttrID, plusAttrValue, allAttrList)
-                    #GameWorld.DebugLog("    装备强化: itemID=%s,plusAttrID=%s, plusAttrValue=%s, %s" % (itemID, plusAttrID, plusAttrValue, allAttrList))
-                    
-        # 传奇属性
-        ChEquip.CalcAttr_LegendAttr(curPlayer, curEquip, allAttrList)
-
-    return allAttrList
-
-
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_900.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_900.py
deleted file mode 100644
index e908781..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_900.py
+++ /dev/null
@@ -1,54 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#
-##@package
-#
-# @todo: 根据印记增加属性值-线性
-#
-# @author: Alee
-# @date 2019-4-26 下午07:29:19
-# @version 1.0
-#
-# @note: 
-#
-#---------------------------------------------------------------------
-#导入
-import PlayerControl
-import ChConfig
-import GameWorld
-#---------------------------------------------------------------------
-
-## buff线性增加属性
-#  @param defender Buff承受者
-#  @param curEffect 技能效果
-#  @param calcDict 技能效果累加总表
-#  @return None
-def OnCalcBuffEx(defender, curEffect, calcDict, curBuff):
-    attrType = curEffect.GetEffectValue(0)
-
-    cnt = curBuff.GetValue()
-    if curEffect.GetEffectValue(2):
-        cnt = min(curBuff.GetValue(), curEffect.GetEffectValue(2))
-    
-    calcDict[attrType] = calcDict.get(attrType, 0) + curEffect.GetEffectValue(1)*cnt
-    return
-
-
-## 返回buff类型,线性与否
-#  @param 
-#  @return None
-#  @remarks 函数详细说明.  
-def GetCalcType():
-    return ChConfig.TYPE_Linear
-
-
-##计算增强值
-# @param attacker 攻击者实例
-# @param curSkill 技能实例
-# @param curEffect 当前技能效果1
-# @return 总值
-def CalcBuffValue(attacker, defender, curSkill, changeBuffValueDict):
-    return [PlayerControl.GetYinjiCnt(attacker)]
-
-
-
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_903.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_903.py
deleted file mode 100644
index 6ded1ef..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_903.py
+++ /dev/null
@@ -1,55 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#
-##@package
-#
-# @todo: 减速专用,受属性影响如符文
-#
-# @author: Alee
-# @date 2019-5-8 下午02:55:40
-# @version 1.0
-#
-# @note: 
-#
-
-#------------------------------------------------------------------------------ 
-#导入
-import ChConfig
-import PlayerControl
-import IPY_GameWorld
-#---------------------------------------------------------------------
-
-## buff非线性减少属性
-#  @param defender Buff承受者
-#  @param curEffect 技能效果
-#  @param calcDict 技能效果累加总表
-#  @return None
-def OnCalcBuffEx(defender, curEffect, calcDict, curBuff):
-    
-    effect = curEffect.GetEffectValue(0)
-    if curBuff and curBuff.GetLayer():
-        # 层级叠加效果
-        effect = effect*curBuff.GetLayer()
-
-    effect += curBuff.GetValue()
-    calcDict[ChConfig.TYPE_Calc_AttrSpeed] = calcDict.get(ChConfig.TYPE_Calc_AttrSpeed, 0) - effect
-        
-    return 
-
-
-## 返回buff类型,线性与否
-#  @param 
-#  @return None
-#  @remarks 函数详细说明.  
-def GetCalcType():
-    return ChConfig.TYPE_NoLinear
-
-
-##计算增强值
-# @param attacker 攻击者实例
-# @param curSkill 技能实例
-# @param curEffect 当前技能效果1
-# @return 总值
-def CalcBuffValue(attacker, defender, curSkill, changeBuffValueDict):
-    
-    return [PlayerControl.GetSubSpeedPer(attacker)]
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 d5de7ba..c87ffcd 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
@@ -98,9 +98,9 @@
     coolDownTime = curSkill.GetCoolDownTime()
     remainTime = coolDownTime
     
-    skillTypeID = curSkill.GetSkillTypeID()
-    if atkObj and skillTypeID in IpyGameDataPY.GetFuncEvalCfg("SkillCD", 1):
-        reduceSkillCDPer += PlayerControl.GetTheFBSkillsCD(atkObj)
+    #skillTypeID = curSkill.GetSkillTypeID()
+    #if atkObj and skillTypeID in IpyGameDataPY.GetFuncEvalCfg("SkillCD", 1):
+    #    reduceSkillCDPer += PlayerControl.GetTheFBSkillsCD(atkObj)
         
     if isPassiveSkill(curSkill):
         if curSkill.GetFuncType() == ChConfig.Def_SkillFuncType_GiftSkill:
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4071.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4071.py
deleted file mode 100644
index e3f9e89..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4071.py
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#
-# @todo: 攻击将造成伤害的XX%转化为自身生命
-#
-# @author: Alee
-# @date 2018-1-9 下午09:39:37
-# @version 1.0
-#
-# @note: 
-#
-#---------------------------------------------------------------------
-import GameObj
-import ChConfig
-import PlayerControl
-
-def CheckCanHappen(attacker, defender, effect, curSkill):   
-    if effect.GetEffectValue(1) and not PlayerControl.GetYinjiCnt(attacker):
-        return False
-    return True
-    
-
-def GetValue(attacker, defender, effect):
-    return effect.GetEffectValue(0)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4085.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4085.py
deleted file mode 100644
index 9737451..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4085.py
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#
-##@package
-#
-# @todo: 使用技能后印记数量
-#
-# @author: Alee
-# @date 2019-4-26 下午05:52:27
-# @version 1.0
-#
-# @note: 
-#
-#---------------------------------------------------------------------
-
-import PlayerYinji
-
-
-def CheckCanHappen(attacker, defender, effect, curSkill):
-
-    PlayerYinji.AddYinji(attacker, effect.GetEffectValue(0))
-    return False
\ No newline at end of file
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4086.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4086.py
deleted file mode 100644
index 05f505a..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4086.py
+++ /dev/null
@@ -1,32 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#
-##@package
-#
-# @todo: 根据印记来增加攻击(技能)伤害
-#
-# @author: Alee
-# @date 2019-4-26 下午05:58:01
-# @version 1.0
-#
-# @note: 
-#
-#---------------------------------------------------------------------
-
-import ChConfig
-import AttackCommon
-import PlayerControl
-
-
-def CheckCanHappen(attacker, defender, effect, curSkill):
-    if effect.GetEffectValue(2):
-        # 只针对第一目标
-        if AttackCommon.GetFirstDefenderID(attacker) != defender.GetID():
-            return False
-    
-    
-    return True if PlayerControl.GetYinjiCnt(attacker) else False
-    
-
-def GetValue(attacker, defender, effect):
-    return effect.GetEffectValue(0)*min(PlayerControl.GetYinjiCnt(attacker), effect.GetEffectValue(1))
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4087.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4087.py
deleted file mode 100644
index 7a35778..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4087.py
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#
-##@package
-#
-# @todo: 印记达到X以上才增加技能伤害
-#
-# @author: Alee
-# @date 2019-4-26 下午07:46:07
-# @version 1.0
-#
-# @note: 
-#
-#---------------------------------------------------------------------
-import ChConfig
-import PlayerControl
-
-
-def CheckCanHappen(attacker, defender, effect, curSkill):
-    
-    return True if PlayerControl.GetYinjiCnt(attacker) >= effect.GetEffectValue(1) else False
-    
-
-def GetValue(attacker, defender, effect):
-    return effect.GetEffectValue(0)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4088.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4088.py
deleted file mode 100644
index 516c6f6..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4088.py
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#
-##@package
-#
-# @todo: 消耗固定印记数量增加技能伤害
-#
-# @author: Alee
-# @date 2019-4-26 下午07:46:07
-# @version 1.0
-#
-# @note: 
-#
-#---------------------------------------------------------------------
-import ChConfig
-import PlayerControl
-
-
-def CheckCanHappen(attacker, defender, effect, curSkill):
-    if PlayerControl.GetYinjiCnt(attacker) < effect.GetEffectValue(1):
-        return False
-    
-    # 4092 处理消耗
-    #PlayerYinji.SubYinji(attacker, effect.GetEffectValue(1))
-    return True
-    
-
-def GetValue(attacker, defender, effect):
-    return effect.GetEffectValue(0)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4089.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4089.py
deleted file mode 100644
index 1bebdfb..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4089.py
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#
-##@package
-#
-# @todo: 消耗XX个印记数量增加技能伤害,并根据印记数加成
-#
-# @author: Alee
-# @date 2019-4-26 下午07:46:07
-# @version 1.0
-#
-# @note: 
-#
-#---------------------------------------------------------------------
-import ChConfig
-import PlayerControl
-
-
-def CheckCanHappen(attacker, defender, effect, curSkill):
-    if not PlayerControl.GetYinjiCnt(attacker):
-        return False
-    
-    # 4092 处理消耗
-    #PlayerYinji.SubYinji(attacker, min(PlayerControl.GetYinjiCnt(attacker), effect.GetEffectValue(1)))
-    return True
-    
-
-def GetValue(attacker, defender, effect):
-    return effect.GetEffectValue(0)*min(PlayerControl.GetYinjiCnt(attacker), effect.GetEffectValue(1))
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4090.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4090.py
deleted file mode 100644
index 9fd6d8b..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4090.py
+++ /dev/null
@@ -1,23 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#
-##@package
-#
-# @todo: 攻击后根据指定印记倍数触发技能
-#
-# @author: Alee
-# @date 2019-4-26 下午08:03:44
-# @version 1.0
-#
-# @note: 
-#
-#---------------------------------------------------------------------
-import PlayerControl
-
-
-def CheckCanHappen(attacker, defender, effect, curSkill):
-    cnt = PlayerControl.GetYinjiCnt(attacker)
-    if cnt == 0:
-        return False
-        
-    return True if cnt%effect.GetEffectValue(0) == 0 else False
\ No newline at end of file
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4091.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4091.py
deleted file mode 100644
index 896627e..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4091.py
+++ /dev/null
@@ -1,28 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#
-##@package
-#
-# @todo: 使用非攻击类技能后增加印记数, 可增加增益buff数的印记数
-#
-# @author: Alee
-# @date 2019-4-26 下午08:20:09
-# @version 1.0
-#
-# @note: 
-#
-#---------------------------------------------------------------------
-
-import PlayerYinji
-
-def CheckCanHappen(attacker, defender, effect, curSkill):
-    addCnt = effect.GetEffectValue(0)
-    if effect.GetEffectValue(1):
-        addCnt = min(attacker.GetBuffState().GetBuffCount(), effect.GetEffectValue(0))
-        
-    if not addCnt:
-        return False
-    
-    PlayerYinji.AddYinji(attacker, addCnt)
-        
-    return False
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4092.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4092.py
deleted file mode 100644
index 128b406..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4092.py
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#
-##@package
-#
-# @todo: 使用技能后减少印记数量  消耗模式0:固定个数,1.大于1可释放,消耗个数大于1小于等于限制个数
-#
-# @author: Alee
-# @date 2019-4-26 下午05:52:27
-# @version 1.0
-#
-# @note: 
-#
-#---------------------------------------------------------------------
-
-import PlayerYinji
-import PlayerControl
-
-def CheckCanHappen(attacker, defender, effect, curSkill):
-    delType = effect.GetEffectValue(1)
-    
-    if delType == 0:
-        if PlayerControl.GetYinjiCnt(attacker) < effect.GetEffectValue(0):
-            return False
-        
-        PlayerYinji.SubYinji(attacker, effect.GetEffectValue(0))
-    elif delType == 1:
-        PlayerYinji.SubYinji(attacker, min(PlayerControl.GetYinjiCnt(attacker), effect.GetEffectValue(0)))
-    return False
\ No newline at end of file
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4102.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4102.py
deleted file mode 100644
index 08035ea..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4102.py
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#
-##@package
-#
-# @todo: 消耗固定印记数量增加技能伤害固定值
-#
-# @author: Alee
-# @date 2019-4-26 下午07:46:07
-# @version 1.0
-#
-# @note: 
-#
-#---------------------------------------------------------------------
-import ChConfig
-import PlayerControl
-
-
-def CheckCanHappen(attacker, defender, effect, curSkill):
-    if PlayerControl.GetYinjiCnt(attacker) < effect.GetEffectValue(1):
-        return False
-    
-    # 4092 处理消耗
-    #PlayerYinji.SubYinji(attacker, effect.GetEffectValue(1))
-    return True
-    
-
-def GetValue(attacker, defender, effect):
-    return effect.GetEffectValue(0)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4108.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4108.py
deleted file mode 100644
index 77c02ff..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4108.py
+++ /dev/null
@@ -1,26 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#
-##@package
-#
-# @todo: 消耗印记释放技能
-#
-# @author: Alee
-# @date 2019-6-3 上午11:27:01
-# @version 1.0
-#
-# @note: 
-#
-#---------------------------------------------------------------------
-import ChConfig
-import GameWorld
-import GameObj
-import PlayerControl
-
-
-def CheckCanHappen(attacker, defender, effect, curSkill):
-    if PlayerControl.GetYinjiCnt(attacker) < effect.GetEffectValue(0):
-        return False
-    
-    # 4092 处理消耗
-    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 18ed910..40aecf6 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuffEffMng.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuffEffMng.py
@@ -156,9 +156,6 @@
     GetPassiveEffManager().RegistPassiveEffSet(curPlayer)
     
     GetPassiveEffManager().RegistPassiveBuff(curPlayer)
-
-    # 助战神兽技能
-    GetPassiveEffManager().RegistPassiveEffDogz(curPlayer)
     
     GetPassiveEffManager().RegistSuperEquipSkillDict(curPlayer)
 
@@ -269,10 +266,6 @@
              4083:ChConfig.TriggerType_AddThumpHitPer, # 增加重击伤害百分比
              4084:ChConfig.TriggerType_ThumpHit, # 对第一目标重击触发技能
              4085:ChConfig.TriggerType_SkillSuccess,  # 任何技能释放成功都可触发 76    加印记
-             4086:ChConfig.TriggerType_AttackAddSkillPerYinji,  # 所有攻击伤害(SkillPer)增加,含普攻,计算时 为了飘字使用
-             4087:ChConfig.TriggerType_AttackAddSkillPerYinji,  # 所有攻击伤害(SkillPer)增加,含普攻,计算时 为了飘字使用
-             4088:ChConfig.TriggerType_AttackAddSkillPerYinji,  # 所有攻击伤害(SkillPer)增加,含普攻,计算时 为了飘字使用
-             4089:ChConfig.TriggerType_AttackAddSkillPerYinji,  # 所有攻击伤害(SkillPer)增加,含普攻,计算时 为了飘字使用
              4090:ChConfig.TriggerType_AttackOver,  # 攻击(对敌技能)后被动技能被触发 4
              4091:ChConfig.TriggerType_SkillOverNoAttack,   # 技能释放后 与TriggerType_AttackOver相反19,
              4092:ChConfig.TriggerType_SkillSuccessExpend,  # 任何技能释放成功都可触发 76  减印记
@@ -429,38 +422,6 @@
     # 获得被动触发的 buff
     def GetBuffsByTriggerType(self, triggerType, useSkillID=0):
         return self.AffectBuffDict.get((triggerType, 0), {})
-     
-    
-    # 重刷神兽助战技能
-    def RefreshDogzBattleSkill(self):
-        self.AffectDogzSkillDict = {}
-        skills = FindDogzBattleSkills(self.gameObj)
-        
-        for curSkill in skills:
-            if not SkillCommon.isPassiveTriggerSkill(curSkill):
-                continue
-            
-            skillTypeID = curSkill.GetSkillTypeID()
-            
-            connSkillID = SkillShell.GetConnectSkillID(curSkill)    # 关联技能ID, 0代表不限技能
-            for i in xrange(curSkill.GetEffectCount()):
-                curEffect = curSkill.GetEffect(i)
-                effectID = curEffect.GetEffectID()
-                if effectID == 0:
-                    continue
-                
-                triggerType = GetTriggerTypeByEffectID(effectID)
-                if triggerType == -1:
-                    continue
-                
-                key = (triggerType,connSkillID)
-                if key not in self.AffectDogzSkillDict:
-                    self.AffectDogzSkillDict[key] = []
-                    
-                self.AffectDogzSkillDict[key].append((skillTypeID, effectID))
-        
-        return self.AffectDogzSkillDict
-    
     
     # 重刷特殊装备技能
     def RefreshSuperEquipSkillDict(self):
@@ -756,23 +717,7 @@
         else:
             passiveEff.RefreshPassiveSkillSet(isCD)
         return
-        
-        
-    # 人物需同步注册神兽技能
-    def RegistPassiveEffDogz(self, gameObj):
-        passiveEff = self.GetPassiveEff(gameObj)
-        if not passiveEff:
-            # 强制刷新所有被动技能
-            passiveEff = PassiveEff(gameObj)
-            if not passiveEff.RefreshDogzBattleSkill():
-                return
-            self.AddPassiveEff(gameObj, passiveEff)
-        else:
-            passiveEff.RefreshDogzBattleSkill()
-        return
-        
-        
-        
+    
     # 人物需同步注册装备技能,技能目前为可触发的被动类,若有定义冲突则可用功能类型划分
     def RegistSuperEquipSkillDict(self, gameObj):
         passiveEff = self.GetPassiveEff(gameObj)
@@ -1486,71 +1431,6 @@
             curValue += callFunc(attacker, defender, passiveEffect)
             
     return curValue
-
-
-# 因为要兼容低等级技能,所以技能只能是在助战的时候,先删除神兽技能再学习新的助战神兽技能
-def PlayerDogzSkill(curPlayer):
-
-    dogzSkills = [] # 需要学习的技能
-    ipyDataMgr = IpyGameDataPY.IPY_Data()
-    for i in xrange(ipyDataMgr.GetDogzCount()):
-        ipyData = ipyDataMgr.GetDogzByIndex(i)
-        if not GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_DogzFightState, i):
-            continue
-        
-        dogzSkills.extend(ipyData.GetHelpBattleSkills())
-    
-    delDogzSkills = [] # 删除不在助战神兽队列的技能
-    skillManager = curPlayer.GetSkillManager()
-    for i in xrange(skillManager.GetSkillCount()):
-        curSkill = skillManager.GetSkillByIndex(i)
-        if curSkill.GetFuncType() != ChConfig.Def_SkillFuncType_Dogz:
-            continue
-        skillID = curSkill.GetSkillID()
-        
-        delDogzSkills.append(skillID)
-        
-    GameWorld.DebugLog("PlayerDogzSkill:%s - 删除%s"%(dogzSkills, delDogzSkills))
-    
-    # 删除神兽技能
-    for skillID in delDogzSkills:
-        skillManager.DeleteSkillBySkillID(skillID, False)
-    
-    # 添加助战技能,同类技能取最高
-    dogzSkills.sort()
-    for skillID in dogzSkills:
-        skillData = GameWorld.GetGameData().GetSkillBySkillID(skillID)
-        if not skillData:
-            continue
-        if skillData.GetSkillType() == ChConfig.Def_SkillType_AttrSkillNoLearn:
-            # 同技能可多个叠加的技能不能学,算属性时直接取表
-            continue
-        
-        skillManager.LearnSkillByID(skillID, False)
-    
-    # 刷被动效果
-    GetPassiveEffManager().RegistPassiveEffDogz(curPlayer)
-    return
-
-
-# 获取助战神兽的技能列表
-def FindDogzBattleSkills(gameObj):
-    skills = []
-    if gameObj.GetGameObjType() != IPY_GameWorld.gotPlayer:
-        return skills
-    
-    skillManager = gameObj.GetSkillManager()
-    for i in xrange(skillManager.GetSkillCount()):
-        curSkill = skillManager.GetSkillByIndex(i)
-        if not curSkill:
-            continue
-        
-        if curSkill.GetFuncType() != ChConfig.Def_SkillFuncType_Dogz:
-            continue
-        skills.append(curSkill)
-        
-    return skills
-
 
 # 遍历身上装备技能以及各自个数,装备技能不需要学习
 # 保证不同的装备技能不会有相同的效果, 效果数值的衰减是根据相同技能个数计算而不是效果个数 1-pow((1-初始值),相同技能个数)

--
Gitblit v1.8.0