|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # A4 04 抢家族红包 #tagCGGrabFamilyRedPacket | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCGGrabFamilyRedPacket(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ("RedPaketID", c_int),    # 红包ID | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Cmd = 0xA4 | 
|---|
|  |  |  | self.SubCmd = 0x04 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, stringData, _pos=0, _len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | memmove(addressof(self), stringData[_pos:], self.GetLength()) | 
|---|
|  |  |  | return _pos + self.GetLength() | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Cmd = 0xA4 | 
|---|
|  |  |  | self.SubCmd = 0x04 | 
|---|
|  |  |  | self.RedPaketID = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagCGGrabFamilyRedPacket) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''// A4 04 抢家族红包 //tagCGGrabFamilyRedPacket: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s, | 
|---|
|  |  |  | RedPaketID:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | self.SubCmd, | 
|---|
|  |  |  | self.RedPaketID | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCGGrabFamilyRedPacket=tagCGGrabFamilyRedPacket() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGGrabFamilyRedPacket.Cmd,m_NAtagCGGrabFamilyRedPacket.SubCmd))] = m_NAtagCGGrabFamilyRedPacket | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | #A4 03 加入家族审核情况 #tagCGJoinFamilyReply | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCGJoinFamilyReply(Structure): | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCGOpenFamilyBossFB=tagCGOpenFamilyBossFB() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGOpenFamilyBossFB.Cmd,m_NAtagCGOpenFamilyBossFB.SubCmd))] = m_NAtagCGOpenFamilyBossFB | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # A4 04 创建家族 #tagCGPyCreatFamily | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCGPyCreatFamily(Structure): | 
|---|
|  |  |  | Head = tagHead() | 
|---|
|  |  |  | Name = ""    #(char Name[33]) | 
|---|
|  |  |  | FakeID = 0    #(WORD FakeID)//假仙盟编号 | 
|---|
|  |  |  | data = None | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Head.Cmd = 0xA4 | 
|---|
|  |  |  | self.Head.SubCmd = 0x04 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, _lpData, _pos=0, _Len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | _pos = self.Head.ReadData(_lpData, _pos) | 
|---|
|  |  |  | self.Name,_pos = CommFunc.ReadString(_lpData, _pos,33) | 
|---|
|  |  |  | self.FakeID,_pos = CommFunc.ReadWORD(_lpData, _pos) | 
|---|
|  |  |  | return _pos | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Head = tagHead() | 
|---|
|  |  |  | self.Head.Clear() | 
|---|
|  |  |  | self.Head.Cmd = 0xA4 | 
|---|
|  |  |  | self.Head.SubCmd = 0x04 | 
|---|
|  |  |  | self.Name = "" | 
|---|
|  |  |  | self.FakeID = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | length = 0 | 
|---|
|  |  |  | length += self.Head.GetLength() | 
|---|
|  |  |  | length += 33 | 
|---|
|  |  |  | length += 2 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return length | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | data = '' | 
|---|
|  |  |  | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) | 
|---|
|  |  |  | data = CommFunc.WriteString(data, 33, self.Name) | 
|---|
|  |  |  | data = CommFunc.WriteWORD(data, self.FakeID) | 
|---|
|  |  |  | return data | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = ''' | 
|---|
|  |  |  | Head:%s, | 
|---|
|  |  |  | Name:%s, | 
|---|
|  |  |  | FakeID:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Head.OutputString(), | 
|---|
|  |  |  | self.Name, | 
|---|
|  |  |  | self.FakeID | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCGPyCreatFamily=tagCGPyCreatFamily() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGPyCreatFamily.Head.Cmd,m_NAtagCGPyCreatFamily.Head.SubCmd))] = m_NAtagCGPyCreatFamily | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # A4 12 搜索家族 #tagCGPySearchFamily | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCGPySearchFamily(Structure): | 
|---|
|  |  |  | Head = tagHead() | 
|---|
|  |  |  | MsgLen = 0    #(BYTE MsgLen)//模糊搜索家族,如果输入为空,则为不限制该条件 | 
|---|
|  |  |  | Msg = ""    #(String Msg)//size = MsgLen | 
|---|
|  |  |  | LV = 0    #(BYTE LV)//最低家族等级,如果为0,则不限制该条件 | 
|---|
|  |  |  | MaxCount = 0    #(BYTE MaxCount)//搜索结果所需最大条数,后端限制最多返回20条 | 
|---|
|  |  |  | IsSearching = 0    #(BYTE IsSearching)//默认1,如果有指定其他值,则返回指定值 | 
|---|
|  |  |  | data = None | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Head.Cmd = 0xA4 | 
|---|
|  |  |  | self.Head.SubCmd = 0x12 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, _lpData, _pos=0, _Len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | _pos = self.Head.ReadData(_lpData, _pos) | 
|---|
|  |  |  | self.MsgLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) | 
|---|
|  |  |  | self.Msg,_pos = CommFunc.ReadString(_lpData, _pos,self.MsgLen) | 
|---|
|  |  |  | self.LV,_pos = CommFunc.ReadBYTE(_lpData, _pos) | 
|---|
|  |  |  | self.MaxCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) | 
|---|
|  |  |  | self.IsSearching,_pos = CommFunc.ReadBYTE(_lpData, _pos) | 
|---|
|  |  |  | return _pos | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Head = tagHead() | 
|---|
|  |  |  | self.Head.Clear() | 
|---|
|  |  |  | self.Head.Cmd = 0xA4 | 
|---|
|  |  |  | self.Head.SubCmd = 0x12 | 
|---|
|  |  |  | self.MsgLen = 0 | 
|---|
|  |  |  | self.Msg = "" | 
|---|
|  |  |  | self.LV = 0 | 
|---|
|  |  |  | self.MaxCount = 0 | 
|---|
|  |  |  | self.IsSearching = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | length = 0 | 
|---|
|  |  |  | length += self.Head.GetLength() | 
|---|
|  |  |  | length += 1 | 
|---|
|  |  |  | length += len(self.Msg) | 
|---|
|  |  |  | length += 1 | 
|---|
|  |  |  | length += 1 | 
|---|
|  |  |  | length += 1 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return length | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | data = '' | 
|---|
|  |  |  | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.MsgLen) | 
|---|
|  |  |  | data = CommFunc.WriteString(data, self.MsgLen, self.Msg) | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.LV) | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.MaxCount) | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.IsSearching) | 
|---|
|  |  |  | return data | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = ''' | 
|---|
|  |  |  | Head:%s, | 
|---|
|  |  |  | MsgLen:%d, | 
|---|
|  |  |  | Msg:%s, | 
|---|
|  |  |  | LV:%d, | 
|---|
|  |  |  | MaxCount:%d, | 
|---|
|  |  |  | IsSearching:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Head.OutputString(), | 
|---|
|  |  |  | self.MsgLen, | 
|---|
|  |  |  | self.Msg, | 
|---|
|  |  |  | self.LV, | 
|---|
|  |  |  | self.MaxCount, | 
|---|
|  |  |  | self.IsSearching | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCGPySearchFamily=tagCGPySearchFamily() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGPySearchFamily.Head.Cmd,m_NAtagCGPySearchFamily.Head.SubCmd))] = m_NAtagCGPySearchFamily | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # A9 04 查询boss信息 #tagCGQueryBossInfo | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCGQueryBossInfo(Structure): | 
|---|
|  |  |  | Head = tagHead() | 
|---|
|  |  |  | Count = 0    #(BYTE Count)//数量 | 
|---|
|  |  |  | BossIDList = list()    #(vector<DWORD> BossIDList)//boosid | 
|---|
|  |  |  | data = None | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Head.Cmd = 0xA9 | 
|---|
|  |  |  | self.Head.SubCmd = 0x04 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, _lpData, _pos=0, _Len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | _pos = self.Head.ReadData(_lpData, _pos) | 
|---|
|  |  |  | self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos) | 
|---|
|  |  |  | for i in range(self.Count): | 
|---|
|  |  |  | value,_pos=CommFunc.ReadDWORD(_lpData,_pos) | 
|---|
|  |  |  | self.BossIDList.append(value) | 
|---|
|  |  |  | return _pos | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Head = tagHead() | 
|---|
|  |  |  | self.Head.Clear() | 
|---|
|  |  |  | self.Head.Cmd = 0xA9 | 
|---|
|  |  |  | self.Head.SubCmd = 0x04 | 
|---|
|  |  |  | self.Count = 0 | 
|---|
|  |  |  | self.BossIDList = list() | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | length = 0 | 
|---|
|  |  |  | length += self.Head.GetLength() | 
|---|
|  |  |  | length += 1 | 
|---|
|  |  |  | 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.WriteDWORD(data, self.BossIDList[i]) | 
|---|
|  |  |  | return data | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = ''' | 
|---|
|  |  |  | Head:%s, | 
|---|
|  |  |  | Count:%d, | 
|---|
|  |  |  | BossIDList:%s | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Head.OutputString(), | 
|---|
|  |  |  | self.Count, | 
|---|
|  |  |  | "..." | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCGQueryBossInfo=tagCGQueryBossInfo() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGQueryBossInfo.Head.Cmd,m_NAtagCGQueryBossInfo.Head.SubCmd))] = m_NAtagCGQueryBossInfo | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | #A9 A1 查询玩家补偿#tagCGQueryCompensation | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCGQueryCompensation(Structure): | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | #A9 10 请求魔方寻宝记录 #tagCGMagicTreasureRecord | 
|---|
|  |  |  | # AC 05 召集仙盟成员打boss #tagCGCallupFamilyMemberToBoss | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCGMagicTreasureRecord(Structure): | 
|---|
|  |  |  | class  tagCGCallupFamilyMemberToBoss(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ("NPCID", c_int), | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Cmd = 0xA9 | 
|---|
|  |  |  | self.SubCmd = 0x10 | 
|---|
|  |  |  | self.Cmd = 0xAC | 
|---|
|  |  |  | self.SubCmd = 0x05 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, stringData, _pos=0, _len=0): | 
|---|
|  |  |  | 
|---|
|  |  |  | return _pos + self.GetLength() | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Cmd = 0xA9 | 
|---|
|  |  |  | self.SubCmd = 0x10 | 
|---|
|  |  |  | self.Cmd = 0xAC | 
|---|
|  |  |  | self.SubCmd = 0x05 | 
|---|
|  |  |  | self.NPCID = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagCGMagicTreasureRecord) | 
|---|
|  |  |  | return sizeof(tagCGCallupFamilyMemberToBoss) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''//A9 10 请求魔方寻宝记录 //tagCGMagicTreasureRecord: | 
|---|
|  |  |  | DumpString = '''// AC 05 召集仙盟成员打boss //tagCGCallupFamilyMemberToBoss: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s | 
|---|
|  |  |  | SubCmd:%s, | 
|---|
|  |  |  | NPCID:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | self.SubCmd | 
|---|
|  |  |  | self.SubCmd, | 
|---|
|  |  |  | self.NPCID | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCGMagicTreasureRecord=tagCGMagicTreasureRecord() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGMagicTreasureRecord.Cmd,m_NAtagCGMagicTreasureRecord.SubCmd))] = m_NAtagCGMagicTreasureRecord | 
|---|
|  |  |  | m_NAtagCGCallupFamilyMemberToBoss=tagCGCallupFamilyMemberToBoss() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGCallupFamilyMemberToBoss.Cmd,m_NAtagCGCallupFamilyMemberToBoss.SubCmd))] = m_NAtagCGCallupFamilyMemberToBoss | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # AC 09  查询活动怪信息 #tagCGQueryFestivalNPC | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCGQueryFestivalNPC(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Cmd = 0xAC | 
|---|
|  |  |  | self.SubCmd = 0x09 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, stringData, _pos=0, _len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | memmove(addressof(self), stringData[_pos:], self.GetLength()) | 
|---|
|  |  |  | return _pos + self.GetLength() | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Cmd = 0xAC | 
|---|
|  |  |  | self.SubCmd = 0x09 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagCGQueryFestivalNPC) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''// AC 09  查询活动怪信息 //tagCGQueryFestivalNPC: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | self.SubCmd | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCGQueryFestivalNPC=tagCGQueryFestivalNPC() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGQueryFestivalNPC.Cmd,m_NAtagCGQueryFestivalNPC.SubCmd))] = m_NAtagCGQueryFestivalNPC | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # AC 01 仙魔之争报名 #tagCGJoinXMZZ | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCGJoinXMZZ(Structure): | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCGJoinXMZZ=tagCGJoinXMZZ() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGJoinXMZZ.Cmd,m_NAtagCGJoinXMZZ.SubCmd))] = m_NAtagCGJoinXMZZ | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # AC 04 查询仙盟抢Boss所有Boss当前进度 #tagCGQueryAllFamilyBossHurt | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCGQueryAllFamilyBossHurt(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Cmd = 0xAC | 
|---|
|  |  |  | self.SubCmd = 0x04 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, stringData, _pos=0, _len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | memmove(addressof(self), stringData[_pos:], self.GetLength()) | 
|---|
|  |  |  | return _pos + self.GetLength() | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Cmd = 0xAC | 
|---|
|  |  |  | self.SubCmd = 0x04 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagCGQueryAllFamilyBossHurt) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''// AC 04 查询仙盟抢Boss所有Boss当前进度 //tagCGQueryAllFamilyBossHurt: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | self.SubCmd | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCGQueryAllFamilyBossHurt=tagCGQueryAllFamilyBossHurt() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGQueryAllFamilyBossHurt.Cmd,m_NAtagCGQueryAllFamilyBossHurt.SubCmd))] = m_NAtagCGQueryAllFamilyBossHurt | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # AC 03 仙魔之争信息查询 #tagCGXMZZInfoQuery | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCGXMZZInfoQuery(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Cmd = 0xAC | 
|---|
|  |  |  | self.SubCmd = 0x03 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, stringData, _pos=0, _len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | memmove(addressof(self), stringData[_pos:], self.GetLength()) | 
|---|
|  |  |  | return _pos + self.GetLength() | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Cmd = 0xAC | 
|---|
|  |  |  | self.SubCmd = 0x03 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagCGXMZZInfoQuery) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''// AC 03 仙魔之争信息查询 //tagCGXMZZInfoQuery: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | self.SubCmd | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCGXMZZInfoQuery=tagCGXMZZInfoQuery() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGXMZZInfoQuery.Cmd,m_NAtagCGXMZZInfoQuery.SubCmd))] = m_NAtagCGXMZZInfoQuery | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | #B3 07 语音聊天 #tagCGVoiceChat | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCGVoiceChat(Structure): | 
|---|
|  |  |  | Head = tagHead() | 
|---|
|  |  |  | ChannelType = 0    #(BYTE ChannelType)// 1 世界 2 仙盟 3 私聊(好友) 4 队伍 -------查看封包tagCMVoiceChat 5 区域 | 
|---|
|  |  |  | TargetNameLen = 0    #(BYTE TargetNameLen) | 
|---|
|  |  |  | TargetName = ""    #(String TargetName)//size = TargetNameLen | 
|---|
|  |  |  | TargetID = 0    #(DWORD TargetID)// 默认发玩家ID,没有ID才发名称 | 
|---|
|  |  |  | Len = 0    #(WORD Len) | 
|---|
|  |  |  | Content = list()    #(vector<BYTE> Content)//size = Len | 
|---|
|  |  |  | data = None | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Head.Cmd = 0xB3 | 
|---|
|  |  |  | self.Head.SubCmd = 0x07 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, _lpData, _pos=0, _Len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | _pos = self.Head.ReadData(_lpData, _pos) | 
|---|
|  |  |  | self.ChannelType,_pos = CommFunc.ReadBYTE(_lpData, _pos) | 
|---|
|  |  |  | self.TargetNameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) | 
|---|
|  |  |  | self.TargetName,_pos = CommFunc.ReadString(_lpData, _pos,self.TargetNameLen) | 
|---|
|  |  |  | self.TargetID,_pos = CommFunc.ReadDWORD(_lpData, _pos) | 
|---|
|  |  |  | self.Len,_pos = CommFunc.ReadWORD(_lpData, _pos) | 
|---|
|  |  |  | for i in range(self.Len): | 
|---|
|  |  |  | value,_pos=CommFunc.ReadBYTE(_lpData,_pos) | 
|---|
|  |  |  | self.Content.append(value) | 
|---|
|  |  |  | return _pos | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Head = tagHead() | 
|---|
|  |  |  | self.Head.Clear() | 
|---|
|  |  |  | self.Head.Cmd = 0xB3 | 
|---|
|  |  |  | self.Head.SubCmd = 0x07 | 
|---|
|  |  |  | self.ChannelType = 0 | 
|---|
|  |  |  | self.TargetNameLen = 0 | 
|---|
|  |  |  | self.TargetName = "" | 
|---|
|  |  |  | self.TargetID = 0 | 
|---|
|  |  |  | self.Len = 0 | 
|---|
|  |  |  | self.Content = list() | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | length = 0 | 
|---|
|  |  |  | length += self.Head.GetLength() | 
|---|
|  |  |  | length += 1 | 
|---|
|  |  |  | length += 1 | 
|---|
|  |  |  | length += len(self.TargetName) | 
|---|
|  |  |  | length += 4 | 
|---|
|  |  |  | length += 2 | 
|---|
|  |  |  | length += 1 * self.Len | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return length | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | data = '' | 
|---|
|  |  |  | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.ChannelType) | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.TargetNameLen) | 
|---|
|  |  |  | data = CommFunc.WriteString(data, self.TargetNameLen, self.TargetName) | 
|---|
|  |  |  | data = CommFunc.WriteDWORD(data, self.TargetID) | 
|---|
|  |  |  | data = CommFunc.WriteWORD(data, self.Len) | 
|---|
|  |  |  | for i in range(self.Len): | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.Content[i]) | 
|---|
|  |  |  | return data | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = ''' | 
|---|
|  |  |  | Head:%s, | 
|---|
|  |  |  | ChannelType:%d, | 
|---|
|  |  |  | TargetNameLen:%d, | 
|---|
|  |  |  | TargetName:%s, | 
|---|
|  |  |  | TargetID:%d, | 
|---|
|  |  |  | Len:%d, | 
|---|
|  |  |  | Content:%s | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Head.OutputString(), | 
|---|
|  |  |  | self.ChannelType, | 
|---|
|  |  |  | self.TargetNameLen, | 
|---|
|  |  |  | self.TargetName, | 
|---|
|  |  |  | self.TargetID, | 
|---|
|  |  |  | self.Len, | 
|---|
|  |  |  | "..." | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCGVoiceChat=tagCGVoiceChat() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGVoiceChat.Head.Cmd,m_NAtagCGVoiceChat.Head.SubCmd))] = m_NAtagCGVoiceChat | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | #B3 03 是否允许加入好友的回应#tagCGJoinFriendAnswer | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCGJoinFriendAnswer(Structure): | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # 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 | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # B9 05 查询推荐组队的附近玩家 #tagCGQueryRecommendNearbyPlayer | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCGQueryRecommendNearbyPlayer(Structure): | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | #C0 11 上传数据的活动类型 #tagActionMergeRegister | 
|---|
|  |  |  | # C0 01 查看跨服竞技场赛季排行榜 #tagCGViewCrossPKBillboard | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagActionMergeRegister(Structure): | 
|---|
|  |  |  | class  tagCGViewCrossPKBillboard(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ("ActionType", c_ubyte),    #活动类型 | 
|---|
|  |  |  | ("ZoneID", c_ubyte),    # 赛区ID | 
|---|
|  |  |  | ("SeasonID", c_ubyte),    # 赛季ID | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Cmd = 0xC0 | 
|---|
|  |  |  | self.SubCmd = 0x11 | 
|---|
|  |  |  | self.SubCmd = 0x01 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, stringData, _pos=0, _len=0): | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Cmd = 0xC0 | 
|---|
|  |  |  | self.SubCmd = 0x11 | 
|---|
|  |  |  | self.ActionType = 0 | 
|---|
|  |  |  | self.SubCmd = 0x01 | 
|---|
|  |  |  | self.ZoneID = 0 | 
|---|
|  |  |  | self.SeasonID = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagActionMergeRegister) | 
|---|
|  |  |  | return sizeof(tagCGViewCrossPKBillboard) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''//C0 11 上传数据的活动类型 //tagActionMergeRegister: | 
|---|
|  |  |  | DumpString = '''// C0 01 查看跨服竞技场赛季排行榜 //tagCGViewCrossPKBillboard: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s, | 
|---|
|  |  |  | ActionType:%d | 
|---|
|  |  |  | ZoneID:%d, | 
|---|
|  |  |  | SeasonID:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | self.SubCmd, | 
|---|
|  |  |  | self.ActionType | 
|---|
|  |  |  | self.ZoneID, | 
|---|
|  |  |  | self.SeasonID | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagActionMergeRegister=tagActionMergeRegister() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagActionMergeRegister.Cmd,m_NAtagActionMergeRegister.SubCmd))] = m_NAtagActionMergeRegister | 
|---|
|  |  |  | m_NAtagCGViewCrossPKBillboard=tagCGViewCrossPKBillboard() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGViewCrossPKBillboard.Cmd,m_NAtagCGViewCrossPKBillboard.SubCmd))] = m_NAtagCGViewCrossPKBillboard | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | #C0 12 跨服上传数据账号查询 #tagMergeRegisterAccQuery | 
|---|
|  |  |  | # C0 02 查看跨服玩家信息 #tagCGViewCrossPlayerInfo | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagMergeRegisterAccQuery(Structure): | 
|---|
|  |  |  | class  tagCGViewCrossPlayerInfo(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ("ActionType", c_ubyte),    #活动类型 | 
|---|
|  |  |  | ("PlayerID", c_int),    # 跨服玩家ID | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Cmd = 0xC0 | 
|---|
|  |  |  | self.SubCmd = 0x12 | 
|---|
|  |  |  | self.SubCmd = 0x02 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, stringData, _pos=0, _len=0): | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Cmd = 0xC0 | 
|---|
|  |  |  | self.SubCmd = 0x12 | 
|---|
|  |  |  | self.ActionType = 0 | 
|---|
|  |  |  | self.SubCmd = 0x02 | 
|---|
|  |  |  | self.PlayerID = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagMergeRegisterAccQuery) | 
|---|
|  |  |  | return sizeof(tagCGViewCrossPlayerInfo) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''//C0 12 跨服上传数据账号查询 //tagMergeRegisterAccQuery: | 
|---|
|  |  |  | DumpString = '''// C0 02 查看跨服玩家信息 //tagCGViewCrossPlayerInfo: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s, | 
|---|
|  |  |  | ActionType:%d | 
|---|
|  |  |  | PlayerID:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | self.SubCmd, | 
|---|
|  |  |  | self.ActionType | 
|---|
|  |  |  | self.PlayerID | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagMergeRegisterAccQuery=tagMergeRegisterAccQuery() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMergeRegisterAccQuery.Cmd,m_NAtagMergeRegisterAccQuery.SubCmd))] = m_NAtagMergeRegisterAccQuery | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # C0 15 通知即将登录跳转到跨服服务器 #tagCGGotoMergeServer | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCGGotoMergeServer(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Cmd = 0xC0 | 
|---|
|  |  |  | 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 = 0xC0 | 
|---|
|  |  |  | self.SubCmd = 0x15 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagCGGotoMergeServer) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''// C0 15 通知即将登录跳转到跨服服务器 //tagCGGotoMergeServer: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | self.SubCmd | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCGGotoMergeServer=tagCGGotoMergeServer() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGGotoMergeServer.Cmd,m_NAtagCGGotoMergeServer.SubCmd))] = m_NAtagCGGotoMergeServer | 
|---|
|  |  |  | m_NAtagCGViewCrossPlayerInfo=tagCGViewCrossPlayerInfo() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGViewCrossPlayerInfo.Cmd,m_NAtagCGViewCrossPlayerInfo.SubCmd))] = m_NAtagCGViewCrossPlayerInfo | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | 
|---|
|  |  |  | SpeakerType = 0    #(BYTE SpeakerType)//1-本服;2-跨服 | 
|---|
|  |  |  | IsUseGold = 0    #(BYTE IsUseGold)//是否使用钻石 | 
|---|
|  |  |  | ItemIndex = 0    #(BYTE ItemIndex)//使用物品说话时, 物品Index | 
|---|
|  |  |  | TextLen = 0    #(BYTE TextLen)//字符长度 | 
|---|
|  |  |  | TextLen = 0    #(WORD TextLen)//字符长度 | 
|---|
|  |  |  | Text = ""    #(String Text)//size = TextLen | 
|---|
|  |  |  | data = None | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | self.SpeakerType,_pos = CommFunc.ReadBYTE(_lpData, _pos) | 
|---|
|  |  |  | self.IsUseGold,_pos = CommFunc.ReadBYTE(_lpData, _pos) | 
|---|
|  |  |  | self.ItemIndex,_pos = CommFunc.ReadBYTE(_lpData, _pos) | 
|---|
|  |  |  | self.TextLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) | 
|---|
|  |  |  | self.TextLen,_pos = CommFunc.ReadWORD(_lpData, _pos) | 
|---|
|  |  |  | self.Text,_pos = CommFunc.ReadString(_lpData, _pos,self.TextLen) | 
|---|
|  |  |  | return _pos | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | length += 1 | 
|---|
|  |  |  | length += 1 | 
|---|
|  |  |  | length += 1 | 
|---|
|  |  |  | length += 1 | 
|---|
|  |  |  | length += 2 | 
|---|
|  |  |  | length += len(self.Text) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return length | 
|---|
|  |  |  | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.SpeakerType) | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.IsUseGold) | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.ItemIndex) | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.TextLen) | 
|---|
|  |  |  | data = CommFunc.WriteWORD(data, self.TextLen) | 
|---|
|  |  |  | data = CommFunc.WriteString(data, self.TextLen, self.Text) | 
|---|
|  |  |  | return data | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCMQueryBossHurtList=tagCMQueryBossHurtList() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMQueryBossHurtList.Cmd,m_NAtagCMQueryBossHurtList.SubCmd))] = m_NAtagCMQueryBossHurtList | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # A2 28 查询仙盟抢Boss伤血列表 #tagCMQueryFamilyBossHurt | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCMQueryFamilyBossHurt(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ("ObjID", c_int), | 
|---|
|  |  |  | ("NPCID", c_int), | 
|---|
|  |  |  | ("QueryType", c_ubyte),    # 0-实时仙盟伤血,1-历史仙盟伤血,2-实时玩家伤血,3-历史玩家伤血 | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Cmd = 0xA2 | 
|---|
|  |  |  | self.SubCmd = 0x28 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, stringData, _pos=0, _len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | memmove(addressof(self), stringData[_pos:], self.GetLength()) | 
|---|
|  |  |  | return _pos + self.GetLength() | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Cmd = 0xA2 | 
|---|
|  |  |  | self.SubCmd = 0x28 | 
|---|
|  |  |  | self.ObjID = 0 | 
|---|
|  |  |  | self.NPCID = 0 | 
|---|
|  |  |  | self.QueryType = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagCMQueryFamilyBossHurt) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''// A2 28 查询仙盟抢Boss伤血列表 //tagCMQueryFamilyBossHurt: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s, | 
|---|
|  |  |  | ObjID:%d, | 
|---|
|  |  |  | NPCID:%d, | 
|---|
|  |  |  | QueryType:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | self.SubCmd, | 
|---|
|  |  |  | self.ObjID, | 
|---|
|  |  |  | self.NPCID, | 
|---|
|  |  |  | self.QueryType | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCMQueryFamilyBossHurt=tagCMQueryFamilyBossHurt() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMQueryFamilyBossHurt.Cmd,m_NAtagCMQueryFamilyBossHurt.SubCmd))] = m_NAtagCMQueryFamilyBossHurt | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # A2 27 查询地图NPC数量信息 #tagCMQueryNPCCntInfo | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCMQueryNPCCntInfo(Structure): | 
|---|
|  |  |  | Head = tagHead() | 
|---|
|  |  |  | MapID = 0    #(DWORD MapID)// 目标地图ID | 
|---|
|  |  |  | LineID = 0    #(WORD LineID)// 线路ID | 
|---|
|  |  |  | IsNoTimeLimit = 0    #(BYTE IsNoTimeLimit)//是否没有查询时间限制,默认有限制 | 
|---|
|  |  |  | NPCIDListLen = 0    #(BYTE NPCIDListLen) | 
|---|
|  |  |  | NPCIDList = ""    #(String NPCIDList)// 需要查询的NPCID列表 | 
|---|
|  |  |  | data = None | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Head.Cmd = 0xA2 | 
|---|
|  |  |  | self.Head.SubCmd = 0x27 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, _lpData, _pos=0, _Len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | _pos = self.Head.ReadData(_lpData, _pos) | 
|---|
|  |  |  | self.MapID,_pos = CommFunc.ReadDWORD(_lpData, _pos) | 
|---|
|  |  |  | self.LineID,_pos = CommFunc.ReadWORD(_lpData, _pos) | 
|---|
|  |  |  | self.IsNoTimeLimit,_pos = CommFunc.ReadBYTE(_lpData, _pos) | 
|---|
|  |  |  | self.NPCIDListLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) | 
|---|
|  |  |  | self.NPCIDList,_pos = CommFunc.ReadString(_lpData, _pos,self.NPCIDListLen) | 
|---|
|  |  |  | return _pos | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Head = tagHead() | 
|---|
|  |  |  | self.Head.Clear() | 
|---|
|  |  |  | self.Head.Cmd = 0xA2 | 
|---|
|  |  |  | self.Head.SubCmd = 0x27 | 
|---|
|  |  |  | self.MapID = 0 | 
|---|
|  |  |  | self.LineID = 0 | 
|---|
|  |  |  | self.IsNoTimeLimit = 0 | 
|---|
|  |  |  | self.NPCIDListLen = 0 | 
|---|
|  |  |  | self.NPCIDList = "" | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | length = 0 | 
|---|
|  |  |  | length += self.Head.GetLength() | 
|---|
|  |  |  | length += 4 | 
|---|
|  |  |  | length += 2 | 
|---|
|  |  |  | length += 1 | 
|---|
|  |  |  | length += 1 | 
|---|
|  |  |  | length += len(self.NPCIDList) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return length | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | data = '' | 
|---|
|  |  |  | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) | 
|---|
|  |  |  | data = CommFunc.WriteDWORD(data, self.MapID) | 
|---|
|  |  |  | data = CommFunc.WriteWORD(data, self.LineID) | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.IsNoTimeLimit) | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.NPCIDListLen) | 
|---|
|  |  |  | data = CommFunc.WriteString(data, self.NPCIDListLen, self.NPCIDList) | 
|---|
|  |  |  | return data | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = ''' | 
|---|
|  |  |  | Head:%s, | 
|---|
|  |  |  | MapID:%d, | 
|---|
|  |  |  | LineID:%d, | 
|---|
|  |  |  | IsNoTimeLimit:%d, | 
|---|
|  |  |  | NPCIDListLen:%d, | 
|---|
|  |  |  | NPCIDList:%s | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Head.OutputString(), | 
|---|
|  |  |  | self.MapID, | 
|---|
|  |  |  | self.LineID, | 
|---|
|  |  |  | self.IsNoTimeLimit, | 
|---|
|  |  |  | self.NPCIDListLen, | 
|---|
|  |  |  | self.NPCIDList | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCMQueryNPCCntInfo=tagCMQueryNPCCntInfo() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMQueryNPCCntInfo.Head.Cmd,m_NAtagCMQueryNPCCntInfo.Head.SubCmd))] = m_NAtagCMQueryNPCCntInfo | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # A2 30 设置聊天气泡框 #tagCMSetChatBubbleBox | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCMSetChatBubbleBox(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ("BubbleBoxType", c_ubyte),    #气泡框类型 | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Cmd = 0xA2 | 
|---|
|  |  |  | 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 = 0xA2 | 
|---|
|  |  |  | self.SubCmd = 0x30 | 
|---|
|  |  |  | self.BubbleBoxType = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagCMSetChatBubbleBox) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''// A2 30 设置聊天气泡框 //tagCMSetChatBubbleBox: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s, | 
|---|
|  |  |  | BubbleBoxType:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | self.SubCmd, | 
|---|
|  |  |  | self.BubbleBoxType | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCMSetChatBubbleBox=tagCMSetChatBubbleBox() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMSetChatBubbleBox.Cmd,m_NAtagCMSetChatBubbleBox.SubCmd))] = m_NAtagCMSetChatBubbleBox | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # A2 22 设置引导成功 #tagCMSetGuideOK | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCMSetGuideOK(Structure): | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCMSetGuideOK=tagCMSetGuideOK() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMSetGuideOK.Cmd,m_NAtagCMSetGuideOK.SubCmd))] = m_NAtagCMSetGuideOK | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # A2 29 设置小助手 #tagCMSetLittleHelper | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCMSetLittleHelper(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ("SetNum", c_ubyte),    # 托管功能设置编号1~20,每个编号对应的托管功能前端自定义 | 
|---|
|  |  |  | ("Value1", c_int),    # 自定义值1 | 
|---|
|  |  |  | ("Value2", c_int),    # 自定义值2 | 
|---|
|  |  |  | ("Value3", c_int),    # 自定义值3 | 
|---|
|  |  |  | ("Value4", c_int),    # 自定义值4 | 
|---|
|  |  |  | ("Value5", c_int),    # 自定义值5 | 
|---|
|  |  |  | ("Value6", c_int),    # 自定义值6 | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Cmd = 0xA2 | 
|---|
|  |  |  | 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 = 0xA2 | 
|---|
|  |  |  | self.SubCmd = 0x29 | 
|---|
|  |  |  | self.SetNum = 0 | 
|---|
|  |  |  | self.Value1 = 0 | 
|---|
|  |  |  | self.Value2 = 0 | 
|---|
|  |  |  | self.Value3 = 0 | 
|---|
|  |  |  | self.Value4 = 0 | 
|---|
|  |  |  | self.Value5 = 0 | 
|---|
|  |  |  | self.Value6 = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagCMSetLittleHelper) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''// A2 29 设置小助手 //tagCMSetLittleHelper: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s, | 
|---|
|  |  |  | SetNum:%d, | 
|---|
|  |  |  | Value1:%d, | 
|---|
|  |  |  | Value2:%d, | 
|---|
|  |  |  | Value3:%d, | 
|---|
|  |  |  | Value4:%d, | 
|---|
|  |  |  | Value5:%d, | 
|---|
|  |  |  | Value6:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | self.SubCmd, | 
|---|
|  |  |  | self.SetNum, | 
|---|
|  |  |  | self.Value1, | 
|---|
|  |  |  | self.Value2, | 
|---|
|  |  |  | self.Value3, | 
|---|
|  |  |  | self.Value4, | 
|---|
|  |  |  | self.Value5, | 
|---|
|  |  |  | self.Value6 | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCMSetLittleHelper=tagCMSetLittleHelper() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMSetLittleHelper.Cmd,m_NAtagCMSetLittleHelper.SubCmd))] = m_NAtagCMSetLittleHelper | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | #A2 26 语音聊天 #tagCMVoiceChat | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCMVoiceChat(Structure): | 
|---|
|  |  |  | Head = tagHead() | 
|---|
|  |  |  | ChannelType = 0    #(BYTE ChannelType)//  5 区域 --- 查看封包tagCGVoiceChat 1 世界 2 仙盟 3 私聊(好友) 4 队伍 | 
|---|
|  |  |  | TargetNameLen = 0    #(BYTE TargetNameLen) | 
|---|
|  |  |  | TargetName = ""    #(String TargetName)//size = TargetNameLen | 
|---|
|  |  |  | TargetID = 0    #(DWORD TargetID)// 私聊默认发玩家ID,没有ID才发名称 | 
|---|
|  |  |  | Len = 0    #(WORD Len) | 
|---|
|  |  |  | Content = list()    #(vector<BYTE> Content)//size = Len | 
|---|
|  |  |  | data = None | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Head.Cmd = 0xA2 | 
|---|
|  |  |  | self.Head.SubCmd = 0x26 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, _lpData, _pos=0, _Len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | _pos = self.Head.ReadData(_lpData, _pos) | 
|---|
|  |  |  | self.ChannelType,_pos = CommFunc.ReadBYTE(_lpData, _pos) | 
|---|
|  |  |  | self.TargetNameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) | 
|---|
|  |  |  | self.TargetName,_pos = CommFunc.ReadString(_lpData, _pos,self.TargetNameLen) | 
|---|
|  |  |  | self.TargetID,_pos = CommFunc.ReadDWORD(_lpData, _pos) | 
|---|
|  |  |  | self.Len,_pos = CommFunc.ReadWORD(_lpData, _pos) | 
|---|
|  |  |  | for i in range(self.Len): | 
|---|
|  |  |  | value,_pos=CommFunc.ReadBYTE(_lpData,_pos) | 
|---|
|  |  |  | self.Content.append(value) | 
|---|
|  |  |  | return _pos | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Head = tagHead() | 
|---|
|  |  |  | self.Head.Clear() | 
|---|
|  |  |  | self.Head.Cmd = 0xA2 | 
|---|
|  |  |  | self.Head.SubCmd = 0x26 | 
|---|
|  |  |  | self.ChannelType = 0 | 
|---|
|  |  |  | self.TargetNameLen = 0 | 
|---|
|  |  |  | self.TargetName = "" | 
|---|
|  |  |  | self.TargetID = 0 | 
|---|
|  |  |  | self.Len = 0 | 
|---|
|  |  |  | self.Content = list() | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | length = 0 | 
|---|
|  |  |  | length += self.Head.GetLength() | 
|---|
|  |  |  | length += 1 | 
|---|
|  |  |  | length += 1 | 
|---|
|  |  |  | length += len(self.TargetName) | 
|---|
|  |  |  | length += 4 | 
|---|
|  |  |  | length += 2 | 
|---|
|  |  |  | length += 1 * self.Len | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return length | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | data = '' | 
|---|
|  |  |  | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.ChannelType) | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.TargetNameLen) | 
|---|
|  |  |  | data = CommFunc.WriteString(data, self.TargetNameLen, self.TargetName) | 
|---|
|  |  |  | data = CommFunc.WriteDWORD(data, self.TargetID) | 
|---|
|  |  |  | data = CommFunc.WriteWORD(data, self.Len) | 
|---|
|  |  |  | for i in range(self.Len): | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.Content[i]) | 
|---|
|  |  |  | return data | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = ''' | 
|---|
|  |  |  | Head:%s, | 
|---|
|  |  |  | ChannelType:%d, | 
|---|
|  |  |  | TargetNameLen:%d, | 
|---|
|  |  |  | TargetName:%s, | 
|---|
|  |  |  | TargetID:%d, | 
|---|
|  |  |  | Len:%d, | 
|---|
|  |  |  | Content:%s | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Head.OutputString(), | 
|---|
|  |  |  | self.ChannelType, | 
|---|
|  |  |  | self.TargetNameLen, | 
|---|
|  |  |  | self.TargetName, | 
|---|
|  |  |  | self.TargetID, | 
|---|
|  |  |  | self.Len, | 
|---|
|  |  |  | "..." | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCMVoiceChat=tagCMVoiceChat() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMVoiceChat.Head.Cmd,m_NAtagCMVoiceChat.Head.SubCmd))] = m_NAtagCMVoiceChat | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | #A2 12 查看玩家详细信息#tagCMViewPlayerInfo | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCMViewPlayerInfo(Structure): | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCMViewPlayerInfo=tagCMViewPlayerInfo() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMViewPlayerInfo.Cmd,m_NAtagCMViewPlayerInfo.SubCmd))] = m_NAtagCMViewPlayerInfo | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # A3 16 购买物品 #tagCMBuyItem | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCMBuyItem(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ("ItemID", c_int),    #物品id | 
|---|
|  |  |  | ("Cnt", c_int),    #个数 | 
|---|
|  |  |  | ("MoneyType", c_ubyte),    #金钱类型 | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Cmd = 0xA3 | 
|---|
|  |  |  | self.SubCmd = 0x16 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, stringData, _pos=0, _len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | memmove(addressof(self), stringData[_pos:], self.GetLength()) | 
|---|
|  |  |  | return _pos + self.GetLength() | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Cmd = 0xA3 | 
|---|
|  |  |  | self.SubCmd = 0x16 | 
|---|
|  |  |  | self.ItemID = 0 | 
|---|
|  |  |  | self.Cnt = 0 | 
|---|
|  |  |  | self.MoneyType = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagCMBuyItem) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''// A3 16 购买物品 //tagCMBuyItem: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s, | 
|---|
|  |  |  | ItemID:%d, | 
|---|
|  |  |  | Cnt:%d, | 
|---|
|  |  |  | MoneyType:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | self.SubCmd, | 
|---|
|  |  |  | self.ItemID, | 
|---|
|  |  |  | self.Cnt, | 
|---|
|  |  |  | self.MoneyType | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCMBuyItem=tagCMBuyItem() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMBuyItem.Cmd,m_NAtagCMBuyItem.SubCmd))] = m_NAtagCMBuyItem | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # A3 2D 装备分解设置 #tagCMDecomposeSeting | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCMDecomposeSeting(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ("Seting", c_int), | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Cmd = 0xA3 | 
|---|
|  |  |  | self.SubCmd = 0x2D | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, stringData, _pos=0, _len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | memmove(addressof(self), stringData[_pos:], self.GetLength()) | 
|---|
|  |  |  | return _pos + self.GetLength() | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Cmd = 0xA3 | 
|---|
|  |  |  | self.SubCmd = 0x2D | 
|---|
|  |  |  | self.Seting = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagCMDecomposeSeting) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''// A3 2D 装备分解设置 //tagCMDecomposeSeting: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s, | 
|---|
|  |  |  | Seting:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | self.SubCmd, | 
|---|
|  |  |  | self.Seting | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCMDecomposeSeting=tagCMDecomposeSeting() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMDecomposeSeting.Cmd,m_NAtagCMDecomposeSeting.SubCmd))] = m_NAtagCMDecomposeSeting | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # A3 09 转移物品到其他背包 #tagCMDropItemToOtherPack | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCMDropItemToOtherPack(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ("SrcBackpack", c_ubyte),    #源背包类型 | 
|---|
|  |  |  | ("DesBackPack", c_ubyte),    #目标背包类型 | 
|---|
|  |  |  | ("SrcIndex", c_ushort),    #转移物品索引位置;当全部转移时此值无效 | 
|---|
|  |  |  | ("IsAll", c_ubyte),    #是否全部转移 | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Cmd = 0xA3 | 
|---|
|  |  |  | self.SubCmd = 0x09 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, stringData, _pos=0, _len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | memmove(addressof(self), stringData[_pos:], self.GetLength()) | 
|---|
|  |  |  | return _pos + self.GetLength() | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Cmd = 0xA3 | 
|---|
|  |  |  | self.SubCmd = 0x09 | 
|---|
|  |  |  | self.SrcBackpack = 0 | 
|---|
|  |  |  | self.DesBackPack = 0 | 
|---|
|  |  |  | self.SrcIndex = 0 | 
|---|
|  |  |  | self.IsAll = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagCMDropItemToOtherPack) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''// A3 09 转移物品到其他背包 //tagCMDropItemToOtherPack: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s, | 
|---|
|  |  |  | SrcBackpack:%d, | 
|---|
|  |  |  | DesBackPack:%d, | 
|---|
|  |  |  | SrcIndex:%d, | 
|---|
|  |  |  | IsAll:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | self.SubCmd, | 
|---|
|  |  |  | self.SrcBackpack, | 
|---|
|  |  |  | self.DesBackPack, | 
|---|
|  |  |  | self.SrcIndex, | 
|---|
|  |  |  | self.IsAll | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCMDropItemToOtherPack=tagCMDropItemToOtherPack() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMDropItemToOtherPack.Cmd,m_NAtagCMDropItemToOtherPack.SubCmd))] = m_NAtagCMDropItemToOtherPack | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | #A3 15 装备打孔 # tagCMEquipAddHole | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCMEquipAddHole(Structure): | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCMEquipDecompose(Structure): | 
|---|
|  |  |  | Head = tagHead() | 
|---|
|  |  |  | PackType = 0    #(BYTE PackType)//背包类型 | 
|---|
|  |  |  | IndexCount = 0    #(BYTE IndexCount)//材料所在背包索引的数量 | 
|---|
|  |  |  | IndexList = list()    #(vector<BYTE> IndexList)//材料所在背包索引列表 | 
|---|
|  |  |  | Count = 0    #(BYTE Count)//材料所在背包索引的数量 | 
|---|
|  |  |  | IndexList = list()    #(vector<WORD> IndexList)//材料所在背包索引列表 | 
|---|
|  |  |  | ItemIDList = list()    #(vector<DWORD> ItemIDList)//材料所在背包物品ID列表 | 
|---|
|  |  |  | IsAuto = 0    #(BYTE IsAuto)//是否自动分解 | 
|---|
|  |  |  | data = None | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | 
|---|
|  |  |  | def ReadData(self, _lpData, _pos=0, _Len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | _pos = self.Head.ReadData(_lpData, _pos) | 
|---|
|  |  |  | self.PackType,_pos = CommFunc.ReadBYTE(_lpData, _pos) | 
|---|
|  |  |  | self.IndexCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) | 
|---|
|  |  |  | for i in range(self.IndexCount): | 
|---|
|  |  |  | value,_pos=CommFunc.ReadBYTE(_lpData,_pos) | 
|---|
|  |  |  | 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.Clear() | 
|---|
|  |  |  | self.Head.Cmd = 0xA3 | 
|---|
|  |  |  | self.Head.SubCmd = 0x2C | 
|---|
|  |  |  | self.PackType = 0 | 
|---|
|  |  |  | self.IndexCount = 0 | 
|---|
|  |  |  | 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 | 
|---|
|  |  |  | length += 1 * self.IndexCount | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return length | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | data = '' | 
|---|
|  |  |  | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.PackType) | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.IndexCount) | 
|---|
|  |  |  | for i in range(self.IndexCount): | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.IndexList[i]) | 
|---|
|  |  |  | 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, | 
|---|
|  |  |  | PackType:%d, | 
|---|
|  |  |  | IndexCount:%d, | 
|---|
|  |  |  | IndexList:%s | 
|---|
|  |  |  | Count:%d, | 
|---|
|  |  |  | IndexList:%s, | 
|---|
|  |  |  | ItemIDList:%s, | 
|---|
|  |  |  | IsAuto:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Head.OutputString(), | 
|---|
|  |  |  | self.PackType, | 
|---|
|  |  |  | self.IndexCount, | 
|---|
|  |  |  | "..." | 
|---|
|  |  |  | self.Count, | 
|---|
|  |  |  | "...", | 
|---|
|  |  |  | "...", | 
|---|
|  |  |  | self.IsAuto | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | #A3 13 装备继承#tagCMInheritEquip | 
|---|
|  |  |  | # A3 13 物品拆解 #tagCMItemDecompound | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCMInheritEquip(Structure): | 
|---|
|  |  |  | class  tagCMItemDecompound(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ("SrcPackType", c_ubyte),    #背包类型:rptItem, rptEquip, rptPetEquip1~5 | 
|---|
|  |  |  | ("SrcEquipIndex", c_ubyte),    #材料装备在对应背包中索引 | 
|---|
|  |  |  | ("DesPackType", c_ubyte),    #目标装备所在背包类型:rptItem, rptEquip, rptPetEquip1~5 | 
|---|
|  |  |  | ("DesEquipIndex", c_ubyte),    #目标装备所在背包索引 | 
|---|
|  |  |  | ("AutoBuy", c_ubyte),    #自动购买 | 
|---|
|  |  |  | ("InheritGreatAttr", c_ubyte),    #是否继承主装备卓越属性 | 
|---|
|  |  |  | ("Index", c_ubyte),    # 拆解物品所在背包索引 | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Cmd = 0xA3 | 
|---|
|  |  |  | self.SubCmd = 0x13 | 
|---|
|  |  |  | self.SrcPackType = 0 | 
|---|
|  |  |  | self.SrcEquipIndex = 0 | 
|---|
|  |  |  | self.DesPackType = 0 | 
|---|
|  |  |  | self.DesEquipIndex = 0 | 
|---|
|  |  |  | self.AutoBuy = 0 | 
|---|
|  |  |  | self.InheritGreatAttr = 0 | 
|---|
|  |  |  | self.Index = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagCMInheritEquip) | 
|---|
|  |  |  | return sizeof(tagCMItemDecompound) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''//A3 13 装备继承//tagCMInheritEquip: | 
|---|
|  |  |  | DumpString = '''// A3 13 物品拆解 //tagCMItemDecompound: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s, | 
|---|
|  |  |  | SrcPackType:%d, | 
|---|
|  |  |  | SrcEquipIndex:%d, | 
|---|
|  |  |  | DesPackType:%d, | 
|---|
|  |  |  | DesEquipIndex:%d, | 
|---|
|  |  |  | AutoBuy:%d, | 
|---|
|  |  |  | InheritGreatAttr:%d | 
|---|
|  |  |  | Index:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | self.SubCmd, | 
|---|
|  |  |  | self.SrcPackType, | 
|---|
|  |  |  | self.SrcEquipIndex, | 
|---|
|  |  |  | self.DesPackType, | 
|---|
|  |  |  | self.DesEquipIndex, | 
|---|
|  |  |  | self.AutoBuy, | 
|---|
|  |  |  | self.InheritGreatAttr | 
|---|
|  |  |  | self.Index | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCMInheritEquip=tagCMInheritEquip() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMInheritEquip.Cmd,m_NAtagCMInheritEquip.SubCmd))] = m_NAtagCMInheritEquip | 
|---|
|  |  |  | m_NAtagCMItemDecompound=tagCMItemDecompound() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMItemDecompound.Cmd,m_NAtagCMItemDecompound.SubCmd))] = m_NAtagCMItemDecompound | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # A3 2A 回收魂石 #tagCMRecycleAttrFruit | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCMRecycleAttrFruit(Structure): | 
|---|
|  |  |  | Head = tagHead() | 
|---|
|  |  |  | IndexCount = 0    #(BYTE IndexCount)//索引个数 | 
|---|
|  |  |  | IndexList = list()    #(vector<BYTE> IndexList)//物品在背包中索引列表 | 
|---|
|  |  |  | RecycleCountList = list()    #(vector<WORD> RecycleCountList)//索引对应回收个数列表 | 
|---|
|  |  |  | data = None | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Head.Cmd = 0xA3 | 
|---|
|  |  |  | self.Head.SubCmd = 0x2A | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, _lpData, _pos=0, _Len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | _pos = self.Head.ReadData(_lpData, _pos) | 
|---|
|  |  |  | self.IndexCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) | 
|---|
|  |  |  | for i in range(self.IndexCount): | 
|---|
|  |  |  | value,_pos=CommFunc.ReadBYTE(_lpData,_pos) | 
|---|
|  |  |  | self.IndexList.append(value) | 
|---|
|  |  |  | for i in range(self.IndexCount): | 
|---|
|  |  |  | value,_pos=CommFunc.ReadWORD(_lpData,_pos) | 
|---|
|  |  |  | self.RecycleCountList.append(value) | 
|---|
|  |  |  | return _pos | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Head = tagHead() | 
|---|
|  |  |  | self.Head.Clear() | 
|---|
|  |  |  | self.Head.Cmd = 0xA3 | 
|---|
|  |  |  | self.Head.SubCmd = 0x2A | 
|---|
|  |  |  | self.IndexCount = 0 | 
|---|
|  |  |  | self.IndexList = list() | 
|---|
|  |  |  | self.RecycleCountList = list() | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | length = 0 | 
|---|
|  |  |  | length += self.Head.GetLength() | 
|---|
|  |  |  | length += 1 | 
|---|
|  |  |  | length += 1 * self.IndexCount | 
|---|
|  |  |  | length += 2 * self.IndexCount | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return length | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | data = '' | 
|---|
|  |  |  | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.IndexCount) | 
|---|
|  |  |  | for i in range(self.IndexCount): | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.IndexList[i]) | 
|---|
|  |  |  | for i in range(self.IndexCount): | 
|---|
|  |  |  | data = CommFunc.WriteWORD(data, self.RecycleCountList[i]) | 
|---|
|  |  |  | return data | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = ''' | 
|---|
|  |  |  | Head:%s, | 
|---|
|  |  |  | IndexCount:%d, | 
|---|
|  |  |  | IndexList:%s, | 
|---|
|  |  |  | RecycleCountList:%s | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Head.OutputString(), | 
|---|
|  |  |  | self.IndexCount, | 
|---|
|  |  |  | "...", | 
|---|
|  |  |  | "..." | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCMRecycleAttrFruit=tagCMRecycleAttrFruit() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMRecycleAttrFruit.Head.Cmd,m_NAtagCMRecycleAttrFruit.Head.SubCmd))] = m_NAtagCMRecycleAttrFruit | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | #A3 03 物品合成 #tagCMItemCompound | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCMItemCompound(Structure): | 
|---|
|  |  |  | 
|---|
|  |  |  | AddonsItemIndexCnt = 0    #(BYTE AddonsItemIndexCnt)// 附加物品在背包中索引个数 | 
|---|
|  |  |  | AddonsItemIndex = list()    #(vector<BYTE> AddonsItemIndex)// 附加物品在背包的索引列表 | 
|---|
|  |  |  | AddonsItemCount = list()    #(vector<BYTE> AddonsItemCount)// 附加物品在背包的索引对应扣除数量列表 | 
|---|
|  |  |  | RateIncreaseItemIndexCnt = 0    #(BYTE RateIncreaseItemIndexCnt)// 提升概率物品在背包中索引个数 | 
|---|
|  |  |  | RateIncreaseItemIndex = list()    #(vector<BYTE> RateIncreaseItemIndex)// 提升概率物品在背包的索引列表 | 
|---|
|  |  |  | data = None | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | 
|---|
|  |  |  | for i in range(self.AddonsItemIndexCnt): | 
|---|
|  |  |  | value,_pos=CommFunc.ReadBYTE(_lpData,_pos) | 
|---|
|  |  |  | self.AddonsItemCount.append(value) | 
|---|
|  |  |  | self.RateIncreaseItemIndexCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) | 
|---|
|  |  |  | for i in range(self.RateIncreaseItemIndexCnt): | 
|---|
|  |  |  | value,_pos=CommFunc.ReadBYTE(_lpData,_pos) | 
|---|
|  |  |  | self.RateIncreaseItemIndex.append(value) | 
|---|
|  |  |  | return _pos | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | 
|---|
|  |  |  | self.AddonsItemIndexCnt = 0 | 
|---|
|  |  |  | self.AddonsItemIndex = list() | 
|---|
|  |  |  | self.AddonsItemCount = list() | 
|---|
|  |  |  | self.RateIncreaseItemIndexCnt = 0 | 
|---|
|  |  |  | self.RateIncreaseItemIndex = list() | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | 
|---|
|  |  |  | length += 1 | 
|---|
|  |  |  | length += 1 * self.AddonsItemIndexCnt | 
|---|
|  |  |  | length += 1 * self.AddonsItemIndexCnt | 
|---|
|  |  |  | length += 1 | 
|---|
|  |  |  | length += 1 * self.RateIncreaseItemIndexCnt | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return length | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.AddonsItemIndex[i]) | 
|---|
|  |  |  | for i in range(self.AddonsItemIndexCnt): | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.AddonsItemCount[i]) | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.RateIncreaseItemIndexCnt) | 
|---|
|  |  |  | for i in range(self.RateIncreaseItemIndexCnt): | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.RateIncreaseItemIndex[i]) | 
|---|
|  |  |  | return data | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | 
|---|
|  |  |  | FixedItemIndex:%s, | 
|---|
|  |  |  | AddonsItemIndexCnt:%d, | 
|---|
|  |  |  | AddonsItemIndex:%s, | 
|---|
|  |  |  | AddonsItemCount:%s | 
|---|
|  |  |  | AddonsItemCount:%s, | 
|---|
|  |  |  | RateIncreaseItemIndexCnt:%d, | 
|---|
|  |  |  | RateIncreaseItemIndex:%s | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Head.OutputString(), | 
|---|
|  |  |  | 
|---|
|  |  |  | "...", | 
|---|
|  |  |  | self.AddonsItemIndexCnt, | 
|---|
|  |  |  | "...", | 
|---|
|  |  |  | "...", | 
|---|
|  |  |  | self.RateIncreaseItemIndexCnt, | 
|---|
|  |  |  | "..." | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCMSuiteDecompose=tagCMSuiteDecompose() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMSuiteDecompose.Cmd,m_NAtagCMSuiteDecompose.SubCmd))] = m_NAtagCMSuiteDecompose | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # A3 2D 红装剥离 #tagCMSuitEquipStrip | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCMSuitEquipStrip(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ("PackType", c_ubyte),    #背包类型 | 
|---|
|  |  |  | ("ItemIndex", c_ubyte),    #材料所在背包索引 | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Cmd = 0xA3 | 
|---|
|  |  |  | self.SubCmd = 0x2D | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, stringData, _pos=0, _len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | memmove(addressof(self), stringData[_pos:], self.GetLength()) | 
|---|
|  |  |  | return _pos + self.GetLength() | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Cmd = 0xA3 | 
|---|
|  |  |  | self.SubCmd = 0x2D | 
|---|
|  |  |  | self.PackType = 0 | 
|---|
|  |  |  | self.ItemIndex = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagCMSuitEquipStrip) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''// A3 2D 红装剥离 //tagCMSuitEquipStrip: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s, | 
|---|
|  |  |  | PackType:%d, | 
|---|
|  |  |  | ItemIndex:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | self.SubCmd, | 
|---|
|  |  |  | self.PackType, | 
|---|
|  |  |  | self.ItemIndex | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCMSuitEquipStrip=tagCMSuitEquipStrip() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMSuitEquipStrip.Cmd,m_NAtagCMSuitEquipStrip.SubCmd))] = m_NAtagCMSuitEquipStrip | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # A3 2F 宗门试炼兑换 #tagCMTrialExchange | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCMTrialExchange(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ("ID", c_int),    #兑换ID | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Cmd = 0xA3 | 
|---|
|  |  |  | self.SubCmd = 0x2F | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, stringData, _pos=0, _len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | memmove(addressof(self), stringData[_pos:], self.GetLength()) | 
|---|
|  |  |  | return _pos + self.GetLength() | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Cmd = 0xA3 | 
|---|
|  |  |  | self.SubCmd = 0x2F | 
|---|
|  |  |  | self.ID = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagCMTrialExchange) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''// A3 2F 宗门试炼兑换 //tagCMTrialExchange: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s, | 
|---|
|  |  |  | ID:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | self.SubCmd, | 
|---|
|  |  |  | self.ID | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCMTrialExchange=tagCMTrialExchange() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMTrialExchange.Cmd,m_NAtagCMTrialExchange.SubCmd))] = m_NAtagCMTrialExchange | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # A3 2B 一键使用属性果实 #tagCMUseAllAttrFruit | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCMUseAllAttrFruit(Structure): | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCMUseAllAttrFruit=tagCMUseAllAttrFruit() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMUseAllAttrFruit.Cmd,m_NAtagCMUseAllAttrFruit.SubCmd))] = m_NAtagCMUseAllAttrFruit | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | #A3 10 一键使用图鉴 #tagCMUseAllCard | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCMUseAllCard(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ("CardColor", c_ushort),    #使用的图鉴颜色品质,可配置多个颜色品质,颜色品质从0开始,对应到二进制位 | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Cmd = 0xA3 | 
|---|
|  |  |  | self.SubCmd = 0x10 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, stringData, _pos=0, _len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | memmove(addressof(self), stringData[_pos:], self.GetLength()) | 
|---|
|  |  |  | return _pos + self.GetLength() | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Cmd = 0xA3 | 
|---|
|  |  |  | self.SubCmd = 0x10 | 
|---|
|  |  |  | self.CardColor = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagCMUseAllCard) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''//A3 10 一键使用图鉴 //tagCMUseAllCard: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s, | 
|---|
|  |  |  | CardColor:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | self.SubCmd, | 
|---|
|  |  |  | self.CardColor | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCMUseAllCard=tagCMUseAllCard() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMUseAllCard.Cmd,m_NAtagCMUseAllCard.SubCmd))] = m_NAtagCMUseAllCard | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # A3 2A 使用皇室宝箱 #tagCMUseCRBox | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCMUseCRBox(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ("FuncIndex", c_ubyte),    #功能索引 | 
|---|
|  |  |  | ("BoxIndex", c_ubyte),    #宝箱格子索引 | 
|---|
|  |  |  | ("UseItemIndex", c_ubyte),    # 物品在背包中的索引 | 
|---|
|  |  |  | ("UseType", c_ubyte),    #使用类型<0-开始使用,1-开始解锁,2-立即开启> | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Cmd = 0xA3 | 
|---|
|  |  |  | self.SubCmd = 0x2A | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, stringData, _pos=0, _len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | memmove(addressof(self), stringData[_pos:], self.GetLength()) | 
|---|
|  |  |  | return _pos + self.GetLength() | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Cmd = 0xA3 | 
|---|
|  |  |  | self.SubCmd = 0x2A | 
|---|
|  |  |  | self.FuncIndex = 0 | 
|---|
|  |  |  | self.BoxIndex = 0 | 
|---|
|  |  |  | self.UseItemIndex = 0 | 
|---|
|  |  |  | self.UseType = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagCMUseCRBox) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''// A3 2A 使用皇室宝箱 //tagCMUseCRBox: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s, | 
|---|
|  |  |  | FuncIndex:%d, | 
|---|
|  |  |  | BoxIndex:%d, | 
|---|
|  |  |  | UseItemIndex:%d, | 
|---|
|  |  |  | UseType:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | self.SubCmd, | 
|---|
|  |  |  | self.FuncIndex, | 
|---|
|  |  |  | self.BoxIndex, | 
|---|
|  |  |  | self.UseItemIndex, | 
|---|
|  |  |  | self.UseType | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCMUseCRBox=tagCMUseCRBox() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMUseCRBox.Cmd,m_NAtagCMUseCRBox.SubCmd))] = m_NAtagCMUseCRBox | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCMUseItems=tagCMUseItems() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMUseItems.Cmd,m_NAtagCMUseItems.SubCmd))] = m_NAtagCMUseItems | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # A3 27 使用过程物品 #tagCMUseProcessItem | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCMUseProcessItem(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ("UseType", c_ubyte),    # 使用类型 <0-开始使用, 1-使用操作, 2-结束使用> | 
|---|
|  |  |  | ("UseItemIndex", c_ubyte),    # 物品在背包中的索引 | 
|---|
|  |  |  | ("ExtraInfo", c_ubyte),    # 预留信息 | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Cmd = 0xA3 | 
|---|
|  |  |  | self.SubCmd = 0x27 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, stringData, _pos=0, _len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | memmove(addressof(self), stringData[_pos:], self.GetLength()) | 
|---|
|  |  |  | return _pos + self.GetLength() | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Cmd = 0xA3 | 
|---|
|  |  |  | self.SubCmd = 0x27 | 
|---|
|  |  |  | self.UseType = 0 | 
|---|
|  |  |  | self.UseItemIndex = 0 | 
|---|
|  |  |  | self.ExtraInfo = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagCMUseProcessItem) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''// A3 27 使用过程物品 //tagCMUseProcessItem: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s, | 
|---|
|  |  |  | UseType:%d, | 
|---|
|  |  |  | UseItemIndex:%d, | 
|---|
|  |  |  | ExtraInfo:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | self.SubCmd, | 
|---|
|  |  |  | self.UseType, | 
|---|
|  |  |  | self.UseItemIndex, | 
|---|
|  |  |  | self.ExtraInfo | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCMUseProcessItem=tagCMUseProcessItem() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMUseProcessItem.Cmd,m_NAtagCMUseProcessItem.SubCmd))] = m_NAtagCMUseProcessItem | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ("HorseID", c_ubyte),    #坐骑ID | 
|---|
|  |  |  | ("HorseID", c_int),    #坐骑ID | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCMActiveAllEquipAttr=tagCMActiveAllEquipAttr() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActiveAllEquipAttr.Cmd,m_NAtagCMActiveAllEquipAttr.SubCmd))] = m_NAtagCMActiveAllEquipAttr | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # A5 12 激活法宝之魂 #tagCMActiveMWSoul | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCMActiveMWSoul(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ("ID", c_ubyte),    #编号 | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Cmd = 0xA5 | 
|---|
|  |  |  | self.SubCmd = 0x12 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, stringData, _pos=0, _len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | memmove(addressof(self), stringData[_pos:], self.GetLength()) | 
|---|
|  |  |  | return _pos + self.GetLength() | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Cmd = 0xA5 | 
|---|
|  |  |  | self.SubCmd = 0x12 | 
|---|
|  |  |  | self.ID = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagCMActiveMWSoul) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''// A5 12 激活法宝之魂 //tagCMActiveMWSoul: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s, | 
|---|
|  |  |  | ID:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | self.SubCmd, | 
|---|
|  |  |  | self.ID | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCMActiveMWSoul=tagCMActiveMWSoul() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActiveMWSoul.Cmd,m_NAtagCMActiveMWSoul.SubCmd))] = m_NAtagCMActiveMWSoul | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | 
|---|
|  |  |  | ("MapID", c_int), | 
|---|
|  |  |  | ("LineID", c_ushort), | 
|---|
|  |  |  | ("Cnt", c_ubyte),    # 扫荡次数 | 
|---|
|  |  |  | ("IsFinish", c_ubyte),    # 是否立即完成 | 
|---|
|  |  |  | ("IsFinish", c_ubyte),    # 是否立即完成; 0-否;1-花钱立即完成;2-客户端自行倒计时间到后发送2代表领取扫荡完成奖励 | 
|---|
|  |  |  | ("DataEx", c_int),    #附带信息 | 
|---|
|  |  |  | ("IsLittleHelper", c_ubyte),    # 是否小助手扫荡 | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | 
|---|
|  |  |  | self.Cnt = 0 | 
|---|
|  |  |  | self.IsFinish = 0 | 
|---|
|  |  |  | self.DataEx = 0 | 
|---|
|  |  |  | self.IsLittleHelper = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | 
|---|
|  |  |  | LineID:%d, | 
|---|
|  |  |  | Cnt:%d, | 
|---|
|  |  |  | IsFinish:%d, | 
|---|
|  |  |  | DataEx:%d | 
|---|
|  |  |  | DataEx:%d, | 
|---|
|  |  |  | IsLittleHelper:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | 
|---|
|  |  |  | self.LineID, | 
|---|
|  |  |  | self.Cnt, | 
|---|
|  |  |  | self.IsFinish, | 
|---|
|  |  |  | self.DataEx | 
|---|
|  |  |  | self.DataEx, | 
|---|
|  |  |  | self.IsLittleHelper | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | #A5 12 购买每日一购商品 #tagCMBuyDailyGoldShopItem | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCMBuyDailyGoldShopItem(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ("Index", c_ubyte),    #购买物品的索引 | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Cmd = 0xA5 | 
|---|
|  |  |  | self.SubCmd = 0x12 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, stringData, _pos=0, _len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | memmove(addressof(self), stringData[_pos:], self.GetLength()) | 
|---|
|  |  |  | return _pos + self.GetLength() | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Cmd = 0xA5 | 
|---|
|  |  |  | self.SubCmd = 0x12 | 
|---|
|  |  |  | self.Index = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagCMBuyDailyGoldShopItem) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''//A5 12 购买每日一购商品 //tagCMBuyDailyGoldShopItem: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s, | 
|---|
|  |  |  | Index:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | self.SubCmd, | 
|---|
|  |  |  | self.Index | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCMBuyDailyGoldShopItem=tagCMBuyDailyGoldShopItem() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMBuyDailyGoldShopItem.Cmd,m_NAtagCMBuyDailyGoldShopItem.SubCmd))] = m_NAtagCMBuyDailyGoldShopItem | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | #A5 75 购买副本进入次数#tagCMBuyEnterCount | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCMBuyEnterCount(Structure): | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCMBuyEnterCount=tagCMBuyEnterCount() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMBuyEnterCount.Cmd,m_NAtagCMBuyEnterCount.SubCmd))] = m_NAtagCMBuyEnterCount | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | #A5 14 开通表情包#tagPyCMBuyFacePackage | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagPyCMBuyFacePackage(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ("PackageID", c_ubyte),    #购买表情包的索引 | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Cmd = 0xA5 | 
|---|
|  |  |  | self.SubCmd = 0x14 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, stringData, _pos=0, _len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | memmove(addressof(self), stringData[_pos:], self.GetLength()) | 
|---|
|  |  |  | return _pos + self.GetLength() | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Cmd = 0xA5 | 
|---|
|  |  |  | self.SubCmd = 0x14 | 
|---|
|  |  |  | self.PackageID = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagPyCMBuyFacePackage) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''//A5 14 开通表情包//tagPyCMBuyFacePackage: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s, | 
|---|
|  |  |  | PackageID:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | self.SubCmd, | 
|---|
|  |  |  | self.PackageID | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagPyCMBuyFacePackage=tagPyCMBuyFacePackage() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagPyCMBuyFacePackage.Cmd,m_NAtagPyCMBuyFacePackage.SubCmd))] = m_NAtagPyCMBuyFacePackage | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # A5 62 装备收集属性激活 #tagCMCollectEquipAttrActive | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCMCollectEquipAttrActive(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ("CollectType", c_ubyte),    #收集类型 0-目标收集 1-战装收集 | 
|---|
|  |  |  | ("Data", c_ubyte),    #额外数据 | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Cmd = 0xA5 | 
|---|
|  |  |  | self.SubCmd = 0x62 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, stringData, _pos=0, _len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | memmove(addressof(self), stringData[_pos:], self.GetLength()) | 
|---|
|  |  |  | return _pos + self.GetLength() | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Cmd = 0xA5 | 
|---|
|  |  |  | self.SubCmd = 0x62 | 
|---|
|  |  |  | self.CollectType = 0 | 
|---|
|  |  |  | self.Data = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagCMCollectEquipAttrActive) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''// A5 62 装备收集属性激活 //tagCMCollectEquipAttrActive: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s, | 
|---|
|  |  |  | CollectType:%d, | 
|---|
|  |  |  | Data:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | self.SubCmd, | 
|---|
|  |  |  | self.CollectType, | 
|---|
|  |  |  | self.Data | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCMCollectEquipAttrActive=tagCMCollectEquipAttrActive() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMCollectEquipAttrActive.Cmd,m_NAtagCMCollectEquipAttrActive.SubCmd))] = m_NAtagCMCollectEquipAttrActive | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # A5 28 常规副本扫荡 #tagCMCommFBWipeOut | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCMCommFBWipeOut(Structure): | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # A5 C2 神兽变更助战状态 #tagCMDogzBattleStateChange | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCMDogzBattleStateChange(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ("DogzID", c_ubyte),    # 神兽ID | 
|---|
|  |  |  | ("BatteState", c_ubyte),    #助战状态,0-召回,1-助战 | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Cmd = 0xA5 | 
|---|
|  |  |  | self.SubCmd = 0xC2 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, stringData, _pos=0, _len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | memmove(addressof(self), stringData[_pos:], self.GetLength()) | 
|---|
|  |  |  | return _pos + self.GetLength() | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Cmd = 0xA5 | 
|---|
|  |  |  | self.SubCmd = 0xC2 | 
|---|
|  |  |  | self.DogzID = 0 | 
|---|
|  |  |  | self.BatteState = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagCMDogzBattleStateChange) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''// A5 C2 神兽变更助战状态 //tagCMDogzBattleStateChange: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s, | 
|---|
|  |  |  | DogzID:%d, | 
|---|
|  |  |  | BatteState:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | self.SubCmd, | 
|---|
|  |  |  | self.DogzID, | 
|---|
|  |  |  | self.BatteState | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCMDogzBattleStateChange=tagCMDogzBattleStateChange() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMDogzBattleStateChange.Cmd,m_NAtagCMDogzBattleStateChange.SubCmd))] = m_NAtagCMDogzBattleStateChange | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # A5 C3 神兽购买助战位 #tagCMDogzBuyBatteCount | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCMDogzBuyBatteCount(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Cmd = 0xA5 | 
|---|
|  |  |  | self.SubCmd = 0xC3 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, stringData, _pos=0, _len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | memmove(addressof(self), stringData[_pos:], self.GetLength()) | 
|---|
|  |  |  | return _pos + self.GetLength() | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Cmd = 0xA5 | 
|---|
|  |  |  | self.SubCmd = 0xC3 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagCMDogzBuyBatteCount) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''// A5 C3 神兽购买助战位 //tagCMDogzBuyBatteCount: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | self.SubCmd | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCMDogzBuyBatteCount=tagCMDogzBuyBatteCount() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMDogzBuyBatteCount.Cmd,m_NAtagCMDogzBuyBatteCount.SubCmd))] = m_NAtagCMDogzBuyBatteCount | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # A5 C0 神兽穿戴装备 #tagCMDogzEquipItem | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCMDogzEquipItem(Structure): | 
|---|
|  |  |  | Head = tagHead() | 
|---|
|  |  |  | DogzID = 0    #(BYTE DogzID)// 神兽ID | 
|---|
|  |  |  | EquipIndexCount = 0    #(BYTE EquipIndexCount) | 
|---|
|  |  |  | EquipIndexList = list()    #(vector<BYTE> EquipIndexList)//神兽装备所在神兽背包索引列表 | 
|---|
|  |  |  | data = None | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Head.Cmd = 0xA5 | 
|---|
|  |  |  | self.Head.SubCmd = 0xC0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, _lpData, _pos=0, _Len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | _pos = self.Head.ReadData(_lpData, _pos) | 
|---|
|  |  |  | self.DogzID,_pos = CommFunc.ReadBYTE(_lpData, _pos) | 
|---|
|  |  |  | self.EquipIndexCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) | 
|---|
|  |  |  | for i in range(self.EquipIndexCount): | 
|---|
|  |  |  | value,_pos=CommFunc.ReadBYTE(_lpData,_pos) | 
|---|
|  |  |  | self.EquipIndexList.append(value) | 
|---|
|  |  |  | return _pos | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Head = tagHead() | 
|---|
|  |  |  | self.Head.Clear() | 
|---|
|  |  |  | self.Head.Cmd = 0xA5 | 
|---|
|  |  |  | self.Head.SubCmd = 0xC0 | 
|---|
|  |  |  | self.DogzID = 0 | 
|---|
|  |  |  | self.EquipIndexCount = 0 | 
|---|
|  |  |  | self.EquipIndexList = list() | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | length = 0 | 
|---|
|  |  |  | length += self.Head.GetLength() | 
|---|
|  |  |  | length += 1 | 
|---|
|  |  |  | length += 1 | 
|---|
|  |  |  | length += 1 * self.EquipIndexCount | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return length | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | data = '' | 
|---|
|  |  |  | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.DogzID) | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.EquipIndexCount) | 
|---|
|  |  |  | for i in range(self.EquipIndexCount): | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.EquipIndexList[i]) | 
|---|
|  |  |  | return data | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = ''' | 
|---|
|  |  |  | Head:%s, | 
|---|
|  |  |  | DogzID:%d, | 
|---|
|  |  |  | EquipIndexCount:%d, | 
|---|
|  |  |  | EquipIndexList:%s | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Head.OutputString(), | 
|---|
|  |  |  | self.DogzID, | 
|---|
|  |  |  | self.EquipIndexCount, | 
|---|
|  |  |  | "..." | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCMDogzEquipItem=tagCMDogzEquipItem() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMDogzEquipItem.Head.Cmd,m_NAtagCMDogzEquipItem.Head.SubCmd))] = m_NAtagCMDogzEquipItem | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # A5 C4 神兽装备强化 #tagCMDogzEquipPlus | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCMDogzEquipPlus(Structure): | 
|---|
|  |  |  | Head = tagHead() | 
|---|
|  |  |  | EquipIndex = 0    #(BYTE EquipIndex)//神兽装备背包中索引 | 
|---|
|  |  |  | IndexCount = 0    #(BYTE IndexCount)//材料所在神兽物品背包索引的数量 | 
|---|
|  |  |  | IndexList = list()    #(vector<BYTE> IndexList)//材料所在神兽物品背包索引列表 | 
|---|
|  |  |  | IndexUseCountList = list()    #(vector<DWORD> IndexUseCountList)//材料所在神兽物品背包索引对应使用个数列表 | 
|---|
|  |  |  | IsDouble = 0    #(BYTE IsDouble)//是否双倍强化 | 
|---|
|  |  |  | data = None | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Head.Cmd = 0xA5 | 
|---|
|  |  |  | self.Head.SubCmd = 0xC4 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, _lpData, _pos=0, _Len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | _pos = self.Head.ReadData(_lpData, _pos) | 
|---|
|  |  |  | self.EquipIndex,_pos = CommFunc.ReadBYTE(_lpData, _pos) | 
|---|
|  |  |  | self.IndexCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) | 
|---|
|  |  |  | for i in range(self.IndexCount): | 
|---|
|  |  |  | value,_pos=CommFunc.ReadBYTE(_lpData,_pos) | 
|---|
|  |  |  | self.IndexList.append(value) | 
|---|
|  |  |  | for i in range(self.IndexCount): | 
|---|
|  |  |  | value,_pos=CommFunc.ReadDWORD(_lpData,_pos) | 
|---|
|  |  |  | self.IndexUseCountList.append(value) | 
|---|
|  |  |  | self.IsDouble,_pos = CommFunc.ReadBYTE(_lpData, _pos) | 
|---|
|  |  |  | return _pos | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Head = tagHead() | 
|---|
|  |  |  | self.Head.Clear() | 
|---|
|  |  |  | self.Head.Cmd = 0xA5 | 
|---|
|  |  |  | self.Head.SubCmd = 0xC4 | 
|---|
|  |  |  | self.EquipIndex = 0 | 
|---|
|  |  |  | self.IndexCount = 0 | 
|---|
|  |  |  | self.IndexList = list() | 
|---|
|  |  |  | self.IndexUseCountList = list() | 
|---|
|  |  |  | self.IsDouble = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | length = 0 | 
|---|
|  |  |  | length += self.Head.GetLength() | 
|---|
|  |  |  | length += 1 | 
|---|
|  |  |  | length += 1 | 
|---|
|  |  |  | length += 1 * self.IndexCount | 
|---|
|  |  |  | length += 4 * self.IndexCount | 
|---|
|  |  |  | length += 1 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return length | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | data = '' | 
|---|
|  |  |  | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.EquipIndex) | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.IndexCount) | 
|---|
|  |  |  | for i in range(self.IndexCount): | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.IndexList[i]) | 
|---|
|  |  |  | for i in range(self.IndexCount): | 
|---|
|  |  |  | data = CommFunc.WriteDWORD(data, self.IndexUseCountList[i]) | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.IsDouble) | 
|---|
|  |  |  | return data | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = ''' | 
|---|
|  |  |  | Head:%s, | 
|---|
|  |  |  | EquipIndex:%d, | 
|---|
|  |  |  | IndexCount:%d, | 
|---|
|  |  |  | IndexList:%s, | 
|---|
|  |  |  | IndexUseCountList:%s, | 
|---|
|  |  |  | IsDouble:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Head.OutputString(), | 
|---|
|  |  |  | self.EquipIndex, | 
|---|
|  |  |  | self.IndexCount, | 
|---|
|  |  |  | "...", | 
|---|
|  |  |  | "...", | 
|---|
|  |  |  | self.IsDouble | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCMDogzEquipPlus=tagCMDogzEquipPlus() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMDogzEquipPlus.Head.Cmd,m_NAtagCMDogzEquipPlus.Head.SubCmd))] = m_NAtagCMDogzEquipPlus | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # A5 C1 神兽卸下装备 #tagCMDogzUnEquipItem | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCMDogzUnEquipItem(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ("DogzID", c_ubyte),    # 神兽ID | 
|---|
|  |  |  | ("EquipPlace", c_ubyte),    #卸下的装备位, 0代表卸下全部 | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Cmd = 0xA5 | 
|---|
|  |  |  | self.SubCmd = 0xC1 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, stringData, _pos=0, _len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | memmove(addressof(self), stringData[_pos:], self.GetLength()) | 
|---|
|  |  |  | return _pos + self.GetLength() | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Cmd = 0xA5 | 
|---|
|  |  |  | self.SubCmd = 0xC1 | 
|---|
|  |  |  | self.DogzID = 0 | 
|---|
|  |  |  | self.EquipPlace = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagCMDogzUnEquipItem) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''// A5 C1 神兽卸下装备 //tagCMDogzUnEquipItem: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s, | 
|---|
|  |  |  | DogzID:%d, | 
|---|
|  |  |  | EquipPlace:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | self.SubCmd, | 
|---|
|  |  |  | self.DogzID, | 
|---|
|  |  |  | self.EquipPlace | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCMDogzUnEquipItem=tagCMDogzUnEquipItem() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMDogzUnEquipItem.Cmd,m_NAtagCMDogzUnEquipItem.SubCmd))] = m_NAtagCMDogzUnEquipItem | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # A5 48 兑换大师等级经验 #tagCMExchangeMasterEXP | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCMExchangeMasterEXP(Structure): | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCMExchangeReiki=tagCMExchangeReiki() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMExchangeReiki.Cmd,m_NAtagCMExchangeReiki.SubCmd))] = m_NAtagCMExchangeReiki | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # A5 1C 聚魂合成 #tagCMGatherSoulCompound | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCMGatherSoulCompound(Structure): | 
|---|
|  |  |  | Head = tagHead() | 
|---|
|  |  |  | Cnt = 0    #(BYTE Cnt) | 
|---|
|  |  |  | PackList = list()    #(vector<BYTE> PackList)//所在位置 0-背包 1-孔 | 
|---|
|  |  |  | IndexList = list()    #(vector<WORD> IndexList)//物品索引 | 
|---|
|  |  |  | TagItemID = 0    #(DWORD TagItemID)//合成目标物品ID | 
|---|
|  |  |  | data = None | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Head.Cmd = 0xA5 | 
|---|
|  |  |  | self.Head.SubCmd = 0x1C | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, _lpData, _pos=0, _Len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | _pos = self.Head.ReadData(_lpData, _pos) | 
|---|
|  |  |  | self.Cnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) | 
|---|
|  |  |  | for i in range(self.Cnt): | 
|---|
|  |  |  | value,_pos=CommFunc.ReadBYTE(_lpData,_pos) | 
|---|
|  |  |  | self.PackList.append(value) | 
|---|
|  |  |  | for i in range(self.Cnt): | 
|---|
|  |  |  | value,_pos=CommFunc.ReadWORD(_lpData,_pos) | 
|---|
|  |  |  | self.IndexList.append(value) | 
|---|
|  |  |  | self.TagItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos) | 
|---|
|  |  |  | return _pos | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Head = tagHead() | 
|---|
|  |  |  | self.Head.Clear() | 
|---|
|  |  |  | self.Head.Cmd = 0xA5 | 
|---|
|  |  |  | self.Head.SubCmd = 0x1C | 
|---|
|  |  |  | self.Cnt = 0 | 
|---|
|  |  |  | self.PackList = list() | 
|---|
|  |  |  | self.IndexList = list() | 
|---|
|  |  |  | self.TagItemID = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | length = 0 | 
|---|
|  |  |  | length += self.Head.GetLength() | 
|---|
|  |  |  | length += 1 | 
|---|
|  |  |  | length += 1 * self.Cnt | 
|---|
|  |  |  | length += 2 * self.Cnt | 
|---|
|  |  |  | length += 4 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return length | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | data = '' | 
|---|
|  |  |  | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.Cnt) | 
|---|
|  |  |  | for i in range(self.Cnt): | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.PackList[i]) | 
|---|
|  |  |  | for i in range(self.Cnt): | 
|---|
|  |  |  | data = CommFunc.WriteWORD(data, self.IndexList[i]) | 
|---|
|  |  |  | data = CommFunc.WriteDWORD(data, self.TagItemID) | 
|---|
|  |  |  | return data | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = ''' | 
|---|
|  |  |  | Head:%s, | 
|---|
|  |  |  | Cnt:%d, | 
|---|
|  |  |  | PackList:%s, | 
|---|
|  |  |  | IndexList:%s, | 
|---|
|  |  |  | TagItemID:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Head.OutputString(), | 
|---|
|  |  |  | self.Cnt, | 
|---|
|  |  |  | "...", | 
|---|
|  |  |  | "...", | 
|---|
|  |  |  | self.TagItemID | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCMGatherSoulCompound=tagCMGatherSoulCompound() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMGatherSoulCompound.Head.Cmd,m_NAtagCMGatherSoulCompound.Head.SubCmd))] = m_NAtagCMGatherSoulCompound | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # A5 19 聚魂分解 #tagCMGatherSoulDecompose | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCMGatherSoulDecompose(Structure): | 
|---|
|  |  |  | Head = tagHead() | 
|---|
|  |  |  | IsAuto = 0    #(BYTE IsAuto)// 是否自动分解 | 
|---|
|  |  |  | Count = 0    #(BYTE Count)// 指定批量分解数,最大不超过50个 | 
|---|
|  |  |  | PlaceIndexList = list()    #(vector<WORD> PlaceIndexList)// 批量分解位置索引列表 | 
|---|
|  |  |  | data = None | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Head.Cmd = 0xA5 | 
|---|
|  |  |  | self.Head.SubCmd = 0x19 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, _lpData, _pos=0, _Len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | _pos = self.Head.ReadData(_lpData, _pos) | 
|---|
|  |  |  | self.IsAuto,_pos = CommFunc.ReadBYTE(_lpData, _pos) | 
|---|
|  |  |  | self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos) | 
|---|
|  |  |  | for i in range(self.Count): | 
|---|
|  |  |  | value,_pos=CommFunc.ReadWORD(_lpData,_pos) | 
|---|
|  |  |  | self.PlaceIndexList.append(value) | 
|---|
|  |  |  | return _pos | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Head = tagHead() | 
|---|
|  |  |  | self.Head.Clear() | 
|---|
|  |  |  | self.Head.Cmd = 0xA5 | 
|---|
|  |  |  | self.Head.SubCmd = 0x19 | 
|---|
|  |  |  | self.IsAuto = 0 | 
|---|
|  |  |  | self.Count = 0 | 
|---|
|  |  |  | self.PlaceIndexList = list() | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | length = 0 | 
|---|
|  |  |  | length += self.Head.GetLength() | 
|---|
|  |  |  | length += 1 | 
|---|
|  |  |  | length += 1 | 
|---|
|  |  |  | length += 2 * self.Count | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return length | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | data = '' | 
|---|
|  |  |  | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.IsAuto) | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.Count) | 
|---|
|  |  |  | for i in range(self.Count): | 
|---|
|  |  |  | data = CommFunc.WriteWORD(data, self.PlaceIndexList[i]) | 
|---|
|  |  |  | return data | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = ''' | 
|---|
|  |  |  | Head:%s, | 
|---|
|  |  |  | IsAuto:%d, | 
|---|
|  |  |  | Count:%d, | 
|---|
|  |  |  | PlaceIndexList:%s | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Head.OutputString(), | 
|---|
|  |  |  | self.IsAuto, | 
|---|
|  |  |  | self.Count, | 
|---|
|  |  |  | "..." | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCMGatherSoulDecompose=tagCMGatherSoulDecompose() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMGatherSoulDecompose.Head.Cmd,m_NAtagCMGatherSoulDecompose.Head.SubCmd))] = m_NAtagCMGatherSoulDecompose | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # A5 18 聚魂升级 #tagCMGatherSoulUp | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCMGatherSoulUp(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ("PlaceType", c_ubyte),    # 位置类型;0-背包,1-孔 | 
|---|
|  |  |  | ("PlaceIndex", c_ushort),    # 位置索引 | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Cmd = 0xA5 | 
|---|
|  |  |  | 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 = 0xA5 | 
|---|
|  |  |  | self.SubCmd = 0x18 | 
|---|
|  |  |  | self.PlaceType = 0 | 
|---|
|  |  |  | self.PlaceIndex = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagCMGatherSoulUp) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''// A5 18 聚魂升级 //tagCMGatherSoulUp: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s, | 
|---|
|  |  |  | PlaceType:%d, | 
|---|
|  |  |  | PlaceIndex:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | self.SubCmd, | 
|---|
|  |  |  | self.PlaceType, | 
|---|
|  |  |  | self.PlaceIndex | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCMGatherSoulUp=tagCMGatherSoulUp() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMGatherSoulUp.Cmd,m_NAtagCMGatherSoulUp.SubCmd))] = m_NAtagCMGatherSoulUp | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # A5 56 神兵激活 #tagCMGodWeaponActivate | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCMGodWeaponActivate(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ("WeaponType", c_int),    # 神兵类型 | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Cmd = 0xA5 | 
|---|
|  |  |  | self.SubCmd = 0x56 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, stringData, _pos=0, _len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | memmove(addressof(self), stringData[_pos:], self.GetLength()) | 
|---|
|  |  |  | return _pos + self.GetLength() | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Cmd = 0xA5 | 
|---|
|  |  |  | self.SubCmd = 0x56 | 
|---|
|  |  |  | self.WeaponType = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagCMGodWeaponActivate) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''// A5 56 神兵激活 //tagCMGodWeaponActivate: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s, | 
|---|
|  |  |  | WeaponType:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | self.SubCmd, | 
|---|
|  |  |  | self.WeaponType | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCMGodWeaponActivate=tagCMGodWeaponActivate() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMGodWeaponActivate.Cmd,m_NAtagCMGodWeaponActivate.SubCmd))] = m_NAtagCMGodWeaponActivate | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # A5 55 神兵升级 #tagCMGodWeaponPlus | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCMGodWeaponPlus(Structure): | 
|---|
|  |  |  | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ("WeaponType", c_int),    # 神兵类型 | 
|---|
|  |  |  | ("ItemID", c_int),    #消耗的物品ID | 
|---|
|  |  |  | ("ItemCount", c_ubyte),    #消耗个数,默认1 | 
|---|
|  |  |  | ("IsAutoBuy", c_ubyte),    #是否自动购买,默认0 | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | 
|---|
|  |  |  | self.SubCmd = 0x55 | 
|---|
|  |  |  | self.WeaponType = 0 | 
|---|
|  |  |  | self.ItemID = 0 | 
|---|
|  |  |  | self.ItemCount = 0 | 
|---|
|  |  |  | self.IsAutoBuy = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s, | 
|---|
|  |  |  | WeaponType:%d, | 
|---|
|  |  |  | ItemID:%d | 
|---|
|  |  |  | ItemID:%d, | 
|---|
|  |  |  | ItemCount:%d, | 
|---|
|  |  |  | IsAutoBuy:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | self.SubCmd, | 
|---|
|  |  |  | self.WeaponType, | 
|---|
|  |  |  | self.ItemID | 
|---|
|  |  |  | self.ItemID, | 
|---|
|  |  |  | self.ItemCount, | 
|---|
|  |  |  | self.IsAutoBuy | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # A5 64 抢红包 #tagCMGrabRedPacket | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCMGrabRedPacket(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ("Type", c_ubyte),    #  0抢 1 查询 | 
|---|
|  |  |  | ("RedPacketID", c_int),    # 红包ID | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Cmd = 0xA5 | 
|---|
|  |  |  | self.SubCmd = 0x64 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, stringData, _pos=0, _len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | memmove(addressof(self), stringData[_pos:], self.GetLength()) | 
|---|
|  |  |  | return _pos + self.GetLength() | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Cmd = 0xA5 | 
|---|
|  |  |  | self.SubCmd = 0x64 | 
|---|
|  |  |  | self.Type = 0 | 
|---|
|  |  |  | self.RedPacketID = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagCMGrabRedPacket) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''// A5 64 抢红包 //tagCMGrabRedPacket: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s, | 
|---|
|  |  |  | Type:%d, | 
|---|
|  |  |  | RedPacketID:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | self.SubCmd, | 
|---|
|  |  |  | self.Type, | 
|---|
|  |  |  | self.RedPacketID | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCMGrabRedPacket=tagCMGrabRedPacket() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMGrabRedPacket.Cmd,m_NAtagCMGrabRedPacket.SubCmd))] = m_NAtagCMGrabRedPacket | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # A5 56 守护升级 #tagCMGuardUp | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCMGuardUp(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ("GuardID", c_int),    # 守护物品id | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Cmd = 0xA5 | 
|---|
|  |  |  | self.SubCmd = 0x56 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, stringData, _pos=0, _len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | memmove(addressof(self), stringData[_pos:], self.GetLength()) | 
|---|
|  |  |  | return _pos + self.GetLength() | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Cmd = 0xA5 | 
|---|
|  |  |  | self.SubCmd = 0x56 | 
|---|
|  |  |  | self.GuardID = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagCMGuardUp) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''// A5 56 守护升级 //tagCMGuardUp: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s, | 
|---|
|  |  |  | GuardID:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | self.SubCmd, | 
|---|
|  |  |  | self.GuardID | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCMGuardUp=tagCMGuardUp() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMGuardUp.Cmd,m_NAtagCMGuardUp.SubCmd))] = m_NAtagCMGuardUp | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | #A5 37 天梯增加挑战次数#tagCMHighLadderAddCount | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCMHighLadderAddCount(Structure): | 
|---|
|  |  |  | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ("HorseID", c_ubyte),    #坐骑ID | 
|---|
|  |  |  | ("HorseID", c_int),    #坐骑ID | 
|---|
|  |  |  | ("UseItemCnt", c_ubyte),    #消耗材料个数 | 
|---|
|  |  |  | ("IsAutoBuy", c_ubyte),    #是否自动购买 | 
|---|
|  |  |  | ] | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCMHorseUp=tagCMHorseUp() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMHorseUp.Cmd,m_NAtagCMHorseUp.SubCmd))] = m_NAtagCMHorseUp | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # A5 5B 寻宝免费次数倒计时结束 #tagCMMagicTreasureFreeCnt | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCMMagicTreasureFreeCnt(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Cmd = 0xA5 | 
|---|
|  |  |  | self.SubCmd = 0x5B | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, stringData, _pos=0, _len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | memmove(addressof(self), stringData[_pos:], self.GetLength()) | 
|---|
|  |  |  | return _pos + self.GetLength() | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Cmd = 0xA5 | 
|---|
|  |  |  | self.SubCmd = 0x5B | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagCMMagicTreasureFreeCnt) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''// A5 5B 寻宝免费次数倒计时结束 //tagCMMagicTreasureFreeCnt: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | self.SubCmd | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCMMagicTreasureFreeCnt=tagCMMagicTreasureFreeCnt() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMMagicTreasureFreeCnt.Cmd,m_NAtagCMMagicTreasureFreeCnt.SubCmd))] = m_NAtagCMMagicTreasureFreeCnt | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | #A5 21 抽取图鉴卡片#tagCMMonsterCardLottery | 
|---|
|  |  |  | # A5 16 法宝状态记录 #tagCMMagicWeaponState | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCMMonsterCardLottery(Structure): | 
|---|
|  |  |  | class  tagCMMagicWeaponState(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ("Type", c_ubyte),    #抽奖类型  0 普通 1 高级 | 
|---|
|  |  |  | ("AutoBuy", c_ubyte),    #是否自动购买道具 | 
|---|
|  |  |  | ("MWID", c_int),    #法宝ID | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Cmd = 0xA5 | 
|---|
|  |  |  | self.SubCmd = 0x21 | 
|---|
|  |  |  | self.SubCmd = 0x16 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, stringData, _pos=0, _len=0): | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Cmd = 0xA5 | 
|---|
|  |  |  | self.SubCmd = 0x21 | 
|---|
|  |  |  | self.Type = 0 | 
|---|
|  |  |  | self.AutoBuy = 0 | 
|---|
|  |  |  | self.SubCmd = 0x16 | 
|---|
|  |  |  | self.MWID = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagCMMonsterCardLottery) | 
|---|
|  |  |  | return sizeof(tagCMMagicWeaponState) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''//A5 21 抽取图鉴卡片//tagCMMonsterCardLottery: | 
|---|
|  |  |  | DumpString = '''// A5 16 法宝状态记录 //tagCMMagicWeaponState: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s, | 
|---|
|  |  |  | Type:%d, | 
|---|
|  |  |  | AutoBuy:%d | 
|---|
|  |  |  | MWID:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | self.SubCmd, | 
|---|
|  |  |  | self.Type, | 
|---|
|  |  |  | self.AutoBuy | 
|---|
|  |  |  | self.MWID | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCMMonsterCardLottery=tagCMMonsterCardLottery() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMMonsterCardLottery.Cmd,m_NAtagCMMonsterCardLottery.SubCmd))] = m_NAtagCMMonsterCardLottery | 
|---|
|  |  |  | m_NAtagCMMagicWeaponState=tagCMMagicWeaponState() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMMagicWeaponState.Cmd,m_NAtagCMMagicWeaponState.SubCmd))] = m_NAtagCMMagicWeaponState | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # A5 15 提升法宝等级 #tagCMMagicWeaponUp | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCMMagicWeaponUp(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ("MWID", c_int),    #法宝ID | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Cmd = 0xA5 | 
|---|
|  |  |  | self.SubCmd = 0x15 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, stringData, _pos=0, _len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | memmove(addressof(self), stringData[_pos:], self.GetLength()) | 
|---|
|  |  |  | return _pos + self.GetLength() | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Cmd = 0xA5 | 
|---|
|  |  |  | self.SubCmd = 0x15 | 
|---|
|  |  |  | self.MWID = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagCMMagicWeaponUp) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''// A5 15 提升法宝等级 //tagCMMagicWeaponUp: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s, | 
|---|
|  |  |  | MWID:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | self.SubCmd, | 
|---|
|  |  |  | self.MWID | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCMMagicWeaponUp=tagCMMagicWeaponUp() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMMagicWeaponUp.Cmd,m_NAtagCMMagicWeaponUp.SubCmd))] = m_NAtagCMMagicWeaponUp | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ("Index", c_ubyte),    #选择索引 | 
|---|
|  |  |  | ("Index", c_int),    #选择索引 | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagPlayerChooseHorse=tagPlayerChooseHorse() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagPlayerChooseHorse.Cmd,m_NAtagPlayerChooseHorse.SubCmd))] = m_NAtagPlayerChooseHorse | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # A5 61 掷骰子 #tagCMPlayerDice | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCMPlayerDice(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Cmd = 0xA5 | 
|---|
|  |  |  | self.SubCmd = 0x61 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, stringData, _pos=0, _len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | memmove(addressof(self), stringData[_pos:], self.GetLength()) | 
|---|
|  |  |  | return _pos + self.GetLength() | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Cmd = 0xA5 | 
|---|
|  |  |  | self.SubCmd = 0x61 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagCMPlayerDice) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''// A5 61 掷骰子 //tagCMPlayerDice: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | self.SubCmd | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCMPlayerDice=tagCMPlayerDice() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMPlayerDice.Cmd,m_NAtagCMPlayerDice.SubCmd))] = m_NAtagCMPlayerDice | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | #A5 3A    新符文系统符文升级#tagCMPropEnhanceLVUp | 
|---|
|  |  |  | # A5 14 祈福丹药 #tagCMPrayElixir | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCMPropEnhanceLVUp(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ("index", c_ubyte),    #要升级的符文索引 (从0开始) | 
|---|
|  |  |  | ("count", c_ushort),    #连续升级次数 | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Cmd = 0xA5 | 
|---|
|  |  |  | self.SubCmd = 0x3A | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, stringData, _pos=0, _len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | memmove(addressof(self), stringData[_pos:], self.GetLength()) | 
|---|
|  |  |  | return _pos + self.GetLength() | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Cmd = 0xA5 | 
|---|
|  |  |  | self.SubCmd = 0x3A | 
|---|
|  |  |  | self.index = 0 | 
|---|
|  |  |  | self.count = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagCMPropEnhanceLVUp) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''//A5 3A    新符文系统符文升级//tagCMPropEnhanceLVUp: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s, | 
|---|
|  |  |  | index:%d, | 
|---|
|  |  |  | count:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | self.SubCmd, | 
|---|
|  |  |  | self.index, | 
|---|
|  |  |  | self.count | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCMPropEnhanceLVUp=tagCMPropEnhanceLVUp() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMPropEnhanceLVUp.Cmd,m_NAtagCMPropEnhanceLVUp.SubCmd))] = m_NAtagCMPropEnhanceLVUp | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | #A5 13 查询表情包开通状态#tagPyCMQueryFacePackage | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagPyCMQueryFacePackage(Structure): | 
|---|
|  |  |  | class  tagCMPrayElixir(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Cmd = 0xA5 | 
|---|
|  |  |  | self.SubCmd = 0x13 | 
|---|
|  |  |  | self.SubCmd = 0x14 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, stringData, _pos=0, _len=0): | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Cmd = 0xA5 | 
|---|
|  |  |  | self.SubCmd = 0x13 | 
|---|
|  |  |  | self.SubCmd = 0x14 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagPyCMQueryFacePackage) | 
|---|
|  |  |  | return sizeof(tagCMPrayElixir) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''//A5 13 查询表情包开通状态//tagPyCMQueryFacePackage: | 
|---|
|  |  |  | DumpString = '''// A5 14 祈福丹药 //tagCMPrayElixir: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagPyCMQueryFacePackage=tagPyCMQueryFacePackage() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagPyCMQueryFacePackage.Cmd,m_NAtagPyCMQueryFacePackage.SubCmd))] = m_NAtagPyCMQueryFacePackage | 
|---|
|  |  |  | m_NAtagCMPrayElixir=tagCMPrayElixir() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMPrayElixir.Cmd,m_NAtagCMPrayElixir.SubCmd))] = m_NAtagCMPrayElixir | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCMQueryOnlinePrizeInfo=tagCMQueryOnlinePrizeInfo() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMQueryOnlinePrizeInfo.Cmd,m_NAtagCMQueryOnlinePrizeInfo.SubCmd))] = m_NAtagCMQueryOnlinePrizeInfo | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | #A5 20 查询图鉴兑换点数#tagCMQueryPlayerMonsterCurrency | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCMQueryPlayerMonsterCurrency(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Cmd = 0xA5 | 
|---|
|  |  |  | self.SubCmd = 0x20 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, stringData, _pos=0, _len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | memmove(addressof(self), stringData[_pos:], self.GetLength()) | 
|---|
|  |  |  | return _pos + self.GetLength() | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Cmd = 0xA5 | 
|---|
|  |  |  | self.SubCmd = 0x20 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagCMQueryPlayerMonsterCurrency) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''//A5 20 查询图鉴兑换点数//tagCMQueryPlayerMonsterCurrency: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | self.SubCmd | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCMQueryPlayerMonsterCurrency=tagCMQueryPlayerMonsterCurrency() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMQueryPlayerMonsterCurrency.Cmd,m_NAtagCMQueryPlayerMonsterCurrency.SubCmd))] = m_NAtagCMQueryPlayerMonsterCurrency | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ("TreasureNum", c_ubyte),    # 自定义的寻宝编号 | 
|---|
|  |  |  | ("TreasureType", c_ubyte),    #寻宝类型 | 
|---|
|  |  |  | ("TreasureIndex", c_ubyte),    #寻宝索引 | 
|---|
|  |  |  | ("CostType", c_ubyte),    #消耗类型:0-默认仙玉;1-免费次数;2-寻宝道具 | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Cmd = 0xA5 | 
|---|
|  |  |  | self.SubCmd = 0x68 | 
|---|
|  |  |  | self.TreasureNum = 0 | 
|---|
|  |  |  | self.TreasureType = 0 | 
|---|
|  |  |  | self.TreasureIndex = 0 | 
|---|
|  |  |  | self.CostType = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | 
|---|
|  |  |  | DumpString = '''// A5 68 请求寻宝 //tagCMRequestTreasure: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s, | 
|---|
|  |  |  | TreasureNum:%d | 
|---|
|  |  |  | TreasureType:%d, | 
|---|
|  |  |  | TreasureIndex:%d, | 
|---|
|  |  |  | CostType:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | self.SubCmd, | 
|---|
|  |  |  | self.TreasureNum | 
|---|
|  |  |  | self.TreasureType, | 
|---|
|  |  |  | self.TreasureIndex, | 
|---|
|  |  |  | self.CostType | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | #A5 33 开始魔方寻宝 #tagCMMagicTreasure | 
|---|
|  |  |  | # A5 17 绑玉转盘开始 #tagCMStartBindJadeWheel | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCMMagicTreasure(Structure): | 
|---|
|  |  |  | class  tagCMStartBindJadeWheel(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ("Type", c_ubyte),    #寻宝类型 1玩家装备 2玩家首饰 3坐骑装备 | 
|---|
|  |  |  | ("Count", c_ubyte),    #寻宝次数 | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Cmd = 0xA5 | 
|---|
|  |  |  | self.SubCmd = 0x33 | 
|---|
|  |  |  | self.SubCmd = 0x17 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, stringData, _pos=0, _len=0): | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Cmd = 0xA5 | 
|---|
|  |  |  | self.SubCmd = 0x33 | 
|---|
|  |  |  | self.Type = 0 | 
|---|
|  |  |  | self.Count = 0 | 
|---|
|  |  |  | self.SubCmd = 0x17 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagCMMagicTreasure) | 
|---|
|  |  |  | return sizeof(tagCMStartBindJadeWheel) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''//A5 33 开始魔方寻宝 //tagCMMagicTreasure: | 
|---|
|  |  |  | DumpString = '''// A5 17 绑玉转盘开始 //tagCMStartBindJadeWheel: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s, | 
|---|
|  |  |  | Type:%d, | 
|---|
|  |  |  | Count:%d | 
|---|
|  |  |  | SubCmd:%s | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | self.SubCmd, | 
|---|
|  |  |  | self.Type, | 
|---|
|  |  |  | self.Count | 
|---|
|  |  |  | self.SubCmd | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCMMagicTreasure=tagCMMagicTreasure() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMMagicTreasure.Cmd,m_NAtagCMMagicTreasure.SubCmd))] = m_NAtagCMMagicTreasure | 
|---|
|  |  |  | m_NAtagCMStartBindJadeWheel=tagCMStartBindJadeWheel() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMStartBindJadeWheel.Cmd,m_NAtagCMStartBindJadeWheel.SubCmd))] = m_NAtagCMStartBindJadeWheel | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # A5 11 试用首充武器 #tagCMTryFirstGoldItem | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCMTryFirstGoldItem(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Cmd = 0xA5 | 
|---|
|  |  |  | 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 = 0xA5 | 
|---|
|  |  |  | self.SubCmd = 0x11 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagCMTryFirstGoldItem) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''// A5 11 试用首充武器 //tagCMTryFirstGoldItem: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | self.SubCmd | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCMTryFirstGoldItem=tagCMTryFirstGoldItem() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMTryFirstGoldItem.Cmd,m_NAtagCMTryFirstGoldItem.SubCmd))] = m_NAtagCMTryFirstGoldItem | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCMUnLockBirthChartHole=tagCMUnLockBirthChartHole() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMUnLockBirthChartHole.Cmd,m_NAtagCMUnLockBirthChartHole.SubCmd))] = m_NAtagCMUnLockBirthChartHole | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # A5 13 解锁符印孔 #tagCMUnlockRuneHole | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCMUnlockRuneHole(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ("HoleIndex", c_ubyte),    # 孔索引 | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Cmd = 0xA5 | 
|---|
|  |  |  | self.SubCmd = 0x13 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, stringData, _pos=0, _len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | memmove(addressof(self), stringData[_pos:], self.GetLength()) | 
|---|
|  |  |  | return _pos + self.GetLength() | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Cmd = 0xA5 | 
|---|
|  |  |  | self.SubCmd = 0x13 | 
|---|
|  |  |  | self.HoleIndex = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagCMUnlockRuneHole) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''// A5 13 解锁符印孔 //tagCMUnlockRuneHole: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s, | 
|---|
|  |  |  | HoleIndex:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | self.SubCmd, | 
|---|
|  |  |  | self.HoleIndex | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCMUnlockRuneHole=tagCMUnlockRuneHole() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMUnlockRuneHole.Cmd,m_NAtagCMUnlockRuneHole.SubCmd))] = m_NAtagCMUnlockRuneHole | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagUseNewGuyCard=tagUseNewGuyCard() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagUseNewGuyCard.Head.Cmd,m_NAtagUseNewGuyCard.Head.SubCmd))] = m_NAtagUseNewGuyCard | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # A5 1D 法宝佩戴 #tagCMWearMagicWeapon | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCMWearMagicWeapon(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ("MWID", c_int),    #法宝ID | 
|---|
|  |  |  | ("State", c_ubyte),    #0-卸下 1-佩戴 | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Cmd = 0xA5 | 
|---|
|  |  |  | self.SubCmd = 0x1D | 
|---|
|  |  |  | 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 = 0x1D | 
|---|
|  |  |  | self.MWID = 0 | 
|---|
|  |  |  | self.State = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagCMWearMagicWeapon) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''// A5 1D 法宝佩戴 //tagCMWearMagicWeapon: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s, | 
|---|
|  |  |  | MWID:%d, | 
|---|
|  |  |  | State:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | self.SubCmd, | 
|---|
|  |  |  | self.MWID, | 
|---|
|  |  |  | self.State | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCMWearMagicWeapon=tagCMWearMagicWeapon() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMWearMagicWeapon.Cmd,m_NAtagCMWearMagicWeapon.SubCmd))] = m_NAtagCMWearMagicWeapon | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # A7 03 宠物精华分解 #tagCMPetAddClassExp | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCMPetAddClassExp(Structure): | 
|---|
|  |  |  | Head = tagHead() | 
|---|
|  |  |  | IndexCnt = 0    #(WORD IndexCnt)//被吞噬经验物品索引个数 | 
|---|
|  |  |  | IndexList = list()    #(vector<WORD> IndexList)// 被吞噬经验物品所在背包索引列表 | 
|---|
|  |  |  | data = None | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Head.Cmd = 0xA7 | 
|---|
|  |  |  | self.Head.SubCmd = 0x03 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, _lpData, _pos=0, _Len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | _pos = self.Head.ReadData(_lpData, _pos) | 
|---|
|  |  |  | self.IndexCnt,_pos = CommFunc.ReadWORD(_lpData, _pos) | 
|---|
|  |  |  | for i in range(self.IndexCnt): | 
|---|
|  |  |  | value,_pos=CommFunc.ReadWORD(_lpData,_pos) | 
|---|
|  |  |  | self.IndexList.append(value) | 
|---|
|  |  |  | return _pos | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Head = tagHead() | 
|---|
|  |  |  | self.Head.Clear() | 
|---|
|  |  |  | self.Head.Cmd = 0xA7 | 
|---|
|  |  |  | self.Head.SubCmd = 0x03 | 
|---|
|  |  |  | self.IndexCnt = 0 | 
|---|
|  |  |  | self.IndexList = list() | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | length = 0 | 
|---|
|  |  |  | length += self.Head.GetLength() | 
|---|
|  |  |  | length += 2 | 
|---|
|  |  |  | length += 2 * self.IndexCnt | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return length | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | data = '' | 
|---|
|  |  |  | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) | 
|---|
|  |  |  | data = CommFunc.WriteWORD(data, self.IndexCnt) | 
|---|
|  |  |  | for i in range(self.IndexCnt): | 
|---|
|  |  |  | data = CommFunc.WriteWORD(data, self.IndexList[i]) | 
|---|
|  |  |  | return data | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = ''' | 
|---|
|  |  |  | Head:%s, | 
|---|
|  |  |  | IndexCnt:%d, | 
|---|
|  |  |  | IndexList:%s | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Head.OutputString(), | 
|---|
|  |  |  | self.IndexCnt, | 
|---|
|  |  |  | "..." | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCMPetAddClassExp=tagCMPetAddClassExp() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMPetAddClassExp.Head.Cmd,m_NAtagCMPetAddClassExp.Head.SubCmd))] = m_NAtagCMPetAddClassExp | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # A7 04 宠物升阶 #tagCMPetClassUP | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCMPetClassUP(Structure): | 
|---|
|  |  |  | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ("PetItemIndex", c_ubyte),    #宠物数据背包索引 | 
|---|
|  |  |  | ("UseItemCnt", c_ushort),    #消耗材料个数 | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | 
|---|
|  |  |  | self.Cmd = 0xA7 | 
|---|
|  |  |  | self.SubCmd = 0x04 | 
|---|
|  |  |  | self.PetItemIndex = 0 | 
|---|
|  |  |  | self.UseItemCnt = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | 
|---|
|  |  |  | DumpString = '''// A7 04 宠物升阶 //tagCMPetClassUP: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s, | 
|---|
|  |  |  | PetItemIndex:%d | 
|---|
|  |  |  | PetItemIndex:%d, | 
|---|
|  |  |  | UseItemCnt:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | self.SubCmd, | 
|---|
|  |  |  | self.PetItemIndex | 
|---|
|  |  |  | self.PetItemIndex, | 
|---|
|  |  |  | self.UseItemCnt | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCMPetClassUP=tagCMPetClassUP() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMPetClassUP.Cmd,m_NAtagCMPetClassUP.SubCmd))] = m_NAtagCMPetClassUP | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # A7 01 灵兽装备吸收 #tagCMPetEatEquip | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCMPetEatEquip(Structure): | 
|---|
|  |  |  | Head = tagHead() | 
|---|
|  |  |  | IndexCnt = 0    #(WORD IndexCnt)//被吞噬经验物品索引个数 | 
|---|
|  |  |  | IndexList = list()    #(vector<WORD> IndexList)// 被吞噬经验物品所在背包索引列表 | 
|---|
|  |  |  | data = None | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Head.Cmd = 0xA7 | 
|---|
|  |  |  | self.Head.SubCmd = 0x01 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, _lpData, _pos=0, _Len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | _pos = self.Head.ReadData(_lpData, _pos) | 
|---|
|  |  |  | self.IndexCnt,_pos = CommFunc.ReadWORD(_lpData, _pos) | 
|---|
|  |  |  | for i in range(self.IndexCnt): | 
|---|
|  |  |  | value,_pos=CommFunc.ReadWORD(_lpData,_pos) | 
|---|
|  |  |  | self.IndexList.append(value) | 
|---|
|  |  |  | return _pos | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Head = tagHead() | 
|---|
|  |  |  | self.Head.Clear() | 
|---|
|  |  |  | self.Head.Cmd = 0xA7 | 
|---|
|  |  |  | self.Head.SubCmd = 0x01 | 
|---|
|  |  |  | self.IndexCnt = 0 | 
|---|
|  |  |  | self.IndexList = list() | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | length = 0 | 
|---|
|  |  |  | length += self.Head.GetLength() | 
|---|
|  |  |  | length += 2 | 
|---|
|  |  |  | length += 2 * self.IndexCnt | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return length | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | data = '' | 
|---|
|  |  |  | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) | 
|---|
|  |  |  | data = CommFunc.WriteWORD(data, self.IndexCnt) | 
|---|
|  |  |  | for i in range(self.IndexCnt): | 
|---|
|  |  |  | data = CommFunc.WriteWORD(data, self.IndexList[i]) | 
|---|
|  |  |  | return data | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = ''' | 
|---|
|  |  |  | Head:%s, | 
|---|
|  |  |  | IndexCnt:%d, | 
|---|
|  |  |  | IndexList:%s | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Head.OutputString(), | 
|---|
|  |  |  | self.IndexCnt, | 
|---|
|  |  |  | "..." | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCMPetEatEquip=tagCMPetEatEquip() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMPetEatEquip.Head.Cmd,m_NAtagCMPetEatEquip.Head.SubCmd))] = m_NAtagCMPetEatEquip | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # A7 05 宠物设置数据 #tagCMPetSeting | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCMPetSeting(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ("Seting", c_int), | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Cmd = 0xA7 | 
|---|
|  |  |  | self.SubCmd = 0x05 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, stringData, _pos=0, _len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | memmove(addressof(self), stringData[_pos:], self.GetLength()) | 
|---|
|  |  |  | return _pos + self.GetLength() | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Cmd = 0xA7 | 
|---|
|  |  |  | self.SubCmd = 0x05 | 
|---|
|  |  |  | self.Seting = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagCMPetSeting) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''// A7 05 宠物设置数据 //tagCMPetSeting: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s, | 
|---|
|  |  |  | Seting:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | self.SubCmd, | 
|---|
|  |  |  | self.Seting | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCMPetSeting=tagCMPetSeting() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMPetSeting.Cmd,m_NAtagCMPetSeting.SubCmd))] = m_NAtagCMPetSeting | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCMVIPKillNPCLVInfoSwitch=tagCMVIPKillNPCLVInfoSwitch() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMVIPKillNPCLVInfoSwitch.Cmd,m_NAtagCMVIPKillNPCLVInfoSwitch.SubCmd))] = m_NAtagCMVIPKillNPCLVInfoSwitch | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # AA 07 许愿池活动刷新奖池 #tagCMActWishingRefresh | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCMActWishingRefresh(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ("IsFree", c_ubyte),    # 是否免费刷新 | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Cmd = 0xAA | 
|---|
|  |  |  | 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 = 0xAA | 
|---|
|  |  |  | self.SubCmd = 0x07 | 
|---|
|  |  |  | self.IsFree = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagCMActWishingRefresh) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''// AA 07 许愿池活动刷新奖池 //tagCMActWishingRefresh: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s, | 
|---|
|  |  |  | IsFree:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | self.SubCmd, | 
|---|
|  |  |  | self.IsFree | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCMActWishingRefresh=tagCMActWishingRefresh() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActWishingRefresh.Cmd,m_NAtagCMActWishingRefresh.SubCmd))] = m_NAtagCMActWishingRefresh | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # AA 06 许愿池活动许愿 #tagCMActWishing | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCMActWishing(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ("SrcWellType", c_ubyte),    # 来源库 0-可选库 1-结果库 | 
|---|
|  |  |  | ("SrcIndex", c_ubyte),    # 来源索引 | 
|---|
|  |  |  | ("DesWellType", c_ubyte),    # 目标库 0-可选库 1-结果库 | 
|---|
|  |  |  | ("DesIndex", c_ubyte),    # 目标索引 | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Cmd = 0xAA | 
|---|
|  |  |  | self.SubCmd = 0x06 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, stringData, _pos=0, _len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | memmove(addressof(self), stringData[_pos:], self.GetLength()) | 
|---|
|  |  |  | return _pos + self.GetLength() | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Cmd = 0xAA | 
|---|
|  |  |  | self.SubCmd = 0x06 | 
|---|
|  |  |  | self.SrcWellType = 0 | 
|---|
|  |  |  | self.SrcIndex = 0 | 
|---|
|  |  |  | self.DesWellType = 0 | 
|---|
|  |  |  | self.DesIndex = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagCMActWishing) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''// AA 06 许愿池活动许愿 //tagCMActWishing: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s, | 
|---|
|  |  |  | SrcWellType:%d, | 
|---|
|  |  |  | SrcIndex:%d, | 
|---|
|  |  |  | DesWellType:%d, | 
|---|
|  |  |  | DesIndex:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | self.SubCmd, | 
|---|
|  |  |  | self.SrcWellType, | 
|---|
|  |  |  | self.SrcIndex, | 
|---|
|  |  |  | self.DesWellType, | 
|---|
|  |  |  | self.DesIndex | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCMActWishing=tagCMActWishing() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActWishing.Cmd,m_NAtagCMActWishing.SubCmd))] = m_NAtagCMActWishing | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # AA 05 限时抢购预约 #tagCMFlashSaleAppointment | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCMFlashSaleAppointment(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ("GoodsID", c_int),    # 抢购商品标识 | 
|---|
|  |  |  | ("State", c_ubyte),    # 1-预约 0-取消 | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Cmd = 0xAA | 
|---|
|  |  |  | 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 = 0xAA | 
|---|
|  |  |  | self.SubCmd = 0x05 | 
|---|
|  |  |  | self.GoodsID = 0 | 
|---|
|  |  |  | self.State = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagCMFlashSaleAppointment) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''// AA 05 限时抢购预约 //tagCMFlashSaleAppointment: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s, | 
|---|
|  |  |  | GoodsID:%d, | 
|---|
|  |  |  | State:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | self.SubCmd, | 
|---|
|  |  |  | self.GoodsID, | 
|---|
|  |  |  | self.State | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCMFlashSaleAppointment=tagCMFlashSaleAppointment() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMFlashSaleAppointment.Cmd,m_NAtagCMFlashSaleAppointment.SubCmd))] = m_NAtagCMFlashSaleAppointment | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | #AB 13 嘉年华抽奖 #tagCMCarnivalDraw | 
|---|
|  |  |  | # AB 12 抢红包 #tagCMGrabFamilyRedPacket | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCMCarnivalDraw(Structure): | 
|---|
|  |  |  | class  tagCMGrabFamilyRedPacket(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ("Index", c_ubyte),    # 抽奖索引 | 
|---|
|  |  |  | ("Type", c_ubyte),    # 抽奖类型 0:只获取结果,1:获取奖励,2:获取结果和奖励 | 
|---|
|  |  |  | ("RedPaketID", c_int),    # 红包ID | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Cmd = 0xAB | 
|---|
|  |  |  | self.SubCmd = 0x13 | 
|---|
|  |  |  | self.SubCmd = 0x12 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, stringData, _pos=0, _len=0): | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Cmd = 0xAB | 
|---|
|  |  |  | self.SubCmd = 0x13 | 
|---|
|  |  |  | self.Index = 0 | 
|---|
|  |  |  | self.Type = 0 | 
|---|
|  |  |  | self.SubCmd = 0x12 | 
|---|
|  |  |  | self.RedPaketID = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagCMCarnivalDraw) | 
|---|
|  |  |  | return sizeof(tagCMGrabFamilyRedPacket) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''//AB 13 嘉年华抽奖 //tagCMCarnivalDraw: | 
|---|
|  |  |  | DumpString = '''// AB 12 抢红包 //tagCMGrabFamilyRedPacket: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s, | 
|---|
|  |  |  | Index:%d, | 
|---|
|  |  |  | Type:%d | 
|---|
|  |  |  | RedPaketID:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | self.SubCmd, | 
|---|
|  |  |  | self.Index, | 
|---|
|  |  |  | self.Type | 
|---|
|  |  |  | self.RedPaketID | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCMCarnivalDraw=tagCMCarnivalDraw() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMCarnivalDraw.Cmd,m_NAtagCMCarnivalDraw.SubCmd))] = m_NAtagCMCarnivalDraw | 
|---|
|  |  |  | m_NAtagCMGrabFamilyRedPacket=tagCMGrabFamilyRedPacket() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMGrabFamilyRedPacket.Cmd,m_NAtagCMGrabFamilyRedPacket.SubCmd))] = m_NAtagCMGrabFamilyRedPacket | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # AB 09 老虎机抽奖 #tagCMSlotsTake | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCMSlotsTake(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ("Type", c_ubyte),    # 老虎机类型 | 
|---|
|  |  |  | ("Num", c_int),    # 抽奖次数 | 
|---|
|  |  |  | ("IsAutoBuy", c_ubyte),    # 是否自动购买材料 0-否 1-是 | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Cmd = 0xAB | 
|---|
|  |  |  | self.SubCmd = 0x09 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, stringData, _pos=0, _len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | memmove(addressof(self), stringData[_pos:], self.GetLength()) | 
|---|
|  |  |  | return _pos + self.GetLength() | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Cmd = 0xAB | 
|---|
|  |  |  | self.SubCmd = 0x09 | 
|---|
|  |  |  | self.Type = 0 | 
|---|
|  |  |  | self.Num = 0 | 
|---|
|  |  |  | self.IsAutoBuy = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagCMSlotsTake) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''// AB 09 老虎机抽奖 //tagCMSlotsTake: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s, | 
|---|
|  |  |  | Type:%d, | 
|---|
|  |  |  | Num:%d, | 
|---|
|  |  |  | IsAutoBuy:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | self.SubCmd, | 
|---|
|  |  |  | self.Type, | 
|---|
|  |  |  | self.Num, | 
|---|
|  |  |  | self.IsAutoBuy | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCMSlotsTake=tagCMSlotsTake() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMSlotsTake.Cmd,m_NAtagCMSlotsTake.SubCmd))] = m_NAtagCMSlotsTake | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # AB 0C 摇骰子 #tagCMDiceEx | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCMDiceEx(Structure): | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCMDiceEx=tagCMDiceEx() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMDiceEx.Cmd,m_NAtagCMDiceEx.SubCmd))] = m_NAtagCMDiceEx | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # AB 08 许愿 #tagCMWishingTree | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCMWishingTree(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Cmd = 0xAB | 
|---|
|  |  |  | self.SubCmd = 0x08 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, stringData, _pos=0, _len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | memmove(addressof(self), stringData[_pos:], self.GetLength()) | 
|---|
|  |  |  | return _pos + self.GetLength() | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Cmd = 0xAB | 
|---|
|  |  |  | self.SubCmd = 0x08 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagCMWishingTree) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''// AB 08 许愿 //tagCMWishingTree: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | self.SubCmd | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCMWishingTree=tagCMWishingTree() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMWishingTree.Cmd,m_NAtagCMWishingTree.SubCmd))] = m_NAtagCMWishingTree | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | #B0 12 开始转转乐 #tagBeginGambling | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagBeginGambling(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Cmd = 0xB0 | 
|---|
|  |  |  | self.SubCmd = 0x12 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, stringData, _pos=0, _len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | memmove(addressof(self), stringData[_pos:], self.GetLength()) | 
|---|
|  |  |  | return _pos + self.GetLength() | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Cmd = 0xB0 | 
|---|
|  |  |  | self.SubCmd = 0x12 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagBeginGambling) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''//B0 12 开始转转乐 //tagBeginGambling: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | self.SubCmd | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagBeginGambling=tagBeginGambling() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagBeginGambling.Cmd,m_NAtagBeginGambling.SubCmd))] = m_NAtagBeginGambling | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | #B0 13 转转乐商人升级 #tagGamblingMerchantLvUp | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagGamblingMerchantLvUp(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Cmd = 0xB0 | 
|---|
|  |  |  | self.SubCmd = 0x13 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, stringData, _pos=0, _len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | memmove(addressof(self), stringData[_pos:], self.GetLength()) | 
|---|
|  |  |  | return _pos + self.GetLength() | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Cmd = 0xB0 | 
|---|
|  |  |  | self.SubCmd = 0x13 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagGamblingMerchantLvUp) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''//B0 13 转转乐商人升级 //tagGamblingMerchantLvUp: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | self.SubCmd | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagGamblingMerchantLvUp=tagGamblingMerchantLvUp() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGamblingMerchantLvUp.Cmd,m_NAtagGamblingMerchantLvUp.SubCmd))] = m_NAtagGamblingMerchantLvUp | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | #B0 14 转转乐换盘 #tagGamblingDiskChange | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagGamblingDiskChange(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Cmd = 0xB0 | 
|---|
|  |  |  | self.SubCmd = 0x14 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, stringData, _pos=0, _len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | memmove(addressof(self), stringData[_pos:], self.GetLength()) | 
|---|
|  |  |  | return _pos + self.GetLength() | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Cmd = 0xB0 | 
|---|
|  |  |  | self.SubCmd = 0x14 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagGamblingDiskChange) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''//B0 14 转转乐换盘 //tagGamblingDiskChange: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | self.SubCmd | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagGamblingDiskChange=tagGamblingDiskChange() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGamblingDiskChange.Cmd,m_NAtagGamblingDiskChange.SubCmd))] = m_NAtagGamblingDiskChange | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # B0 50 钓鱼收杆 #tagCMDoFish | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCMDoFish(Structure): | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # B1 04 客户端发送开始副本 #tagCMClientStartFB | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCMClientStartFB(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Cmd = 0xB1 | 
|---|
|  |  |  | self.SubCmd = 0x04 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, stringData, _pos=0, _len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | memmove(addressof(self), stringData[_pos:], self.GetLength()) | 
|---|
|  |  |  | return _pos + self.GetLength() | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Cmd = 0xB1 | 
|---|
|  |  |  | self.SubCmd = 0x04 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagCMClientStartFB) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''// B1 04 客户端发送开始副本 //tagCMClientStartFB: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | self.SubCmd | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCMClientStartFB=tagCMClientStartFB() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMClientStartFB.Cmd,m_NAtagCMClientStartFB.SubCmd))] = m_NAtagCMClientStartFB | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # B1 06 助战召唤 #tagCMHelpBattleCall | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCMHelpBattleCall(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ("IsOneKeyCall", c_ubyte),    # 是否一键召唤 | 
|---|
|  |  |  | ("PlayerID", c_int),    # 召唤的玩家ID,大于1小于100代表机器人 | 
|---|
|  |  |  | ("IsGoldCall", c_ubyte),    # 是否仙玉召唤 | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Cmd = 0xB1 | 
|---|
|  |  |  | self.SubCmd = 0x06 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, stringData, _pos=0, _len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | memmove(addressof(self), stringData[_pos:], self.GetLength()) | 
|---|
|  |  |  | return _pos + self.GetLength() | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Cmd = 0xB1 | 
|---|
|  |  |  | self.SubCmd = 0x06 | 
|---|
|  |  |  | self.IsOneKeyCall = 0 | 
|---|
|  |  |  | self.PlayerID = 0 | 
|---|
|  |  |  | self.IsGoldCall = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagCMHelpBattleCall) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''// B1 06 助战召唤 //tagCMHelpBattleCall: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s, | 
|---|
|  |  |  | IsOneKeyCall:%d, | 
|---|
|  |  |  | PlayerID:%d, | 
|---|
|  |  |  | IsGoldCall:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | self.SubCmd, | 
|---|
|  |  |  | self.IsOneKeyCall, | 
|---|
|  |  |  | self.PlayerID, | 
|---|
|  |  |  | self.IsGoldCall | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCMHelpBattleCall=tagCMHelpBattleCall() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMHelpBattleCall.Cmd,m_NAtagCMHelpBattleCall.SubCmd))] = m_NAtagCMHelpBattleCall | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # B1 05 助战登记 #tagCMHelpBattleCheckIn | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCMHelpBattleCheckIn(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Cmd = 0xB1 | 
|---|
|  |  |  | 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 = 0xB1 | 
|---|
|  |  |  | self.SubCmd = 0x05 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagCMHelpBattleCheckIn) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''// B1 05 助战登记 //tagCMHelpBattleCheckIn: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | self.SubCmd | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCMHelpBattleCheckIn=tagCMHelpBattleCheckIn() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMHelpBattleCheckIn.Cmd,m_NAtagCMHelpBattleCheckIn.SubCmd))] = m_NAtagCMHelpBattleCheckIn | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # B1 07 助战刷新 #tagCMHelpBattleRefresh | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCMHelpBattleRefresh(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Cmd = 0xB1 | 
|---|
|  |  |  | 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 = 0xB1 | 
|---|
|  |  |  | self.SubCmd = 0x07 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagCMHelpBattleRefresh) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''// B1 07 助战刷新 //tagCMHelpBattleRefresh: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | self.SubCmd | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCMHelpBattleRefresh=tagCMHelpBattleRefresh() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMHelpBattleRefresh.Cmd,m_NAtagCMHelpBattleRefresh.SubCmd))] = m_NAtagCMHelpBattleRefresh | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # B1 02 领取多倍副本奖励 #tagCMGetMultiFBPrize | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCMGetMultiFBPrize(Structure): | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCMLoginState=tagCMLoginState() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMLoginState.Cmd,m_NAtagCMLoginState.SubCmd))] = m_NAtagCMLoginState | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | #B2 05 推送提醒设置 #tagCMPushNotificationsSetting | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCMPushNotificationsSetting(Structure): | 
|---|
|  |  |  | Head = tagHead() | 
|---|
|  |  |  | OnoffBit = 0    #(DWORD OnoffBit)// 按位约定开关 | 
|---|
|  |  |  | TimeLen = 0    #(BYTE TimeLen) | 
|---|
|  |  |  | TimeStr = ""    #(String TimeStr)// 时间字符串  01:02-05:00 | 
|---|
|  |  |  | data = None | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Head.Cmd = 0xB2 | 
|---|
|  |  |  | self.Head.SubCmd = 0x05 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, _lpData, _pos=0, _Len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | _pos = self.Head.ReadData(_lpData, _pos) | 
|---|
|  |  |  | self.OnoffBit,_pos = CommFunc.ReadDWORD(_lpData, _pos) | 
|---|
|  |  |  | self.TimeLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) | 
|---|
|  |  |  | self.TimeStr,_pos = CommFunc.ReadString(_lpData, _pos,self.TimeLen) | 
|---|
|  |  |  | return _pos | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Head = tagHead() | 
|---|
|  |  |  | self.Head.Clear() | 
|---|
|  |  |  | self.Head.Cmd = 0xB2 | 
|---|
|  |  |  | self.Head.SubCmd = 0x05 | 
|---|
|  |  |  | self.OnoffBit = 0 | 
|---|
|  |  |  | self.TimeLen = 0 | 
|---|
|  |  |  | self.TimeStr = "" | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | length = 0 | 
|---|
|  |  |  | length += self.Head.GetLength() | 
|---|
|  |  |  | length += 4 | 
|---|
|  |  |  | length += 1 | 
|---|
|  |  |  | length += len(self.TimeStr) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return length | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | data = '' | 
|---|
|  |  |  | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) | 
|---|
|  |  |  | data = CommFunc.WriteDWORD(data, self.OnoffBit) | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.TimeLen) | 
|---|
|  |  |  | data = CommFunc.WriteString(data, self.TimeLen, self.TimeStr) | 
|---|
|  |  |  | return data | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = ''' | 
|---|
|  |  |  | Head:%s, | 
|---|
|  |  |  | OnoffBit:%d, | 
|---|
|  |  |  | TimeLen:%d, | 
|---|
|  |  |  | TimeStr:%s | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Head.OutputString(), | 
|---|
|  |  |  | self.OnoffBit, | 
|---|
|  |  |  | self.TimeLen, | 
|---|
|  |  |  | self.TimeStr | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCMPushNotificationsSetting=tagCMPushNotificationsSetting() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMPushNotificationsSetting.Head.Cmd,m_NAtagCMPushNotificationsSetting.Head.SubCmd))] = m_NAtagCMPushNotificationsSetting | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | #C1 03 领取奖励表奖励 #tagMSGetReward | 
|---|
|  |  |  | # C1 02 跨服PK购买次数 #tagCMCrossRealmPKBuy | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagMSGetReward(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ("RewardType", c_ubyte),    #奖励表奖励类型 | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Cmd = 0xC1 | 
|---|
|  |  |  | self.SubCmd = 0x03 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, stringData, _pos=0, _len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | memmove(addressof(self), stringData[_pos:], self.GetLength()) | 
|---|
|  |  |  | return _pos + self.GetLength() | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Cmd = 0xC1 | 
|---|
|  |  |  | self.SubCmd = 0x03 | 
|---|
|  |  |  | self.RewardType = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagMSGetReward) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''//C1 03 领取奖励表奖励 //tagMSGetReward: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s, | 
|---|
|  |  |  | RewardType:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | self.SubCmd, | 
|---|
|  |  |  | self.RewardType | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagMSGetReward=tagMSGetReward() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMSGetReward.Cmd,m_NAtagMSGetReward.SubCmd))] = m_NAtagMSGetReward | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | #C1 08 玩家执行膜拜 #tagPlayerMergeWorship | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagPlayerMergeWorship(Structure): | 
|---|
|  |  |  | class  tagCMCrossRealmPKBuy(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Cmd = 0xC1 | 
|---|
|  |  |  | self.SubCmd = 0x08 | 
|---|
|  |  |  | self.SubCmd = 0x02 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, stringData, _pos=0, _len=0): | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Cmd = 0xC1 | 
|---|
|  |  |  | self.SubCmd = 0x08 | 
|---|
|  |  |  | self.SubCmd = 0x02 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagPlayerMergeWorship) | 
|---|
|  |  |  | return sizeof(tagCMCrossRealmPKBuy) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''//C1 08 玩家执行膜拜 //tagPlayerMergeWorship: | 
|---|
|  |  |  | DumpString = '''// C1 02 跨服PK购买次数 //tagCMCrossRealmPKBuy: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagPlayerMergeWorship=tagPlayerMergeWorship() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagPlayerMergeWorship.Cmd,m_NAtagPlayerMergeWorship.SubCmd))] = m_NAtagPlayerMergeWorship | 
|---|
|  |  |  | m_NAtagCMCrossRealmPKBuy=tagCMCrossRealmPKBuy() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMCrossRealmPKBuy.Cmd,m_NAtagCMCrossRealmPKBuy.SubCmd))] = m_NAtagCMCrossRealmPKBuy | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # C1 11 跨服王者争霸押注 #tagCMMergeKingSupport | 
|---|
|  |  |  | # C1 03 跨服PK领取奖励 #tagCMCrossRealmPKGetAward | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCMMergeKingSupport(Structure): | 
|---|
|  |  |  | Head = tagHead() | 
|---|
|  |  |  | SupportType = 0    #(BYTE SupportType)// 0-押注; 1-贿赂 | 
|---|
|  |  |  | GroupType = 0    #(BYTE GroupType)// 组类型;如32强、16强等 | 
|---|
|  |  |  | BattleIndex = 0    #(BYTE BattleIndex)// 对战组索引,每种组类型的索引从1开始 | 
|---|
|  |  |  | MoneyType = 0    #(BYTE MoneyType)// 押注的货币类型 | 
|---|
|  |  |  | AccIDLen = 0    #(BYTE AccIDLen) | 
|---|
|  |  |  | TagAccID = ""    #(String TagAccID)// 支持的目标账号 | 
|---|
|  |  |  | data = None | 
|---|
|  |  |  | class  tagCMCrossRealmPKGetAward(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ("AwardType", c_ubyte),    # 奖励类型;1-每日匹配奖励,2-每日胜利奖励,3-段位达标奖励,4-赛季结算奖励 | 
|---|
|  |  |  | ("AwardData", c_ubyte),    # 奖励类型对应领取值;每日匹配奖励时为匹配次数,每日胜利奖励时为胜利次数,段位达标奖励时为领取的段位 | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Head.Cmd = 0xC1 | 
|---|
|  |  |  | self.Head.SubCmd = 0x11 | 
|---|
|  |  |  | self.Cmd = 0xC1 | 
|---|
|  |  |  | self.SubCmd = 0x03 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, _lpData, _pos=0, _Len=0): | 
|---|
|  |  |  | def ReadData(self, stringData, _pos=0, _len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | _pos = self.Head.ReadData(_lpData, _pos) | 
|---|
|  |  |  | self.SupportType,_pos = CommFunc.ReadBYTE(_lpData, _pos) | 
|---|
|  |  |  | self.GroupType,_pos = CommFunc.ReadBYTE(_lpData, _pos) | 
|---|
|  |  |  | self.BattleIndex,_pos = CommFunc.ReadBYTE(_lpData, _pos) | 
|---|
|  |  |  | self.MoneyType,_pos = CommFunc.ReadBYTE(_lpData, _pos) | 
|---|
|  |  |  | self.AccIDLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) | 
|---|
|  |  |  | self.TagAccID,_pos = CommFunc.ReadString(_lpData, _pos,self.AccIDLen) | 
|---|
|  |  |  | return _pos | 
|---|
|  |  |  | memmove(addressof(self), stringData[_pos:], self.GetLength()) | 
|---|
|  |  |  | return _pos + self.GetLength() | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Head = tagHead() | 
|---|
|  |  |  | self.Head.Clear() | 
|---|
|  |  |  | self.Head.Cmd = 0xC1 | 
|---|
|  |  |  | self.Head.SubCmd = 0x11 | 
|---|
|  |  |  | self.SupportType = 0 | 
|---|
|  |  |  | self.GroupType = 0 | 
|---|
|  |  |  | self.BattleIndex = 0 | 
|---|
|  |  |  | self.MoneyType = 0 | 
|---|
|  |  |  | self.AccIDLen = 0 | 
|---|
|  |  |  | self.TagAccID = "" | 
|---|
|  |  |  | self.Cmd = 0xC1 | 
|---|
|  |  |  | self.SubCmd = 0x03 | 
|---|
|  |  |  | self.AwardType = 0 | 
|---|
|  |  |  | self.AwardData = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | length = 0 | 
|---|
|  |  |  | length += self.Head.GetLength() | 
|---|
|  |  |  | length += 1 | 
|---|
|  |  |  | length += 1 | 
|---|
|  |  |  | length += 1 | 
|---|
|  |  |  | length += 1 | 
|---|
|  |  |  | length += 1 | 
|---|
|  |  |  | length += len(self.TagAccID) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return length | 
|---|
|  |  |  | return sizeof(tagCMCrossRealmPKGetAward) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | data = '' | 
|---|
|  |  |  | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.SupportType) | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.GroupType) | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.BattleIndex) | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.MoneyType) | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.AccIDLen) | 
|---|
|  |  |  | data = CommFunc.WriteString(data, self.AccIDLen, self.TagAccID) | 
|---|
|  |  |  | return data | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = ''' | 
|---|
|  |  |  | Head:%s, | 
|---|
|  |  |  | SupportType:%d, | 
|---|
|  |  |  | GroupType:%d, | 
|---|
|  |  |  | BattleIndex:%d, | 
|---|
|  |  |  | MoneyType:%d, | 
|---|
|  |  |  | AccIDLen:%d, | 
|---|
|  |  |  | TagAccID:%s | 
|---|
|  |  |  | DumpString = '''// C1 03 跨服PK领取奖励 //tagCMCrossRealmPKGetAward: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s, | 
|---|
|  |  |  | AwardType:%d, | 
|---|
|  |  |  | AwardData:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Head.OutputString(), | 
|---|
|  |  |  | self.SupportType, | 
|---|
|  |  |  | self.GroupType, | 
|---|
|  |  |  | self.BattleIndex, | 
|---|
|  |  |  | self.MoneyType, | 
|---|
|  |  |  | self.AccIDLen, | 
|---|
|  |  |  | self.TagAccID | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | self.SubCmd, | 
|---|
|  |  |  | self.AwardType, | 
|---|
|  |  |  | self.AwardData | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCMMergeKingSupport=tagCMMergeKingSupport() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMMergeKingSupport.Head.Cmd,m_NAtagCMMergeKingSupport.Head.SubCmd))] = m_NAtagCMMergeKingSupport | 
|---|
|  |  |  | m_NAtagCMCrossRealmPKGetAward=tagCMCrossRealmPKGetAward() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMCrossRealmPKGetAward.Cmd,m_NAtagCMCrossRealmPKGetAward.SubCmd))] = m_NAtagCMCrossRealmPKGetAward | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # C1 09 跨服PK匹配 #tagCMMergePKMatch | 
|---|
|  |  |  | # C1 01 跨服PK匹配 #tagCMCrossRealmPKMatch | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCMMergePKMatch(Structure): | 
|---|
|  |  |  | class  tagCMCrossRealmPKMatch(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Cmd = 0xC1 | 
|---|
|  |  |  | self.SubCmd = 0x09 | 
|---|
|  |  |  | self.SubCmd = 0x01 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, stringData, _pos=0, _len=0): | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Cmd = 0xC1 | 
|---|
|  |  |  | self.SubCmd = 0x09 | 
|---|
|  |  |  | self.SubCmd = 0x01 | 
|---|
|  |  |  | self.Type = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagCMMergePKMatch) | 
|---|
|  |  |  | return sizeof(tagCMCrossRealmPKMatch) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''// C1 09 跨服PK匹配 //tagCMMergePKMatch: | 
|---|
|  |  |  | DumpString = '''// C1 01 跨服PK匹配 //tagCMCrossRealmPKMatch: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s, | 
|---|
|  |  |  | Type:%d | 
|---|
|  |  |  | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCMMergePKMatch=tagCMMergePKMatch() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMMergePKMatch.Cmd,m_NAtagCMMergePKMatch.SubCmd))] = m_NAtagCMMergePKMatch | 
|---|
|  |  |  | m_NAtagCMCrossRealmPKMatch=tagCMCrossRealmPKMatch() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMCrossRealmPKMatch.Cmd,m_NAtagCMCrossRealmPKMatch.SubCmd))] = m_NAtagCMCrossRealmPKMatch | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # C1 10 跨服PK恢复连胜次数 #tagCMRecoverMergePKWin | 
|---|
|  |  |  | # C1 04 主动退出跨服 #tagCMExitCrossRealm | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagCMRecoverMergePKWin(Structure): | 
|---|
|  |  |  | class  tagCMExitCrossRealm(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Cmd = 0xC1 | 
|---|
|  |  |  | self.SubCmd = 0x10 | 
|---|
|  |  |  | self.SubCmd = 0x04 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, stringData, _pos=0, _len=0): | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Cmd = 0xC1 | 
|---|
|  |  |  | self.SubCmd = 0x10 | 
|---|
|  |  |  | self.SubCmd = 0x04 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagCMRecoverMergePKWin) | 
|---|
|  |  |  | return sizeof(tagCMExitCrossRealm) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''// C1 10 跨服PK恢复连胜次数 //tagCMRecoverMergePKWin: | 
|---|
|  |  |  | DumpString = '''// C1 04 主动退出跨服 //tagCMExitCrossRealm: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagCMRecoverMergePKWin=tagCMRecoverMergePKWin() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMRecoverMergePKWin.Cmd,m_NAtagCMRecoverMergePKWin.SubCmd))] = m_NAtagCMRecoverMergePKWin | 
|---|
|  |  |  | m_NAtagCMExitCrossRealm=tagCMExitCrossRealm() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMExitCrossRealm.Cmd,m_NAtagCMExitCrossRealm.SubCmd))] = m_NAtagCMExitCrossRealm | 
|---|