|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # A9 05 通知广播装备详细信息 #tagGCNotifyEquipDetailInfo | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagGCNotifyEquipClassEquip(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("ItemID", c_int), | 
|---|
|  |  |  | ("Star", c_ubyte), | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, stringData, _pos=0, _len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | memmove(addressof(self), stringData[_pos:], self.GetLength()) | 
|---|
|  |  |  | return _pos + self.GetLength() | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.ItemID = 0 | 
|---|
|  |  |  | self.Star = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagGCNotifyEquipClassEquip) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''// A9 05 通知广播装备详细信息 //tagGCNotifyEquipDetailInfo: | 
|---|
|  |  |  | ItemID:%d, | 
|---|
|  |  |  | Star:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.ItemID, | 
|---|
|  |  |  | self.Star | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagGCNotifyEquipDetailInfo(Structure): | 
|---|
|  |  |  | Head = tagHead() | 
|---|
|  |  |  | ItemGUID = ""    #(char ItemGUID[40]) | 
|---|
|  |  |  | ItemID = 0    #(DWORD ItemID) | 
|---|
|  |  |  | Star = 0    #(BYTE Star)//星级 | 
|---|
|  |  |  | PlusLV = 0    #(WORD PlusLV)//强化等级 | 
|---|
|  |  |  | EvolveLV = 0    #(BYTE EvolveLV)//进化等级 | 
|---|
|  |  |  | WashLV = 0    #(BYTE WashLV)//洗练等级 | 
|---|
|  |  |  | WashValueCount = 0    #(BYTE WashValueCount) | 
|---|
|  |  |  | WashValueList = list()    #(vector<WORD> WashValueList)//洗练值 | 
|---|
|  |  |  | StoneIDCount = 0    #(BYTE StoneIDCount) | 
|---|
|  |  |  | StoneIDList = list()    #(vector<DWORD> StoneIDList)//宝石 | 
|---|
|  |  |  | ClassEquipCount = 0    #(BYTE ClassEquipCount) | 
|---|
|  |  |  | ClassEquipList = list()    #(vector<tagGCNotifyEquipClassEquip> ClassEquipList)//本境界穿戴的装备 | 
|---|
|  |  |  | data = None | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Head.Cmd = 0xA9 | 
|---|
|  |  |  | self.Head.SubCmd = 0x05 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, _lpData, _pos=0, _Len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | _pos = self.Head.ReadData(_lpData, _pos) | 
|---|
|  |  |  | self.ItemGUID,_pos = CommFunc.ReadString(_lpData, _pos,40) | 
|---|
|  |  |  | self.ItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos) | 
|---|
|  |  |  | self.Star,_pos = CommFunc.ReadBYTE(_lpData, _pos) | 
|---|
|  |  |  | self.PlusLV,_pos = CommFunc.ReadWORD(_lpData, _pos) | 
|---|
|  |  |  | self.EvolveLV,_pos = CommFunc.ReadBYTE(_lpData, _pos) | 
|---|
|  |  |  | self.WashLV,_pos = CommFunc.ReadBYTE(_lpData, _pos) | 
|---|
|  |  |  | self.WashValueCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) | 
|---|
|  |  |  | for i in range(self.WashValueCount): | 
|---|
|  |  |  | value,_pos=CommFunc.ReadWORD(_lpData,_pos) | 
|---|
|  |  |  | self.WashValueList.append(value) | 
|---|
|  |  |  | self.StoneIDCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) | 
|---|
|  |  |  | for i in range(self.StoneIDCount): | 
|---|
|  |  |  | value,_pos=CommFunc.ReadDWORD(_lpData,_pos) | 
|---|
|  |  |  | self.StoneIDList.append(value) | 
|---|
|  |  |  | self.ClassEquipCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) | 
|---|
|  |  |  | for i in range(self.ClassEquipCount): | 
|---|
|  |  |  | temClassEquipList = tagGCNotifyEquipClassEquip() | 
|---|
|  |  |  | _pos = temClassEquipList.ReadData(_lpData, _pos) | 
|---|
|  |  |  | self.ClassEquipList.append(temClassEquipList) | 
|---|
|  |  |  | return _pos | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Head = tagHead() | 
|---|
|  |  |  | self.Head.Clear() | 
|---|
|  |  |  | self.Head.Cmd = 0xA9 | 
|---|
|  |  |  | self.Head.SubCmd = 0x05 | 
|---|
|  |  |  | self.ItemGUID = "" | 
|---|
|  |  |  | self.ItemID = 0 | 
|---|
|  |  |  | self.Star = 0 | 
|---|
|  |  |  | self.PlusLV = 0 | 
|---|
|  |  |  | self.EvolveLV = 0 | 
|---|
|  |  |  | self.WashLV = 0 | 
|---|
|  |  |  | self.WashValueCount = 0 | 
|---|
|  |  |  | self.WashValueList = list() | 
|---|
|  |  |  | self.StoneIDCount = 0 | 
|---|
|  |  |  | self.StoneIDList = list() | 
|---|
|  |  |  | self.ClassEquipCount = 0 | 
|---|
|  |  |  | self.ClassEquipList = list() | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | length = 0 | 
|---|
|  |  |  | length += self.Head.GetLength() | 
|---|
|  |  |  | length += 40 | 
|---|
|  |  |  | length += 4 | 
|---|
|  |  |  | length += 1 | 
|---|
|  |  |  | length += 2 | 
|---|
|  |  |  | length += 1 | 
|---|
|  |  |  | length += 1 | 
|---|
|  |  |  | length += 1 | 
|---|
|  |  |  | length += 2 * self.WashValueCount | 
|---|
|  |  |  | length += 1 | 
|---|
|  |  |  | length += 4 * self.StoneIDCount | 
|---|
|  |  |  | length += 1 | 
|---|
|  |  |  | for i in range(self.ClassEquipCount): | 
|---|
|  |  |  | length += self.ClassEquipList[i].GetLength() | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return length | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | data = '' | 
|---|
|  |  |  | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) | 
|---|
|  |  |  | data = CommFunc.WriteString(data, 40, self.ItemGUID) | 
|---|
|  |  |  | data = CommFunc.WriteDWORD(data, self.ItemID) | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.Star) | 
|---|
|  |  |  | data = CommFunc.WriteWORD(data, self.PlusLV) | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.EvolveLV) | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.WashLV) | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.WashValueCount) | 
|---|
|  |  |  | for i in range(self.WashValueCount): | 
|---|
|  |  |  | data = CommFunc.WriteWORD(data, self.WashValueList[i]) | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.StoneIDCount) | 
|---|
|  |  |  | for i in range(self.StoneIDCount): | 
|---|
|  |  |  | data = CommFunc.WriteDWORD(data, self.StoneIDList[i]) | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.ClassEquipCount) | 
|---|
|  |  |  | for i in range(self.ClassEquipCount): | 
|---|
|  |  |  | data = CommFunc.WriteString(data, self.ClassEquipList[i].GetLength(), self.ClassEquipList[i].GetBuffer()) | 
|---|
|  |  |  | return data | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = ''' | 
|---|
|  |  |  | Head:%s, | 
|---|
|  |  |  | ItemGUID:%s, | 
|---|
|  |  |  | ItemID:%d, | 
|---|
|  |  |  | Star:%d, | 
|---|
|  |  |  | PlusLV:%d, | 
|---|
|  |  |  | EvolveLV:%d, | 
|---|
|  |  |  | WashLV:%d, | 
|---|
|  |  |  | WashValueCount:%d, | 
|---|
|  |  |  | WashValueList:%s, | 
|---|
|  |  |  | StoneIDCount:%d, | 
|---|
|  |  |  | StoneIDList:%s, | 
|---|
|  |  |  | ClassEquipCount:%d, | 
|---|
|  |  |  | ClassEquipList:%s | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Head.OutputString(), | 
|---|
|  |  |  | self.ItemGUID, | 
|---|
|  |  |  | self.ItemID, | 
|---|
|  |  |  | self.Star, | 
|---|
|  |  |  | self.PlusLV, | 
|---|
|  |  |  | self.EvolveLV, | 
|---|
|  |  |  | self.WashLV, | 
|---|
|  |  |  | self.WashValueCount, | 
|---|
|  |  |  | "...", | 
|---|
|  |  |  | self.StoneIDCount, | 
|---|
|  |  |  | "...", | 
|---|
|  |  |  | self.ClassEquipCount, | 
|---|
|  |  |  | "..." | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagGCNotifyEquipDetailInfo=tagGCNotifyEquipDetailInfo() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCNotifyEquipDetailInfo.Head.Cmd,m_NAtagGCNotifyEquipDetailInfo.Head.SubCmd))] = m_NAtagGCNotifyEquipDetailInfo | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | #A9 03 开服活动奖励数量刷新#tagGCOpenServerCampaignAwardCount | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagGCOpenServerCampaignAwardCount(Structure): | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # B2 13 天星塔通关层数 #tagMCSkyTowerInfo | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagMCSkyTowerInfo(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ("Floor", c_int),    # 已通关层 | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Cmd = 0xB2 | 
|---|
|  |  |  | self.SubCmd = 0x13 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, stringData, _pos=0, _len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | memmove(addressof(self), stringData[_pos:], self.GetLength()) | 
|---|
|  |  |  | return _pos + self.GetLength() | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Cmd = 0xB2 | 
|---|
|  |  |  | self.SubCmd = 0x13 | 
|---|
|  |  |  | self.Floor = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagMCSkyTowerInfo) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''// B2 13 天星塔通关层数 //tagMCSkyTowerInfo: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s, | 
|---|
|  |  |  | Floor:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | self.SubCmd, | 
|---|
|  |  |  | self.Floor | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagMCSkyTowerInfo=tagMCSkyTowerInfo() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCSkyTowerInfo.Cmd,m_NAtagMCSkyTowerInfo.SubCmd))] = m_NAtagMCSkyTowerInfo | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # B2 16 开始自定义场景结果 #tagMCStartCustomSceneResult | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagMCStartCustomSceneResult(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ("MapID", c_int), | 
|---|
|  |  |  | ("FuncLineID", c_ushort), | 
|---|
|  |  |  | ("Result", c_ubyte),    #是否允许 | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Cmd = 0xB2 | 
|---|
|  |  |  | self.SubCmd = 0x16 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, stringData, _pos=0, _len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | memmove(addressof(self), stringData[_pos:], self.GetLength()) | 
|---|
|  |  |  | return _pos + self.GetLength() | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Cmd = 0xB2 | 
|---|
|  |  |  | self.SubCmd = 0x16 | 
|---|
|  |  |  | self.MapID = 0 | 
|---|
|  |  |  | self.FuncLineID = 0 | 
|---|
|  |  |  | self.Result = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagMCStartCustomSceneResult) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''// B2 16 开始自定义场景结果 //tagMCStartCustomSceneResult: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s, | 
|---|
|  |  |  | MapID:%d, | 
|---|
|  |  |  | FuncLineID:%d, | 
|---|
|  |  |  | Result:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | self.SubCmd, | 
|---|
|  |  |  | self.MapID, | 
|---|
|  |  |  | self.FuncLineID, | 
|---|
|  |  |  | self.Result | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagMCStartCustomSceneResult=tagMCStartCustomSceneResult() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCStartCustomSceneResult.Cmd,m_NAtagMCStartCustomSceneResult.SubCmd))] = m_NAtagMCStartCustomSceneResult | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | #B2 02 推送提醒设置通知 #tagMCPushNotificationsSetting | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagMCPushNotificationsSetting(Structure): | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagMCZhuXianBossCnt=tagMCZhuXianBossCnt() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCZhuXianBossCnt.Cmd,m_NAtagMCZhuXianBossCnt.SubCmd))] = m_NAtagMCZhuXianBossCnt | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # B2 13 诛仙塔通关层数 #tagMCZhuXianTowerInfo | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagMCZhuXianTowerInfo(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ("Floor", c_int),    # 已通关层 | 
|---|
|  |  |  | ("LastFloor", c_int),    # 上次挑战层 | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Cmd = 0xB2 | 
|---|
|  |  |  | self.SubCmd = 0x13 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, stringData, _pos=0, _len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | memmove(addressof(self), stringData[_pos:], self.GetLength()) | 
|---|
|  |  |  | return _pos + self.GetLength() | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Cmd = 0xB2 | 
|---|
|  |  |  | self.SubCmd = 0x13 | 
|---|
|  |  |  | self.Floor = 0 | 
|---|
|  |  |  | self.LastFloor = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagMCZhuXianTowerInfo) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''// B2 13 诛仙塔通关层数 //tagMCZhuXianTowerInfo: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s, | 
|---|
|  |  |  | Floor:%d, | 
|---|
|  |  |  | LastFloor:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | self.SubCmd, | 
|---|
|  |  |  | self.Floor, | 
|---|
|  |  |  | self.LastFloor | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagMCZhuXianTowerInfo=tagMCZhuXianTowerInfo() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCZhuXianTowerInfo.Cmd,m_NAtagMCZhuXianTowerInfo.SubCmd))] = m_NAtagMCZhuXianTowerInfo | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|