hch
2018-09-18 1c96b414fcd15749131c8eeb1857de82cfbe981e
3647 【后端】思璞游戏SDK接入 同步脱机挂封包
5个文件已修改
10825 ■■■■■ 已修改文件
Tool/Robot/AI/AIFile/AILoginout.py 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tool/Robot/Protocol/PacketsReceived.py 106 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tool/Robot/Protocol/PacketsReceivedPY.py 7703 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tool/Robot/Protocol/PacketsSend.py 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tool/Robot/Protocol/PacketsSendPY.py 2996 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tool/Robot/AI/AIFile/AILoginout.py
@@ -269,6 +269,8 @@
        cAccessLogin.AppID = appID
        cAccessLogin.ServerID = int(sid[1:])
        cAccessLogin.Adult = self.robot.GetRobotConfig()[3]
        cAccessLogin.ExtraLen = 0
        cAccessLogin.Extra = ""
        
        self.robot.Send(cAccessLogin)
        #print "New Player Login ---------- ", self.robot.GetRobotConfig()[1]
Tool/Robot/Protocol/PacketsReceived.py
@@ -2552,6 +2552,70 @@
#------------------------------------------------------
#01 32 创角成功 #tagCreateRoleSucess
class  tagCreateRoleSucess(Structure):
    Head = tagHead()
    PlayerID = 0    #(DWORD PlayerID)
    PlayerName = ""    #(char PlayerName[33])
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0x01
        self.Head.SubCmd = 0x32
        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.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0x01
        self.Head.SubCmd = 0x32
        self.PlayerID = 0
        self.PlayerName = ""
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 4
        length += 33
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteDWORD(data, self.PlayerID)
        data = CommFunc.WriteString(data, 33, self.PlayerName)
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                PlayerID:%d,
                                PlayerName:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.PlayerID,
                                self.PlayerName
                                )
        return DumpString
m_NAtagCreateRoleSucess=tagCreateRoleSucess()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCreateRoleSucess.Head.Cmd,m_NAtagCreateRoleSucess.Head.SubCmd))] = m_NAtagCreateRoleSucess
#------------------------------------------------------
#01 2A领取计时新手包结果#tagGetNewGuyCountBackwardsAwardResult对性能影响小
class  tagGetNewGuyCountBackwardsAwardResult(Structure):
@@ -6543,6 +6607,7 @@
    GradID = 0    #(DWORD GradID)//头衔ID
    State = 0    #(BYTE State)//装备和使用状态 按位判定,第一位0未装备1已装备 第二位0未使用 1使用
    CreateTime = ""    #(char CreateTime[30])//获得时间
    ExpireTime = 0    #(DWORD ExpireTime)// 持续时间,0为配表固定时间
    data = None
    def __init__(self):
@@ -6554,12 +6619,14 @@
        self.GradID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.State,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.CreateTime,_pos = CommFunc.ReadString(_lpData, _pos,30)
        self.ExpireTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        return _pos
    def Clear(self):
        self.GradID = 0
        self.State = 0
        self.CreateTime = ""
        self.ExpireTime = 0
        return
    def GetLength(self):
@@ -6567,6 +6634,7 @@
        length += 4
        length += 1
        length += 30
        length += 4
        return length
@@ -6575,18 +6643,21 @@
        data = CommFunc.WriteDWORD(data, self.GradID)
        data = CommFunc.WriteBYTE(data, self.State)
        data = CommFunc.WriteString(data, 30, self.CreateTime)
        data = CommFunc.WriteDWORD(data, self.ExpireTime)
        return data
    def OutputString(self):
        DumpString = '''
                                GradID:%d,
                                State:%d,
                                CreateTime:%s
                                CreateTime:%s,
                                ExpireTime:%d
                                '''\
                                %(
                                self.GradID,
                                self.State,
                                self.CreateTime
                                self.CreateTime,
                                self.ExpireTime
                                )
        return DumpString
@@ -6664,6 +6735,7 @@
    Head = tagHead()
    GradID = 0    #(DWORD GradID)//头衔ID
    CreateTime = ""    #(char CreateTime[30])//获得时间
    ExpireTime = 0    #(DWORD ExpireTime)// 持续时间,0为配表固定时间
    data = None
    def __init__(self):
@@ -6677,6 +6749,7 @@
        _pos = self.Head.ReadData(_lpData, _pos)
        self.GradID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.CreateTime,_pos = CommFunc.ReadString(_lpData, _pos,30)
        self.ExpireTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        return _pos
    def Clear(self):
@@ -6686,6 +6759,7 @@
        self.Head.SubCmd = 0x36
        self.GradID = 0
        self.CreateTime = ""
        self.ExpireTime = 0
        return
    def GetLength(self):
@@ -6693,6 +6767,7 @@
        length += self.Head.GetLength()
        length += 4
        length += 30
        length += 4
        return length
@@ -6701,18 +6776,21 @@
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteDWORD(data, self.GradID)
        data = CommFunc.WriteString(data, 30, self.CreateTime)
        data = CommFunc.WriteDWORD(data, self.ExpireTime)
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                GradID:%d,
                                CreateTime:%s
                                CreateTime:%s,
                                ExpireTime:%d
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.GradID,
                                self.CreateTime
                                self.CreateTime,
                                self.ExpireTime
                                )
        return DumpString
@@ -9485,6 +9563,7 @@
                  ("ObjType", c_ubyte),    #对象类型
                  ("PosX", c_ushort),    
                  ("PosY", c_ushort),    
                  ("Reason", c_int),    # 0为游戏通用,其他未决定的为技能ID
                  ]
    def __init__(self):
@@ -9505,6 +9584,7 @@
        self.ObjType = 0
        self.PosX = 0
        self.PosY = 0
        self.Reason = 0
        return
    def GetLength(self):
@@ -9520,7 +9600,8 @@
                                ObjID:%d,
                                ObjType:%d,
                                PosX:%d,
                                PosY:%d
                                PosY:%d,
                                Reason:%d
                                '''\
                                %(
                                self.Cmd,
@@ -9528,7 +9609,8 @@
                                self.ObjID,
                                self.ObjType,
                                self.PosX,
                                self.PosY
                                self.PosY,
                                self.Reason
                                )
        return DumpString
@@ -12424,6 +12506,8 @@
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("PlayerID", c_int),    
                  ("KillerID", c_int),
                  ("KillerType", c_ubyte),
                  ]
    def __init__(self):
@@ -12441,6 +12525,8 @@
        self.Cmd = 0x06
        self.SubCmd = 0x09
        self.PlayerID = 0
        self.KillerID = 0
        self.KillerType = 0
        return
    def GetLength(self):
@@ -12453,12 +12539,16 @@
        DumpString = '''//06 09 玩家死亡//tagPlayerDie:
                                Cmd:%s,
                                SubCmd:%s,
                                PlayerID:%d
                                PlayerID:%d,
                                KillerID:%d,
                                KillerType:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.PlayerID
                                self.PlayerID,
                                self.KillerID,
                                self.KillerType
                                )
        return DumpString
Tool/Robot/Protocol/PacketsReceivedPY.py
Diff too large
Tool/Robot/Protocol/PacketsSend.py
@@ -5204,6 +5204,8 @@
    Phone = 0    #(BYTE Phone)//是否绑定手机
    ServerID = 0    #(DWORD ServerID)//服务器ID
    Adult = 0    #(BYTE Adult)//是否成年 0未成年 1成年
    ExtraLen = 0    #(BYTE ExtraLen)//扩展长度
    Extra = ""    #(String Extra)//扩展内容,根据不同平台而定
    data = None
    def __init__(self):
@@ -5227,6 +5229,8 @@
        self.Phone,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.ServerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.Adult,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.ExtraLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.Extra,_pos = CommFunc.ReadString(_lpData, _pos,self.ExtraLen)
        return _pos
    def Clear(self):
@@ -5246,6 +5250,8 @@
        self.Phone = 0
        self.ServerID = 0
        self.Adult = 0
        self.ExtraLen = 0
        self.Extra = ""
        return
    def GetLength(self):
@@ -5263,6 +5269,8 @@
        length += 1
        length += 4
        length += 1
        length += 1
        length += len(self.Extra)
        return length
@@ -5281,6 +5289,8 @@
        data = CommFunc.WriteBYTE(data, self.Phone)
        data = CommFunc.WriteDWORD(data, self.ServerID)
        data = CommFunc.WriteBYTE(data, self.Adult)
        data = CommFunc.WriteBYTE(data, self.ExtraLen)
        data = CommFunc.WriteString(data, self.ExtraLen, self.Extra)
        return data
    def OutputString(self):
@@ -5297,7 +5307,9 @@
                                TokenExpire:%s,
                                Phone:%d,
                                ServerID:%d,
                                Adult:%d
                                Adult:%d,
                                ExtraLen:%d,
                                Extra:%s
                                '''\
                                %(
                                self.Head.OutputString(),
@@ -5312,7 +5324,9 @@
                                self.TokenExpire,
                                self.Phone,
                                self.ServerID,
                                self.Adult
                                self.Adult,
                                self.ExtraLen,
                                self.Extra
                                )
        return DumpString
Tool/Robot/Protocol/PacketsSendPY.py
@@ -588,58 +588,6 @@
#------------------------------------------------------
# A4 04 抢家族红包 #tagCGGrabFamilyRedPacket
class  tagCGGrabFamilyRedPacket(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("RedPaketID", c_int),    # 红包ID
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xA4
        self.SubCmd = 0x04
        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 = 0xA4
        self.SubCmd = 0x04
        self.RedPaketID = 0
        return
    def GetLength(self):
        return sizeof(tagCGGrabFamilyRedPacket)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// A4 04 抢家族红包 //tagCGGrabFamilyRedPacket:
                                Cmd:%s,
                                SubCmd:%s,
                                RedPaketID:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.RedPaketID
                                )
        return DumpString
m_NAtagCGGrabFamilyRedPacket=tagCGGrabFamilyRedPacket()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGGrabFamilyRedPacket.Cmd,m_NAtagCGGrabFamilyRedPacket.SubCmd))] = m_NAtagCGGrabFamilyRedPacket
#------------------------------------------------------
#A4 03 加入家族审核情况 #tagCGJoinFamilyReply
class  tagCGJoinFamilyReply(Structure):
@@ -793,6 +741,155 @@
m_NAtagCGOpenFamilyBossFB=tagCGOpenFamilyBossFB()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGOpenFamilyBossFB.Cmd,m_NAtagCGOpenFamilyBossFB.SubCmd))] = m_NAtagCGOpenFamilyBossFB
#------------------------------------------------------
# A4 04 创建家族 #tagCGPyCreatFamily
class  tagCGPyCreatFamily(Structure):
    Head = tagHead()
    Name = ""    #(char Name[33])
    FakeID = 0    #(WORD FakeID)//假仙盟编号
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xA4
        self.Head.SubCmd = 0x04
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.Name,_pos = CommFunc.ReadString(_lpData, _pos,33)
        self.FakeID,_pos = CommFunc.ReadWORD(_lpData, _pos)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xA4
        self.Head.SubCmd = 0x04
        self.Name = ""
        self.FakeID = 0
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 33
        length += 2
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteString(data, 33, self.Name)
        data = CommFunc.WriteWORD(data, self.FakeID)
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                Name:%s,
                                FakeID:%d
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.Name,
                                self.FakeID
                                )
        return DumpString
m_NAtagCGPyCreatFamily=tagCGPyCreatFamily()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGPyCreatFamily.Head.Cmd,m_NAtagCGPyCreatFamily.Head.SubCmd))] = m_NAtagCGPyCreatFamily
#------------------------------------------------------
# A4 12 搜索家族 #tagCGPySearchFamily
class  tagCGPySearchFamily(Structure):
    Head = tagHead()
    MsgLen = 0    #(BYTE MsgLen)//模糊搜索家族,如果输入为空,则为不限制该条件
    Msg = ""    #(String Msg)//size = MsgLen
    LV = 0    #(BYTE LV)//最低家族等级,如果为0,则不限制该条件
    MaxCount = 0    #(BYTE MaxCount)//搜索结果所需最大条数,后端限制最多返回20条
    IsSearching = 0    #(BYTE IsSearching)//默认1,如果有指定其他值,则返回指定值
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xA4
        self.Head.SubCmd = 0x12
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.MsgLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.Msg,_pos = CommFunc.ReadString(_lpData, _pos,self.MsgLen)
        self.LV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.MaxCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.IsSearching,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xA4
        self.Head.SubCmd = 0x12
        self.MsgLen = 0
        self.Msg = ""
        self.LV = 0
        self.MaxCount = 0
        self.IsSearching = 0
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 1
        length += len(self.Msg)
        length += 1
        length += 1
        length += 1
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteBYTE(data, self.MsgLen)
        data = CommFunc.WriteString(data, self.MsgLen, self.Msg)
        data = CommFunc.WriteBYTE(data, self.LV)
        data = CommFunc.WriteBYTE(data, self.MaxCount)
        data = CommFunc.WriteBYTE(data, self.IsSearching)
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                MsgLen:%d,
                                Msg:%s,
                                LV:%d,
                                MaxCount:%d,
                                IsSearching:%d
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.MsgLen,
                                self.Msg,
                                self.LV,
                                self.MaxCount,
                                self.IsSearching
                                )
        return DumpString
m_NAtagCGPySearchFamily=tagCGPySearchFamily()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGPySearchFamily.Head.Cmd,m_NAtagCGPySearchFamily.Head.SubCmd))] = m_NAtagCGPySearchFamily
#------------------------------------------------------
@@ -1347,19 +1444,20 @@
#------------------------------------------------------
#A9 10 请求魔方寻宝记录 #tagCGMagicTreasureRecord
# AC 05 召集仙盟成员打boss #tagCGCallupFamilyMemberToBoss
class  tagCGMagicTreasureRecord(Structure):
class  tagCGCallupFamilyMemberToBoss(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("NPCID", c_int),
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xA9
        self.SubCmd = 0x10
        self.Cmd = 0xAC
        self.SubCmd = 0x05
        return
    def ReadData(self, stringData, _pos=0, _len=0):
@@ -1368,30 +1466,33 @@
        return _pos + self.GetLength()
    def Clear(self):
        self.Cmd = 0xA9
        self.SubCmd = 0x10
        self.Cmd = 0xAC
        self.SubCmd = 0x05
        self.NPCID = 0
        return
    def GetLength(self):
        return sizeof(tagCGMagicTreasureRecord)
        return sizeof(tagCGCallupFamilyMemberToBoss)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''//A9 10 请求魔方寻宝记录 //tagCGMagicTreasureRecord:
        DumpString = '''// AC 05 召集仙盟成员打boss //tagCGCallupFamilyMemberToBoss:
                                Cmd:%s,
                                SubCmd:%s
                                SubCmd:%s,
                                NPCID:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd
                                self.SubCmd,
                                self.NPCID
                                )
        return DumpString
m_NAtagCGMagicTreasureRecord=tagCGMagicTreasureRecord()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGMagicTreasureRecord.Cmd,m_NAtagCGMagicTreasureRecord.SubCmd))] = m_NAtagCGMagicTreasureRecord
m_NAtagCGCallupFamilyMemberToBoss=tagCGCallupFamilyMemberToBoss()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGCallupFamilyMemberToBoss.Cmd,m_NAtagCGCallupFamilyMemberToBoss.SubCmd))] = m_NAtagCGCallupFamilyMemberToBoss
#------------------------------------------------------
@@ -1473,54 +1574,6 @@
#------------------------------------------------------
# AC 09  查询活动怪信息 #tagCGQueryFestivalNPC
class  tagCGQueryFestivalNPC(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xAC
        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 = 0xAC
        self.SubCmd = 0x09
        return
    def GetLength(self):
        return sizeof(tagCGQueryFestivalNPC)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// AC 09  查询活动怪信息 //tagCGQueryFestivalNPC:
                                Cmd:%s,
                                SubCmd:%s
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd
                                )
        return DumpString
m_NAtagCGQueryFestivalNPC=tagCGQueryFestivalNPC()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGQueryFestivalNPC.Cmd,m_NAtagCGQueryFestivalNPC.SubCmd))] = m_NAtagCGQueryFestivalNPC
#------------------------------------------------------
# AC 01 仙魔之争报名 #tagCGJoinXMZZ
class  tagCGJoinXMZZ(Structure):
@@ -1566,6 +1619,102 @@
m_NAtagCGJoinXMZZ=tagCGJoinXMZZ()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGJoinXMZZ.Cmd,m_NAtagCGJoinXMZZ.SubCmd))] = m_NAtagCGJoinXMZZ
#------------------------------------------------------
# AC 04 查询仙盟抢Boss所有Boss当前进度 #tagCGQueryAllFamilyBossHurt
class  tagCGQueryAllFamilyBossHurt(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xAC
        self.SubCmd = 0x04
        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 = 0xAC
        self.SubCmd = 0x04
        return
    def GetLength(self):
        return sizeof(tagCGQueryAllFamilyBossHurt)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// AC 04 查询仙盟抢Boss所有Boss当前进度 //tagCGQueryAllFamilyBossHurt:
                                Cmd:%s,
                                SubCmd:%s
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd
                                )
        return DumpString
m_NAtagCGQueryAllFamilyBossHurt=tagCGQueryAllFamilyBossHurt()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGQueryAllFamilyBossHurt.Cmd,m_NAtagCGQueryAllFamilyBossHurt.SubCmd))] = m_NAtagCGQueryAllFamilyBossHurt
#------------------------------------------------------
# AC 03 仙魔之争信息查询 #tagCGXMZZInfoQuery
class  tagCGXMZZInfoQuery(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xAC
        self.SubCmd = 0x03
        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 = 0xAC
        self.SubCmd = 0x03
        return
    def GetLength(self):
        return sizeof(tagCGXMZZInfoQuery)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// AC 03 仙魔之争信息查询 //tagCGXMZZInfoQuery:
                                Cmd:%s,
                                SubCmd:%s
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd
                                )
        return DumpString
m_NAtagCGXMZZInfoQuery=tagCGXMZZInfoQuery()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGXMZZInfoQuery.Cmd,m_NAtagCGXMZZInfoQuery.SubCmd))] = m_NAtagCGXMZZInfoQuery
#------------------------------------------------------
@@ -1989,6 +2138,101 @@
#------------------------------------------------------
#B3 07 语音聊天 #tagCGVoiceChat
class  tagCGVoiceChat(Structure):
    Head = tagHead()
    ChannelType = 0    #(BYTE ChannelType)// 1 世界 2 仙盟 3 私聊(好友) 4 队伍 -------查看封包tagCMVoiceChat 5 区域
    TargetNameLen = 0    #(BYTE TargetNameLen)
    TargetName = ""    #(String TargetName)//size = TargetNameLen
    TargetID = 0    #(DWORD TargetID)// 默认发玩家ID,没有ID才发名称
    Len = 0    #(WORD Len)
    Content = list()    #(vector<BYTE> Content)//size = Len
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xB3
        self.Head.SubCmd = 0x07
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.ChannelType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.TargetNameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.TargetName,_pos = CommFunc.ReadString(_lpData, _pos,self.TargetNameLen)
        self.TargetID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.Len,_pos = CommFunc.ReadWORD(_lpData, _pos)
        for i in range(self.Len):
            value,_pos=CommFunc.ReadBYTE(_lpData,_pos)
            self.Content.append(value)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xB3
        self.Head.SubCmd = 0x07
        self.ChannelType = 0
        self.TargetNameLen = 0
        self.TargetName = ""
        self.TargetID = 0
        self.Len = 0
        self.Content = list()
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 1
        length += 1
        length += len(self.TargetName)
        length += 4
        length += 2
        length += 1 * self.Len
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteBYTE(data, self.ChannelType)
        data = CommFunc.WriteBYTE(data, self.TargetNameLen)
        data = CommFunc.WriteString(data, self.TargetNameLen, self.TargetName)
        data = CommFunc.WriteDWORD(data, self.TargetID)
        data = CommFunc.WriteWORD(data, self.Len)
        for i in range(self.Len):
            data = CommFunc.WriteBYTE(data, self.Content[i])
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                ChannelType:%d,
                                TargetNameLen:%d,
                                TargetName:%s,
                                TargetID:%d,
                                Len:%d,
                                Content:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.ChannelType,
                                self.TargetNameLen,
                                self.TargetName,
                                self.TargetID,
                                self.Len,
                                "..."
                                )
        return DumpString
m_NAtagCGVoiceChat=tagCGVoiceChat()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGVoiceChat.Head.Cmd,m_NAtagCGVoiceChat.Head.SubCmd))] = m_NAtagCGVoiceChat
#------------------------------------------------------
#B3 03 是否允许加入好友的回应#tagCGJoinFriendAnswer
class  tagCGJoinFriendAnswer(Structure):
@@ -2397,6 +2641,62 @@
m_NAtagCGInvitePlayerJoinTeam=tagCGInvitePlayerJoinTeam()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGInvitePlayerJoinTeam.Cmd,m_NAtagCGInvitePlayerJoinTeam.SubCmd))] = m_NAtagCGInvitePlayerJoinTeam
#------------------------------------------------------
# B9 0A 按条件邀请玩家加入队伍 #tagCGInvitePlayerJoinTeamByLV
class  tagCGInvitePlayerJoinTeamByLV(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("LVLimit", c_ushort),    # 目标玩家大于等于此等级
                  ("InviteCnt", c_ubyte),    # 邀请玩家个数
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xB9
        self.SubCmd = 0x0A
        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 = 0xB9
        self.SubCmd = 0x0A
        self.LVLimit = 0
        self.InviteCnt = 0
        return
    def GetLength(self):
        return sizeof(tagCGInvitePlayerJoinTeamByLV)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// B9 0A 按条件邀请玩家加入队伍 //tagCGInvitePlayerJoinTeamByLV:
                                Cmd:%s,
                                SubCmd:%s,
                                LVLimit:%d,
                                InviteCnt:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.LVLimit,
                                self.InviteCnt
                                )
        return DumpString
m_NAtagCGInvitePlayerJoinTeamByLV=tagCGInvitePlayerJoinTeamByLV()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGInvitePlayerJoinTeamByLV.Cmd,m_NAtagCGInvitePlayerJoinTeamByLV.SubCmd))] = m_NAtagCGInvitePlayerJoinTeamByLV
#------------------------------------------------------
@@ -3748,7 +4048,7 @@
    SpeakerType = 0    #(BYTE SpeakerType)//1-本服;2-跨服
    IsUseGold = 0    #(BYTE IsUseGold)//是否使用钻石
    ItemIndex = 0    #(BYTE ItemIndex)//使用物品说话时, 物品Index
    TextLen = 0    #(BYTE TextLen)//字符长度
    TextLen = 0    #(WORD TextLen)//字符长度
    Text = ""    #(String Text)//size = TextLen
    data = None
@@ -3764,7 +4064,7 @@
        self.SpeakerType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.IsUseGold,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.ItemIndex,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.TextLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.TextLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.Text,_pos = CommFunc.ReadString(_lpData, _pos,self.TextLen)
        return _pos
@@ -3786,7 +4086,7 @@
        length += 1
        length += 1
        length += 1
        length += 1
        length += 2
        length += len(self.Text)
        return length
@@ -3797,7 +4097,7 @@
        data = CommFunc.WriteBYTE(data, self.SpeakerType)
        data = CommFunc.WriteBYTE(data, self.IsUseGold)
        data = CommFunc.WriteBYTE(data, self.ItemIndex)
        data = CommFunc.WriteBYTE(data, self.TextLen)
        data = CommFunc.WriteWORD(data, self.TextLen)
        data = CommFunc.WriteString(data, self.TextLen, self.Text)
        return data
@@ -3950,6 +4250,151 @@
m_NAtagCMQueryBossHurtList=tagCMQueryBossHurtList()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMQueryBossHurtList.Cmd,m_NAtagCMQueryBossHurtList.SubCmd))] = m_NAtagCMQueryBossHurtList
#------------------------------------------------------
# A2 28 查询仙盟抢Boss伤血列表 #tagCMQueryFamilyBossHurt
class  tagCMQueryFamilyBossHurt(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("ObjID", c_int),
                  ("NPCID", c_int),
                  ("QueryType", c_ubyte),    # 0-实时仙盟伤血,1-历史仙盟伤血,2-实时玩家伤血,3-历史玩家伤血
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xA2
        self.SubCmd = 0x28
        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 = 0xA2
        self.SubCmd = 0x28
        self.ObjID = 0
        self.NPCID = 0
        self.QueryType = 0
        return
    def GetLength(self):
        return sizeof(tagCMQueryFamilyBossHurt)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// A2 28 查询仙盟抢Boss伤血列表 //tagCMQueryFamilyBossHurt:
                                Cmd:%s,
                                SubCmd:%s,
                                ObjID:%d,
                                NPCID:%d,
                                QueryType:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.ObjID,
                                self.NPCID,
                                self.QueryType
                                )
        return DumpString
m_NAtagCMQueryFamilyBossHurt=tagCMQueryFamilyBossHurt()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMQueryFamilyBossHurt.Cmd,m_NAtagCMQueryFamilyBossHurt.SubCmd))] = m_NAtagCMQueryFamilyBossHurt
#------------------------------------------------------
# A2 27 查询地图NPC数量信息 #tagCMQueryNPCCntInfo
class  tagCMQueryNPCCntInfo(Structure):
    Head = tagHead()
    MapID = 0    #(DWORD MapID)// 目标地图ID
    LineID = 0    #(WORD LineID)// 线路ID
    IsNoTimeLimit = 0    #(BYTE IsNoTimeLimit)//是否没有查询时间限制,默认有限制
    NPCIDListLen = 0    #(BYTE NPCIDListLen)
    NPCIDList = ""    #(String NPCIDList)// 需要查询的NPCID列表
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xA2
        self.Head.SubCmd = 0x27
        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.LineID,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.IsNoTimeLimit,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.NPCIDListLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.NPCIDList,_pos = CommFunc.ReadString(_lpData, _pos,self.NPCIDListLen)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xA2
        self.Head.SubCmd = 0x27
        self.MapID = 0
        self.LineID = 0
        self.IsNoTimeLimit = 0
        self.NPCIDListLen = 0
        self.NPCIDList = ""
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 4
        length += 2
        length += 1
        length += 1
        length += len(self.NPCIDList)
        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.LineID)
        data = CommFunc.WriteBYTE(data, self.IsNoTimeLimit)
        data = CommFunc.WriteBYTE(data, self.NPCIDListLen)
        data = CommFunc.WriteString(data, self.NPCIDListLen, self.NPCIDList)
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                MapID:%d,
                                LineID:%d,
                                IsNoTimeLimit:%d,
                                NPCIDListLen:%d,
                                NPCIDList:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.MapID,
                                self.LineID,
                                self.IsNoTimeLimit,
                                self.NPCIDListLen,
                                self.NPCIDList
                                )
        return DumpString
m_NAtagCMQueryNPCCntInfo=tagCMQueryNPCCntInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMQueryNPCCntInfo.Head.Cmd,m_NAtagCMQueryNPCCntInfo.Head.SubCmd))] = m_NAtagCMQueryNPCCntInfo
#------------------------------------------------------
@@ -4470,6 +4915,101 @@
#------------------------------------------------------
#A2 26 语音聊天 #tagCMVoiceChat
class  tagCMVoiceChat(Structure):
    Head = tagHead()
    ChannelType = 0    #(BYTE ChannelType)//  5 区域 --- 查看封包tagCGVoiceChat 1 世界 2 仙盟 3 私聊(好友) 4 队伍
    TargetNameLen = 0    #(BYTE TargetNameLen)
    TargetName = ""    #(String TargetName)//size = TargetNameLen
    TargetID = 0    #(DWORD TargetID)// 私聊默认发玩家ID,没有ID才发名称
    Len = 0    #(WORD Len)
    Content = list()    #(vector<BYTE> Content)//size = Len
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xA2
        self.Head.SubCmd = 0x26
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.ChannelType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.TargetNameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.TargetName,_pos = CommFunc.ReadString(_lpData, _pos,self.TargetNameLen)
        self.TargetID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.Len,_pos = CommFunc.ReadWORD(_lpData, _pos)
        for i in range(self.Len):
            value,_pos=CommFunc.ReadBYTE(_lpData,_pos)
            self.Content.append(value)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xA2
        self.Head.SubCmd = 0x26
        self.ChannelType = 0
        self.TargetNameLen = 0
        self.TargetName = ""
        self.TargetID = 0
        self.Len = 0
        self.Content = list()
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 1
        length += 1
        length += len(self.TargetName)
        length += 4
        length += 2
        length += 1 * self.Len
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteBYTE(data, self.ChannelType)
        data = CommFunc.WriteBYTE(data, self.TargetNameLen)
        data = CommFunc.WriteString(data, self.TargetNameLen, self.TargetName)
        data = CommFunc.WriteDWORD(data, self.TargetID)
        data = CommFunc.WriteWORD(data, self.Len)
        for i in range(self.Len):
            data = CommFunc.WriteBYTE(data, self.Content[i])
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                ChannelType:%d,
                                TargetNameLen:%d,
                                TargetName:%s,
                                TargetID:%d,
                                Len:%d,
                                Content:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.ChannelType,
                                self.TargetNameLen,
                                self.TargetName,
                                self.TargetID,
                                self.Len,
                                "..."
                                )
        return DumpString
m_NAtagCMVoiceChat=tagCMVoiceChat()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMVoiceChat.Head.Cmd,m_NAtagCMVoiceChat.Head.SubCmd))] = m_NAtagCMVoiceChat
#------------------------------------------------------
#A2 12 查看玩家详细信息#tagCMViewPlayerInfo
class  tagCMViewPlayerInfo(Structure):
@@ -4519,66 +5059,6 @@
m_NAtagCMViewPlayerInfo=tagCMViewPlayerInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMViewPlayerInfo.Cmd,m_NAtagCMViewPlayerInfo.SubCmd))] = m_NAtagCMViewPlayerInfo
#------------------------------------------------------
# A3 16 购买物品 #tagCMBuyItem
class  tagCMBuyItem(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("ItemID", c_int),    #物品id
                  ("Cnt", c_int),    #个数
                  ("MoneyType", c_ubyte),    #金钱类型
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xA3
        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 = 0xA3
        self.SubCmd = 0x16
        self.ItemID = 0
        self.Cnt = 0
        self.MoneyType = 0
        return
    def GetLength(self):
        return sizeof(tagCMBuyItem)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// A3 16 购买物品 //tagCMBuyItem:
                                Cmd:%s,
                                SubCmd:%s,
                                ItemID:%d,
                                Cnt:%d,
                                MoneyType:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.ItemID,
                                self.Cnt,
                                self.MoneyType
                                )
        return DumpString
m_NAtagCMBuyItem=tagCMBuyItem()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMBuyItem.Cmd,m_NAtagCMBuyItem.SubCmd))] = m_NAtagCMBuyItem
#------------------------------------------------------
@@ -4706,6 +5186,122 @@
#------------------------------------------------------
# A3 2D 装备分解设置 #tagCMDecomposeSeting
class  tagCMDecomposeSeting(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("Seting", c_int),
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xA3
        self.SubCmd = 0x2D
        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 = 0x2D
        self.Seting = 0
        return
    def GetLength(self):
        return sizeof(tagCMDecomposeSeting)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// A3 2D 装备分解设置 //tagCMDecomposeSeting:
                                Cmd:%s,
                                SubCmd:%s,
                                Seting:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.Seting
                                )
        return DumpString
m_NAtagCMDecomposeSeting=tagCMDecomposeSeting()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMDecomposeSeting.Cmd,m_NAtagCMDecomposeSeting.SubCmd))] = m_NAtagCMDecomposeSeting
#------------------------------------------------------
# A3 09 转移物品到其他背包 #tagCMDropItemToOtherPack
class  tagCMDropItemToOtherPack(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("SrcBackpack", c_ubyte),    #源背包类型
                  ("DesBackPack", c_ubyte),    #目标背包类型
                  ("SrcIndex", c_ushort),    #转移物品索引位置;当全部转移时此值无效
                  ("IsAll", c_ubyte),    #是否全部转移
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xA3
        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 = 0xA3
        self.SubCmd = 0x09
        self.SrcBackpack = 0
        self.DesBackPack = 0
        self.SrcIndex = 0
        self.IsAll = 0
        return
    def GetLength(self):
        return sizeof(tagCMDropItemToOtherPack)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// A3 09 转移物品到其他背包 //tagCMDropItemToOtherPack:
                                Cmd:%s,
                                SubCmd:%s,
                                SrcBackpack:%d,
                                DesBackPack:%d,
                                SrcIndex:%d,
                                IsAll:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.SrcBackpack,
                                self.DesBackPack,
                                self.SrcIndex,
                                self.IsAll
                                )
        return DumpString
m_NAtagCMDropItemToOtherPack=tagCMDropItemToOtherPack()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMDropItemToOtherPack.Cmd,m_NAtagCMDropItemToOtherPack.SubCmd))] = m_NAtagCMDropItemToOtherPack
#------------------------------------------------------
#A3 15 装备打孔 # tagCMEquipAddHole
class  tagCMEquipAddHole(Structure):
@@ -4770,7 +5366,6 @@
class  tagCMEquipDecompose(Structure):
    Head = tagHead()
    PackType = 0    #(BYTE PackType)//背包类型
    IndexCount = 0    #(BYTE IndexCount)//材料所在背包索引的数量
    IndexList = list()    #(vector<BYTE> IndexList)//材料所在背包索引列表
    data = None
@@ -4784,7 +5379,6 @@
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.PackType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.IndexCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.IndexCount):
            value,_pos=CommFunc.ReadBYTE(_lpData,_pos)
@@ -4796,7 +5390,6 @@
        self.Head.Clear()
        self.Head.Cmd = 0xA3
        self.Head.SubCmd = 0x2C
        self.PackType = 0
        self.IndexCount = 0
        self.IndexList = list()
        return
@@ -4805,7 +5398,6 @@
        length = 0
        length += self.Head.GetLength()
        length += 1
        length += 1
        length += 1 * self.IndexCount
        return length
@@ -4813,7 +5405,6 @@
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteBYTE(data, self.PackType)
        data = CommFunc.WriteBYTE(data, self.IndexCount)
        for i in range(self.IndexCount):
            data = CommFunc.WriteBYTE(data, self.IndexList[i])
@@ -4822,13 +5413,11 @@
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                PackType:%d,
                                IndexCount:%d,
                                IndexList:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.PackType,
                                self.IndexCount,
                                "..."
                                )
@@ -5303,78 +5892,6 @@
#------------------------------------------------------
#A3 13 装备继承#tagCMInheritEquip
class  tagCMInheritEquip(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("SrcPackType", c_ubyte),    #背包类型:rptItem, rptEquip, rptPetEquip1~5
                  ("SrcEquipIndex", c_ubyte),    #材料装备在对应背包中索引
                  ("DesPackType", c_ubyte),    #目标装备所在背包类型:rptItem, rptEquip, rptPetEquip1~5
                  ("DesEquipIndex", c_ubyte),    #目标装备所在背包索引
                  ("AutoBuy", c_ubyte),    #自动购买
                  ("InheritGreatAttr", c_ubyte),    #是否继承主装备卓越属性
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xA3
        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 = 0xA3
        self.SubCmd = 0x13
        self.SrcPackType = 0
        self.SrcEquipIndex = 0
        self.DesPackType = 0
        self.DesEquipIndex = 0
        self.AutoBuy = 0
        self.InheritGreatAttr = 0
        return
    def GetLength(self):
        return sizeof(tagCMInheritEquip)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''//A3 13 装备继承//tagCMInheritEquip:
                                Cmd:%s,
                                SubCmd:%s,
                                SrcPackType:%d,
                                SrcEquipIndex:%d,
                                DesPackType:%d,
                                DesEquipIndex:%d,
                                AutoBuy:%d,
                                InheritGreatAttr:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.SrcPackType,
                                self.SrcEquipIndex,
                                self.DesPackType,
                                self.DesEquipIndex,
                                self.AutoBuy,
                                self.InheritGreatAttr
                                )
        return DumpString
m_NAtagCMInheritEquip=tagCMInheritEquip()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMInheritEquip.Cmd,m_NAtagCMInheritEquip.SubCmd))] = m_NAtagCMInheritEquip
#------------------------------------------------------
#A3 02 丢弃背包物品 #tagPlayerDropItem
class  tagPlayerDropItem(Structure):
@@ -5436,6 +5953,83 @@
m_NAtagPlayerDropItem=tagPlayerDropItem()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagPlayerDropItem.Cmd,m_NAtagPlayerDropItem.SubCmd))] = m_NAtagPlayerDropItem
#------------------------------------------------------
# A3 2A 回收魂石 #tagCMRecycleAttrFruit
class  tagCMRecycleAttrFruit(Structure):
    Head = tagHead()
    IndexCount = 0    #(BYTE IndexCount)//索引个数
    IndexList = list()    #(vector<BYTE> IndexList)//物品在背包中索引列表
    RecycleCountList = list()    #(vector<WORD> RecycleCountList)//索引对应回收个数列表
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xA3
        self.Head.SubCmd = 0x2A
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_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.ReadWORD(_lpData,_pos)
            self.RecycleCountList.append(value)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xA3
        self.Head.SubCmd = 0x2A
        self.IndexCount = 0
        self.IndexList = list()
        self.RecycleCountList = list()
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 1
        length += 1 * self.IndexCount
        length += 2 * self.IndexCount
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        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.WriteWORD(data, self.RecycleCountList[i])
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                IndexCount:%d,
                                IndexList:%s,
                                RecycleCountList:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.IndexCount,
                                "...",
                                "..."
                                )
        return DumpString
m_NAtagCMRecycleAttrFruit=tagCMRecycleAttrFruit()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMRecycleAttrFruit.Head.Cmd,m_NAtagCMRecycleAttrFruit.Head.SubCmd))] = m_NAtagCMRecycleAttrFruit
#------------------------------------------------------
@@ -5676,62 +6270,6 @@
#------------------------------------------------------
# A3 2D 红装剥离 #tagCMSuitEquipStrip
class  tagCMSuitEquipStrip(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("PackType", c_ubyte),    #背包类型
                  ("ItemIndex", c_ubyte),    #材料所在背包索引
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xA3
        self.SubCmd = 0x2D
        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 = 0x2D
        self.PackType = 0
        self.ItemIndex = 0
        return
    def GetLength(self):
        return sizeof(tagCMSuitEquipStrip)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// A3 2D 红装剥离 //tagCMSuitEquipStrip:
                                Cmd:%s,
                                SubCmd:%s,
                                PackType:%d,
                                ItemIndex:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.PackType,
                                self.ItemIndex
                                )
        return DumpString
m_NAtagCMSuitEquipStrip=tagCMSuitEquipStrip()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMSuitEquipStrip.Cmd,m_NAtagCMSuitEquipStrip.SubCmd))] = m_NAtagCMSuitEquipStrip
#------------------------------------------------------
#A3 20 将魔方背包中的物品转移到人物背包中 #tagCMMagicItemPutInItemPack
class  tagCMMagicItemPutInItemPack(Structure):
@@ -5926,6 +6464,58 @@
#------------------------------------------------------
# A3 2F 宗门试炼兑换 #tagCMTrialExchange
class  tagCMTrialExchange(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("ID", c_int),    #兑换ID
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xA3
        self.SubCmd = 0x2F
        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 = 0x2F
        self.ID = 0
        return
    def GetLength(self):
        return sizeof(tagCMTrialExchange)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// A3 2F 宗门试炼兑换 //tagCMTrialExchange:
                                Cmd:%s,
                                SubCmd:%s,
                                ID:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.ID
                                )
        return DumpString
m_NAtagCMTrialExchange=tagCMTrialExchange()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMTrialExchange.Cmd,m_NAtagCMTrialExchange.SubCmd))] = m_NAtagCMTrialExchange
#------------------------------------------------------
# A3 2B 一键使用属性果实 #tagCMUseAllAttrFruit
class  tagCMUseAllAttrFruit(Structure):
@@ -5975,122 +6565,6 @@
m_NAtagCMUseAllAttrFruit=tagCMUseAllAttrFruit()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMUseAllAttrFruit.Cmd,m_NAtagCMUseAllAttrFruit.SubCmd))] = m_NAtagCMUseAllAttrFruit
#------------------------------------------------------
#A3 10 一键使用图鉴 #tagCMUseAllCard
class  tagCMUseAllCard(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("CardColor", c_ushort),    #使用的图鉴颜色品质,可配置多个颜色品质,颜色品质从0开始,对应到二进制位
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xA3
        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 = 0xA3
        self.SubCmd = 0x10
        self.CardColor = 0
        return
    def GetLength(self):
        return sizeof(tagCMUseAllCard)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''//A3 10 一键使用图鉴 //tagCMUseAllCard:
                                Cmd:%s,
                                SubCmd:%s,
                                CardColor:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.CardColor
                                )
        return DumpString
m_NAtagCMUseAllCard=tagCMUseAllCard()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMUseAllCard.Cmd,m_NAtagCMUseAllCard.SubCmd))] = m_NAtagCMUseAllCard
#------------------------------------------------------
# A3 2A 使用皇室宝箱 #tagCMUseCRBox
class  tagCMUseCRBox(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("FuncIndex", c_ubyte),    #功能索引
                  ("BoxIndex", c_ubyte),    #宝箱格子索引
                  ("UseItemIndex", c_ubyte),    # 物品在背包中的索引
                  ("UseType", c_ubyte),    #使用类型<0-开始使用,1-开始解锁,2-立即开启>
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xA3
        self.SubCmd = 0x2A
        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 = 0x2A
        self.FuncIndex = 0
        self.BoxIndex = 0
        self.UseItemIndex = 0
        self.UseType = 0
        return
    def GetLength(self):
        return sizeof(tagCMUseCRBox)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// A3 2A 使用皇室宝箱 //tagCMUseCRBox:
                                Cmd:%s,
                                SubCmd:%s,
                                FuncIndex:%d,
                                BoxIndex:%d,
                                UseItemIndex:%d,
                                UseType:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.FuncIndex,
                                self.BoxIndex,
                                self.UseItemIndex,
                                self.UseType
                                )
        return DumpString
m_NAtagCMUseCRBox=tagCMUseCRBox()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMUseCRBox.Cmd,m_NAtagCMUseCRBox.SubCmd))] = m_NAtagCMUseCRBox
#------------------------------------------------------
@@ -6151,66 +6625,6 @@
m_NAtagCMUseItems=tagCMUseItems()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMUseItems.Cmd,m_NAtagCMUseItems.SubCmd))] = m_NAtagCMUseItems
#------------------------------------------------------
# A3 27 使用过程物品 #tagCMUseProcessItem
class  tagCMUseProcessItem(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("UseType", c_ubyte),    # 使用类型 <0-开始使用, 1-使用操作, 2-结束使用>
                  ("UseItemIndex", c_ubyte),    # 物品在背包中的索引
                  ("ExtraInfo", c_ubyte),    # 预留信息
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xA3
        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 = 0xA3
        self.SubCmd = 0x27
        self.UseType = 0
        self.UseItemIndex = 0
        self.ExtraInfo = 0
        return
    def GetLength(self):
        return sizeof(tagCMUseProcessItem)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// A3 27 使用过程物品 //tagCMUseProcessItem:
                                Cmd:%s,
                                SubCmd:%s,
                                UseType:%d,
                                UseItemIndex:%d,
                                ExtraInfo:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.UseType,
                                self.UseItemIndex,
                                self.ExtraInfo
                                )
        return DumpString
m_NAtagCMUseProcessItem=tagCMUseProcessItem()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMUseProcessItem.Cmd,m_NAtagCMUseProcessItem.SubCmd))] = m_NAtagCMUseProcessItem
#------------------------------------------------------
@@ -6400,7 +6814,7 @@
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("HorseID", c_ubyte),    #坐骑ID
                  ("HorseID", c_int),    #坐骑ID
                  ]
    def __init__(self):
@@ -6498,6 +6912,58 @@
m_NAtagCMActiveAllEquipAttr=tagCMActiveAllEquipAttr()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActiveAllEquipAttr.Cmd,m_NAtagCMActiveAllEquipAttr.SubCmd))] = m_NAtagCMActiveAllEquipAttr
#------------------------------------------------------
# A5 12 激活法宝之魂 #tagCMActiveMWSoul
class  tagCMActiveMWSoul(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("ID", c_ubyte),    #编号
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xA5
        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 = 0xA5
        self.SubCmd = 0x12
        self.ID = 0
        return
    def GetLength(self):
        return sizeof(tagCMActiveMWSoul)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// A5 12 激活法宝之魂 //tagCMActiveMWSoul:
                                Cmd:%s,
                                SubCmd:%s,
                                ID:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.ID
                                )
        return DumpString
m_NAtagCMActiveMWSoul=tagCMActiveMWSoul()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActiveMWSoul.Cmd,m_NAtagCMActiveMWSoul.SubCmd))] = m_NAtagCMActiveMWSoul
#------------------------------------------------------
@@ -6964,58 +7430,6 @@
#------------------------------------------------------
#A5 12 购买每日一购商品 #tagCMBuyDailyGoldShopItem
class  tagCMBuyDailyGoldShopItem(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("Index", c_ubyte),    #购买物品的索引
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xA5
        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 = 0xA5
        self.SubCmd = 0x12
        self.Index = 0
        return
    def GetLength(self):
        return sizeof(tagCMBuyDailyGoldShopItem)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''//A5 12 购买每日一购商品 //tagCMBuyDailyGoldShopItem:
                                Cmd:%s,
                                SubCmd:%s,
                                Index:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.Index
                                )
        return DumpString
m_NAtagCMBuyDailyGoldShopItem=tagCMBuyDailyGoldShopItem()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMBuyDailyGoldShopItem.Cmd,m_NAtagCMBuyDailyGoldShopItem.SubCmd))] = m_NAtagCMBuyDailyGoldShopItem
#------------------------------------------------------
#A5 75 购买副本进入次数#tagCMBuyEnterCount
class  tagCMBuyEnterCount(Structure):
@@ -7065,58 +7479,6 @@
m_NAtagCMBuyEnterCount=tagCMBuyEnterCount()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMBuyEnterCount.Cmd,m_NAtagCMBuyEnterCount.SubCmd))] = m_NAtagCMBuyEnterCount
#------------------------------------------------------
#A5 14 开通表情包#tagPyCMBuyFacePackage
class  tagPyCMBuyFacePackage(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("PackageID", c_ubyte),    #购买表情包的索引
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xA5
        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 = 0xA5
        self.SubCmd = 0x14
        self.PackageID = 0
        return
    def GetLength(self):
        return sizeof(tagPyCMBuyFacePackage)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''//A5 14 开通表情包//tagPyCMBuyFacePackage:
                                Cmd:%s,
                                SubCmd:%s,
                                PackageID:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.PackageID
                                )
        return DumpString
m_NAtagPyCMBuyFacePackage=tagPyCMBuyFacePackage()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagPyCMBuyFacePackage.Cmd,m_NAtagPyCMBuyFacePackage.SubCmd))] = m_NAtagPyCMBuyFacePackage
#------------------------------------------------------
@@ -7577,62 +7939,6 @@
#------------------------------------------------------
# A5 62 装备收集属性激活 #tagCMCollectEquipAttrActive
class  tagCMCollectEquipAttrActive(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("CollectType", c_ubyte),    #收集类型 0-目标收集 1-战装收集
                  ("Data", c_ubyte),    #额外数据
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xA5
        self.SubCmd = 0x62
        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 = 0x62
        self.CollectType = 0
        self.Data = 0
        return
    def GetLength(self):
        return sizeof(tagCMCollectEquipAttrActive)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// A5 62 装备收集属性激活 //tagCMCollectEquipAttrActive:
                                Cmd:%s,
                                SubCmd:%s,
                                CollectType:%d,
                                Data:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.CollectType,
                                self.Data
                                )
        return DumpString
m_NAtagCMCollectEquipAttrActive=tagCMCollectEquipAttrActive()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMCollectEquipAttrActive.Cmd,m_NAtagCMCollectEquipAttrActive.SubCmd))] = m_NAtagCMCollectEquipAttrActive
#------------------------------------------------------
# A5 28 常规副本扫荡 #tagCMCommFBWipeOut
class  tagCMCommFBWipeOut(Structure):
@@ -7794,6 +8100,303 @@
m_NAtagCMDoFBAction=tagCMDoFBAction()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMDoFBAction.Cmd,m_NAtagCMDoFBAction.SubCmd))] = m_NAtagCMDoFBAction
#------------------------------------------------------
# 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):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("DogzID", c_ubyte),    # 神兽ID
                  ("EquipIndex", c_ubyte),    #神兽装备所在神兽背包索引
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xA5
        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 = 0xA5
        self.SubCmd = 0xC0
        self.DogzID = 0
        self.EquipIndex = 0
        return
    def GetLength(self):
        return sizeof(tagCMDogzEquipItem)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// A5 C0 神兽穿戴装备 //tagCMDogzEquipItem:
                                Cmd:%s,
                                SubCmd:%s,
                                DogzID:%d,
                                EquipIndex:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.DogzID,
                                self.EquipIndex
                                )
        return DumpString
m_NAtagCMDogzEquipItem=tagCMDogzEquipItem()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMDogzEquipItem.Cmd,m_NAtagCMDogzEquipItem.SubCmd))] = m_NAtagCMDogzEquipItem
#------------------------------------------------------
# A5 C4 神兽装备强化 #tagCMDogzEquipPlus
class  tagCMDogzEquipPlus(Structure):
    Head = tagHead()
    EquipIndex = 0    #(BYTE EquipIndex)//神兽装备背包中索引
    IndexCount = 0    #(BYTE IndexCount)//材料所在神兽物品背包索引的数量
    IndexList = list()    #(vector<BYTE> IndexList)//材料所在神兽物品背包索引列表
    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)
        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.IsDouble = 0
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 1
        length += 1
        length += 1 * 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])
        data = CommFunc.WriteBYTE(data, self.IsDouble)
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                EquipIndex:%d,
                                IndexCount:%d,
                                IndexList:%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
#------------------------------------------------------
@@ -8181,114 +8784,6 @@
#------------------------------------------------------
# A5 64 抢红包 #tagCMGrabRedPacket
class  tagCMGrabRedPacket(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("Type", c_ubyte),    #  0抢 1 查询
                  ("RedPacketID", c_int),    # 红包ID
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xA5
        self.SubCmd = 0x64
        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 = 0x64
        self.Type = 0
        self.RedPacketID = 0
        return
    def GetLength(self):
        return sizeof(tagCMGrabRedPacket)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// A5 64 抢红包 //tagCMGrabRedPacket:
                                Cmd:%s,
                                SubCmd:%s,
                                Type:%d,
                                RedPacketID:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.Type,
                                self.RedPacketID
                                )
        return DumpString
m_NAtagCMGrabRedPacket=tagCMGrabRedPacket()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMGrabRedPacket.Cmd,m_NAtagCMGrabRedPacket.SubCmd))] = m_NAtagCMGrabRedPacket
#------------------------------------------------------
# A5 56 守护升级 #tagCMGuardUp
class  tagCMGuardUp(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("GuardID", c_int),    # 守护物品id
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xA5
        self.SubCmd = 0x56
        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 = 0x56
        self.GuardID = 0
        return
    def GetLength(self):
        return sizeof(tagCMGuardUp)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// A5 56 守护升级 //tagCMGuardUp:
                                Cmd:%s,
                                SubCmd:%s,
                                GuardID:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.GuardID
                                )
        return DumpString
m_NAtagCMGuardUp=tagCMGuardUp()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMGuardUp.Cmd,m_NAtagCMGuardUp.SubCmd))] = m_NAtagCMGuardUp
#------------------------------------------------------
#A5 37 天梯增加挑战次数#tagCMHighLadderAddCount
class  tagCMHighLadderAddCount(Structure):
@@ -8344,7 +8839,7 @@
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("HorseID", c_ubyte),    #坐骑ID
                  ("HorseID", c_int),    #坐骑ID
                  ("UseItemCnt", c_ubyte),    #消耗材料个数
                  ("IsAutoBuy", c_ubyte),    #是否自动购买
                  ]
@@ -8394,54 +8889,6 @@
m_NAtagCMHorseUp=tagCMHorseUp()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMHorseUp.Cmd,m_NAtagCMHorseUp.SubCmd))] = m_NAtagCMHorseUp
#------------------------------------------------------
# A5 5B 寻宝免费次数倒计时结束 #tagCMMagicTreasureFreeCnt
class  tagCMMagicTreasureFreeCnt(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xA5
        self.SubCmd = 0x5B
        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 = 0x5B
        return
    def GetLength(self):
        return sizeof(tagCMMagicTreasureFreeCnt)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// A5 5B 寻宝免费次数倒计时结束 //tagCMMagicTreasureFreeCnt:
                                Cmd:%s,
                                SubCmd:%s
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd
                                )
        return DumpString
m_NAtagCMMagicTreasureFreeCnt=tagCMMagicTreasureFreeCnt()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMMagicTreasureFreeCnt.Cmd,m_NAtagCMMagicTreasureFreeCnt.SubCmd))] = m_NAtagCMMagicTreasureFreeCnt
#------------------------------------------------------
@@ -8501,21 +8948,20 @@
#------------------------------------------------------
#A5 21 抽取图鉴卡片#tagCMMonsterCardLottery
# A5 16 法宝状态记录 #tagCMMagicWeaponState
class  tagCMMonsterCardLottery(Structure):
class  tagCMMagicWeaponState(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("Type", c_ubyte),    #抽奖类型  0 普通 1 高级
                  ("AutoBuy", c_ubyte),    #是否自动购买道具
                  ("MWID", c_int),    #法宝ID
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xA5
        self.SubCmd = 0x21
        self.SubCmd = 0x16
        return
    def ReadData(self, stringData, _pos=0, _len=0):
@@ -8525,35 +8971,84 @@
    def Clear(self):
        self.Cmd = 0xA5
        self.SubCmd = 0x21
        self.Type = 0
        self.AutoBuy = 0
        self.SubCmd = 0x16
        self.MWID = 0
        return
    def GetLength(self):
        return sizeof(tagCMMonsterCardLottery)
        return sizeof(tagCMMagicWeaponState)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''//A5 21 抽取图鉴卡片//tagCMMonsterCardLottery:
        DumpString = '''// A5 16 法宝状态记录 //tagCMMagicWeaponState:
                                Cmd:%s,
                                SubCmd:%s,
                                Type:%d,
                                AutoBuy:%d
                                MWID:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.Type,
                                self.AutoBuy
                                self.MWID
                                )
        return DumpString
m_NAtagCMMonsterCardLottery=tagCMMonsterCardLottery()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMMonsterCardLottery.Cmd,m_NAtagCMMonsterCardLottery.SubCmd))] = m_NAtagCMMonsterCardLottery
m_NAtagCMMagicWeaponState=tagCMMagicWeaponState()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMMagicWeaponState.Cmd,m_NAtagCMMagicWeaponState.SubCmd))] = m_NAtagCMMagicWeaponState
#------------------------------------------------------
# A5 15 提升法宝等级 #tagCMMagicWeaponUp
class  tagCMMagicWeaponUp(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("MWID", c_int),    #法宝ID
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xA5
        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 = 0xA5
        self.SubCmd = 0x15
        self.MWID = 0
        return
    def GetLength(self):
        return sizeof(tagCMMagicWeaponUp)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// A5 15 提升法宝等级 //tagCMMagicWeaponUp:
                                Cmd:%s,
                                SubCmd:%s,
                                MWID:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.MWID
                                )
        return DumpString
m_NAtagCMMagicWeaponUp=tagCMMagicWeaponUp()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMMagicWeaponUp.Cmd,m_NAtagCMMagicWeaponUp.SubCmd))] = m_NAtagCMMagicWeaponUp
#------------------------------------------------------
@@ -8720,7 +9215,7 @@
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("Index", c_ubyte),    #选择索引
                  ("Index", c_int),    #选择索引
                  ]
    def __init__(self):
@@ -8762,54 +9257,6 @@
m_NAtagPlayerChooseHorse=tagPlayerChooseHorse()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagPlayerChooseHorse.Cmd,m_NAtagPlayerChooseHorse.SubCmd))] = m_NAtagPlayerChooseHorse
#------------------------------------------------------
# A5 61 掷骰子 #tagCMPlayerDice
class  tagCMPlayerDice(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xA5
        self.SubCmd = 0x61
        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 = 0x61
        return
    def GetLength(self):
        return sizeof(tagCMPlayerDice)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// A5 61 掷骰子 //tagCMPlayerDice:
                                Cmd:%s,
                                SubCmd:%s
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd
                                )
        return DumpString
m_NAtagCMPlayerDice=tagCMPlayerDice()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMPlayerDice.Cmd,m_NAtagCMPlayerDice.SubCmd))] = m_NAtagCMPlayerDice
#------------------------------------------------------
@@ -8947,65 +9394,9 @@
#------------------------------------------------------
#A5 3A    新符文系统符文升级#tagCMPropEnhanceLVUp
# A5 14 祈福丹药 #tagCMPrayElixir
class  tagCMPropEnhanceLVUp(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("index", c_ubyte),    #要升级的符文索引 (从0开始)
                  ("count", c_ushort),    #连续升级次数
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xA5
        self.SubCmd = 0x3A
        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 = 0x3A
        self.index = 0
        self.count = 0
        return
    def GetLength(self):
        return sizeof(tagCMPropEnhanceLVUp)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''//A5 3A    新符文系统符文升级//tagCMPropEnhanceLVUp:
                                Cmd:%s,
                                SubCmd:%s,
                                index:%d,
                                count:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.index,
                                self.count
                                )
        return DumpString
m_NAtagCMPropEnhanceLVUp=tagCMPropEnhanceLVUp()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMPropEnhanceLVUp.Cmd,m_NAtagCMPropEnhanceLVUp.SubCmd))] = m_NAtagCMPropEnhanceLVUp
#------------------------------------------------------
#A5 13 查询表情包开通状态#tagPyCMQueryFacePackage
class  tagPyCMQueryFacePackage(Structure):
class  tagCMPrayElixir(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
@@ -9015,7 +9406,7 @@
    def __init__(self):
        self.Clear()
        self.Cmd = 0xA5
        self.SubCmd = 0x13
        self.SubCmd = 0x14
        return
    def ReadData(self, stringData, _pos=0, _len=0):
@@ -9025,17 +9416,17 @@
    def Clear(self):
        self.Cmd = 0xA5
        self.SubCmd = 0x13
        self.SubCmd = 0x14
        return
    def GetLength(self):
        return sizeof(tagPyCMQueryFacePackage)
        return sizeof(tagCMPrayElixir)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''//A5 13 查询表情包开通状态//tagPyCMQueryFacePackage:
        DumpString = '''// A5 14 祈福丹药 //tagCMPrayElixir:
                                Cmd:%s,
                                SubCmd:%s
                                '''\
@@ -9046,8 +9437,8 @@
        return DumpString
m_NAtagPyCMQueryFacePackage=tagPyCMQueryFacePackage()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagPyCMQueryFacePackage.Cmd,m_NAtagPyCMQueryFacePackage.SubCmd))] = m_NAtagPyCMQueryFacePackage
m_NAtagCMPrayElixir=tagCMPrayElixir()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMPrayElixir.Cmd,m_NAtagCMPrayElixir.SubCmd))] = m_NAtagCMPrayElixir
#------------------------------------------------------
@@ -9144,54 +9535,6 @@
m_NAtagCMQueryOnlinePrizeInfo=tagCMQueryOnlinePrizeInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMQueryOnlinePrizeInfo.Cmd,m_NAtagCMQueryOnlinePrizeInfo.SubCmd))] = m_NAtagCMQueryOnlinePrizeInfo
#------------------------------------------------------
#A5 20 查询图鉴兑换点数#tagCMQueryPlayerMonsterCurrency
class  tagCMQueryPlayerMonsterCurrency(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xA5
        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 = 0xA5
        self.SubCmd = 0x20
        return
    def GetLength(self):
        return sizeof(tagCMQueryPlayerMonsterCurrency)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''//A5 20 查询图鉴兑换点数//tagCMQueryPlayerMonsterCurrency:
                                Cmd:%s,
                                SubCmd:%s
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd
                                )
        return DumpString
m_NAtagCMQueryPlayerMonsterCurrency=tagCMQueryPlayerMonsterCurrency()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMQueryPlayerMonsterCurrency.Cmd,m_NAtagCMQueryPlayerMonsterCurrency.SubCmd))] = m_NAtagCMQueryPlayerMonsterCurrency
#------------------------------------------------------
@@ -9534,7 +9877,9 @@
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("TreasureNum", c_ubyte),    # 自定义的寻宝编号
                  ("TreasureType", c_ubyte),    #寻宝类型
                  ("TreasureIndex", c_ubyte),    #寻宝索引
                  ("CostType", c_ubyte),    #消耗类型:0-默认仙玉;1-免费次数;2-寻宝道具
                  ]
    def __init__(self):
@@ -9551,7 +9896,9 @@
    def Clear(self):
        self.Cmd = 0xA5
        self.SubCmd = 0x68
        self.TreasureNum = 0
        self.TreasureType = 0
        self.TreasureIndex = 0
        self.CostType = 0
        return
    def GetLength(self):
@@ -9564,12 +9911,16 @@
        DumpString = '''// A5 68 请求寻宝 //tagCMRequestTreasure:
                                Cmd:%s,
                                SubCmd:%s,
                                TreasureNum:%d
                                TreasureType:%d,
                                TreasureIndex:%d,
                                CostType:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.TreasureNum
                                self.TreasureType,
                                self.TreasureIndex,
                                self.CostType
                                )
        return DumpString
@@ -9896,21 +10247,19 @@
#------------------------------------------------------
#A5 33 开始魔方寻宝 #tagCMMagicTreasure
# A5 11 试用首充武器 #tagCMTryFirstGoldItem
class  tagCMMagicTreasure(Structure):
class  tagCMTryFirstGoldItem(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("Type", c_ubyte),    #寻宝类型 1玩家装备 2玩家首饰 3坐骑装备
                  ("Count", c_ubyte),    #寻宝次数
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xA5
        self.SubCmd = 0x33
        self.SubCmd = 0x11
        return
    def ReadData(self, stringData, _pos=0, _len=0):
@@ -9920,35 +10269,29 @@
    def Clear(self):
        self.Cmd = 0xA5
        self.SubCmd = 0x33
        self.Type = 0
        self.Count = 0
        self.SubCmd = 0x11
        return
    def GetLength(self):
        return sizeof(tagCMMagicTreasure)
        return sizeof(tagCMTryFirstGoldItem)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''//A5 33 开始魔方寻宝 //tagCMMagicTreasure:
        DumpString = '''// A5 11 试用首充武器 //tagCMTryFirstGoldItem:
                                Cmd:%s,
                                SubCmd:%s,
                                Type:%d,
                                Count:%d
                                SubCmd:%s
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.Type,
                                self.Count
                                self.SubCmd
                                )
        return DumpString
m_NAtagCMMagicTreasure=tagCMMagicTreasure()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMMagicTreasure.Cmd,m_NAtagCMMagicTreasure.SubCmd))] = m_NAtagCMMagicTreasure
m_NAtagCMTryFirstGoldItem=tagCMTryFirstGoldItem()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMTryFirstGoldItem.Cmd,m_NAtagCMTryFirstGoldItem.SubCmd))] = m_NAtagCMTryFirstGoldItem
#------------------------------------------------------
@@ -10001,6 +10344,58 @@
m_NAtagCMUnLockBirthChartHole=tagCMUnLockBirthChartHole()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMUnLockBirthChartHole.Cmd,m_NAtagCMUnLockBirthChartHole.SubCmd))] = m_NAtagCMUnLockBirthChartHole
#------------------------------------------------------
# A5 13 解锁符印孔 #tagCMUnlockRuneHole
class  tagCMUnlockRuneHole(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("HoleIndex", c_ubyte),    # 孔索引
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xA5
        self.SubCmd = 0x13
        return
    def ReadData(self, stringData, _pos=0, _len=0):
        self.Clear()
        memmove(addressof(self), stringData[_pos:], self.GetLength())
        return _pos + self.GetLength()
    def Clear(self):
        self.Cmd = 0xA5
        self.SubCmd = 0x13
        self.HoleIndex = 0
        return
    def GetLength(self):
        return sizeof(tagCMUnlockRuneHole)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// A5 13 解锁符印孔 //tagCMUnlockRuneHole:
                                Cmd:%s,
                                SubCmd:%s,
                                HoleIndex:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.HoleIndex
                                )
        return DumpString
m_NAtagCMUnlockRuneHole=tagCMUnlockRuneHole()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMUnlockRuneHole.Cmd,m_NAtagCMUnlockRuneHole.SubCmd))] = m_NAtagCMUnlockRuneHole
#------------------------------------------------------
@@ -10593,73 +10988,6 @@
#------------------------------------------------------
# A7 03 宠物精华分解 #tagCMPetAddClassExp
class  tagCMPetAddClassExp(Structure):
    Head = tagHead()
    IndexCnt = 0    #(WORD IndexCnt)//被吞噬经验物品索引个数
    IndexList = list()    #(vector<WORD> IndexList)// 被吞噬经验物品所在背包索引列表
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xA7
        self.Head.SubCmd = 0x03
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.IndexCnt,_pos = CommFunc.ReadWORD(_lpData, _pos)
        for i in range(self.IndexCnt):
            value,_pos=CommFunc.ReadWORD(_lpData,_pos)
            self.IndexList.append(value)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xA7
        self.Head.SubCmd = 0x03
        self.IndexCnt = 0
        self.IndexList = list()
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 2
        length += 2 * self.IndexCnt
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteWORD(data, self.IndexCnt)
        for i in range(self.IndexCnt):
            data = CommFunc.WriteWORD(data, self.IndexList[i])
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                IndexCnt:%d,
                                IndexList:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.IndexCnt,
                                "..."
                                )
        return DumpString
m_NAtagCMPetAddClassExp=tagCMPetAddClassExp()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMPetAddClassExp.Head.Cmd,m_NAtagCMPetAddClassExp.Head.SubCmd))] = m_NAtagCMPetAddClassExp
#------------------------------------------------------
# A7 04 宠物升阶 #tagCMPetClassUP
class  tagCMPetClassUP(Structure):
@@ -10668,6 +10996,7 @@
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("PetItemIndex", c_ubyte),    #宠物数据背包索引
                  ("UseItemCnt", c_ushort),    #消耗材料个数
                  ]
    def __init__(self):
@@ -10685,6 +11014,7 @@
        self.Cmd = 0xA7
        self.SubCmd = 0x04
        self.PetItemIndex = 0
        self.UseItemCnt = 0
        return
    def GetLength(self):
@@ -10697,137 +11027,20 @@
        DumpString = '''// A7 04 宠物升阶 //tagCMPetClassUP:
                                Cmd:%s,
                                SubCmd:%s,
                                PetItemIndex:%d
                                PetItemIndex:%d,
                                UseItemCnt:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.PetItemIndex
                                self.PetItemIndex,
                                self.UseItemCnt
                                )
        return DumpString
m_NAtagCMPetClassUP=tagCMPetClassUP()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMPetClassUP.Cmd,m_NAtagCMPetClassUP.SubCmd))] = m_NAtagCMPetClassUP
#------------------------------------------------------
# A7 01 灵兽装备吸收 #tagCMPetEatEquip
class  tagCMPetEatEquip(Structure):
    Head = tagHead()
    IndexCnt = 0    #(WORD IndexCnt)//被吞噬经验物品索引个数
    IndexList = list()    #(vector<WORD> IndexList)// 被吞噬经验物品所在背包索引列表
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xA7
        self.Head.SubCmd = 0x01
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.IndexCnt,_pos = CommFunc.ReadWORD(_lpData, _pos)
        for i in range(self.IndexCnt):
            value,_pos=CommFunc.ReadWORD(_lpData,_pos)
            self.IndexList.append(value)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xA7
        self.Head.SubCmd = 0x01
        self.IndexCnt = 0
        self.IndexList = list()
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 2
        length += 2 * self.IndexCnt
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteWORD(data, self.IndexCnt)
        for i in range(self.IndexCnt):
            data = CommFunc.WriteWORD(data, self.IndexList[i])
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                IndexCnt:%d,
                                IndexList:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.IndexCnt,
                                "..."
                                )
        return DumpString
m_NAtagCMPetEatEquip=tagCMPetEatEquip()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMPetEatEquip.Head.Cmd,m_NAtagCMPetEatEquip.Head.SubCmd))] = m_NAtagCMPetEatEquip
#------------------------------------------------------
# A7 05 宠物设置数据 #tagCMPetSeting
class  tagCMPetSeting(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("Seting", c_int),
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xA7
        self.SubCmd = 0x05
        return
    def ReadData(self, stringData, _pos=0, _len=0):
        self.Clear()
        memmove(addressof(self), stringData[_pos:], self.GetLength())
        return _pos + self.GetLength()
    def Clear(self):
        self.Cmd = 0xA7
        self.SubCmd = 0x05
        self.Seting = 0
        return
    def GetLength(self):
        return sizeof(tagCMPetSeting)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// A7 05 宠物设置数据 //tagCMPetSeting:
                                Cmd:%s,
                                SubCmd:%s,
                                Seting:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.Seting
                                )
        return DumpString
m_NAtagCMPetSeting=tagCMPetSeting()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMPetSeting.Cmd,m_NAtagCMPetSeting.SubCmd))] = m_NAtagCMPetSeting
#------------------------------------------------------
@@ -11307,21 +11520,20 @@
#------------------------------------------------------
#AB 13 嘉年华抽奖 #tagCMCarnivalDraw
# AB 12 抢红包 #tagCMGrabFamilyRedPacket
class  tagCMCarnivalDraw(Structure):
class  tagCMGrabFamilyRedPacket(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("Index", c_ubyte),    # 抽奖索引
                  ("Type", c_ubyte),    # 抽奖类型 0:只获取结果,1:获取奖励,2:获取结果和奖励
                  ("RedPaketID", c_int),    # 红包ID
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xAB
        self.SubCmd = 0x13
        self.SubCmd = 0x12
        return
    def ReadData(self, stringData, _pos=0, _len=0):
@@ -11331,35 +11543,32 @@
    def Clear(self):
        self.Cmd = 0xAB
        self.SubCmd = 0x13
        self.Index = 0
        self.Type = 0
        self.SubCmd = 0x12
        self.RedPaketID = 0
        return
    def GetLength(self):
        return sizeof(tagCMCarnivalDraw)
        return sizeof(tagCMGrabFamilyRedPacket)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''//AB 13 嘉年华抽奖 //tagCMCarnivalDraw:
        DumpString = '''// AB 12 抢红包 //tagCMGrabFamilyRedPacket:
                                Cmd:%s,
                                SubCmd:%s,
                                Index:%d,
                                Type:%d
                                RedPaketID:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.Index,
                                self.Type
                                self.RedPaketID
                                )
        return DumpString
m_NAtagCMCarnivalDraw=tagCMCarnivalDraw()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMCarnivalDraw.Cmd,m_NAtagCMCarnivalDraw.SubCmd))] = m_NAtagCMCarnivalDraw
m_NAtagCMGrabFamilyRedPacket=tagCMGrabFamilyRedPacket()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMGrabFamilyRedPacket.Cmd,m_NAtagCMGrabFamilyRedPacket.SubCmd))] = m_NAtagCMGrabFamilyRedPacket
#------------------------------------------------------
@@ -11765,66 +11974,6 @@
#------------------------------------------------------
# AB 09 老虎机抽奖 #tagCMSlotsTake
class  tagCMSlotsTake(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("Type", c_ubyte),    # 老虎机类型
                  ("Num", c_int),    # 抽奖次数
                  ("IsAutoBuy", c_ubyte),    # 是否自动购买材料 0-否 1-是
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xAB
        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 = 0xAB
        self.SubCmd = 0x09
        self.Type = 0
        self.Num = 0
        self.IsAutoBuy = 0
        return
    def GetLength(self):
        return sizeof(tagCMSlotsTake)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// AB 09 老虎机抽奖 //tagCMSlotsTake:
                                Cmd:%s,
                                SubCmd:%s,
                                Type:%d,
                                Num:%d,
                                IsAutoBuy:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.Type,
                                self.Num,
                                self.IsAutoBuy
                                )
        return DumpString
m_NAtagCMSlotsTake=tagCMSlotsTake()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMSlotsTake.Cmd,m_NAtagCMSlotsTake.SubCmd))] = m_NAtagCMSlotsTake
#------------------------------------------------------
# AB 0C 摇骰子 #tagCMDiceEx
class  tagCMDiceEx(Structure):
@@ -11874,54 +12023,6 @@
m_NAtagCMDiceEx=tagCMDiceEx()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMDiceEx.Cmd,m_NAtagCMDiceEx.SubCmd))] = m_NAtagCMDiceEx
#------------------------------------------------------
# AB 08 许愿 #tagCMWishingTree
class  tagCMWishingTree(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xAB
        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 = 0xAB
        self.SubCmd = 0x08
        return
    def GetLength(self):
        return sizeof(tagCMWishingTree)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// AB 08 许愿 //tagCMWishingTree:
                                Cmd:%s,
                                SubCmd:%s
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd
                                )
        return DumpString
m_NAtagCMWishingTree=tagCMWishingTree()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMWishingTree.Cmd,m_NAtagCMWishingTree.SubCmd))] = m_NAtagCMWishingTree
#------------------------------------------------------
@@ -12349,150 +12450,6 @@
#------------------------------------------------------
#B0 12 开始转转乐 #tagBeginGambling
class  tagBeginGambling(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xB0
        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 = 0xB0
        self.SubCmd = 0x12
        return
    def GetLength(self):
        return sizeof(tagBeginGambling)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''//B0 12 开始转转乐 //tagBeginGambling:
                                Cmd:%s,
                                SubCmd:%s
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd
                                )
        return DumpString
m_NAtagBeginGambling=tagBeginGambling()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagBeginGambling.Cmd,m_NAtagBeginGambling.SubCmd))] = m_NAtagBeginGambling
#------------------------------------------------------
#B0 13 转转乐商人升级 #tagGamblingMerchantLvUp
class  tagGamblingMerchantLvUp(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xB0
        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 = 0xB0
        self.SubCmd = 0x13
        return
    def GetLength(self):
        return sizeof(tagGamblingMerchantLvUp)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''//B0 13 转转乐商人升级 //tagGamblingMerchantLvUp:
                                Cmd:%s,
                                SubCmd:%s
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd
                                )
        return DumpString
m_NAtagGamblingMerchantLvUp=tagGamblingMerchantLvUp()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGamblingMerchantLvUp.Cmd,m_NAtagGamblingMerchantLvUp.SubCmd))] = m_NAtagGamblingMerchantLvUp
#------------------------------------------------------
#B0 14 转转乐换盘 #tagGamblingDiskChange
class  tagGamblingDiskChange(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xB0
        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 = 0xB0
        self.SubCmd = 0x14
        return
    def GetLength(self):
        return sizeof(tagGamblingDiskChange)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''//B0 14 转转乐换盘 //tagGamblingDiskChange:
                                Cmd:%s,
                                SubCmd:%s
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd
                                )
        return DumpString
m_NAtagGamblingDiskChange=tagGamblingDiskChange()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGamblingDiskChange.Cmd,m_NAtagGamblingDiskChange.SubCmd))] = m_NAtagGamblingDiskChange
#------------------------------------------------------
# B0 50 钓鱼收杆 #tagCMDoFish
class  tagCMDoFish(Structure):
@@ -12785,6 +12742,54 @@
#------------------------------------------------------
# B1 04 客户端发送开始副本 #tagCMClientStartFB
class  tagCMClientStartFB(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xB1
        self.SubCmd = 0x04
        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 = 0x04
        return
    def GetLength(self):
        return sizeof(tagCMClientStartFB)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// B1 04 客户端发送开始副本 //tagCMClientStartFB:
                                Cmd:%s,
                                SubCmd:%s
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd
                                )
        return DumpString
m_NAtagCMClientStartFB=tagCMClientStartFB()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMClientStartFB.Cmd,m_NAtagCMClientStartFB.SubCmd))] = m_NAtagCMClientStartFB
#------------------------------------------------------
# B1 02 领取多倍副本奖励 #tagCMGetMultiFBPrize
class  tagCMGetMultiFBPrize(Structure):
@@ -12949,6 +12954,77 @@
#------------------------------------------------------
#B2 05 推送提醒设置 #tagCMPushNotificationsSetting
class  tagCMPushNotificationsSetting(Structure):
    Head = tagHead()
    OnoffBit = 0    #(DWORD OnoffBit)// 按位约定开关
    TimeLen = 0    #(BYTE TimeLen)
    TimeStr = ""    #(String TimeStr)// 时间字符串  01:02-05:00
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xB2
        self.Head.SubCmd = 0x05
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.OnoffBit,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.TimeLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.TimeStr,_pos = CommFunc.ReadString(_lpData, _pos,self.TimeLen)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xB2
        self.Head.SubCmd = 0x05
        self.OnoffBit = 0
        self.TimeLen = 0
        self.TimeStr = ""
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 4
        length += 1
        length += len(self.TimeStr)
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteDWORD(data, self.OnoffBit)
        data = CommFunc.WriteBYTE(data, self.TimeLen)
        data = CommFunc.WriteString(data, self.TimeLen, self.TimeStr)
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                OnoffBit:%d,
                                TimeLen:%d,
                                TimeStr:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.OnoffBit,
                                self.TimeLen,
                                self.TimeStr
                                )
        return DumpString
m_NAtagCMPushNotificationsSetting=tagCMPushNotificationsSetting()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMPushNotificationsSetting.Head.Cmd,m_NAtagCMPushNotificationsSetting.Head.SubCmd))] = m_NAtagCMPushNotificationsSetting
#------------------------------------------------------
#B2 02 视野缩放 #tagCMSightZoom
class  tagCMSightZoom(Structure):