|  |  | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # A9 01 获取Boss首杀奖励 #tagCGGetBossFirstKillAward
 | 
 |  |  | 
 | 
 |  |  | class  tagCGGetBossFirstKillAward(Structure):
 | 
 |  |  |     _pack_ = 1
 | 
 |  |  |     _fields_ = [
 | 
 |  |  |                   ("Cmd", c_ubyte),
 | 
 |  |  |                   ("SubCmd", c_ubyte),
 | 
 |  |  |                   ("NPCID", c_int),     | 
 |  |  |                   ("AwardType", c_ubyte),    # 0-首杀红包奖励;1-个人首杀奖励
 | 
 |  |  |                   ]
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Cmd = 0xA9
 | 
 |  |  |         self.SubCmd = 0x01
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def ReadData(self, stringData, _pos=0, _len=0):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         memmove(addressof(self), stringData[_pos:], self.GetLength())
 | 
 |  |  |         return _pos + self.GetLength()
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.Cmd = 0xA9
 | 
 |  |  |         self.SubCmd = 0x01
 | 
 |  |  |         self.NPCID = 0
 | 
 |  |  |         self.AwardType = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         return sizeof(tagCGGetBossFirstKillAward)
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         return string_at(addressof(self), self.GetLength())
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''// A9 01 获取Boss首杀奖励 //tagCGGetBossFirstKillAward:
 | 
 |  |  |                                 Cmd:%s,
 | 
 |  |  |                                 SubCmd:%s,
 | 
 |  |  |                                 NPCID:%d,
 | 
 |  |  |                                 AwardType:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Cmd,
 | 
 |  |  |                                 self.SubCmd,
 | 
 |  |  |                                 self.NPCID,
 | 
 |  |  |                                 self.AwardType
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagCGGetBossFirstKillAward=tagCGGetBossFirstKillAward()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGGetBossFirstKillAward.Cmd,m_NAtagCGGetBossFirstKillAward.SubCmd))] = m_NAtagCGGetBossFirstKillAward
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # A9 A8 查看竞技场对战记录 #tagCGQueryArenaBattleRecord
 | 
 |  |  | 
 | 
 |  |  | class  tagCGQueryArenaBattleRecord(Structure):
 | 
 |  |  |     _pack_ = 1
 | 
 |  |  |     _fields_ = [
 | 
 |  |  |                   ("Cmd", c_ubyte),
 | 
 |  |  |                   ("SubCmd", c_ubyte),
 | 
 |  |  |                   ]
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Cmd = 0xA9
 | 
 |  |  |         self.SubCmd = 0xA8
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def ReadData(self, stringData, _pos=0, _len=0):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         memmove(addressof(self), stringData[_pos:], self.GetLength())
 | 
 |  |  |         return _pos + self.GetLength()
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.Cmd = 0xA9
 | 
 |  |  |         self.SubCmd = 0xA8
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         return sizeof(tagCGQueryArenaBattleRecord)
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         return string_at(addressof(self), self.GetLength())
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''// A9 A8 查看竞技场对战记录 //tagCGQueryArenaBattleRecord:
 | 
 |  |  |                                 Cmd:%s,
 | 
 |  |  |                                 SubCmd:%s
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Cmd,
 | 
 |  |  |                                 self.SubCmd
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagCGQueryArenaBattleRecord=tagCGQueryArenaBattleRecord()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGQueryArenaBattleRecord.Cmd,m_NAtagCGQueryArenaBattleRecord.SubCmd))] = m_NAtagCGQueryArenaBattleRecord
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # A9 04 查询boss信息 #tagCGQueryBossInfo
 | 
 |  |  | 
 | 
 |  |  | class  tagCGQueryBossInfo(Structure):
 | 
 |  |  | 
 |  |  | 
 | 
 |  |  | m_NAtagCGQueryCompensation=tagCGQueryCompensation()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGQueryCompensation.Cmd,m_NAtagCGQueryCompensation.SubCmd))] = m_NAtagCGQueryCompensation
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # A9 05 查询广播装备详细信息 #tagCGQueryNotifyEquipDetailInfo
 | 
 |  |  | 
 | 
 |  |  | class  tagCGQueryNotifyEquipDetailInfo(Structure):
 | 
 |  |  |     Head = tagHead()
 | 
 |  |  |     ItemGUID = ""    #(char ItemGUID[40])
 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xA9
 | 
 |  |  |         self.Head.SubCmd = 0x05
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def ReadData(self, _lpData, _pos=0, _Len=0):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         _pos = self.Head.ReadData(_lpData, _pos)
 | 
 |  |  |         self.ItemGUID,_pos = CommFunc.ReadString(_lpData, _pos,40)
 | 
 |  |  |         return _pos
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.Head = tagHead()
 | 
 |  |  |         self.Head.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xA9
 | 
 |  |  |         self.Head.SubCmd = 0x05
 | 
 |  |  |         self.ItemGUID = ""
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         length = 0
 | 
 |  |  |         length += self.Head.GetLength()
 | 
 |  |  |         length += 40
 | 
 |  |  | 
 | 
 |  |  |         return length
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         data = ''
 | 
 |  |  |         data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
 | 
 |  |  |         data = CommFunc.WriteString(data, 40, self.ItemGUID)
 | 
 |  |  |         return data
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''
 | 
 |  |  |                                 Head:%s,
 | 
 |  |  |                                 ItemGUID:%s
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Head.OutputString(),
 | 
 |  |  |                                 self.ItemGUID
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagCGQueryNotifyEquipDetailInfo=tagCGQueryNotifyEquipDetailInfo()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGQueryNotifyEquipDetailInfo.Head.Cmd,m_NAtagCGQueryNotifyEquipDetailInfo.Head.SubCmd))] = m_NAtagCGQueryNotifyEquipDetailInfo
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # B0 13 取消协助Boss #tagCGCancelAssistBoss
 | 
 |  |  | 
 | 
 |  |  | class  tagCGCancelAssistBoss(Structure):
 | 
 |  |  |     Head = tagHead()
 | 
 |  |  |     AssistGUID = ""    #(char AssistGUID[40])//协助GUID
 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xB0
 | 
 |  |  |         self.Head.SubCmd = 0x13
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def ReadData(self, _lpData, _pos=0, _Len=0):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         _pos = self.Head.ReadData(_lpData, _pos)
 | 
 |  |  |         self.AssistGUID,_pos = CommFunc.ReadString(_lpData, _pos,40)
 | 
 |  |  |         return _pos
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.Head = tagHead()
 | 
 |  |  |         self.Head.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xB0
 | 
 |  |  |         self.Head.SubCmd = 0x13
 | 
 |  |  |         self.AssistGUID = ""
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         length = 0
 | 
 |  |  |         length += self.Head.GetLength()
 | 
 |  |  |         length += 40
 | 
 |  |  | 
 | 
 |  |  |         return length
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         data = ''
 | 
 |  |  |         data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
 | 
 |  |  |         data = CommFunc.WriteString(data, 40, self.AssistGUID)
 | 
 |  |  |         return data
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''
 | 
 |  |  |                                 Head:%s,
 | 
 |  |  |                                 AssistGUID:%s
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Head.OutputString(),
 | 
 |  |  |                                 self.AssistGUID
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagCGCancelAssistBoss=tagCGCancelAssistBoss()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGCancelAssistBoss.Head.Cmd,m_NAtagCGCancelAssistBoss.Head.SubCmd))] = m_NAtagCGCancelAssistBoss
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # B0 15 接收协助感谢礼物 #tagCGGetAssistThanksGift
 | 
 |  |  | 
 | 
 |  |  | class  tagCGGetAssistThanksGift(Structure):
 | 
 |  |  |     _pack_ = 1
 | 
 |  |  |     _fields_ = [
 | 
 |  |  |                   ("Cmd", c_ubyte),
 | 
 |  |  |                   ("SubCmd", c_ubyte),
 | 
 |  |  |                   ("IsPreview", c_ubyte),    #是否预览,非预览即确认领取,无额外奖励确认时也需要回复领取包代表已读
 | 
 |  |  |                   ]
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Cmd = 0xB0
 | 
 |  |  |         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 = 0xB0
 | 
 |  |  |         self.SubCmd = 0x15
 | 
 |  |  |         self.IsPreview = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         return sizeof(tagCGGetAssistThanksGift)
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         return string_at(addressof(self), self.GetLength())
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''// B0 15 接收协助感谢礼物 //tagCGGetAssistThanksGift:
 | 
 |  |  |                                 Cmd:%s,
 | 
 |  |  |                                 SubCmd:%s,
 | 
 |  |  |                                 IsPreview:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Cmd,
 | 
 |  |  |                                 self.SubCmd,
 | 
 |  |  |                                 self.IsPreview
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagCGGetAssistThanksGift=tagCGGetAssistThanksGift()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGGetAssistThanksGift.Cmd,m_NAtagCGGetAssistThanksGift.SubCmd))] = m_NAtagCGGetAssistThanksGift
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | #B0 25 请求家族悬赏任务完成情况 #tagQueryFamilyArrestOverState
 | 
 |  |  | 
 | 
 |  |  | class  tagQueryFamilyArrestOverState(Structure):
 | 
 |  |  | 
 |  |  | 
 | 
 |  |  | m_NAtagQueryFamilyArrestOverState=tagQueryFamilyArrestOverState()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagQueryFamilyArrestOverState.Cmd,m_NAtagQueryFamilyArrestOverState.SubCmd))] = m_NAtagQueryFamilyArrestOverState
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # B0 12 开始协助Boss #tagCGStartAssistBoss
 | 
 |  |  | 
 | 
 |  |  | class  tagCGStartAssistBoss(Structure):
 | 
 |  |  |     Head = tagHead()
 | 
 |  |  |     AssistGUID = ""    #(char AssistGUID[40])//协助GUID
 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xB0
 | 
 |  |  |         self.Head.SubCmd = 0x12
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def ReadData(self, _lpData, _pos=0, _Len=0):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         _pos = self.Head.ReadData(_lpData, _pos)
 | 
 |  |  |         self.AssistGUID,_pos = CommFunc.ReadString(_lpData, _pos,40)
 | 
 |  |  |         return _pos
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.Head = tagHead()
 | 
 |  |  |         self.Head.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xB0
 | 
 |  |  |         self.Head.SubCmd = 0x12
 | 
 |  |  |         self.AssistGUID = ""
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         length = 0
 | 
 |  |  |         length += self.Head.GetLength()
 | 
 |  |  |         length += 40
 | 
 |  |  | 
 | 
 |  |  |         return length
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         data = ''
 | 
 |  |  |         data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
 | 
 |  |  |         data = CommFunc.WriteString(data, 40, self.AssistGUID)
 | 
 |  |  |         return data
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''
 | 
 |  |  |                                 Head:%s,
 | 
 |  |  |                                 AssistGUID:%s
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Head.OutputString(),
 | 
 |  |  |                                 self.AssistGUID
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagCGStartAssistBoss=tagCGStartAssistBoss()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGStartAssistBoss.Head.Cmd,m_NAtagCGStartAssistBoss.Head.SubCmd))] = m_NAtagCGStartAssistBoss
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # B0 14 使用协助感谢礼盒 #tagCGUseAssistThanksGift
 | 
 |  |  | 
 | 
 |  |  | class  tagCGUseAssistThanksGift(Structure):
 | 
 |  |  |     _pack_ = 1
 | 
 |  |  |     _fields_ = [
 | 
 |  |  |                   ("Cmd", c_ubyte),
 | 
 |  |  |                   ("SubCmd", c_ubyte),
 | 
 |  |  |                   ("ItemID", c_int),     | 
 |  |  |                   ("IsPreview", 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
 | 
 |  |  |         self.ItemID = 0
 | 
 |  |  |         self.IsPreview = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         return sizeof(tagCGUseAssistThanksGift)
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         return string_at(addressof(self), self.GetLength())
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''// B0 14 使用协助感谢礼盒 //tagCGUseAssistThanksGift:
 | 
 |  |  |                                 Cmd:%s,
 | 
 |  |  |                                 SubCmd:%s,
 | 
 |  |  |                                 ItemID:%d,
 | 
 |  |  |                                 IsPreview:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Cmd,
 | 
 |  |  |                                 self.SubCmd,
 | 
 |  |  |                                 self.ItemID,
 | 
 |  |  |                                 self.IsPreview
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagCGUseAssistThanksGift=tagCGUseAssistThanksGift()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGUseAssistThanksGift.Cmd,m_NAtagCGUseAssistThanksGift.SubCmd))] = m_NAtagCGUseAssistThanksGift
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # B9 11 请求加入队伍 #tagCGRequestJoinTeam
 | 
 |  |  | 
 | 
 |  |  | class  tagCGRequestJoinTeam(Structure):
 | 
 |  |  |     _pack_ = 1
 | 
 |  |  |     _fields_ = [
 | 
 |  |  |                   ("Cmd", c_ubyte),
 | 
 |  |  |                   ("SubCmd", c_ubyte),
 | 
 |  |  |                   ("TeamID", c_int),    # 目标队伍ID
 | 
 |  |  |                   ]
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Cmd = 0xB9
 | 
 |  |  |         self.SubCmd = 0x11
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def ReadData(self, stringData, _pos=0, _len=0):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         memmove(addressof(self), stringData[_pos:], self.GetLength())
 | 
 |  |  |         return _pos + self.GetLength()
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.Cmd = 0xB9
 | 
 |  |  |         self.SubCmd = 0x11
 | 
 |  |  |         self.TeamID = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         return sizeof(tagCGRequestJoinTeam)
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         return string_at(addressof(self), self.GetLength())
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''// B9 11 请求加入队伍 //tagCGRequestJoinTeam:
 | 
 |  |  |                                 Cmd:%s,
 | 
 |  |  |                                 SubCmd:%s,
 | 
 |  |  |                                 TeamID:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Cmd,
 | 
 |  |  |                                 self.SubCmd,
 | 
 |  |  |                                 self.TeamID
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagCGRequestJoinTeam=tagCGRequestJoinTeam()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGRequestJoinTeam.Cmd,m_NAtagCGRequestJoinTeam.SubCmd))] = m_NAtagCGRequestJoinTeam
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # B9 09 队员进入副本准备选择 #tagCGTeamMemberPrepare
 | 
 |  |  | 
 | 
 |  |  | class  tagCGTeamMemberPrepare(Structure):
 | 
 |  |  | 
 |  |  |                   ("Cmd", c_ubyte),
 | 
 |  |  |                   ("SubCmd", c_ubyte),
 | 
 |  |  |                   ("PlayerID", c_int),    # 跨服玩家ID
 | 
 |  |  |                   ("EquipClassLV", c_ubyte),    #大于0为查看指定境界阶装备信息,  0为查看默认信息
 | 
 |  |  |                   ]
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  | 
 |  |  |         self.Cmd = 0xC0
 | 
 |  |  |         self.SubCmd = 0x02
 | 
 |  |  |         self.PlayerID = 0
 | 
 |  |  |         self.EquipClassLV = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  | 
 |  |  |         DumpString = '''// C0 02 查看跨服玩家信息 //tagCGViewCrossPlayerInfo:
 | 
 |  |  |                                 Cmd:%s,
 | 
 |  |  |                                 SubCmd:%s,
 | 
 |  |  |                                 PlayerID:%d
 | 
 |  |  |                                 PlayerID:%d,
 | 
 |  |  |                                 EquipClassLV:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Cmd,
 | 
 |  |  |                                 self.SubCmd,
 | 
 |  |  |                                 self.PlayerID
 | 
 |  |  |                                 self.PlayerID,
 | 
 |  |  |                                 self.EquipClassLV
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # A2 07 接受任务 #tagCMTakeTask
 | 
 |  |  | 
 | 
 |  |  | class  tagCMTakeTask(Structure):
 | 
 |  |  |     _pack_ = 1
 | 
 |  |  |     _fields_ = [
 | 
 |  |  |                   ("Cmd", c_ubyte),
 | 
 |  |  |                   ("SubCmd", c_ubyte),
 | 
 |  |  |                   ("TaskID", c_int),     | 
 |  |  |                   ]
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Cmd = 0xA2
 | 
 |  |  |         self.SubCmd = 0x07
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def ReadData(self, stringData, _pos=0, _len=0):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         memmove(addressof(self), stringData[_pos:], self.GetLength())
 | 
 |  |  |         return _pos + self.GetLength()
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.Cmd = 0xA2
 | 
 |  |  |         self.SubCmd = 0x07
 | 
 |  |  |         self.TaskID = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         return sizeof(tagCMTakeTask)
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         return string_at(addressof(self), self.GetLength())
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''// A2 07 接受任务 //tagCMTakeTask:
 | 
 |  |  |                                 Cmd:%s,
 | 
 |  |  |                                 SubCmd:%s,
 | 
 |  |  |                                 TaskID:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Cmd,
 | 
 |  |  |                                 self.SubCmd,
 | 
 |  |  |                                 self.TaskID
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagCMTakeTask=tagCMTakeTask()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMTakeTask.Cmd,m_NAtagCMTakeTask.SubCmd))] = m_NAtagCMTakeTask
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | #A2 12 查看玩家详细信息#tagCMViewPlayerInfo
 | 
 |  |  | 
 | 
 |  |  | class  tagCMViewPlayerInfo(Structure):
 | 
 |  |  | 
 |  |  |                   ("Cmd", c_ubyte),
 | 
 |  |  |                   ("SubCmd", c_ubyte),
 | 
 |  |  |                   ("PlayerID", c_int),    
 | 
 |  |  |                   ("EquipClassLV", c_ubyte),    #大于0为查看指定境界阶装备信息,  0为查看默认信息
 | 
 |  |  |                   ]
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  | 
 |  |  |         self.Cmd = 0xA2
 | 
 |  |  |         self.SubCmd = 0x12
 | 
 |  |  |         self.PlayerID = 0
 | 
 |  |  |         self.EquipClassLV = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  | 
 |  |  |         DumpString = '''//A2 12 查看玩家详细信息//tagCMViewPlayerInfo:
 | 
 |  |  |                                 Cmd:%s,
 | 
 |  |  |                                 SubCmd:%s,
 | 
 |  |  |                                 PlayerID:%d
 | 
 |  |  |                                 PlayerID:%d,
 | 
 |  |  |                                 EquipClassLV:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Cmd,
 | 
 |  |  |                                 self.SubCmd,
 | 
 |  |  |                                 self.PlayerID
 | 
 |  |  |                                 self.PlayerID,
 | 
 |  |  |                                 self.EquipClassLV
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # A3 30 装备神装进阶 #tagCMEquipEvolve
 | 
 |  |  | 
 | 
 |  |  | class  tagCMEquipEvolve(Structure):
 | 
 |  |  |     Head = tagHead()
 | 
 |  |  |     EquipIndex = 0    #(BYTE EquipIndex)// 要进阶的装备在装备背包中索引
 | 
 |  |  |     NeedEquipIDIndex = 0    #(BYTE NeedEquipIDIndex)// 所需固定装备B在背包中索引
 | 
 |  |  |     NeedItemIDIndexCnt = 0    #(BYTE NeedItemIDIndexCnt)// 附加材料在背包中索引个数
 | 
 |  |  |     NeedItemIDIndex = list()    #(vector<BYTE> NeedItemIDIndex)// 附加材料在背包的索引列表
 | 
 |  |  |     NeedSuitIndexCnt = 0    #(BYTE NeedSuitIndexCnt)// 所需套装材料在背包中索引个数
 | 
 |  |  |     NeedSuitIndex = list()    #(vector<BYTE> NeedSuitIndex)// 所需套装材料在背包的索引列表
 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xA3
 | 
 |  |  |         self.Head.SubCmd = 0x30
 | 
 |  |  |         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.NeedEquipIDIndex,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.NeedItemIDIndexCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         for i in range(self.NeedItemIDIndexCnt):
 | 
 |  |  |             value,_pos=CommFunc.ReadBYTE(_lpData,_pos)
 | 
 |  |  |             self.NeedItemIDIndex.append(value)
 | 
 |  |  |         self.NeedSuitIndexCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         for i in range(self.NeedSuitIndexCnt):
 | 
 |  |  |             value,_pos=CommFunc.ReadBYTE(_lpData,_pos)
 | 
 |  |  |             self.NeedSuitIndex.append(value)
 | 
 |  |  |         return _pos
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.Head = tagHead()
 | 
 |  |  |         self.Head.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xA3
 | 
 |  |  |         self.Head.SubCmd = 0x30
 | 
 |  |  |         self.EquipIndex = 0
 | 
 |  |  |         self.NeedEquipIDIndex = 0
 | 
 |  |  |         self.NeedItemIDIndexCnt = 0
 | 
 |  |  |         self.NeedItemIDIndex = list()
 | 
 |  |  |         self.NeedSuitIndexCnt = 0
 | 
 |  |  |         self.NeedSuitIndex = list()
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         length = 0
 | 
 |  |  |         length += self.Head.GetLength()
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += 1 * self.NeedItemIDIndexCnt
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += 1 * self.NeedSuitIndexCnt
 | 
 |  |  | 
 | 
 |  |  |         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.NeedEquipIDIndex)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.NeedItemIDIndexCnt)
 | 
 |  |  |         for i in range(self.NeedItemIDIndexCnt):
 | 
 |  |  |             data = CommFunc.WriteBYTE(data, self.NeedItemIDIndex[i])
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.NeedSuitIndexCnt)
 | 
 |  |  |         for i in range(self.NeedSuitIndexCnt):
 | 
 |  |  |             data = CommFunc.WriteBYTE(data, self.NeedSuitIndex[i])
 | 
 |  |  |         return data
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''
 | 
 |  |  |                                 Head:%s,
 | 
 |  |  |                                 EquipIndex:%d,
 | 
 |  |  |                                 NeedEquipIDIndex:%d,
 | 
 |  |  |                                 NeedItemIDIndexCnt:%d,
 | 
 |  |  |                                 NeedItemIDIndex:%s,
 | 
 |  |  |                                 NeedSuitIndexCnt:%d,
 | 
 |  |  |                                 NeedSuitIndex:%s
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Head.OutputString(),
 | 
 |  |  |                                 self.EquipIndex,
 | 
 |  |  |                                 self.NeedEquipIDIndex,
 | 
 |  |  |                                 self.NeedItemIDIndexCnt,
 | 
 |  |  |                                 "...",
 | 
 |  |  |                                 self.NeedSuitIndexCnt,
 | 
 |  |  |                                 "..."
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagCMEquipEvolve=tagCMEquipEvolve()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMEquipEvolve.Head.Cmd,m_NAtagCMEquipEvolve.Head.SubCmd))] = m_NAtagCMEquipEvolve
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | #A3 01 装备强化 #tagEquipPlus
 | 
 |  |  | 
 | 
 |  |  | class  tagEquipPlus(Structure):
 | 
 |  |  | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # A3 30 装备诛仙装备 #tagCMEquipZhuXianItem
 | 
 |  |  | 
 | 
 |  |  | class  tagCMEquipZhuXianItem(Structure):
 | 
 |  |  |     _pack_ = 1
 | 
 |  |  |     _fields_ = [
 | 
 |  |  |                   ("Cmd", c_ubyte),
 | 
 |  |  |                   ("SubCmd", c_ubyte),
 | 
 |  |  |                   ("EquipIndex", c_ubyte),    #装备在诛仙装备背包中的索引
 | 
 |  |  |                   ("ItemIndex", c_ubyte),    #装备在诛仙物品背包中的索引
 | 
 |  |  |                   ]
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Cmd = 0xA3
 | 
 |  |  |         self.SubCmd = 0x30
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def ReadData(self, stringData, _pos=0, _len=0):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         memmove(addressof(self), stringData[_pos:], self.GetLength())
 | 
 |  |  |         return _pos + self.GetLength()
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.Cmd = 0xA3
 | 
 |  |  |         self.SubCmd = 0x30
 | 
 |  |  |         self.EquipIndex = 0
 | 
 |  |  |         self.ItemIndex = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         return sizeof(tagCMEquipZhuXianItem)
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         return string_at(addressof(self), self.GetLength())
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''// A3 30 装备诛仙装备 //tagCMEquipZhuXianItem:
 | 
 |  |  |                                 Cmd:%s,
 | 
 |  |  |                                 SubCmd:%s,
 | 
 |  |  |                                 EquipIndex:%d,
 | 
 |  |  |                                 ItemIndex:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Cmd,
 | 
 |  |  |                                 self.SubCmd,
 | 
 |  |  |                                 self.EquipIndex,
 | 
 |  |  |                                 self.ItemIndex
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagCMEquipZhuXianItem=tagCMEquipZhuXianItem()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMEquipZhuXianItem.Cmd,m_NAtagCMEquipZhuXianItem.SubCmd))] = m_NAtagCMEquipZhuXianItem
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # A3 12 守护拾取物品 #tagCMGuardPickupItem
 | 
 |  |  | 
 | 
 |  |  | class  tagCMGuardPickupItem(Structure):
 | 
 |  |  | 
 |  |  |                   ("SubCmd", c_ubyte),
 | 
 |  |  |                   ("PackType", c_ubyte),    #背包类型
 | 
 |  |  |                   ("ItemIndex", c_ubyte),    #物品在背包中索引
 | 
 |  |  |                   ("IsAll", c_ubyte),    #是否处理所有过期物品
 | 
 |  |  |                   ]
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  | 
 |  |  |         self.SubCmd = 0x08
 | 
 |  |  |         self.PackType = 0
 | 
 |  |  |         self.ItemIndex = 0
 | 
 |  |  |         self.IsAll = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  | 
 |  |  |                                 Cmd:%s,
 | 
 |  |  |                                 SubCmd:%s,
 | 
 |  |  |                                 PackType:%d,
 | 
 |  |  |                                 ItemIndex:%d
 | 
 |  |  |                                 ItemIndex:%d,
 | 
 |  |  |                                 IsAll:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Cmd,
 | 
 |  |  |                                 self.SubCmd,
 | 
 |  |  |                                 self.PackType,
 | 
 |  |  |                                 self.ItemIndex
 | 
 |  |  |                                 self.ItemIndex,
 | 
 |  |  |                                 self.IsAll
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagCMItemTimeout=tagCMItemTimeout()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMItemTimeout.Cmd,m_NAtagCMItemTimeout.SubCmd))] = m_NAtagCMItemTimeout
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # A3 18 灵器突破 #tagCMLingQiEquipBreak
 | 
 |  |  | 
 | 
 |  |  | class  tagCMLingQiEquipBreak(Structure):
 | 
 |  |  |     _pack_ = 1
 | 
 |  |  |     _fields_ = [
 | 
 |  |  |                   ("Cmd", c_ubyte),
 | 
 |  |  |                   ("SubCmd", c_ubyte),
 | 
 |  |  |                   ("ItemID", c_int),    #突破的物品ID
 | 
 |  |  |                   ]
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Cmd = 0xA3
 | 
 |  |  |         self.SubCmd = 0x18
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def ReadData(self, stringData, _pos=0, _len=0):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         memmove(addressof(self), stringData[_pos:], self.GetLength())
 | 
 |  |  |         return _pos + self.GetLength()
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.Cmd = 0xA3
 | 
 |  |  |         self.SubCmd = 0x18
 | 
 |  |  |         self.ItemID = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         return sizeof(tagCMLingQiEquipBreak)
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         return string_at(addressof(self), self.GetLength())
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''// A3 18 灵器突破 //tagCMLingQiEquipBreak:
 | 
 |  |  |                                 Cmd:%s,
 | 
 |  |  |                                 SubCmd:%s,
 | 
 |  |  |                                 ItemID:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Cmd,
 | 
 |  |  |                                 self.SubCmd,
 | 
 |  |  |                                 self.ItemID
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagCMLingQiEquipBreak=tagCMLingQiEquipBreak()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMLingQiEquipBreak.Cmd,m_NAtagCMLingQiEquipBreak.SubCmd))] = m_NAtagCMLingQiEquipBreak
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # A3 31 卸下诛仙装备 #tagCMUnEquipZhuXianItem
 | 
 |  |  | 
 | 
 |  |  | class  tagCMUnEquipZhuXianItem(Structure):
 | 
 |  |  |     _pack_ = 1
 | 
 |  |  |     _fields_ = [
 | 
 |  |  |                   ("Cmd", c_ubyte),
 | 
 |  |  |                   ("SubCmd", c_ubyte),
 | 
 |  |  |                   ("EquipIndex", c_ubyte),    #装备在诛仙装备背包中的索引
 | 
 |  |  |                   ]
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Cmd = 0xA3
 | 
 |  |  |         self.SubCmd = 0x31
 | 
 |  |  |         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 = 0x31
 | 
 |  |  |         self.EquipIndex = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         return sizeof(tagCMUnEquipZhuXianItem)
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         return string_at(addressof(self), self.GetLength())
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''// A3 31 卸下诛仙装备 //tagCMUnEquipZhuXianItem:
 | 
 |  |  |                                 Cmd:%s,
 | 
 |  |  |                                 SubCmd:%s,
 | 
 |  |  |                                 EquipIndex:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Cmd,
 | 
 |  |  |                                 self.SubCmd,
 | 
 |  |  |                                 self.EquipIndex
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagCMUnEquipZhuXianItem=tagCMUnEquipZhuXianItem()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMUnEquipZhuXianItem.Cmd,m_NAtagCMUnEquipZhuXianItem.SubCmd))] = m_NAtagCMUnEquipZhuXianItem
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # A3 2B 一键使用属性果实 #tagCMUseAllAttrFruit
 | 
 |  |  | 
 | 
 |  |  | class  tagCMUseAllAttrFruit(Structure):
 | 
 |  |  | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # A3 32 诛仙装备分解 #tagCMZhuXianEquipDecompose
 | 
 |  |  | 
 | 
 |  |  | class  tagCMZhuXianEquipDecompose(Structure):
 | 
 |  |  |     Head = tagHead()
 | 
 |  |  |     Count = 0    #(BYTE Count)//材料所在背包索引的数量
 | 
 |  |  |     IndexList = list()    #(vector<WORD> IndexList)//材料所在背包索引列表
 | 
 |  |  |     ItemIDList = list()    #(vector<DWORD> ItemIDList)//材料所在背包物品ID列表
 | 
 |  |  |     IsAuto = 0    #(BYTE IsAuto)//是否自动分解
 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xA3
 | 
 |  |  |         self.Head.SubCmd = 0x32
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def ReadData(self, _lpData, _pos=0, _Len=0):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         _pos = self.Head.ReadData(_lpData, _pos)
 | 
 |  |  |         self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         for i in range(self.Count):
 | 
 |  |  |             value,_pos=CommFunc.ReadWORD(_lpData,_pos)
 | 
 |  |  |             self.IndexList.append(value)
 | 
 |  |  |         for i in range(self.Count):
 | 
 |  |  |             value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
 | 
 |  |  |             self.ItemIDList.append(value)
 | 
 |  |  |         self.IsAuto,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         return _pos
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.Head = tagHead()
 | 
 |  |  |         self.Head.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xA3
 | 
 |  |  |         self.Head.SubCmd = 0x32
 | 
 |  |  |         self.Count = 0
 | 
 |  |  |         self.IndexList = list()
 | 
 |  |  |         self.ItemIDList = list()
 | 
 |  |  |         self.IsAuto = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         length = 0
 | 
 |  |  |         length += self.Head.GetLength()
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += 2 * self.Count
 | 
 |  |  |         length += 4 * self.Count
 | 
 |  |  |         length += 1
 | 
 |  |  | 
 | 
 |  |  |         return length
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         data = ''
 | 
 |  |  |         data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.Count)
 | 
 |  |  |         for i in range(self.Count):
 | 
 |  |  |             data = CommFunc.WriteWORD(data, self.IndexList[i])
 | 
 |  |  |         for i in range(self.Count):
 | 
 |  |  |             data = CommFunc.WriteDWORD(data, self.ItemIDList[i])
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.IsAuto)
 | 
 |  |  |         return data
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''
 | 
 |  |  |                                 Head:%s,
 | 
 |  |  |                                 Count:%d,
 | 
 |  |  |                                 IndexList:%s,
 | 
 |  |  |                                 ItemIDList:%s,
 | 
 |  |  |                                 IsAuto:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Head.OutputString(),
 | 
 |  |  |                                 self.Count,
 | 
 |  |  |                                 "...",
 | 
 |  |  |                                 "...",
 | 
 |  |  |                                 self.IsAuto
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagCMZhuXianEquipDecompose=tagCMZhuXianEquipDecompose()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMZhuXianEquipDecompose.Head.Cmd,m_NAtagCMZhuXianEquipDecompose.Head.SubCmd))] = m_NAtagCMZhuXianEquipDecompose
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # A5 30 购买魔魂铜钱经验什么的 #tagCMBuySomething
 | 
 |  |  | 
 | 
 |  |  | class  tagCMBuySomething(Structure):
 | 
 |  |  | 
 |  |  |     _fields_ = [
 | 
 |  |  |                   ("Cmd", c_ubyte),
 | 
 |  |  |                   ("SubCmd", c_ubyte),
 | 
 |  |  |                   ("HorseID", c_int),    #坐骑ID
 | 
 |  |  |                   ("HorseID", c_int),    #坐骑幻化ID
 | 
 |  |  |                   ]
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  | 
 |  |  | 
 | 
 |  |  | m_NAtagPlayerActivateHorse=tagPlayerActivateHorse()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagPlayerActivateHorse.Cmd,m_NAtagPlayerActivateHorse.SubCmd))] = m_NAtagPlayerActivateHorse
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # A5 C7 激活大师强化等级 #tagCMActivateMasterPlusLV
 | 
 |  |  | 
 | 
 |  |  | class  tagCMActivateMasterPlusLV(Structure):
 | 
 |  |  |     _pack_ = 1
 | 
 |  |  |     _fields_ = [
 | 
 |  |  |                   ("Cmd", c_ubyte),
 | 
 |  |  |                   ("SubCmd", c_ubyte),
 | 
 |  |  |                   ("ClassLV", c_ubyte),    # 所属装备阶
 | 
 |  |  |                   ("MasterPlusLV", c_ushort),    # 大师强化等级
 | 
 |  |  |                   ]
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Cmd = 0xA5
 | 
 |  |  |         self.SubCmd = 0xC7
 | 
 |  |  |         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 = 0xC7
 | 
 |  |  |         self.ClassLV = 0
 | 
 |  |  |         self.MasterPlusLV = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         return sizeof(tagCMActivateMasterPlusLV)
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         return string_at(addressof(self), self.GetLength())
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''// A5 C7 激活大师强化等级 //tagCMActivateMasterPlusLV:
 | 
 |  |  |                                 Cmd:%s,
 | 
 |  |  |                                 SubCmd:%s,
 | 
 |  |  |                                 ClassLV:%d,
 | 
 |  |  |                                 MasterPlusLV:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Cmd,
 | 
 |  |  |                                 self.SubCmd,
 | 
 |  |  |                                 self.ClassLV,
 | 
 |  |  |                                 self.MasterPlusLV
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagCMActivateMasterPlusLV=tagCMActivateMasterPlusLV()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActivateMasterPlusLV.Cmd,m_NAtagCMActivateMasterPlusLV.SubCmd))] = m_NAtagCMActivateMasterPlusLV
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | 
 |  |  |     CostEquipCnt = 0    #(BYTE CostEquipCnt)// 装备个数
 | 
 |  |  |     CostEquipIndex = list()    #(vector<WORD> CostEquipIndex)// 装备索引
 | 
 |  |  |     CostEquipID = list()    #(vector<DWORD> CostEquipID)// 装备物品ID
 | 
 |  |  |     AutoBuy = 0    #(BYTE AutoBuy)// 自动购买 0-不自动购买,1-自动购买并升星,2-自动购买预览(未满概率时预览消耗时使用)
 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  | 
 |  |  |         for i in range(self.CostEquipCnt):
 | 
 |  |  |             value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
 | 
 |  |  |             self.CostEquipID.append(value)
 | 
 |  |  |         self.AutoBuy,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         return _pos
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  | 
 |  |  |         self.CostEquipCnt = 0
 | 
 |  |  |         self.CostEquipIndex = list()
 | 
 |  |  |         self.CostEquipID = list()
 | 
 |  |  |         self.AutoBuy = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  | 
 |  |  |         length += 1
 | 
 |  |  |         length += 2 * self.CostEquipCnt
 | 
 |  |  |         length += 4 * self.CostEquipCnt
 | 
 |  |  |         length += 1
 | 
 |  |  | 
 | 
 |  |  |         return length
 | 
 |  |  | 
 | 
 |  |  | 
 |  |  |             data = CommFunc.WriteWORD(data, self.CostEquipIndex[i])
 | 
 |  |  |         for i in range(self.CostEquipCnt):
 | 
 |  |  |             data = CommFunc.WriteDWORD(data, self.CostEquipID[i])
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.AutoBuy)
 | 
 |  |  |         return data
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  | 
 |  |  |                                 EquipPackIndex:%d,
 | 
 |  |  |                                 CostEquipCnt:%d,
 | 
 |  |  |                                 CostEquipIndex:%s,
 | 
 |  |  |                                 CostEquipID:%s
 | 
 |  |  |                                 CostEquipID:%s,
 | 
 |  |  |                                 AutoBuy:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Head.OutputString(),
 | 
 |  |  |                                 self.EquipPackIndex,
 | 
 |  |  |                                 self.CostEquipCnt,
 | 
 |  |  |                                 "...",
 | 
 |  |  |                                 "..."
 | 
 |  |  |                                 "...",
 | 
 |  |  |                                 self.AutoBuy
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagCMEquipPartStarUp=tagCMEquipPartStarUp()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMEquipPartStarUp.Head.Cmd,m_NAtagCMEquipPartStarUp.Head.SubCmd))] = m_NAtagCMEquipPartStarUp
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # A5 C6 装备部位星级套装激活 #tagCMEquipPartSuiteActivate
 | 
 |  |  | 
 | 
 |  |  | class  tagCMEquipPartSuiteActivate(Structure):
 | 
 |  |  |     _pack_ = 1
 | 
 |  |  |     _fields_ = [
 | 
 |  |  |                   ("Cmd", c_ubyte),
 | 
 |  |  |                   ("SubCmd", c_ubyte),
 | 
 |  |  |                   ("ClassLV", c_ubyte),    # 所属装备阶
 | 
 |  |  |                   ("SuiteID", c_ushort),    # 套装ID
 | 
 |  |  |                   ("SuiteCount", c_ubyte),    # 件数
 | 
 |  |  |                   ("Star", c_ubyte),    # 星数
 | 
 |  |  |                   ]
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Cmd = 0xA5
 | 
 |  |  |         self.SubCmd = 0xC6
 | 
 |  |  |         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 = 0xC6
 | 
 |  |  |         self.ClassLV = 0
 | 
 |  |  |         self.SuiteID = 0
 | 
 |  |  |         self.SuiteCount = 0
 | 
 |  |  |         self.Star = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         return sizeof(tagCMEquipPartSuiteActivate)
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         return string_at(addressof(self), self.GetLength())
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''// A5 C6 装备部位星级套装激活 //tagCMEquipPartSuiteActivate:
 | 
 |  |  |                                 Cmd:%s,
 | 
 |  |  |                                 SubCmd:%s,
 | 
 |  |  |                                 ClassLV:%d,
 | 
 |  |  |                                 SuiteID:%d,
 | 
 |  |  |                                 SuiteCount:%d,
 | 
 |  |  |                                 Star:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Cmd,
 | 
 |  |  |                                 self.SubCmd,
 | 
 |  |  |                                 self.ClassLV,
 | 
 |  |  |                                 self.SuiteID,
 | 
 |  |  |                                 self.SuiteCount,
 | 
 |  |  |                                 self.Star
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagCMEquipPartSuiteActivate=tagCMEquipPartSuiteActivate()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMEquipPartSuiteActivate.Cmd,m_NAtagCMEquipPartSuiteActivate.SubCmd))] = m_NAtagCMEquipPartSuiteActivate
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | 
 |  |  |                   ("Cmd", c_ubyte),
 | 
 |  |  |                   ("SubCmd", c_ubyte),
 | 
 |  |  |                   ("SuccID", c_int),    #成就ID
 | 
 |  |  |                   ("IsPassport", c_ubyte),    #是否通行证奖励
 | 
 |  |  |                   ]
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  | 
 |  |  |         self.Cmd = 0xA5
 | 
 |  |  |         self.SubCmd = 0x42
 | 
 |  |  |         self.SuccID = 0
 | 
 |  |  |         self.IsPassport = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  | 
 |  |  |         DumpString = '''// A5 42 领取成就奖励 //tagMCGetSuccessAward:
 | 
 |  |  |                                 Cmd:%s,
 | 
 |  |  |                                 SubCmd:%s,
 | 
 |  |  |                                 SuccID:%d
 | 
 |  |  |                                 SuccID:%d,
 | 
 |  |  |                                 IsPassport:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Cmd,
 | 
 |  |  |                                 self.SubCmd,
 | 
 |  |  |                                 self.SuccID
 | 
 |  |  |                                 self.SuccID,
 | 
 |  |  |                                 self.IsPassport
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # A5 29 骑宠觉醒 #tagCMHorsePetAwake
 | 
 |  |  | 
 | 
 |  |  | class  tagCMHorsePetAwake(Structure):
 | 
 |  |  |     _pack_ = 1
 | 
 |  |  |     _fields_ = [
 | 
 |  |  |                   ("Cmd", c_ubyte),
 | 
 |  |  |                   ("SubCmd", c_ubyte),
 | 
 |  |  |                   ("Type", c_ushort),    # 1-坐骑 2-灵宠
 | 
 |  |  |                   ("ID", c_int),    # 对应坐骑表灵宠表ID
 | 
 |  |  |                   ("EatItemID", c_int),    # 吞噬的物品ID
 | 
 |  |  |                   ]
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Cmd = 0xA5
 | 
 |  |  |         self.SubCmd = 0x29
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def ReadData(self, stringData, _pos=0, _len=0):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         memmove(addressof(self), stringData[_pos:], self.GetLength())
 | 
 |  |  |         return _pos + self.GetLength()
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.Cmd = 0xA5
 | 
 |  |  |         self.SubCmd = 0x29
 | 
 |  |  |         self.Type = 0
 | 
 |  |  |         self.ID = 0
 | 
 |  |  |         self.EatItemID = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         return sizeof(tagCMHorsePetAwake)
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         return string_at(addressof(self), self.GetLength())
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''// A5 29 骑宠觉醒 //tagCMHorsePetAwake:
 | 
 |  |  |                                 Cmd:%s,
 | 
 |  |  |                                 SubCmd:%s,
 | 
 |  |  |                                 Type:%d,
 | 
 |  |  |                                 ID:%d,
 | 
 |  |  |                                 EatItemID:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Cmd,
 | 
 |  |  |                                 self.SubCmd,
 | 
 |  |  |                                 self.Type,
 | 
 |  |  |                                 self.ID,
 | 
 |  |  |                                 self.EatItemID
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagCMHorsePetAwake=tagCMHorsePetAwake()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMHorsePetAwake.Cmd,m_NAtagCMHorsePetAwake.SubCmd))] = m_NAtagCMHorsePetAwake
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # A5 30 骑宠外观选择 #tagCMHorsePetSkinSelect
 | 
 |  |  | 
 | 
 |  |  | class  tagCMHorsePetSkinSelect(Structure):
 | 
 |  |  |     _pack_ = 1
 | 
 |  |  |     _fields_ = [
 | 
 |  |  |                   ("Cmd", c_ubyte),
 | 
 |  |  |                   ("SubCmd", c_ubyte),
 | 
 |  |  |                   ("Type", c_ushort),    # 1-坐骑 2-灵宠
 | 
 |  |  |                   ("ID", c_int),    # 对应坐骑表灵宠表ID
 | 
 |  |  |                   ("SkinIndex", c_ubyte),    # 外观索引
 | 
 |  |  |                   ]
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Cmd = 0xA5
 | 
 |  |  |         self.SubCmd = 0x30
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def ReadData(self, stringData, _pos=0, _len=0):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         memmove(addressof(self), stringData[_pos:], self.GetLength())
 | 
 |  |  |         return _pos + self.GetLength()
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.Cmd = 0xA5
 | 
 |  |  |         self.SubCmd = 0x30
 | 
 |  |  |         self.Type = 0
 | 
 |  |  |         self.ID = 0
 | 
 |  |  |         self.SkinIndex = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         return sizeof(tagCMHorsePetSkinSelect)
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         return string_at(addressof(self), self.GetLength())
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''// A5 30 骑宠外观选择 //tagCMHorsePetSkinSelect:
 | 
 |  |  |                                 Cmd:%s,
 | 
 |  |  |                                 SubCmd:%s,
 | 
 |  |  |                                 Type:%d,
 | 
 |  |  |                                 ID:%d,
 | 
 |  |  |                                 SkinIndex:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Cmd,
 | 
 |  |  |                                 self.SubCmd,
 | 
 |  |  |                                 self.Type,
 | 
 |  |  |                                 self.ID,
 | 
 |  |  |                                 self.SkinIndex
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagCMHorsePetSkinSelect=tagCMHorsePetSkinSelect()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMHorsePetSkinSelect.Cmd,m_NAtagCMHorsePetSkinSelect.SubCmd))] = m_NAtagCMHorsePetSkinSelect
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # A5 27 坐骑提升 #tagCMHorseUp
 | 
 |  |  | 
 | 
 |  |  | class  tagCMHorseUp(Structure):
 | 
 |  |  | 
 |  |  |     _fields_ = [
 | 
 |  |  |                   ("Cmd", c_ubyte),
 | 
 |  |  |                   ("SubCmd", c_ubyte),
 | 
 |  |  |                   ("HorseID", c_int),    #坐骑ID
 | 
 |  |  |                   ("UseItemCnt", c_ubyte),    #消耗材料个数
 | 
 |  |  |                   ("UseItemCnt", c_ushort),    #消耗材料个数
 | 
 |  |  |                   ("IsAutoBuy", c_ubyte),    #是否自动购买
 | 
 |  |  |                   ]
 | 
 |  |  | 
 | 
 |  |  | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.Cmd = 0xA5
 | 
 |  |  |         self.SubCmd = 0x27
 | 
 |  |  |         self.HorseID = 0
 | 
 |  |  |         self.UseItemCnt = 0
 | 
 |  |  |         self.IsAutoBuy = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 |  |  |         DumpString = '''// A5 27 坐骑提升 //tagCMHorseUp:
 | 
 |  |  |                                 Cmd:%s,
 | 
 |  |  |                                 SubCmd:%s,
 | 
 |  |  |                                 HorseID:%d,
 | 
 |  |  |                                 UseItemCnt:%d,
 | 
 |  |  |                                 IsAutoBuy:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Cmd,
 | 
 |  |  |                                 self.SubCmd,
 | 
 |  |  |                                 self.HorseID,
 | 
 |  |  |                                 self.UseItemCnt,
 | 
 |  |  |                                 self.IsAutoBuy
 | 
 |  |  |                                 )
 | 
 |  |  | 
 |  |  |     _fields_ = [
 | 
 |  |  |                   ("Cmd", c_ubyte),
 | 
 |  |  |                   ("SubCmd", c_ubyte),
 | 
 |  |  |                   ("Index", c_int),    #选择索引
 | 
 |  |  |                   ("ChooseType", c_ubyte),    # 1-按等阶,2-按幻化
 | 
 |  |  |                   ("LVID", c_ubyte),    # 阶等级或幻化ID
 | 
 |  |  |                   ]
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.Cmd = 0xA5
 | 
 |  |  |         self.SubCmd = 0x02
 | 
 |  |  |         self.Index = 0
 | 
 |  |  |         self.ChooseType = 0
 | 
 |  |  |         self.LVID = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  | 
 |  |  |         DumpString = '''//A5 02 坐骑选择 //tagPlayerChooseHorse:
 | 
 |  |  |                                 Cmd:%s,
 | 
 |  |  |                                 SubCmd:%s,
 | 
 |  |  |                                 Index:%d
 | 
 |  |  |                                 ChooseType:%d,
 | 
 |  |  |                                 LVID:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Cmd,
 | 
 |  |  |                                 self.SubCmd,
 | 
 |  |  |                                 self.Index
 | 
 |  |  |                                 self.ChooseType,
 | 
 |  |  |                                 self.LVID
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 |  |  |                   ("Cmd", c_ubyte),
 | 
 |  |  |                   ("SubCmd", c_ubyte),
 | 
 |  |  |                   ("AlchemyID", c_int),    # 丹药ID
 | 
 |  |  |                   ("AlchemyTimes", c_ushort),    # 丹药次数
 | 
 |  |  |                   ("DoType", c_ubyte),    # 0-学习 1-开始炼丹 2-停止炼丹 3-开炉取丹
 | 
 |  |  |                   ]
 | 
 |  |  | 
 | 
 |  |  | 
 |  |  |         self.Cmd = 0xA5
 | 
 |  |  |         self.SubCmd = 0x76
 | 
 |  |  |         self.AlchemyID = 0
 | 
 |  |  |         self.AlchemyTimes = 0
 | 
 |  |  |         self.DoType = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  | 
 |  |  |                                 Cmd:%s,
 | 
 |  |  |                                 SubCmd:%s,
 | 
 |  |  |                                 AlchemyID:%d,
 | 
 |  |  |                                 AlchemyTimes:%d,
 | 
 |  |  |                                 DoType:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Cmd,
 | 
 |  |  |                                 self.SubCmd,
 | 
 |  |  |                                 self.AlchemyID,
 | 
 |  |  |                                 self.AlchemyTimes,
 | 
 |  |  |                                 self.DoType
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # A5 16 选择技能五行专精 #tagCMSelectSkillElement
 | 
 |  |  | 
 | 
 |  |  | class  tagCMSelectSkillElement(Structure):
 | 
 |  |  |     _pack_ = 1
 | 
 |  |  |     _fields_ = [
 | 
 |  |  |                   ("Cmd", c_ubyte),
 | 
 |  |  |                   ("SubCmd", c_ubyte),
 | 
 |  |  |                   ("SkillTypeID", c_int),    # 专精技能ID
 | 
 |  |  |                   ("DoType", c_ubyte),    # 0-激活 1-使用
 | 
 |  |  |                   ]
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Cmd = 0xA5
 | 
 |  |  |         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 = 0xA5
 | 
 |  |  |         self.SubCmd = 0x16
 | 
 |  |  |         self.SkillTypeID = 0
 | 
 |  |  |         self.DoType = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         return sizeof(tagCMSelectSkillElement)
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         return string_at(addressof(self), self.GetLength())
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''// A5 16 选择技能五行专精 //tagCMSelectSkillElement:
 | 
 |  |  |                                 Cmd:%s,
 | 
 |  |  |                                 SubCmd:%s,
 | 
 |  |  |                                 SkillTypeID:%d,
 | 
 |  |  |                                 DoType:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Cmd,
 | 
 |  |  |                                 self.SubCmd,
 | 
 |  |  |                                 self.SkillTypeID,
 | 
 |  |  |                                 self.DoType
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagCMSelectSkillElement=tagCMSelectSkillElement()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMSelectSkillElement.Cmd,m_NAtagCMSelectSkillElement.SubCmd))] = m_NAtagCMSelectSkillElement
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # A5 17 绑玉转盘开始 #tagCMStartBindJadeWheel
 | 
 |  |  | 
 | 
 |  |  | class  tagCMStartBindJadeWheel(Structure):
 | 
 |  |  | 
 |  |  | 
 | 
 |  |  | m_NAtagCMRenameFamily=tagCMRenameFamily()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMRenameFamily.Head.Cmd,m_NAtagCMRenameFamily.Head.SubCmd))] = m_NAtagCMRenameFamily
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # A6 06 家族兑换活跃令 #tagCMFamilyActivityExchange
 | 
 |  |  | 
 | 
 |  |  | class  tagCMFamilyActivityExchange(Structure):
 | 
 |  |  |     Head = tagHead()
 | 
 |  |  |     Count = 0    #(BYTE Count)//材料所在背包索引的数量
 | 
 |  |  |     IndexList = list()    #(vector<WORD> IndexList)//材料所在背包索引列表
 | 
 |  |  |     ItemIDList = list()    #(vector<DWORD> ItemIDList)//材料所在背包物品ID列表
 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xA6
 | 
 |  |  |         self.Head.SubCmd = 0x06
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def ReadData(self, _lpData, _pos=0, _Len=0):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         _pos = self.Head.ReadData(_lpData, _pos)
 | 
 |  |  |         self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         for i in range(self.Count):
 | 
 |  |  |             value,_pos=CommFunc.ReadWORD(_lpData,_pos)
 | 
 |  |  |             self.IndexList.append(value)
 | 
 |  |  |         for i in range(self.Count):
 | 
 |  |  |             value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
 | 
 |  |  |             self.ItemIDList.append(value)
 | 
 |  |  |         return _pos
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.Head = tagHead()
 | 
 |  |  |         self.Head.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xA6
 | 
 |  |  |         self.Head.SubCmd = 0x06
 | 
 |  |  |         self.Count = 0
 | 
 |  |  |         self.IndexList = list()
 | 
 |  |  |         self.ItemIDList = list()
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         length = 0
 | 
 |  |  |         length += self.Head.GetLength()
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += 2 * self.Count
 | 
 |  |  |         length += 4 * self.Count
 | 
 |  |  | 
 | 
 |  |  |         return length
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         data = ''
 | 
 |  |  |         data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.Count)
 | 
 |  |  |         for i in range(self.Count):
 | 
 |  |  |             data = CommFunc.WriteWORD(data, self.IndexList[i])
 | 
 |  |  |         for i in range(self.Count):
 | 
 |  |  |             data = CommFunc.WriteDWORD(data, self.ItemIDList[i])
 | 
 |  |  |         return data
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''
 | 
 |  |  |                                 Head:%s,
 | 
 |  |  |                                 Count:%d,
 | 
 |  |  |                                 IndexList:%s,
 | 
 |  |  |                                 ItemIDList:%s
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Head.OutputString(),
 | 
 |  |  |                                 self.Count,
 | 
 |  |  |                                 "...",
 | 
 |  |  |                                 "..."
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagCMFamilyActivityExchange=tagCMFamilyActivityExchange()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMFamilyActivityExchange.Head.Cmd,m_NAtagCMFamilyActivityExchange.Head.SubCmd))] = m_NAtagCMFamilyActivityExchange
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | 
 |  |  | 
 | 
 |  |  | m_NAtagCMVIPKillNPCLVInfoSwitch=tagCMVIPKillNPCLVInfoSwitch()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMVIPKillNPCLVInfoSwitch.Cmd,m_NAtagCMVIPKillNPCLVInfoSwitch.SubCmd))] = m_NAtagCMVIPKillNPCLVInfoSwitch
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # AA 09 集字活动兑换 #tagCMActCollectWordsExchange
 | 
 |  |  | 
 | 
 |  |  | class  tagCMActCollectWordsExchange(Structure):
 | 
 |  |  |     _pack_ = 1
 | 
 |  |  |     _fields_ = [
 | 
 |  |  |                   ("Cmd", c_ubyte),
 | 
 |  |  |                   ("SubCmd", c_ubyte),
 | 
 |  |  |                   ("ActNum", c_ubyte),    #活动编号,1 或 2,相互独立的活动,可同时开启
 | 
 |  |  |                   ("ExchangeNum", c_ubyte),    #兑换编号
 | 
 |  |  |                   ]
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Cmd = 0xAA
 | 
 |  |  |         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 = 0xAA
 | 
 |  |  |         self.SubCmd = 0x09
 | 
 |  |  |         self.ActNum = 0
 | 
 |  |  |         self.ExchangeNum = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         return sizeof(tagCMActCollectWordsExchange)
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         return string_at(addressof(self), self.GetLength())
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''// AA 09 集字活动兑换 //tagCMActCollectWordsExchange:
 | 
 |  |  |                                 Cmd:%s,
 | 
 |  |  |                                 SubCmd:%s,
 | 
 |  |  |                                 ActNum:%d,
 | 
 |  |  |                                 ExchangeNum:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Cmd,
 | 
 |  |  |                                 self.SubCmd,
 | 
 |  |  |                                 self.ActNum,
 | 
 |  |  |                                 self.ExchangeNum
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagCMActCollectWordsExchange=tagCMActCollectWordsExchange()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActCollectWordsExchange.Cmd,m_NAtagCMActCollectWordsExchange.SubCmd))] = m_NAtagCMActCollectWordsExchange
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # B0 29 活跃放置明细查询 #tagCMActivityPlaceQuery
 | 
 |  |  | 
 | 
 |  |  | class  tagCMActivityPlaceQuery(Structure):
 | 
 |  |  |     _pack_ = 1
 | 
 |  |  |     _fields_ = [
 | 
 |  |  |                   ("Cmd", c_ubyte),
 | 
 |  |  |                   ("SubCmd", c_ubyte),
 | 
 |  |  |                   ]
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Cmd = 0xB0
 | 
 |  |  |         self.SubCmd = 0x29
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def ReadData(self, stringData, _pos=0, _len=0):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         memmove(addressof(self), stringData[_pos:], self.GetLength())
 | 
 |  |  |         return _pos + self.GetLength()
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.Cmd = 0xB0
 | 
 |  |  |         self.SubCmd = 0x29
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         return sizeof(tagCMActivityPlaceQuery)
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         return string_at(addressof(self), self.GetLength())
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''// B0 29 活跃放置明细查询 //tagCMActivityPlaceQuery:
 | 
 |  |  |                                 Cmd:%s,
 | 
 |  |  |                                 SubCmd:%s
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Cmd,
 | 
 |  |  |                                 self.SubCmd
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagCMActivityPlaceQuery=tagCMActivityPlaceQuery()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActivityPlaceQuery.Cmd,m_NAtagCMActivityPlaceQuery.SubCmd))] = m_NAtagCMActivityPlaceQuery
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # B0 28 活跃放置快速完成 #tagCMActivityPlaceQuickFinish
 | 
 |  |  | 
 | 
 |  |  | class  tagCMActivityPlaceQuickFinish(Structure):
 | 
 |  |  |     _pack_ = 1
 | 
 |  |  |     _fields_ = [
 | 
 |  |  |                   ("Cmd", c_ubyte),
 | 
 |  |  |                   ("SubCmd", c_ubyte),
 | 
 |  |  |                   ("FinishCount", c_ubyte),    #完成次数
 | 
 |  |  |                   ]
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Cmd = 0xB0
 | 
 |  |  |         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 = 0xB0
 | 
 |  |  |         self.SubCmd = 0x28
 | 
 |  |  |         self.FinishCount = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         return sizeof(tagCMActivityPlaceQuickFinish)
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         return string_at(addressof(self), self.GetLength())
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''// B0 28 活跃放置快速完成 //tagCMActivityPlaceQuickFinish:
 | 
 |  |  |                                 Cmd:%s,
 | 
 |  |  |                                 SubCmd:%s,
 | 
 |  |  |                                 FinishCount:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Cmd,
 | 
 |  |  |                                 self.SubCmd,
 | 
 |  |  |                                 self.FinishCount
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagCMActivityPlaceQuickFinish=tagCMActivityPlaceQuickFinish()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActivityPlaceQuickFinish.Cmd,m_NAtagCMActivityPlaceQuickFinish.SubCmd))] = m_NAtagCMActivityPlaceQuickFinish
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # B0 27 活跃放置启动 #tagCMActivityPlaceStart
 | 
 |  |  | 
 | 
 |  |  | class  tagCMActivityPlaceStart(Structure):
 | 
 |  |  |     _pack_ = 1
 | 
 |  |  |     _fields_ = [
 | 
 |  |  |                   ("Cmd", c_ubyte),
 | 
 |  |  |                   ("SubCmd", c_ubyte),
 | 
 |  |  |                   ]
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Cmd = 0xB0
 | 
 |  |  |         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 = 0xB0
 | 
 |  |  |         self.SubCmd = 0x27
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         return sizeof(tagCMActivityPlaceStart)
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         return string_at(addressof(self), self.GetLength())
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''// B0 27 活跃放置启动 //tagCMActivityPlaceStart:
 | 
 |  |  |                                 Cmd:%s,
 | 
 |  |  |                                 SubCmd:%s
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Cmd,
 | 
 |  |  |                                 self.SubCmd
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagCMActivityPlaceStart=tagCMActivityPlaceStart()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActivityPlaceStart.Cmd,m_NAtagCMActivityPlaceStart.SubCmd))] = m_NAtagCMActivityPlaceStart
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # B0 50 钓鱼收杆 #tagCMDoFish
 | 
 |  |  | 
 | 
 |  |  | class  tagCMDoFish(Structure):
 | 
 |  |  | 
 |  |  | 
 | 
 |  |  | m_NAtagReceiveFamilyArrestAward=tagReceiveFamilyArrestAward()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagReceiveFamilyArrestAward.Cmd,m_NAtagReceiveFamilyArrestAward.SubCmd))] = m_NAtagReceiveFamilyArrestAward
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # B0 10 请求协助Boss #tagCMRequestAssistBoss
 | 
 |  |  | 
 | 
 |  |  | class  tagCMRequestAssistBoss(Structure):
 | 
 |  |  |     _pack_ = 1
 | 
 |  |  |     _fields_ = [
 | 
 |  |  |                   ("Cmd", c_ubyte),
 | 
 |  |  |                   ("SubCmd", c_ubyte),
 | 
 |  |  |                   ("ObjID", c_int),     | 
 |  |  |                   ("NPCID", c_int),     | 
 |  |  |                   ]
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Cmd = 0xB0
 | 
 |  |  |         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 = 0xB0
 | 
 |  |  |         self.SubCmd = 0x10
 | 
 |  |  |         self.ObjID = 0
 | 
 |  |  |         self.NPCID = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         return sizeof(tagCMRequestAssistBoss)
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         return string_at(addressof(self), self.GetLength())
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''// B0 10 请求协助Boss //tagCMRequestAssistBoss:
 | 
 |  |  |                                 Cmd:%s,
 | 
 |  |  |                                 SubCmd:%s,
 | 
 |  |  |                                 ObjID:%d,
 | 
 |  |  |                                 NPCID:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Cmd,
 | 
 |  |  |                                 self.SubCmd,
 | 
 |  |  |                                 self.ObjID,
 | 
 |  |  |                                 self.NPCID
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagCMRequestAssistBoss=tagCMRequestAssistBoss()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMRequestAssistBoss.Cmd,m_NAtagCMRequestAssistBoss.SubCmd))] = m_NAtagCMRequestAssistBoss
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # B0 11 请求协助组队副本 #tagCMRequestAssistTeamFB
 | 
 |  |  | 
 | 
 |  |  | class  tagCMRequestAssistTeamFB(Structure):
 | 
 |  |  |     _pack_ = 1
 | 
 |  |  |     _fields_ = [
 | 
 |  |  |                   ("Cmd", c_ubyte),
 | 
 |  |  |                   ("SubCmd", c_ubyte),
 | 
 |  |  |                   ("MapID", c_ushort),     | 
 |  |  |                   ("LineID", c_ushort),     | 
 |  |  |                   ]
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Cmd = 0xB0
 | 
 |  |  |         self.SubCmd = 0x11
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def ReadData(self, stringData, _pos=0, _len=0):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         memmove(addressof(self), stringData[_pos:], self.GetLength())
 | 
 |  |  |         return _pos + self.GetLength()
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.Cmd = 0xB0
 | 
 |  |  |         self.SubCmd = 0x11
 | 
 |  |  |         self.MapID = 0
 | 
 |  |  |         self.LineID = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         return sizeof(tagCMRequestAssistTeamFB)
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         return string_at(addressof(self), self.GetLength())
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''// B0 11 请求协助组队副本 //tagCMRequestAssistTeamFB:
 | 
 |  |  |                                 Cmd:%s,
 | 
 |  |  |                                 SubCmd:%s,
 | 
 |  |  |                                 MapID:%d,
 | 
 |  |  |                                 LineID:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Cmd,
 | 
 |  |  |                                 self.SubCmd,
 | 
 |  |  |                                 self.MapID,
 | 
 |  |  |                                 self.LineID
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagCMRequestAssistTeamFB=tagCMRequestAssistTeamFB()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMRequestAssistTeamFB.Cmd,m_NAtagCMRequestAssistTeamFB.SubCmd))] = m_NAtagCMRequestAssistTeamFB
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # B1 09 结算自定义副本奖励 #tagCMGiveCustomFBPrize
 | 
 |  |  | 
 | 
 |  |  | class  tagCMGiveCustomFBPrize(Structure):
 | 
 |  |  |     _pack_ = 1
 | 
 |  |  |     _fields_ = [
 | 
 |  |  |                   ("Cmd", c_ubyte),
 | 
 |  |  |                   ("SubCmd", c_ubyte),
 | 
 |  |  |                   ("MapID", c_int),     | 
 |  |  |                   ("FuncLineID", c_ushort),     | 
 |  |  |                   ]
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Cmd = 0xB1
 | 
 |  |  |         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 = 0xB1
 | 
 |  |  |         self.SubCmd = 0x09
 | 
 |  |  |         self.MapID = 0
 | 
 |  |  |         self.FuncLineID = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         return sizeof(tagCMGiveCustomFBPrize)
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         return string_at(addressof(self), self.GetLength())
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''// B1 09 结算自定义副本奖励 //tagCMGiveCustomFBPrize:
 | 
 |  |  |                                 Cmd:%s,
 | 
 |  |  |                                 SubCmd:%s,
 | 
 |  |  |                                 MapID:%d,
 | 
 |  |  |                                 FuncLineID:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Cmd,
 | 
 |  |  |                                 self.SubCmd,
 | 
 |  |  |                                 self.MapID,
 | 
 |  |  |                                 self.FuncLineID
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagCMGiveCustomFBPrize=tagCMGiveCustomFBPrize()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMGiveCustomFBPrize.Cmd,m_NAtagCMGiveCustomFBPrize.SubCmd))] = m_NAtagCMGiveCustomFBPrize
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # B1 06 助战召唤 #tagCMHelpBattleCall
 | 
 |  |  | 
 | 
 |  |  | class  tagCMHelpBattleCall(Structure):
 | 
 |  |  | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # B1 08 刷新自定义副本奖励 #tagCMRefreshCustomFBPrize
 | 
 |  |  | 
 | 
 |  |  | class  tagCMRefreshCustomFBPrize(Structure):
 | 
 |  |  |     _pack_ = 1
 | 
 |  |  |     _fields_ = [
 | 
 |  |  |                   ("Cmd", c_ubyte),
 | 
 |  |  |                   ("SubCmd", c_ubyte),
 | 
 |  |  |                   ("MapID", c_int),     | 
 |  |  |                   ("FuncLineID", c_ushort),     | 
 |  |  |                   ]
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Cmd = 0xB1
 | 
 |  |  |         self.SubCmd = 0x08
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def ReadData(self, stringData, _pos=0, _len=0):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         memmove(addressof(self), stringData[_pos:], self.GetLength())
 | 
 |  |  |         return _pos + self.GetLength()
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.Cmd = 0xB1
 | 
 |  |  |         self.SubCmd = 0x08
 | 
 |  |  |         self.MapID = 0
 | 
 |  |  |         self.FuncLineID = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         return sizeof(tagCMRefreshCustomFBPrize)
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         return string_at(addressof(self), self.GetLength())
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''// B1 08 刷新自定义副本奖励 //tagCMRefreshCustomFBPrize:
 | 
 |  |  |                                 Cmd:%s,
 | 
 |  |  |                                 SubCmd:%s,
 | 
 |  |  |                                 MapID:%d,
 | 
 |  |  |                                 FuncLineID:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Cmd,
 | 
 |  |  |                                 self.SubCmd,
 | 
 |  |  |                                 self.MapID,
 | 
 |  |  |                                 self.FuncLineID
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagCMRefreshCustomFBPrize=tagCMRefreshCustomFBPrize()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMRefreshCustomFBPrize.Cmd,m_NAtagCMRefreshCustomFBPrize.SubCmd))] = m_NAtagCMRefreshCustomFBPrize
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # B1 03 设置封魔坛多倍击杀 #tagCMSetFMTDouble
 | 
 |  |  | 
 | 
 |  |  | class  tagCMSetFMTDouble(Structure):
 | 
 |  |  | 
 |  |  |     Head = tagHead()
 | 
 |  |  |     PointAttrIDCount = 0    #(BYTE PointAttrIDCount)// 加点属性ID个数
 | 
 |  |  |     PointAttrIDList = list()    #(vector<BYTE> PointAttrIDList)// 加点属性ID列表
 | 
 |  |  |     PointValueList = list()    #(vector<WORD> PointValueList)// 加点属性ID对应的点数列表
 | 
 |  |  |     PointValueList = list()    #(vector<DWORD> PointValueList)// 加点属性ID对应的点数列表
 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  | 
 |  |  |             value,_pos=CommFunc.ReadBYTE(_lpData,_pos)
 | 
 |  |  |             self.PointAttrIDList.append(value)
 | 
 |  |  |         for i in range(self.PointAttrIDCount):
 | 
 |  |  |             value,_pos=CommFunc.ReadWORD(_lpData,_pos)
 | 
 |  |  |             value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
 | 
 |  |  |             self.PointValueList.append(value)
 | 
 |  |  |         return _pos
 | 
 |  |  | 
 | 
 |  |  | 
 |  |  |         length += self.Head.GetLength()
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += 1 * self.PointAttrIDCount
 | 
 |  |  |         length += 2 * self.PointAttrIDCount
 | 
 |  |  |         length += 4 * self.PointAttrIDCount
 | 
 |  |  | 
 | 
 |  |  |         return length
 | 
 |  |  | 
 | 
 |  |  | 
 |  |  |         for i in range(self.PointAttrIDCount):
 | 
 |  |  |             data = CommFunc.WriteBYTE(data, self.PointAttrIDList[i])
 | 
 |  |  |         for i in range(self.PointAttrIDCount):
 | 
 |  |  |             data = CommFunc.WriteWORD(data, self.PointValueList[i])
 | 
 |  |  |             data = CommFunc.WriteDWORD(data, self.PointValueList[i])
 | 
 |  |  |         return data
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  | 
 |  |  | 
 | 
 |  |  | m_NAtagCMAddPoint=tagCMAddPoint()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMAddPoint.Head.Cmd,m_NAtagCMAddPoint.Head.SubCmd))] = m_NAtagCMAddPoint
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # B2 10 竞技场挑战玩家 #tagCMArenaBattle
 | 
 |  |  | 
 | 
 |  |  | class  tagCMArenaBattle(Structure):
 | 
 |  |  |     _pack_ = 1
 | 
 |  |  |     _fields_ = [
 | 
 |  |  |                   ("Cmd", c_ubyte),
 | 
 |  |  |                   ("SubCmd", c_ubyte),
 | 
 |  |  |                   ("TagPlayerID", c_int),    # 目标玩家ID或机器人ID
 | 
 |  |  |                   ("Result", c_ubyte),    # 0-进入自定义场景发送通知后端;1-胜利(后端处理,暂时不需要发送此状态);2-失败(前端被对手击杀需要发送此状态)
 | 
 |  |  |                   ]
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Cmd = 0xB2
 | 
 |  |  |         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 = 0xB2
 | 
 |  |  |         self.SubCmd = 0x10
 | 
 |  |  |         self.TagPlayerID = 0
 | 
 |  |  |         self.Result = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         return sizeof(tagCMArenaBattle)
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         return string_at(addressof(self), self.GetLength())
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''// B2 10 竞技场挑战玩家 //tagCMArenaBattle:
 | 
 |  |  |                                 Cmd:%s,
 | 
 |  |  |                                 SubCmd:%s,
 | 
 |  |  |                                 TagPlayerID:%d,
 | 
 |  |  |                                 Result:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Cmd,
 | 
 |  |  |                                 self.SubCmd,
 | 
 |  |  |                                 self.TagPlayerID,
 | 
 |  |  |                                 self.Result
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagCMArenaBattle=tagCMArenaBattle()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMArenaBattle.Cmd,m_NAtagCMArenaBattle.SubCmd))] = m_NAtagCMArenaBattle
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # B2 09 竞技场匹配玩家 #tagCMArenaMatch
 | 
 |  |  | 
 | 
 |  |  | class  tagCMArenaMatch(Structure):
 | 
 |  |  |     _pack_ = 1
 | 
 |  |  |     _fields_ = [
 | 
 |  |  |                   ("Cmd", c_ubyte),
 | 
 |  |  |                   ("SubCmd", c_ubyte),
 | 
 |  |  |                   ("IsRefresh", c_ubyte),    # 0-打开界面无匹配数据时时查询,1-强制刷新匹配列表
 | 
 |  |  |                   ]
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Cmd = 0xB2
 | 
 |  |  |         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 = 0xB2
 | 
 |  |  |         self.SubCmd = 0x09
 | 
 |  |  |         self.IsRefresh = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         return sizeof(tagCMArenaMatch)
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         return string_at(addressof(self), self.GetLength())
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''// B2 09 竞技场匹配玩家 //tagCMArenaMatch:
 | 
 |  |  |                                 Cmd:%s,
 | 
 |  |  |                                 SubCmd:%s,
 | 
 |  |  |                                 IsRefresh:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Cmd,
 | 
 |  |  |                                 self.SubCmd,
 | 
 |  |  |                                 self.IsRefresh
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagCMArenaMatch=tagCMArenaMatch()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMArenaMatch.Cmd,m_NAtagCMArenaMatch.SubCmd))] = m_NAtagCMArenaMatch
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # B2 07 重置加点 #tagCMResetAttrPoint
 | 
 |  |  | 
 | 
 |  |  | class  tagCMResetAttrPoint(Structure):
 | 
 |  |  |     _pack_ = 1
 | 
 |  |  |     _fields_ = [
 | 
 |  |  |                   ("Cmd", c_ubyte),
 | 
 |  |  |                   ("SubCmd", c_ubyte),
 | 
 |  |  |                   ]
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Cmd = 0xB2
 | 
 |  |  |         self.SubCmd = 0x07
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def ReadData(self, stringData, _pos=0, _len=0):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         memmove(addressof(self), stringData[_pos:], self.GetLength())
 | 
 |  |  |         return _pos + self.GetLength()
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.Cmd = 0xB2
 | 
 |  |  |         self.SubCmd = 0x07
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         return sizeof(tagCMResetAttrPoint)
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         return string_at(addressof(self), self.GetLength())
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''// B2 07 重置加点 //tagCMResetAttrPoint:
 | 
 |  |  |                                 Cmd:%s,
 | 
 |  |  |                                 SubCmd:%s
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Cmd,
 | 
 |  |  |                                 self.SubCmd
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagCMResetAttrPoint=tagCMResetAttrPoint()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMResetAttrPoint.Cmd,m_NAtagCMResetAttrPoint.SubCmd))] = m_NAtagCMResetAttrPoint
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | 
 |  |  | 
 | 
 |  |  | m_NAtagCMTJGnpc=tagCMTJGnpc()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMTJGnpc.Cmd,m_NAtagCMTJGnpc.SubCmd))] = m_NAtagCMTJGnpc
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # B4 0F 回收私有专属木桩怪 #tagCMRecyclePriWoodPile
 | 
 |  |  | 
 | 
 |  |  | class  tagCMRecyclePriWoodPile(Structure):
 | 
 |  |  |     _pack_ = 1
 | 
 |  |  |     _fields_ = [
 | 
 |  |  |                   ("Cmd", c_ubyte),
 | 
 |  |  |                   ("SubCmd", c_ubyte),
 | 
 |  |  |                   ("ObjID", c_int),     | 
 |  |  |                   ]
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Cmd = 0xB4
 | 
 |  |  |         self.SubCmd = 0x0F
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def ReadData(self, stringData, _pos=0, _len=0):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         memmove(addressof(self), stringData[_pos:], self.GetLength())
 | 
 |  |  |         return _pos + self.GetLength()
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.Cmd = 0xB4
 | 
 |  |  |         self.SubCmd = 0x0F
 | 
 |  |  |         self.ObjID = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         return sizeof(tagCMRecyclePriWoodPile)
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         return string_at(addressof(self), self.GetLength())
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''// B4 0F 回收私有专属木桩怪 //tagCMRecyclePriWoodPile:
 | 
 |  |  |                                 Cmd:%s,
 | 
 |  |  |                                 SubCmd:%s,
 | 
 |  |  |                                 ObjID:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Cmd,
 | 
 |  |  |                                 self.SubCmd,
 | 
 |  |  |                                 self.ObjID
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagCMRecyclePriWoodPile=tagCMRecyclePriWoodPile()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMRecyclePriWoodPile.Cmd,m_NAtagCMRecyclePriWoodPile.SubCmd))] = m_NAtagCMRecyclePriWoodPile
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # B4 0E 玩家掉血 #tagCMRoleLostHP
 | 
 |  |  | 
 | 
 |  |  | class  tagCMRoleLostHP(Structure):
 | 
 |  |  |     _pack_ = 1
 | 
 |  |  |     _fields_ = [
 | 
 |  |  |                   ("Cmd", c_ubyte),
 | 
 |  |  |                   ("SubCmd", c_ubyte),
 | 
 |  |  |                   ("LostHP", c_int),     | 
 |  |  |                   ]
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Cmd = 0xB4
 | 
 |  |  |         self.SubCmd = 0x0E
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def ReadData(self, stringData, _pos=0, _len=0):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         memmove(addressof(self), stringData[_pos:], self.GetLength())
 | 
 |  |  |         return _pos + self.GetLength()
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.Cmd = 0xB4
 | 
 |  |  |         self.SubCmd = 0x0E
 | 
 |  |  |         self.LostHP = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         return sizeof(tagCMRoleLostHP)
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         return string_at(addressof(self), self.GetLength())
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''// B4 0E 玩家掉血 //tagCMRoleLostHP:
 | 
 |  |  |                                 Cmd:%s,
 | 
 |  |  |                                 SubCmd:%s,
 | 
 |  |  |                                 LostHP:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Cmd,
 | 
 |  |  |                                 self.SubCmd,
 | 
 |  |  |                                 self.LostHP
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagCMRoleLostHP=tagCMRoleLostHP()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMRoleLostHP.Cmd,m_NAtagCMRoleLostHP.SubCmd))] = m_NAtagCMRoleLostHP
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # B4 0C 召唤私有专属木桩怪 #tagCMSummonPriWoodPile
 | 
 |  |  | 
 | 
 |  |  | class  tagCMSummonPriWoodPile(Structure):
 | 
 |  |  |     _pack_ = 1
 | 
 |  |  |     _fields_ = [
 | 
 |  |  |                   ("Cmd", c_ubyte),
 | 
 |  |  |                   ("SubCmd", c_ubyte),
 | 
 |  |  |                   ("NPCID", c_int),     | 
 |  |  |                   ("Count", c_ubyte),    #默认1个,最多5个
 | 
 |  |  |                   ("HP", c_int),    #默认0取最大值,其中一个血量数值大于0则用指定血量
 | 
 |  |  |                   ("HPEx", c_int),    #默认0取最大值,其中一个血量数值大于0则用指定血量
 | 
 |  |  |                   ]
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Cmd = 0xB4
 | 
 |  |  |         self.SubCmd = 0x0C
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def ReadData(self, stringData, _pos=0, _len=0):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         memmove(addressof(self), stringData[_pos:], self.GetLength())
 | 
 |  |  |         return _pos + self.GetLength()
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.Cmd = 0xB4
 | 
 |  |  |         self.SubCmd = 0x0C
 | 
 |  |  |         self.NPCID = 0
 | 
 |  |  |         self.Count = 0
 | 
 |  |  |         self.HP = 0
 | 
 |  |  |         self.HPEx = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         return sizeof(tagCMSummonPriWoodPile)
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         return string_at(addressof(self), self.GetLength())
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''// B4 0C 召唤私有专属木桩怪 //tagCMSummonPriWoodPile:
 | 
 |  |  |                                 Cmd:%s,
 | 
 |  |  |                                 SubCmd:%s,
 | 
 |  |  |                                 NPCID:%d,
 | 
 |  |  |                                 Count:%d,
 | 
 |  |  |                                 HP:%d,
 | 
 |  |  |                                 HPEx:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Cmd,
 | 
 |  |  |                                 self.SubCmd,
 | 
 |  |  |                                 self.NPCID,
 | 
 |  |  |                                 self.Count,
 | 
 |  |  |                                 self.HP,
 | 
 |  |  |                                 self.HPEx
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagCMSummonPriWoodPile=tagCMSummonPriWoodPile()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMSummonPriWoodPile.Cmd,m_NAtagCMSummonPriWoodPile.SubCmd))] = m_NAtagCMSummonPriWoodPile
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # B4 0D 战斗印记 #tagCMYinji
 | 
 |  |  | 
 | 
 |  |  | class  tagCMYinji(Structure):
 | 
 |  |  |     _pack_ = 1
 | 
 |  |  |     _fields_ = [
 | 
 |  |  |                   ("Cmd", c_ubyte),
 | 
 |  |  |                   ("SubCmd", c_ubyte),
 | 
 |  |  |                   ("Count", c_ubyte),     | 
 |  |  |                   ("Type", c_ubyte),    # 0 加,1减
 | 
 |  |  |                   ]
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Cmd = 0xB4
 | 
 |  |  |         self.SubCmd = 0x0D
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def ReadData(self, stringData, _pos=0, _len=0):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         memmove(addressof(self), stringData[_pos:], self.GetLength())
 | 
 |  |  |         return _pos + self.GetLength()
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.Cmd = 0xB4
 | 
 |  |  |         self.SubCmd = 0x0D
 | 
 |  |  |         self.Count = 0
 | 
 |  |  |         self.Type = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         return sizeof(tagCMYinji)
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         return string_at(addressof(self), self.GetLength())
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''// B4 0D 战斗印记 //tagCMYinji:
 | 
 |  |  |                                 Cmd:%s,
 | 
 |  |  |                                 SubCmd:%s,
 | 
 |  |  |                                 Count:%d,
 | 
 |  |  |                                 Type:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Cmd,
 | 
 |  |  |                                 self.SubCmd,
 | 
 |  |  |                                 self.Count,
 | 
 |  |  |                                 self.Type
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagCMYinji=tagCMYinji()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMYinji.Cmd,m_NAtagCMYinji.SubCmd))] = m_NAtagCMYinji
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | #B4 03 吸引NPC仇恨 #tagNPCAttention
 | 
 |  |  | 
 | 
 |  |  | class  tagNPCAttention(Structure):
 | 
 |  |  | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # B5 15 拍卖行下架拍品 #tagCMUnsellAuctionItem
 | 
 |  |  | 
 | 
 |  |  | class  tagCMUnsellAuctionItem(Structure):
 | 
 |  |  |     Head = tagHead()
 | 
 |  |  |     ItemGUID = ""    #(char ItemGUID[40])
 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xB5
 | 
 |  |  |         self.Head.SubCmd = 0x15
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def ReadData(self, _lpData, _pos=0, _Len=0):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         _pos = self.Head.ReadData(_lpData, _pos)
 | 
 |  |  |         self.ItemGUID,_pos = CommFunc.ReadString(_lpData, _pos,40)
 | 
 |  |  |         return _pos
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.Head = tagHead()
 | 
 |  |  |         self.Head.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xB5
 | 
 |  |  |         self.Head.SubCmd = 0x15
 | 
 |  |  |         self.ItemGUID = ""
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         length = 0
 | 
 |  |  |         length += self.Head.GetLength()
 | 
 |  |  |         length += 40
 | 
 |  |  | 
 | 
 |  |  |         return length
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         data = ''
 | 
 |  |  |         data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
 | 
 |  |  |         data = CommFunc.WriteString(data, 40, self.ItemGUID)
 | 
 |  |  |         return data
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''
 | 
 |  |  |                                 Head:%s,
 | 
 |  |  |                                 ItemGUID:%s
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Head.OutputString(),
 | 
 |  |  |                                 self.ItemGUID
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagCMUnsellAuctionItem=tagCMUnsellAuctionItem()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMUnsellAuctionItem.Head.Cmd,m_NAtagCMUnsellAuctionItem.Head.SubCmd))] = m_NAtagCMUnsellAuctionItem
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # B9 04 修改队伍相关审核状态 #tagCMChangeTeamCheckState
 | 
 |  |  | 
 | 
 |  |  | class  tagCMChangeTeamCheckState(Structure):
 |