From 29cbac9154e89a55da4074abcd2732a1859dcdab Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期二, 04 六月 2019 19:17:52 +0800
Subject: [PATCH] 6603 【后端】【2.0】增加新版的sp和被动技能

---
 ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py | 1442 +++++++++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 1,133 insertions(+), 309 deletions(-)

diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
index 8f93338..2c62392 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
@@ -829,7 +829,7 @@
     Head = tagHead()
     Type = 0    #(BYTE Type)//类型
     Count = 0    #(WORD Count)//数量
-    UniversalGameRec = list()    #(vector<tagUniversalGameRec> UniversalGameRec)///size = Count    
+    UniversalGameRec = list()    #(vector<tagUniversalGameRec> UniversalGameRec)///size = Count
     data = None
 
     def __init__(self):
@@ -1133,7 +1133,7 @@
     FamilyID = 0    #(DWORD FamilyID)//家族ID
     ActionType = 0    #(BYTE ActionType)//类型
     Count = 0    #(WORD Count)//数量
-    FamilyActionList = list()    #(vector<tagGCFamilyAction> FamilyActionList)//size = Count    
+    FamilyActionList = list()    #(vector<tagGCFamilyAction> FamilyActionList)//size = Count
     data = None
 
     def __init__(self):
@@ -2981,8 +2981,8 @@
     IsAlive = 0    #(BYTE IsAlive)// 是否存活
     RecordLen = 0    #(WORD RecordLen)// 长度
     KillRecord = ""    #(String KillRecord)// 最近击杀记录时间玩家名size = RecordLen
-    RefreshSecond = 0    #(DWORD RefreshSecond)// 刷新倒计时, 秒    
-    RefreshCD = 0    #(DWORD RefreshCD)// 刷新总CD时, 秒    
+    RefreshSecond = 0    #(DWORD RefreshSecond)// 刷新倒计时, 秒
+    RefreshCD = 0    #(DWORD RefreshCD)// 刷新总CD时, 秒
     data = None
 
     def __init__(self):
@@ -3371,6 +3371,190 @@
 
 
 #------------------------------------------------------
+# A9 05 通知广播装备详细信息 #tagGCNotifyEquipDetailInfo
+
+class  tagGCNotifyEquipClassEquip(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("ItemID", c_int),
+                  ("Star", c_ubyte),
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.ItemID = 0
+        self.Star = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagGCNotifyEquipClassEquip)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A9 05 通知广播装备详细信息 //tagGCNotifyEquipDetailInfo:
+                                ItemID:%d,
+                                Star:%d
+                                '''\
+                                %(
+                                self.ItemID,
+                                self.Star
+                                )
+        return DumpString
+
+
+class  tagGCNotifyEquipDetailInfo(Structure):
+    Head = tagHead()
+    ItemGUID = ""    #(char ItemGUID[40])
+    ItemID = 0    #(DWORD ItemID)
+    Star = 0    #(BYTE Star)//星级
+    PlusLV = 0    #(WORD PlusLV)//强化等级
+    EvolveLV = 0    #(BYTE EvolveLV)//进化等级
+    WashLV = 0    #(BYTE WashLV)//洗练等级
+    WashValueCount = 0    #(BYTE WashValueCount)
+    WashValueList = list()    #(vector<WORD> WashValueList)//洗练值
+    StoneIDCount = 0    #(BYTE StoneIDCount)
+    StoneIDList = list()    #(vector<DWORD> StoneIDList)//宝石
+    ClassEquipCount = 0    #(BYTE ClassEquipCount)
+    ClassEquipList = list()    #(vector<tagGCNotifyEquipClassEquip> ClassEquipList)//本境界穿戴的装备
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA9
+        self.Head.SubCmd = 0x05
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.ItemGUID,_pos = CommFunc.ReadString(_lpData, _pos,40)
+        self.ItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Star,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.PlusLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.EvolveLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.WashLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.WashValueCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.WashValueCount):
+            value,_pos=CommFunc.ReadWORD(_lpData,_pos)
+            self.WashValueList.append(value)
+        self.StoneIDCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.StoneIDCount):
+            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
+            self.StoneIDList.append(value)
+        self.ClassEquipCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.ClassEquipCount):
+            temClassEquipList = tagGCNotifyEquipClassEquip()
+            _pos = temClassEquipList.ReadData(_lpData, _pos)
+            self.ClassEquipList.append(temClassEquipList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA9
+        self.Head.SubCmd = 0x05
+        self.ItemGUID = ""
+        self.ItemID = 0
+        self.Star = 0
+        self.PlusLV = 0
+        self.EvolveLV = 0
+        self.WashLV = 0
+        self.WashValueCount = 0
+        self.WashValueList = list()
+        self.StoneIDCount = 0
+        self.StoneIDList = list()
+        self.ClassEquipCount = 0
+        self.ClassEquipList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 40
+        length += 4
+        length += 1
+        length += 2
+        length += 1
+        length += 1
+        length += 1
+        length += 2 * self.WashValueCount
+        length += 1
+        length += 4 * self.StoneIDCount
+        length += 1
+        for i in range(self.ClassEquipCount):
+            length += self.ClassEquipList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteString(data, 40, self.ItemGUID)
+        data = CommFunc.WriteDWORD(data, self.ItemID)
+        data = CommFunc.WriteBYTE(data, self.Star)
+        data = CommFunc.WriteWORD(data, self.PlusLV)
+        data = CommFunc.WriteBYTE(data, self.EvolveLV)
+        data = CommFunc.WriteBYTE(data, self.WashLV)
+        data = CommFunc.WriteBYTE(data, self.WashValueCount)
+        for i in range(self.WashValueCount):
+            data = CommFunc.WriteWORD(data, self.WashValueList[i])
+        data = CommFunc.WriteBYTE(data, self.StoneIDCount)
+        for i in range(self.StoneIDCount):
+            data = CommFunc.WriteDWORD(data, self.StoneIDList[i])
+        data = CommFunc.WriteBYTE(data, self.ClassEquipCount)
+        for i in range(self.ClassEquipCount):
+            data = CommFunc.WriteString(data, self.ClassEquipList[i].GetLength(), self.ClassEquipList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                ItemGUID:%s,
+                                ItemID:%d,
+                                Star:%d,
+                                PlusLV:%d,
+                                EvolveLV:%d,
+                                WashLV:%d,
+                                WashValueCount:%d,
+                                WashValueList:%s,
+                                StoneIDCount:%d,
+                                StoneIDList:%s,
+                                ClassEquipCount:%d,
+                                ClassEquipList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.ItemGUID,
+                                self.ItemID,
+                                self.Star,
+                                self.PlusLV,
+                                self.EvolveLV,
+                                self.WashLV,
+                                self.WashValueCount,
+                                "...",
+                                self.StoneIDCount,
+                                "...",
+                                self.ClassEquipCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCNotifyEquipDetailInfo=tagGCNotifyEquipDetailInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCNotifyEquipDetailInfo.Head.Cmd,m_NAtagGCNotifyEquipDetailInfo.Head.SubCmd))] = m_NAtagGCNotifyEquipDetailInfo
+
+
+#------------------------------------------------------
 #A9 03 开服活动奖励数量刷新#tagGCOpenServerCampaignAwardCount
 
 class  tagGCOpenServerCampaignAwardCount(Structure):
@@ -3451,7 +3635,7 @@
     OrderIndex = 0    #(DWORD OrderIndex)//名次索引,0代表第一名
     ID = 0    #(DWORD ID)
     ID2 = 0    #(DWORD ID2)
-    Name1 = ""    #(char Name1[33])//名字1,用来显示排序对象名字 
+    Name1 = ""    #(char Name1[33])//名字1,用来显示排序对象名字
     Name2 = ""    #(char Name2[33])//名字2
     Type2 = 0    #(BYTE Type2)//附加类型,用来表示排序对象的类型,比如,玩家所属职业门派,宠物类型等
     Value1 = 0    #(DWORD Value1)//排序依赖的值,比如,等级
@@ -3763,7 +3947,7 @@
     Count = 0    #(DWORD Count)//数量
     IsBind = 0    #(BYTE IsBind)//是否绑定
     UserDataLen = 0    #(DWORD UserDataLen)
-    UserData = ""    #(String UserData)//自定义数据    
+    UserData = ""    #(String UserData)//自定义数据
     data = None
 
     def __init__(self):
@@ -4004,7 +4188,7 @@
     Name = ""    #(char Name[33])
     LV = 0    #(DWORD LV)//等级
     Job = 0    #(BYTE Job)
-    RealmLV = 0    #(WORD RealmLV)//境界    
+    RealmLV = 0    #(WORD RealmLV)//境界
     data = None
 
     def __init__(self):
@@ -5445,7 +5629,7 @@
     _fields_ = [
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
-                  ("StartTime", c_int),    
+                  ("StartTime", c_int),
                   ]
 
     def __init__(self):
@@ -5554,7 +5738,7 @@
 class  tagFamilyArrestOverStateInfo(Structure):
     Head = tagHead()
     Count = 0    #(WORD Count)
-    ArrestOverStateInfo = list()    #(vector<tagFamilyArrestOverState> ArrestOverStateInfo)///size = Count    
+    ArrestOverStateInfo = list()    #(vector<tagFamilyArrestOverState> ArrestOverStateInfo)///size = Count
     data = None
 
     def __init__(self):
@@ -5704,7 +5888,7 @@
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
                   ("GroupType", c_ubyte),    # 分组 1 最近联系人 2 好友 3 仇人 4 黑名单
-                  ("PlayerID", c_int),    
+                  ("PlayerID", c_int),
                   ("SortValue", c_int),    #最近联系人和仇人按时间排序
                   ]
 
@@ -5870,7 +6054,7 @@
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
                   ("GroupType", c_ubyte),    # 分组 1 最近联系人 2 好友 3 仇人 4 黑名单
-                  ("PlayerID", c_int),    
+                  ("PlayerID", c_int),
                   ]
 
     def __init__(self):
@@ -6065,8 +6249,8 @@
 class  tagGCGroupPlayer(Structure):
     _pack_ = 1
     _fields_ = [
-                  ("PlayerID", c_int),    
-                  ("SortValue", c_int),    
+                  ("PlayerID", c_int),
+                  ("SortValue", c_int),
                   ]
 
     def __init__(self):
@@ -6246,7 +6430,7 @@
     _fields_ = [
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
-                  ("PlayerID", c_int),    
+                  ("PlayerID", c_int),
                   ("OnlineType", c_ubyte),    #0不在线 1在线 2脱机在线
                   ]
 
@@ -6302,9 +6486,9 @@
     _fields_ = [
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
-                  ("PlayerID", c_int),    
-                  ("RefreshType", c_ubyte),    #参考CDBPlayerRefresh__    
-                  ("Value", c_int),    
+                  ("PlayerID", c_int),
+                  ("RefreshType", c_ubyte),    #参考CDBPlayerRefresh__
+                  ("Value", c_int),
                   ]
 
     def __init__(self):
@@ -6359,7 +6543,7 @@
 
 class  tagGCVoiceChat(Structure):
     Head = tagHead()
-    ChannelType = 0    #(BYTE ChannelType)// 1 世界 2 仙盟 3 私聊(好友) 4 队伍 5 区域    
+    ChannelType = 0    #(BYTE ChannelType)// 1 世界 2 仙盟 3 私聊(好友) 4 队伍 5 区域
     SrcNameLen = 0    #(BYTE SrcNameLen)
     SrcName = ""    #(String SrcName)//size = SrcNameLen
     PlayerID = 0    #(DWORD PlayerID)
@@ -7875,7 +8059,7 @@
     ItemGUID = ""    #(char ItemGUID[40])
     AuctionType = 0    #(BYTE AuctionType)//拍品类型,0-全服拍品,1-仙盟拍品
     AddTime = ""    #(char AddTime[19])//上架时间
-    BidderID = 0    #(DWORD BidderID)//最高竞拍玩家ID,也就是当前最高竞价玩家ID    
+    BidderID = 0    #(DWORD BidderID)//最高竞拍玩家ID,也就是当前最高竞价玩家ID
     BidderPrice = 0    #(DWORD BidderPrice)//最高竞拍价格
     BiddingTime = ""    #(char BiddingTime[19])//竞价时间 yyyy-MM-dd hh:mm:ss
     data = None
@@ -8819,7 +9003,7 @@
 class  tagGCTeamMemPrepareState(Structure):
     _pack_ = 1
     _fields_ = [
-                  ("PlayerID", c_int),    
+                  ("PlayerID", c_int),
                   ("PrepareState", c_ubyte),    # 状态,0-未准备,1-已准备,2-拒绝
                   ]
 
@@ -9285,9 +9469,9 @@
     _fields_ = [
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
-                  ("PlayerID", c_int),    
+                  ("PlayerID", c_int),
                   ("RefreshType", c_ubyte),    #刷新类型,同0418属性类型
-                  ("Value", c_int),    
+                  ("Value", c_int),
                   ]
 
     def __init__(self):
@@ -9557,8 +9741,8 @@
 
 class  tagGCCrossRealmPKBillboardInfo(Structure):
     Head = tagHead()
-    ZoneID = 0    #(BYTE ZoneID)// 赛区ID    
-    SeasonID = 0    #(BYTE SeasonID)// 赛季ID    
+    ZoneID = 0    #(BYTE ZoneID)// 赛区ID
+    SeasonID = 0    #(BYTE SeasonID)// 赛季ID
     Count = 0    #(WORD Count)
     PKBillboardList = list()    #(vector<tagGCCrossRealmPKBillboardData> PKBillboardList)
     data = None
@@ -10335,7 +10519,7 @@
 class  tagMCCoinToGoldCount(Structure):
     _pack_ = 1
     _fields_ = [
-                  ("RecordID", c_ubyte),    
+                  ("RecordID", c_ubyte),
                   ("TodayPayCount", c_ushort),    # 今日已购买次数
                   ("TotalPayCount", c_int),    # 累计总购买次数
                   ]
@@ -10571,7 +10755,7 @@
     BackpackLV = 0    #(BYTE BackpackLV)//背包等级
     WarehouseLV = 0    #(BYTE WarehouseLV)//仓库等级
     TeamID = 0    #(DWORD TeamID)//队伍ID
-    UseGoldType = 0    #(BYTE UseGoldType)//默认用金子/金票        类型为MoneyType
+    UseGoldType = 0    #(BYTE UseGoldType)//默认用金子/金票		类型为MoneyType
     UseSilverType = 0    #(BYTE UseSilverType)//默认用的银子/银票
     AttackMode = 0    #(BYTE AttackMode)//攻击模式
     LastWeekOnlineTime = 0    #(DWORD LastWeekOnlineTime)//上周在线时间
@@ -11564,7 +11748,7 @@
     _fields_ = [
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
-                  ("MapID", c_ushort),    
+                  ("MapID", c_ushort),
                   ("FuncLineID", c_ushort),    #功能线路ID
                   ]
 
@@ -11620,7 +11804,7 @@
     _fields_ = [
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
-                  ("MapID", c_int),    
+                  ("MapID", c_int),
                   ("FuncLineID", c_ushort),    #功能线路ID
                   ]
 
@@ -11728,7 +11912,7 @@
     _fields_ = [
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
-                  ("Mode", c_ubyte),    
+                  ("Mode", c_ubyte),
                   ]
 
     def __init__(self):
@@ -12025,7 +12209,7 @@
     _fields_ = [
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
-                  ("LockState", c_ubyte),    
+                  ("LockState", c_ubyte),
                   ]
 
     def __init__(self):
@@ -12389,6 +12573,8 @@
     _fields_ = [
                   ("ItemID", c_int),    #果实物品ID
                   ("EatCnt", c_ushort),    #已使用个数
+                  ("ItemAddCnt", c_int),    #增幅丹增加上限
+                  ("ItemBreakCnt", c_int),    #增幅丹突破次数
                   ]
 
     def __init__(self):
@@ -12403,6 +12589,8 @@
     def Clear(self):
         self.ItemID = 0
         self.EatCnt = 0
+        self.ItemAddCnt = 0
+        self.ItemBreakCnt = 0
         return
 
     def GetLength(self):
@@ -12414,11 +12602,15 @@
     def OutputString(self):
         DumpString = '''// A3 39 玩家属性果实已使用个数信息//tagMCAttrFruitEatCntList:
                                 ItemID:%d,
-                                EatCnt:%d
+                                EatCnt:%d,
+                                ItemAddCnt:%d,
+                                ItemBreakCnt:%d
                                 '''\
                                 %(
                                 self.ItemID,
-                                self.EatCnt
+                                self.EatCnt,
+                                self.ItemAddCnt,
+                                self.ItemBreakCnt
                                 )
         return DumpString
 
@@ -13385,7 +13577,7 @@
     Seting = 0    #(DWORD Seting)// 操作数据记录
     DecomposeCnt = 0    #(BYTE DecomposeCnt)// 分解件数进度
     GetItemLen = 0    #(WORD GetItemLen)
-    GetItemData = ""    #(String GetItemData)//  获得物品信息 [[itemID,itemCount,isBind], [或itemID,itemCount,isBind,isAppoint], {或物品信息字典}, ...] 
+    GetItemData = ""    #(String GetItemData)//  获得物品信息 [[itemID,itemCount,isBind], [或itemID,itemCount,isBind,isAppoint], {或物品信息字典}, ...]
     data = None
 
     def __init__(self):
@@ -13473,8 +13665,8 @@
 class  tagMCEquipPartStar(Structure):
     _pack_ = 1
     _fields_ = [
-                  ("EquipPackIndex", c_ushort),    
-                  ("Star", c_ubyte),    
+                  ("EquipPackIndex", c_ushort),
+                  ("Star", c_ubyte),
                   ]
 
     def __init__(self):
@@ -13618,7 +13810,7 @@
 
 
 class  tagMCEquipPartXLAttr(Structure):
-    EquipPlace = 0    #(BYTE EquipPlace)// 装备位    
+    EquipPlace = 0    #(BYTE EquipPlace)// 装备位
     XLAttrLV = 0    #(BYTE XLAttrLV)// 洗练等级
     XLAttrCnt = 0    #(BYTE XLAttrCnt)// 属性条数
     XLAttrList = list()    #(vector<tagMCEquipPartXLAttrValue> XLAttrList)// 属性列表,索引0的代表属性1,依次递增
@@ -13753,7 +13945,7 @@
 class  tagMCFairyAdventuresData(Structure):
     _pack_ = 1
     _fields_ = [
-                  ("EventID", c_ubyte),    
+                  ("EventID", c_ubyte),
                   ("Gear", c_ubyte),    #第几档
                   ("Condition", c_int),    #条件
                   ]
@@ -14154,7 +14346,7 @@
 
 class  tagMCFBEncourageInfo(Structure):
     Head = tagHead()
-    Cnt = 0    #(BYTE Cnt)// 
+    Cnt = 0    #(BYTE Cnt)//
     InfoList = list()    #(vector<tagMCFBEncourageCnt> InfoList)// 次数信息
     data = None
 
@@ -14944,7 +15136,7 @@
     _fields_ = [
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
-                  ("Cnt", c_int),    
+                  ("Cnt", c_int),
                   ]
 
     def __init__(self):
@@ -14994,9 +15186,9 @@
 class  tagMCMagicWeaponInfo(Structure):
     _pack_ = 1
     _fields_ = [
-                  ("MWID", c_int),    
-                  ("LV", c_ubyte),    
-                  ("Exp", c_int),    
+                  ("MWID", c_int),
+                  ("LV", c_ubyte),
+                  ("Exp", c_int),
                   ("FBPassLV", c_ubyte),    #副本关卡
                   ("IsWear", c_ubyte),    #是否佩戴(仅适用王者法宝)
                   ]
@@ -15234,11 +15426,11 @@
 class  tagMCEquipPartPlusLV(Structure):
     _pack_ = 1
     _fields_ = [
-                  ("PackType", c_ubyte),    
-                  ("EquipIndex", c_ubyte),    
-                  ("EquipPartStarLV", c_ushort),    
-                  ("Proficiency", c_int),    
-                  ("EvolveLV", c_ubyte),    
+                  ("PackType", c_ubyte),
+                  ("EquipIndex", c_ubyte),
+                  ("EquipPartStarLV", c_ushort),
+                  ("Proficiency", c_int),
+                  ("EvolveLV", c_ubyte),
                   ]
 
     def __init__(self):
@@ -15528,6 +15720,114 @@
 
 
 #------------------------------------------------------
+# A3 25 NPC已攻击次数信息 #tagMCNPCAttackCountInfo
+
+class  tagMCNPCAttackCount(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("NPCID", c_int),
+                  ("AttackCount", 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.NPCID = 0
+        self.AttackCount = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCNPCAttackCount)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A3 25 NPC已攻击次数信息 //tagMCNPCAttackCountInfo:
+                                NPCID:%d,
+                                AttackCount:%d
+                                '''\
+                                %(
+                                self.NPCID,
+                                self.AttackCount
+                                )
+        return DumpString
+
+
+class  tagMCNPCAttackCountInfo(Structure):
+    Head = tagHead()
+    Count = 0    #(BYTE Count)
+    NPCAttackCountList = list()    #(vector<tagMCNPCAttackCount> NPCAttackCountList)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA3
+        self.Head.SubCmd = 0x25
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.Count):
+            temNPCAttackCountList = tagMCNPCAttackCount()
+            _pos = temNPCAttackCountList.ReadData(_lpData, _pos)
+            self.NPCAttackCountList.append(temNPCAttackCountList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA3
+        self.Head.SubCmd = 0x25
+        self.Count = 0
+        self.NPCAttackCountList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        for i in range(self.Count):
+            length += self.NPCAttackCountList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.Count)
+        for i in range(self.Count):
+            data = CommFunc.WriteString(data, self.NPCAttackCountList[i].GetLength(), self.NPCAttackCountList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                Count:%d,
+                                NPCAttackCountList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.Count,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCNPCAttackCountInfo=tagMCNPCAttackCountInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCNPCAttackCountInfo.Head.Cmd,m_NAtagMCNPCAttackCountInfo.Head.SubCmd))] = m_NAtagMCNPCAttackCountInfo
+
+
+#------------------------------------------------------
 # A3 26 NPCID已采集次数信息 #tagMCNPCIDCollectionCntInfo
 
 class  tagMCNPCIDCollectionCnt(Structure):
@@ -15717,7 +16017,7 @@
     _fields_ = [
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
-                  ("Record", c_ubyte),    #0-未领取 1-已领取    
+                  ("Record", c_ubyte),    #0-未领取 1-已领取
                   ]
 
     def __init__(self):
@@ -15970,8 +16270,8 @@
     _fields_ = [
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
-                  ("PrizeItem", c_int),    
-                  ("ItemCount", c_ubyte),    
+                  ("PrizeItem", c_int),
+                  ("ItemCount", c_ubyte),
                   ]
 
     def __init__(self):
@@ -16017,7 +16317,7 @@
 class  tagMCPlayerOnlinePrizeInfo(Structure):
     Head = tagHead()
     RemaindTime = 0    #(DWORD RemaindTime)//产生奖励剩余时间
-    HasPrize = 0    #(BYTE HasPrize)//是否可以领取 
+    HasPrize = 0    #(BYTE HasPrize)//是否可以领取
     PrizeType = 0    #(BYTE PrizeType)//在线奖励类型
     PrizeCnt = 0    #(BYTE PrizeCnt)//在线奖励类型
     PrizeInfo = list()    #(vector<tagMCOnlinePrizeItem> PrizeInfo)//在线奖励类型
@@ -16160,20 +16460,16 @@
 #------------------------------------------------------
 # A3 BF 通知客户端炼丹炉信息 #tagMCPlayerStoveMsg
 
-class  tagMCPlayerStoveMsg(Structure):
+class  tagMCPlayerStoveInfo(Structure):
     _pack_ = 1
     _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("StoveLV", c_ubyte),    # 炼丹炉等级
-                  ("StoveExp", c_int),    # 炼丹炉经验 
-                  ("ItemID", c_int),    # 合成物品id
+                  ("AlchemyID", c_int),    # 丹 ID
+                  ("StartTime", c_int),    # 开始炼的时间
+                  ("AlchemyTimes", c_ushort),    # 炼的次数
                   ]
 
     def __init__(self):
         self.Clear()
-        self.Cmd = 0xA3
-        self.SubCmd = 0xBF
         return
 
     def ReadData(self, stringData, _pos=0, _len=0):
@@ -16182,39 +16478,123 @@
         return _pos + self.GetLength()
 
     def Clear(self):
-        self.Cmd = 0xA3
-        self.SubCmd = 0xBF
-        self.StoveLV = 0
-        self.StoveExp = 0
-        self.ItemID = 0
+        self.AlchemyID = 0
+        self.StartTime = 0
+        self.AlchemyTimes = 0
         return
 
     def GetLength(self):
-        return sizeof(tagMCPlayerStoveMsg)
+        return sizeof(tagMCPlayerStoveInfo)
 
     def GetBuffer(self):
         return string_at(addressof(self), self.GetLength())
 
     def OutputString(self):
         DumpString = '''// A3 BF 通知客户端炼丹炉信息 //tagMCPlayerStoveMsg:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                StoveLV:%d,
-                                StoveExp:%d,
-                                ItemID:%d
+                                AlchemyID:%d,
+                                StartTime:%d,
+                                AlchemyTimes:%d
                                 '''\
                                 %(
-                                self.Cmd,
-                                self.SubCmd,
+                                self.AlchemyID,
+                                self.StartTime,
+                                self.AlchemyTimes
+                                )
+        return DumpString
+
+
+class  tagMCPlayerStoveMsg(Structure):
+    Head = tagHead()
+    StoveLV = 0    #(BYTE StoveLV)// 炼丹炉等级
+    StoveExp = 0    #(DWORD StoveExp)// 炼丹炉经验
+    ItemID = 0    #(DWORD ItemID)// 合成物品id
+    ItemCnt = 0    #(BYTE ItemCnt)// 丹药数量
+    StoveCnt = 0    #(WORD StoveCnt)// 丹药数量
+    InfoList = list()    #(vector<tagMCPlayerStoveInfo> InfoList)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA3
+        self.Head.SubCmd = 0xBF
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.StoveLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.StoveExp,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.ItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.ItemCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.StoveCnt,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        for i in range(self.StoveCnt):
+            temInfoList = tagMCPlayerStoveInfo()
+            _pos = temInfoList.ReadData(_lpData, _pos)
+            self.InfoList.append(temInfoList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA3
+        self.Head.SubCmd = 0xBF
+        self.StoveLV = 0
+        self.StoveExp = 0
+        self.ItemID = 0
+        self.ItemCnt = 0
+        self.StoveCnt = 0
+        self.InfoList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 4
+        length += 4
+        length += 1
+        length += 2
+        for i in range(self.StoveCnt):
+            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.StoveLV)
+        data = CommFunc.WriteDWORD(data, self.StoveExp)
+        data = CommFunc.WriteDWORD(data, self.ItemID)
+        data = CommFunc.WriteBYTE(data, self.ItemCnt)
+        data = CommFunc.WriteWORD(data, self.StoveCnt)
+        for i in range(self.StoveCnt):
+            data = CommFunc.WriteString(data, self.InfoList[i].GetLength(), self.InfoList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                StoveLV:%d,
+                                StoveExp:%d,
+                                ItemID:%d,
+                                ItemCnt:%d,
+                                StoveCnt:%d,
+                                InfoList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
                                 self.StoveLV,
                                 self.StoveExp,
-                                self.ItemID
+                                self.ItemID,
+                                self.ItemCnt,
+                                self.StoveCnt,
+                                "..."
                                 )
         return DumpString
 
 
 m_NAtagMCPlayerStoveMsg=tagMCPlayerStoveMsg()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCPlayerStoveMsg.Cmd,m_NAtagMCPlayerStoveMsg.SubCmd))] = m_NAtagMCPlayerStoveMsg
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCPlayerStoveMsg.Head.Cmd,m_NAtagMCPlayerStoveMsg.Head.SubCmd))] = m_NAtagMCPlayerStoveMsg
 
 
 #------------------------------------------------------
@@ -16282,6 +16662,8 @@
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
                   ("BeginTime", c_int),    #开始计时时间
+                  ("BuffTime", c_int),    #buff剩余时间
+                  ("BuffAddRate", c_int),    #buff加成万分率
                   ("CurExp", c_int),    #当前总经验
                   ("CurExpPoint", c_int),    #当前总经验点
                   ]
@@ -16301,6 +16683,8 @@
         self.Cmd = 0xA3
         self.SubCmd = 0x27
         self.BeginTime = 0
+        self.BuffTime = 0
+        self.BuffAddRate = 0
         self.CurExp = 0
         self.CurExpPoint = 0
         return
@@ -16316,6 +16700,8 @@
                                 Cmd:%s,
                                 SubCmd:%s,
                                 BeginTime:%d,
+                                BuffTime:%d,
+                                BuffAddRate:%d,
                                 CurExp:%d,
                                 CurExpPoint:%d
                                 '''\
@@ -16323,6 +16709,8 @@
                                 self.Cmd,
                                 self.SubCmd,
                                 self.BeginTime,
+                                self.BuffTime,
+                                self.BuffAddRate,
                                 self.CurExp,
                                 self.CurExpPoint
                                 )
@@ -16584,10 +16972,182 @@
 
 
 #------------------------------------------------------
+# A3 09 技能五行专精信息 #tagMCSkillElementInfo
+
+class  tagMCSkillElementActiveData(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("SkillID", c_int),    # 技能ID
+                  ("ActiveLV", 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.SkillID = 0
+        self.ActiveLV = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCSkillElementActiveData)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A3 09 技能五行专精信息 //tagMCSkillElementInfo:
+                                SkillID:%d,
+                                ActiveLV:%d
+                                '''\
+                                %(
+                                self.SkillID,
+                                self.ActiveLV
+                                )
+        return DumpString
+
+
+class  tagMCSkillElementData(Structure):
+    MainSkillID = 0    #(DWORD MainSkillID)// 主技能ID
+    ElementSkillID = 0    #(DWORD ElementSkillID)// 选择的专精技能ID
+    SkillCnt = 0    #(BYTE SkillCnt)// 数量
+    ActiveSkill = list()    #(vector<tagMCSkillElementActiveData> ActiveSkill)// 激活的技能ID
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.MainSkillID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.ElementSkillID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.SkillCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.SkillCnt):
+            temActiveSkill = tagMCSkillElementActiveData()
+            _pos = temActiveSkill.ReadData(_lpData, _pos)
+            self.ActiveSkill.append(temActiveSkill)
+        return _pos
+
+    def Clear(self):
+        self.MainSkillID = 0
+        self.ElementSkillID = 0
+        self.SkillCnt = 0
+        self.ActiveSkill = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 4
+        length += 4
+        length += 1
+        for i in range(self.SkillCnt):
+            length += self.ActiveSkill[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteDWORD(data, self.MainSkillID)
+        data = CommFunc.WriteDWORD(data, self.ElementSkillID)
+        data = CommFunc.WriteBYTE(data, self.SkillCnt)
+        for i in range(self.SkillCnt):
+            data = CommFunc.WriteString(data, self.ActiveSkill[i].GetLength(), self.ActiveSkill[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                MainSkillID:%d,
+                                ElementSkillID:%d,
+                                SkillCnt:%d,
+                                ActiveSkill:%s
+                                '''\
+                                %(
+                                self.MainSkillID,
+                                self.ElementSkillID,
+                                self.SkillCnt,
+                                "..."
+                                )
+        return DumpString
+
+
+class  tagMCSkillElementInfo(Structure):
+    Head = tagHead()
+    Cnt = 0    #(BYTE Cnt)// 数量
+    InfoList = list()    #(vector<tagMCSkillElementData> InfoList)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA3
+        self.Head.SubCmd = 0x09
+        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 = tagMCSkillElementData()
+            _pos = temInfoList.ReadData(_lpData, _pos)
+            self.InfoList.append(temInfoList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA3
+        self.Head.SubCmd = 0x09
+        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_NAtagMCSkillElementInfo=tagMCSkillElementInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCSkillElementInfo.Head.Cmd,m_NAtagMCSkillElementInfo.Head.SubCmd))] = m_NAtagMCSkillElementInfo
+
+
+#------------------------------------------------------
 # A3 BC 通知装备位孔位宝石ID #tagMCStoneInfo
 
 class  tagMCStoneMsg(Structure):
-    EquipPlace = 0    #(BYTE EquipPlace)// 装备位    
+    EquipPlace = 0    #(BYTE EquipPlace)// 装备位
     MaxStoneCount = 0    #(BYTE MaxStoneCount)// 最大孔数
     StoneInfo = list()    #(vector<DWORD> StoneInfo)// 孔内宝石信息
     StoneBind = list()    #(vector<BYTE> StoneBind)// 孔内宝石是否绑定
@@ -17575,8 +18135,8 @@
     _fields_ = [
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
-                  ("PassLV", c_int),    
-                  ("YesterDayPassLV", c_int),    
+                  ("PassLV", c_int),
+                  ("YesterDayPassLV", c_int),
                   ]
 
     def __init__(self):
@@ -18558,7 +19118,7 @@
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
                   ("Exp", c_int),    # 当前VIP等级经验
-                  ("VIPLV", c_int),    #vip等级 
+                  ("VIPLV", c_int),    #vip等级
                   ]
 
     def __init__(self):
@@ -18879,16 +19439,135 @@
 
 
 #------------------------------------------------------
+# A7 18 采集奖励物品通知 #tagMCCollectAwardItemInfo
+
+class  tagMCCollectAwardItem(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("ItemID", c_int),
+                  ("Count", c_ubyte),
+                  ("IsAuctionItem", c_ubyte),    #是否拍品
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.ItemID = 0
+        self.Count = 0
+        self.IsAuctionItem = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCCollectAwardItem)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A7 18 采集奖励物品通知 //tagMCCollectAwardItemInfo:
+                                ItemID:%d,
+                                Count:%d,
+                                IsAuctionItem:%d
+                                '''\
+                                %(
+                                self.ItemID,
+                                self.Count,
+                                self.IsAuctionItem
+                                )
+        return DumpString
+
+
+class  tagMCCollectAwardItemInfo(Structure):
+    Head = tagHead()
+    CollectNPCID = 0    #(DWORD CollectNPCID)//采集的NPCID
+    Count = 0    #(BYTE Count)
+    AwardItemList = list()    #(vector<tagMCCollectAwardItem> AwardItemList)//奖励物品信息列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA7
+        self.Head.SubCmd = 0x18
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.CollectNPCID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.Count):
+            temAwardItemList = tagMCCollectAwardItem()
+            _pos = temAwardItemList.ReadData(_lpData, _pos)
+            self.AwardItemList.append(temAwardItemList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA7
+        self.Head.SubCmd = 0x18
+        self.CollectNPCID = 0
+        self.Count = 0
+        self.AwardItemList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 4
+        length += 1
+        for i in range(self.Count):
+            length += self.AwardItemList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteDWORD(data, self.CollectNPCID)
+        data = CommFunc.WriteBYTE(data, self.Count)
+        for i in range(self.Count):
+            data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                CollectNPCID:%d,
+                                Count:%d,
+                                AwardItemList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.CollectNPCID,
+                                self.Count,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCCollectAwardItemInfo=tagMCCollectAwardItemInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCollectAwardItemInfo.Head.Cmd,m_NAtagMCCollectAwardItemInfo.Head.SubCmd))] = m_NAtagMCCollectAwardItemInfo
+
+
+#------------------------------------------------------
 # A7 13 动态障碍物状态 #tagMCDynamicBarrierState
 
 class  tagMCDynamicBarrier(Structure):
     _pack_ = 1
     _fields_ = [
-                  ("APosX", c_ushort),    
-                  ("APosY", c_ushort),    
-                  ("BPosX", c_ushort),    
-                  ("BPosY", c_ushort),    
-                  ("Angle", c_ushort),    
+                  ("APosX", c_ushort),
+                  ("APosY", c_ushort),
+                  ("BPosX", c_ushort),
+                  ("BPosY", c_ushort),
+                  ("Angle", c_ushort),
                   ]
 
     def __init__(self):
@@ -19491,8 +20170,8 @@
 class  tagMCNPCCntInfo(Structure):
     _pack_ = 1
     _fields_ = [
-                  ("NPCID", c_int),    
-                  ("Cnt", c_int),    
+                  ("NPCID", c_int),
+                  ("Cnt", c_int),
                   ]
 
     def __init__(self):
@@ -19666,13 +20345,13 @@
 class  tagMCNPCInfo(Structure):
     _pack_ = 1
     _fields_ = [
-                  ("ObjID", c_int),    
-                  ("NPCID", c_int),    
-                  ("NPCHP", c_int),    
-                  ("MaxHP", c_int),    
+                  ("ObjID", c_int),
+                  ("NPCID", c_int),
+                  ("NPCHP", c_int),
+                  ("MaxHP", c_int),
                   ("IsActive", c_ubyte),    #这个NPC是否活着
-                  ("PosX", c_ushort),    
-                  ("PosY", c_ushort),    
+                  ("PosX", c_ushort),
+                  ("PosY", c_ushort),
                   ("RefreshSecond", c_int),    # 剩余多少秒刷新
                   ]
 
@@ -19814,9 +20493,9 @@
     _fields_ = [
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
-                  ("NPCID", c_int),    
-                  ("PosX", c_ushort),    
-                  ("PosY", c_ushort),    
+                  ("NPCID", c_int),
+                  ("PosX", c_ushort),
+                  ("PosY", c_ushort),
                   ]
 
     def __init__(self):
@@ -19874,7 +20553,7 @@
     _fields_ = [
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
-                  ("NPCID", c_int),    
+                  ("NPCID", c_int),
                   ]
 
     def __init__(self):
@@ -19916,6 +20595,84 @@
 
 m_NAtagMCNPCShow=tagMCNPCShow()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCNPCShow.Cmd,m_NAtagMCNPCShow.SubCmd))] = m_NAtagMCNPCShow
+
+
+#------------------------------------------------------
+# A7 19 查询玩家境界阶装备信息结果 #tagSCPlayerEquipCacheResult
+
+class  tagSCPlayerEquipCacheResult(Structure):
+    Head = tagHead()
+    PlayerID = 0    #(DWORD PlayerID)//玩家ID
+    EquipClassLV = 0    #(BYTE EquipClassLV)
+    ItemDataSize = 0    #(WORD ItemDataSize)
+    ItemData = ""    #(String ItemData)//物品记录
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA7
+        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.EquipClassLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.ItemDataSize,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.ItemData,_pos = CommFunc.ReadString(_lpData, _pos,self.ItemDataSize)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA7
+        self.Head.SubCmd = 0x19
+        self.PlayerID = 0
+        self.EquipClassLV = 0
+        self.ItemDataSize = 0
+        self.ItemData = ""
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 4
+        length += 1
+        length += 2
+        length += len(self.ItemData)
+
+        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.EquipClassLV)
+        data = CommFunc.WriteWORD(data, self.ItemDataSize)
+        data = CommFunc.WriteString(data, self.ItemDataSize, self.ItemData)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                PlayerID:%d,
+                                EquipClassLV:%d,
+                                ItemDataSize:%d,
+                                ItemData:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.PlayerID,
+                                self.EquipClassLV,
+                                self.ItemDataSize,
+                                self.ItemData
+                                )
+        return DumpString
+
+
+m_NAtagSCPlayerEquipCacheResult=tagSCPlayerEquipCacheResult()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagSCPlayerEquipCacheResult.Head.Cmd,m_NAtagSCPlayerEquipCacheResult.Head.SubCmd))] = m_NAtagSCPlayerEquipCacheResult
 
 
 #------------------------------------------------------
@@ -20030,9 +20787,9 @@
 class  tagMCRunTaskAwardRecord(Structure):
     _pack_ = 1
     _fields_ = [
-                  ("Type", c_ubyte),    
-                  ("Num", c_int),    
-                  ("AwardState", c_ubyte),    
+                  ("Type", c_ubyte),
+                  ("Num", c_int),
+                  ("AwardState", c_ubyte),
                   ]
 
     def __init__(self):
@@ -20147,7 +20904,7 @@
     ItemDataSize = 0    #(DWORD ItemDataSize)
     ItemData = ""    #(String ItemData)//物品记录
     PlusDataSize = 0    #(DWORD PlusDataSize)
-    PlusData = ""    #(String PlusData)//扩展记录    
+    PlusData = ""    #(String PlusData)//扩展记录
     data = None
 
     def __init__(self):
@@ -20243,7 +21000,7 @@
     _fields_ = [
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
-                  ("GuideID", c_ushort),    
+                  ("GuideID", c_ushort),
                   ]
 
     def __init__(self):
@@ -20293,8 +21050,8 @@
 class  tagRefreshType(Structure):
     _pack_ = 1
     _fields_ = [
-                  ("RefreshType", c_ubyte),    
-                  ("Value", c_int),    
+                  ("RefreshType", c_ubyte),
+                  ("Value", c_int),
                   ]
 
     def __init__(self):
@@ -20482,7 +21239,7 @@
 class  tagMCItemDayUseCnt(Structure):
     _pack_ = 1
     _fields_ = [
-                  ("ItemID", c_int),    
+                  ("ItemID", c_int),
                   ("UseCnt", c_ushort),    # 今日已使用次数
                   ]
 
@@ -20592,7 +21349,7 @@
     _fields_ = [
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
-                  ("MakeType", c_ubyte),    #类型        TMakeItemType
+                  ("MakeType", c_ubyte),    #类型		TMakeItemType
                   ("Result", c_ubyte),    #是否成功
                   ("MakeItemID", c_int),    #合成的物品ID
                   ]
@@ -27625,6 +28382,54 @@
 
 
 #------------------------------------------------------
+#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
+
+
+#------------------------------------------------------
 # B2 08 获得仙缘币信息 #tagMCAddXianyuanCoinMsg
 
 class  tagMCAddXianyuanCoinMsg(Structure):
@@ -27742,155 +28547,6 @@
 
 m_NAtagMCAddXianyuanCoinMsg=tagMCAddXianyuanCoinMsg()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCAddXianyuanCoinMsg.Head.Cmd,m_NAtagMCAddXianyuanCoinMsg.Head.SubCmd))] = m_NAtagMCAddXianyuanCoinMsg
-
-
-#------------------------------------------------------
-# B2 14 自定义副本奖励信息 #tagMCCuntomFBPrizeInfo
-
-class  tagMCCuntomFBPrizeItem(Structure):
-    ItemID = 0    #(DWORD ItemID)
-    Count = 0    #(WORD Count)
-    IsAuctionItem = 0    #(BYTE IsAuctionItem)//是否拍品
-    UserDataLen = 0    #(WORD UserDataLen)//附加属性长度
-    UserData = ""    #(String UserData)//附加属性  size = UserDataLen
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.ItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.IsAuctionItem,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.UserDataLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.UserData,_pos = CommFunc.ReadString(_lpData, _pos,self.UserDataLen)
-        return _pos
-
-    def Clear(self):
-        self.ItemID = 0
-        self.Count = 0
-        self.IsAuctionItem = 0
-        self.UserDataLen = 0
-        self.UserData = ""
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 4
-        length += 2
-        length += 1
-        length += 2
-        length += len(self.UserData)
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteDWORD(data, self.ItemID)
-        data = CommFunc.WriteWORD(data, self.Count)
-        data = CommFunc.WriteBYTE(data, self.IsAuctionItem)
-        data = CommFunc.WriteWORD(data, self.UserDataLen)
-        data = CommFunc.WriteString(data, self.UserDataLen, self.UserData)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                ItemID:%d,
-                                Count:%d,
-                                IsAuctionItem:%d,
-                                UserDataLen:%d,
-                                UserData:%s
-                                '''\
-                                %(
-                                self.ItemID,
-                                self.Count,
-                                self.IsAuctionItem,
-                                self.UserDataLen,
-                                self.UserData
-                                )
-        return DumpString
-
-
-class  tagMCCuntomFBPrizeInfo(Structure):
-    Head = tagHead()
-    MapID = 0    #(DWORD MapID)
-    FuncLineID = 0    #(WORD FuncLineID)
-    PrizeItemCount = 0    #(BYTE PrizeItemCount)
-    PrizeItemList = list()    #(vector<tagMCCuntomFBPrizeItem> PrizeItemList)
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xB2
-        self.Head.SubCmd = 0x14
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.MapID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.FuncLineID,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.PrizeItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.PrizeItemCount):
-            temPrizeItemList = tagMCCuntomFBPrizeItem()
-            _pos = temPrizeItemList.ReadData(_lpData, _pos)
-            self.PrizeItemList.append(temPrizeItemList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xB2
-        self.Head.SubCmd = 0x14
-        self.MapID = 0
-        self.FuncLineID = 0
-        self.PrizeItemCount = 0
-        self.PrizeItemList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 4
-        length += 2
-        length += 1
-        for i in range(self.PrizeItemCount):
-            length += self.PrizeItemList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteDWORD(data, self.MapID)
-        data = CommFunc.WriteWORD(data, self.FuncLineID)
-        data = CommFunc.WriteBYTE(data, self.PrizeItemCount)
-        for i in range(self.PrizeItemCount):
-            data = CommFunc.WriteString(data, self.PrizeItemList[i].GetLength(), self.PrizeItemList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                MapID:%d,
-                                FuncLineID:%d,
-                                PrizeItemCount:%d,
-                                PrizeItemList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.MapID,
-                                self.FuncLineID,
-                                self.PrizeItemCount,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagMCCuntomFBPrizeInfo=tagMCCuntomFBPrizeInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCuntomFBPrizeInfo.Head.Cmd,m_NAtagMCCuntomFBPrizeInfo.Head.SubCmd))] = m_NAtagMCCuntomFBPrizeInfo
 
 
 #------------------------------------------------------
@@ -28075,6 +28731,118 @@
 
 m_NAtagMCFamilyWarBillboard=tagMCFamilyWarBillboard()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFamilyWarBillboard.Head.Cmd,m_NAtagMCFamilyWarBillboard.Head.SubCmd))] = m_NAtagMCFamilyWarBillboard
+
+
+#------------------------------------------------------
+# B2 15 副本买buff信息通知 #tagMCFBBuyBuffInfo
+
+class  tagMCFBBuyBuffTime(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("MapID", c_int),    
+                  ("MoneyCnt", c_ushort),    
+                  ("BuyTime", 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.MapID = 0
+        self.MoneyCnt = 0
+        self.BuyTime = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCFBBuyBuffTime)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// B2 15 副本买buff信息通知 //tagMCFBBuyBuffInfo:
+                                MapID:%d,
+                                MoneyCnt:%d,
+                                BuyTime:%d
+                                '''\
+                                %(
+                                self.MapID,
+                                self.MoneyCnt,
+                                self.BuyTime
+                                )
+        return DumpString
+
+
+class  tagMCFBBuyBuffInfo(Structure):
+    Head = tagHead()
+    Cnt = 0    #(BYTE Cnt)
+    InfoList = list()    #(vector<tagMCFBBuyBuffTime> InfoList)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB2
+        self.Head.SubCmd = 0x15
+        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 = tagMCFBBuyBuffTime()
+            _pos = temInfoList.ReadData(_lpData, _pos)
+            self.InfoList.append(temInfoList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB2
+        self.Head.SubCmd = 0x15
+        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_NAtagMCFBBuyBuffInfo=tagMCFBBuyBuffInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFBBuyBuffInfo.Head.Cmd,m_NAtagMCFBBuyBuffInfo.Head.SubCmd))] = m_NAtagMCFBBuyBuffInfo
 
 
 #------------------------------------------------------
@@ -28916,6 +29684,118 @@
 
 
 #------------------------------------------------------
+# B2 13 天星塔通关层数 #tagMCSkyTowerInfo
+
+class  tagMCSkyTowerInfo(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("Floor", c_int),    # 已通关层
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xB2
+        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 = 0xB2
+        self.SubCmd = 0x13
+        self.Floor = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCSkyTowerInfo)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// B2 13 天星塔通关层数 //tagMCSkyTowerInfo:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                Floor:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.Floor
+                                )
+        return DumpString
+
+
+m_NAtagMCSkyTowerInfo=tagMCSkyTowerInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCSkyTowerInfo.Cmd,m_NAtagMCSkyTowerInfo.SubCmd))] = m_NAtagMCSkyTowerInfo
+
+
+#------------------------------------------------------
+# B2 16 开始自定义场景结果 #tagMCStartCustomSceneResult
+
+class  tagMCStartCustomSceneResult(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("MapID", c_int),    
+                  ("FuncLineID", c_ushort),    
+                  ("Result", c_ubyte),    #是否允许
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xB2
+        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 = 0xB2
+        self.SubCmd = 0x16
+        self.MapID = 0
+        self.FuncLineID = 0
+        self.Result = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCStartCustomSceneResult)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// B2 16 开始自定义场景结果 //tagMCStartCustomSceneResult:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                MapID:%d,
+                                FuncLineID:%d,
+                                Result:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.MapID,
+                                self.FuncLineID,
+                                self.Result
+                                )
+        return DumpString
+
+
+m_NAtagMCStartCustomSceneResult=tagMCStartCustomSceneResult()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCStartCustomSceneResult.Cmd,m_NAtagMCStartCustomSceneResult.SubCmd))] = m_NAtagMCStartCustomSceneResult
+
+
+#------------------------------------------------------
 #B2 02 推送提醒设置通知 #tagMCPushNotificationsSetting
 
 class  tagMCPushNotificationsSetting(Structure):
@@ -29036,62 +29916,6 @@
 
 m_NAtagMCZhuXianBossCnt=tagMCZhuXianBossCnt()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCZhuXianBossCnt.Cmd,m_NAtagMCZhuXianBossCnt.SubCmd))] = m_NAtagMCZhuXianBossCnt
-
-
-#------------------------------------------------------
-# B2 13 诛仙塔通关层数 #tagMCZhuXianTowerInfo
-
-class  tagMCZhuXianTowerInfo(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("Floor", c_int),    # 已通关层
-                  ("LastFloor", c_int),    # 上次挑战层
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xB2
-        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 = 0xB2
-        self.SubCmd = 0x13
-        self.Floor = 0
-        self.LastFloor = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCZhuXianTowerInfo)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// B2 13 诛仙塔通关层数 //tagMCZhuXianTowerInfo:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                Floor:%d,
-                                LastFloor:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.Floor,
-                                self.LastFloor
-                                )
-        return DumpString
-
-
-m_NAtagMCZhuXianTowerInfo=tagMCZhuXianTowerInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCZhuXianTowerInfo.Cmd,m_NAtagMCZhuXianTowerInfo.SubCmd))] = m_NAtagMCZhuXianTowerInfo
 
 
 #------------------------------------------------------

--
Gitblit v1.8.0