|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # A4 12 搜索家族 #tagCGPySearchFamily | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCGPySearchFamily(Structure): | 
|---|
|  |  |  | Head = tagHead() | 
|---|
|  |  |  | MsgLen = 0    #(BYTE MsgLen)//模糊搜索家族,如果输入为空,则为不限制该条件 | 
|---|
|  |  |  | Msg = ""    #(String Msg)//size = MsgLen | 
|---|
|  |  |  | LV = 0    #(BYTE LV)//最低家族等级,如果为0,则不限制该条件 | 
|---|
|  |  |  | MaxCount = 0    #(BYTE MaxCount)//搜索结果所需最大条数,后端限制最多返回20条 | 
|---|
|  |  |  | IsSearching = 0    #(BYTE IsSearching)//默认1,如果有指定其他值,则返回指定值 | 
|---|
|  |  |  | data = None | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Head.Cmd = 0xA4 | 
|---|
|  |  |  | self.Head.SubCmd = 0x12 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, _lpData, _pos=0, _Len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | _pos = self.Head.ReadData(_lpData, _pos) | 
|---|
|  |  |  | self.MsgLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) | 
|---|
|  |  |  | self.Msg,_pos = CommFunc.ReadString(_lpData, _pos,self.MsgLen) | 
|---|
|  |  |  | self.LV,_pos = CommFunc.ReadBYTE(_lpData, _pos) | 
|---|
|  |  |  | self.MaxCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) | 
|---|
|  |  |  | self.IsSearching,_pos = CommFunc.ReadBYTE(_lpData, _pos) | 
|---|
|  |  |  | return _pos | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Head = tagHead() | 
|---|
|  |  |  | self.Head.Clear() | 
|---|
|  |  |  | self.Head.Cmd = 0xA4 | 
|---|
|  |  |  | self.Head.SubCmd = 0x12 | 
|---|
|  |  |  | self.MsgLen = 0 | 
|---|
|  |  |  | self.Msg = "" | 
|---|
|  |  |  | self.LV = 0 | 
|---|
|  |  |  | self.MaxCount = 0 | 
|---|
|  |  |  | self.IsSearching = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | length = 0 | 
|---|
|  |  |  | length += self.Head.GetLength() | 
|---|
|  |  |  | length += 1 | 
|---|
|  |  |  | length += len(self.Msg) | 
|---|
|  |  |  | length += 1 | 
|---|
|  |  |  | length += 1 | 
|---|
|  |  |  | length += 1 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return length | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | data = '' | 
|---|
|  |  |  | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.MsgLen) | 
|---|
|  |  |  | data = CommFunc.WriteString(data, self.MsgLen, self.Msg) | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.LV) | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.MaxCount) | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.IsSearching) | 
|---|
|  |  |  | return data | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = ''' | 
|---|
|  |  |  | Head:%s, | 
|---|
|  |  |  | MsgLen:%d, | 
|---|
|  |  |  | Msg:%s, | 
|---|
|  |  |  | LV:%d, | 
|---|
|  |  |  | MaxCount:%d, | 
|---|
|  |  |  | IsSearching:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Head.OutputString(), | 
|---|
|  |  |  | self.MsgLen, | 
|---|
|  |  |  | self.Msg, | 
|---|
|  |  |  | self.LV, | 
|---|
|  |  |  | self.MaxCount, | 
|---|
|  |  |  | self.IsSearching | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCGPySearchFamily=tagCGPySearchFamily() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGPySearchFamily.Head.Cmd,m_NAtagCGPySearchFamily.Head.SubCmd))] = m_NAtagCGPySearchFamily | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | #A4 01  查看家族第N页#tagCGViewFamilyPage | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCGViewFamilyPage(Structure): | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # AC 05 召集仙盟成员打boss #tagCGCallupFamilyMemberToBoss | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCGCallupFamilyMemberToBoss(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ("NPCID", c_int), | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Cmd = 0xAC | 
|---|
|  |  |  | self.SubCmd = 0x05 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, stringData, _pos=0, _len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | memmove(addressof(self), stringData[_pos:], self.GetLength()) | 
|---|
|  |  |  | return _pos + self.GetLength() | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Cmd = 0xAC | 
|---|
|  |  |  | self.SubCmd = 0x05 | 
|---|
|  |  |  | self.NPCID = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagCGCallupFamilyMemberToBoss) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''// AC 05 召集仙盟成员打boss //tagCGCallupFamilyMemberToBoss: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s, | 
|---|
|  |  |  | NPCID:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | self.SubCmd, | 
|---|
|  |  |  | self.NPCID | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCGCallupFamilyMemberToBoss=tagCGCallupFamilyMemberToBoss() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGCallupFamilyMemberToBoss.Cmd,m_NAtagCGCallupFamilyMemberToBoss.SubCmd))] = m_NAtagCGCallupFamilyMemberToBoss | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # AC 02 仙魔之争战斗结束 #tagCGXMZZOver | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCGXMZZOver(Structure): | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCGJoinXMZZ=tagCGJoinXMZZ() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGJoinXMZZ.Cmd,m_NAtagCGJoinXMZZ.SubCmd))] = m_NAtagCGJoinXMZZ | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # AC 04 查询仙盟抢Boss所有Boss当前进度 #tagCGQueryAllFamilyBossHurt | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCGQueryAllFamilyBossHurt(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Cmd = 0xAC | 
|---|
|  |  |  | self.SubCmd = 0x04 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, stringData, _pos=0, _len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | memmove(addressof(self), stringData[_pos:], self.GetLength()) | 
|---|
|  |  |  | return _pos + self.GetLength() | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Cmd = 0xAC | 
|---|
|  |  |  | self.SubCmd = 0x04 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagCGQueryAllFamilyBossHurt) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''// AC 04 查询仙盟抢Boss所有Boss当前进度 //tagCGQueryAllFamilyBossHurt: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | self.SubCmd | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCGQueryAllFamilyBossHurt=tagCGQueryAllFamilyBossHurt() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGQueryAllFamilyBossHurt.Cmd,m_NAtagCGQueryAllFamilyBossHurt.SubCmd))] = m_NAtagCGQueryAllFamilyBossHurt | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCGInvitePlayerJoinTeam=tagCGInvitePlayerJoinTeam() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGInvitePlayerJoinTeam.Cmd,m_NAtagCGInvitePlayerJoinTeam.SubCmd))] = m_NAtagCGInvitePlayerJoinTeam | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # B9 0A 按条件邀请玩家加入队伍 #tagCGInvitePlayerJoinTeamByLV | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCGInvitePlayerJoinTeamByLV(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ("LVLimit", c_ushort),    # 目标玩家大于等于此等级 | 
|---|
|  |  |  | ("InviteCnt", c_ubyte),    # 邀请玩家个数 | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Cmd = 0xB9 | 
|---|
|  |  |  | self.SubCmd = 0x0A | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, stringData, _pos=0, _len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | memmove(addressof(self), stringData[_pos:], self.GetLength()) | 
|---|
|  |  |  | return _pos + self.GetLength() | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Cmd = 0xB9 | 
|---|
|  |  |  | self.SubCmd = 0x0A | 
|---|
|  |  |  | self.LVLimit = 0 | 
|---|
|  |  |  | self.InviteCnt = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagCGInvitePlayerJoinTeamByLV) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''// B9 0A 按条件邀请玩家加入队伍 //tagCGInvitePlayerJoinTeamByLV: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s, | 
|---|
|  |  |  | LVLimit:%d, | 
|---|
|  |  |  | InviteCnt:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | self.SubCmd, | 
|---|
|  |  |  | self.LVLimit, | 
|---|
|  |  |  | self.InviteCnt | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCGInvitePlayerJoinTeamByLV=tagCGInvitePlayerJoinTeamByLV() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGInvitePlayerJoinTeamByLV.Cmd,m_NAtagCGInvitePlayerJoinTeamByLV.SubCmd))] = m_NAtagCGInvitePlayerJoinTeamByLV | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCMQueryBossHurtList=tagCMQueryBossHurtList() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMQueryBossHurtList.Cmd,m_NAtagCMQueryBossHurtList.SubCmd))] = m_NAtagCMQueryBossHurtList | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # A2 28 查询仙盟抢Boss伤血列表 #tagCMQueryFamilyBossHurt | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCMQueryFamilyBossHurt(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ("ObjID", c_int), | 
|---|
|  |  |  | ("NPCID", c_int), | 
|---|
|  |  |  | ("QueryType", c_ubyte),    # 0-实时仙盟伤血,1-历史仙盟伤血,2-实时玩家伤血,3-历史玩家伤血 | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Cmd = 0xA2 | 
|---|
|  |  |  | self.SubCmd = 0x28 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, stringData, _pos=0, _len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | memmove(addressof(self), stringData[_pos:], self.GetLength()) | 
|---|
|  |  |  | return _pos + self.GetLength() | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Cmd = 0xA2 | 
|---|
|  |  |  | self.SubCmd = 0x28 | 
|---|
|  |  |  | self.ObjID = 0 | 
|---|
|  |  |  | self.NPCID = 0 | 
|---|
|  |  |  | self.QueryType = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagCMQueryFamilyBossHurt) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''// A2 28 查询仙盟抢Boss伤血列表 //tagCMQueryFamilyBossHurt: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s, | 
|---|
|  |  |  | ObjID:%d, | 
|---|
|  |  |  | NPCID:%d, | 
|---|
|  |  |  | QueryType:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | self.SubCmd, | 
|---|
|  |  |  | self.ObjID, | 
|---|
|  |  |  | self.NPCID, | 
|---|
|  |  |  | self.QueryType | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCMQueryFamilyBossHurt=tagCMQueryFamilyBossHurt() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMQueryFamilyBossHurt.Cmd,m_NAtagCMQueryFamilyBossHurt.SubCmd))] = m_NAtagCMQueryFamilyBossHurt | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | 
|---|
|  |  |  | # A5 C0 神兽穿戴装备 #tagCMDogzEquipItem | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCMDogzEquipItem(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ("DogzID", c_ubyte),    # 神兽ID | 
|---|
|  |  |  | ("EquipIndex", c_ubyte),    #神兽装备所在神兽背包索引 | 
|---|
|  |  |  | ] | 
|---|
|  |  |  | Head = tagHead() | 
|---|
|  |  |  | DogzID = 0    #(BYTE DogzID)// 神兽ID | 
|---|
|  |  |  | EquipIndexCount = 0    #(BYTE EquipIndexCount) | 
|---|
|  |  |  | EquipIndexList = list()    #(vector<BYTE> EquipIndexList)//神兽装备所在神兽背包索引列表 | 
|---|
|  |  |  | data = None | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Cmd = 0xA5 | 
|---|
|  |  |  | self.SubCmd = 0xC0 | 
|---|
|  |  |  | self.Head.Cmd = 0xA5 | 
|---|
|  |  |  | self.Head.SubCmd = 0xC0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, stringData, _pos=0, _len=0): | 
|---|
|  |  |  | def ReadData(self, _lpData, _pos=0, _Len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | memmove(addressof(self), stringData[_pos:], self.GetLength()) | 
|---|
|  |  |  | return _pos + self.GetLength() | 
|---|
|  |  |  | _pos = self.Head.ReadData(_lpData, _pos) | 
|---|
|  |  |  | self.DogzID,_pos = CommFunc.ReadBYTE(_lpData, _pos) | 
|---|
|  |  |  | self.EquipIndexCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) | 
|---|
|  |  |  | for i in range(self.EquipIndexCount): | 
|---|
|  |  |  | value,_pos=CommFunc.ReadBYTE(_lpData,_pos) | 
|---|
|  |  |  | self.EquipIndexList.append(value) | 
|---|
|  |  |  | return _pos | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Cmd = 0xA5 | 
|---|
|  |  |  | self.SubCmd = 0xC0 | 
|---|
|  |  |  | self.Head = tagHead() | 
|---|
|  |  |  | self.Head.Clear() | 
|---|
|  |  |  | self.Head.Cmd = 0xA5 | 
|---|
|  |  |  | self.Head.SubCmd = 0xC0 | 
|---|
|  |  |  | self.DogzID = 0 | 
|---|
|  |  |  | self.EquipIndex = 0 | 
|---|
|  |  |  | self.EquipIndexCount = 0 | 
|---|
|  |  |  | self.EquipIndexList = list() | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagCMDogzEquipItem) | 
|---|
|  |  |  | length = 0 | 
|---|
|  |  |  | length += self.Head.GetLength() | 
|---|
|  |  |  | length += 1 | 
|---|
|  |  |  | length += 1 | 
|---|
|  |  |  | length += 1 * self.EquipIndexCount | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return length | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  | data = '' | 
|---|
|  |  |  | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.DogzID) | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.EquipIndexCount) | 
|---|
|  |  |  | for i in range(self.EquipIndexCount): | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.EquipIndexList[i]) | 
|---|
|  |  |  | return data | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''// A5 C0 神兽穿戴装备 //tagCMDogzEquipItem: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s, | 
|---|
|  |  |  | DumpString = ''' | 
|---|
|  |  |  | Head:%s, | 
|---|
|  |  |  | DogzID:%d, | 
|---|
|  |  |  | EquipIndex:%d | 
|---|
|  |  |  | EquipIndexCount:%d, | 
|---|
|  |  |  | EquipIndexList:%s | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | self.SubCmd, | 
|---|
|  |  |  | self.Head.OutputString(), | 
|---|
|  |  |  | self.DogzID, | 
|---|
|  |  |  | self.EquipIndex | 
|---|
|  |  |  | self.EquipIndexCount, | 
|---|
|  |  |  | "..." | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCMDogzEquipItem=tagCMDogzEquipItem() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMDogzEquipItem.Cmd,m_NAtagCMDogzEquipItem.SubCmd))] = m_NAtagCMDogzEquipItem | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMDogzEquipItem.Head.Cmd,m_NAtagCMDogzEquipItem.Head.SubCmd))] = m_NAtagCMDogzEquipItem | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | 
|---|
|  |  |  | EquipIndex = 0    #(BYTE EquipIndex)//神兽装备背包中索引 | 
|---|
|  |  |  | IndexCount = 0    #(BYTE IndexCount)//材料所在神兽物品背包索引的数量 | 
|---|
|  |  |  | IndexList = list()    #(vector<BYTE> IndexList)//材料所在神兽物品背包索引列表 | 
|---|
|  |  |  | IndexUseCountList = list()    #(vector<DWORD> IndexUseCountList)//材料所在神兽物品背包索引对应使用个数列表 | 
|---|
|  |  |  | IsDouble = 0    #(BYTE IsDouble)//是否双倍强化 | 
|---|
|  |  |  | data = None | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | for i in range(self.IndexCount): | 
|---|
|  |  |  | value,_pos=CommFunc.ReadBYTE(_lpData,_pos) | 
|---|
|  |  |  | self.IndexList.append(value) | 
|---|
|  |  |  | for i in range(self.IndexCount): | 
|---|
|  |  |  | value,_pos=CommFunc.ReadDWORD(_lpData,_pos) | 
|---|
|  |  |  | self.IndexUseCountList.append(value) | 
|---|
|  |  |  | self.IsDouble,_pos = CommFunc.ReadBYTE(_lpData, _pos) | 
|---|
|  |  |  | return _pos | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | self.EquipIndex = 0 | 
|---|
|  |  |  | self.IndexCount = 0 | 
|---|
|  |  |  | self.IndexList = list() | 
|---|
|  |  |  | self.IndexUseCountList = list() | 
|---|
|  |  |  | self.IsDouble = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | length += 1 | 
|---|
|  |  |  | length += 1 | 
|---|
|  |  |  | length += 1 * self.IndexCount | 
|---|
|  |  |  | length += 4 * self.IndexCount | 
|---|
|  |  |  | length += 1 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return length | 
|---|
|  |  |  | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.IndexCount) | 
|---|
|  |  |  | for i in range(self.IndexCount): | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.IndexList[i]) | 
|---|
|  |  |  | for i in range(self.IndexCount): | 
|---|
|  |  |  | data = CommFunc.WriteDWORD(data, self.IndexUseCountList[i]) | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.IsDouble) | 
|---|
|  |  |  | return data | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | EquipIndex:%d, | 
|---|
|  |  |  | IndexCount:%d, | 
|---|
|  |  |  | IndexList:%s, | 
|---|
|  |  |  | IndexUseCountList:%s, | 
|---|
|  |  |  | IsDouble:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Head.OutputString(), | 
|---|
|  |  |  | self.EquipIndex, | 
|---|
|  |  |  | self.IndexCount, | 
|---|
|  |  |  | "...", | 
|---|
|  |  |  | "...", | 
|---|
|  |  |  | self.IsDouble | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # A5 14 祈福丹药 #tagCMPrayElixir | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCMPrayElixir(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Cmd = 0xA5 | 
|---|
|  |  |  | self.SubCmd = 0x14 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, stringData, _pos=0, _len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | memmove(addressof(self), stringData[_pos:], self.GetLength()) | 
|---|
|  |  |  | return _pos + self.GetLength() | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Cmd = 0xA5 | 
|---|
|  |  |  | self.SubCmd = 0x14 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagCMPrayElixir) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''// A5 14 祈福丹药 //tagCMPrayElixir: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | self.SubCmd | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCMPrayElixir=tagCMPrayElixir() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMPrayElixir.Cmd,m_NAtagCMPrayElixir.SubCmd))] = m_NAtagCMPrayElixir | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | #A5 34 查询天梯竞技场状态#tagCMQueryHighLadderState | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCMQueryHighLadderState(Structure): | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # A5 17 绑玉转盘开始 #tagCMStartBindJadeWheel | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCMStartBindJadeWheel(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Cmd = 0xA5 | 
|---|
|  |  |  | self.SubCmd = 0x17 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, stringData, _pos=0, _len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | memmove(addressof(self), stringData[_pos:], self.GetLength()) | 
|---|
|  |  |  | return _pos + self.GetLength() | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Cmd = 0xA5 | 
|---|
|  |  |  | self.SubCmd = 0x17 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagCMStartBindJadeWheel) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''// A5 17 绑玉转盘开始 //tagCMStartBindJadeWheel: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | self.SubCmd | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCMStartBindJadeWheel=tagCMStartBindJadeWheel() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMStartBindJadeWheel.Cmd,m_NAtagCMStartBindJadeWheel.SubCmd))] = m_NAtagCMStartBindJadeWheel | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # A5 11 试用首充武器 #tagCMTryFirstGoldItem | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCMTryFirstGoldItem(Structure): | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # A5 13 解锁符印孔 #tagCMUnlockRuneHole | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCMUnlockRuneHole(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ("HoleIndex", c_ubyte),    # 孔索引 | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Cmd = 0xA5 | 
|---|
|  |  |  | self.SubCmd = 0x13 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, stringData, _pos=0, _len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | memmove(addressof(self), stringData[_pos:], self.GetLength()) | 
|---|
|  |  |  | return _pos + self.GetLength() | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Cmd = 0xA5 | 
|---|
|  |  |  | self.SubCmd = 0x13 | 
|---|
|  |  |  | self.HoleIndex = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagCMUnlockRuneHole) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''// A5 13 解锁符印孔 //tagCMUnlockRuneHole: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s, | 
|---|
|  |  |  | HoleIndex:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | self.SubCmd, | 
|---|
|  |  |  | self.HoleIndex | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCMUnlockRuneHole=tagCMUnlockRuneHole() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMUnlockRuneHole.Cmd,m_NAtagCMUnlockRuneHole.SubCmd))] = m_NAtagCMUnlockRuneHole | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | #A5 10 使用新手卡 #tagUseNewGuyCard | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagUseNewGuyCard(Structure): | 
|---|