|  |  | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # AA 40 集字活动信息 #tagMCActCollectWordsInfo
 | 
 |  |  | 
 | 
 |  |  | class  tagMCActCollectWordsNeedItem(Structure):
 | 
 |  |  |     _pack_ = 1
 | 
 |  |  |     _fields_ = [
 | 
 |  |  |                   ("ItemID", c_int),     | 
 |  |  |                   ("ItemCount", c_ushort),     | 
 |  |  |                   ("IsBind", 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.ItemCount = 0
 | 
 |  |  |         self.IsBind = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         return sizeof(tagMCActCollectWordsNeedItem)
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         return string_at(addressof(self), self.GetLength())
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''// AA 40 集字活动信息 //tagMCActCollectWordsInfo:
 | 
 |  |  |                                 ItemID:%d,
 | 
 |  |  |                                 ItemCount:%d,
 | 
 |  |  |                                 IsBind:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.ItemID,
 | 
 |  |  |                                 self.ItemCount,
 | 
 |  |  |                                 self.IsBind
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | class  tagMCActCollectWordsExchangeItem(Structure):
 | 
 |  |  |     ExchangeNum = 0    #(BYTE ExchangeNum)//兑换编号
 | 
 |  |  |     ExchangeCountMax = 0    #(BYTE ExchangeCountMax)//最大兑换次数,0不限制
 | 
 |  |  |     ItemID = 0    #(DWORD ItemID)//目标物品
 | 
 |  |  |     ItemCount = 0    #(WORD ItemCount)
 | 
 |  |  |     IsBind = 0    #(BYTE IsBind)
 | 
 |  |  |     NeedItemCount = 0    #(BYTE NeedItemCount)
 | 
 |  |  |     NeedItemList = list()    #(vector<tagMCActCollectWordsNeedItem> NeedItemList)// 所需物品列表
 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def ReadData(self, _lpData, _pos=0, _Len=0):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.ExchangeNum,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.ExchangeCountMax,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.ItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.ItemCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
 | 
 |  |  |         self.IsBind,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.NeedItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         for i in range(self.NeedItemCount):
 | 
 |  |  |             temNeedItemList = tagMCActCollectWordsNeedItem()
 | 
 |  |  |             _pos = temNeedItemList.ReadData(_lpData, _pos)
 | 
 |  |  |             self.NeedItemList.append(temNeedItemList)
 | 
 |  |  |         return _pos
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.ExchangeNum = 0
 | 
 |  |  |         self.ExchangeCountMax = 0
 | 
 |  |  |         self.ItemID = 0
 | 
 |  |  |         self.ItemCount = 0
 | 
 |  |  |         self.IsBind = 0
 | 
 |  |  |         self.NeedItemCount = 0
 | 
 |  |  |         self.NeedItemList = list()
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         length = 0
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 2
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += 1
 | 
 |  |  |         for i in range(self.NeedItemCount):
 | 
 |  |  |             length += self.NeedItemList[i].GetLength()
 | 
 |  |  | 
 | 
 |  |  |         return length
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         data = ''
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.ExchangeNum)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.ExchangeCountMax)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.ItemID)
 | 
 |  |  |         data = CommFunc.WriteWORD(data, self.ItemCount)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.IsBind)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.NeedItemCount)
 | 
 |  |  |         for i in range(self.NeedItemCount):
 | 
 |  |  |             data = CommFunc.WriteString(data, self.NeedItemList[i].GetLength(), self.NeedItemList[i].GetBuffer())
 | 
 |  |  |         return data
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''
 | 
 |  |  |                                 ExchangeNum:%d,
 | 
 |  |  |                                 ExchangeCountMax:%d,
 | 
 |  |  |                                 ItemID:%d,
 | 
 |  |  |                                 ItemCount:%d,
 | 
 |  |  |                                 IsBind:%d,
 | 
 |  |  |                                 NeedItemCount:%d,
 | 
 |  |  |                                 NeedItemList:%s
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.ExchangeNum,
 | 
 |  |  |                                 self.ExchangeCountMax,
 | 
 |  |  |                                 self.ItemID,
 | 
 |  |  |                                 self.ItemCount,
 | 
 |  |  |                                 self.IsBind,
 | 
 |  |  |                                 self.NeedItemCount,
 | 
 |  |  |                                 "..."
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | class  tagMCActCollectWordsInfo(Structure):
 | 
 |  |  |     Head = tagHead()
 | 
 |  |  |     ActNum = 0    #(BYTE ActNum)//活动编号,1 或 2,相互独立的活动,可同时开启
 | 
 |  |  |     StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
 | 
 |  |  |     EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
 | 
 |  |  |     LimitLV = 0    #(WORD LimitLV)// 限制等级
 | 
 |  |  |     LastDayOnlyExchange = 0    #(BYTE LastDayOnlyExchange)//最后一天是否仅兑换
 | 
 |  |  |     ExchangeCount = 0    #(BYTE ExchangeCount)
 | 
 |  |  |     ExchangeItemList = list()    #(vector<tagMCActCollectWordsExchangeItem> ExchangeItemList)//兑换组合列表
 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xAA
 | 
 |  |  |         self.Head.SubCmd = 0x40
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def ReadData(self, _lpData, _pos=0, _Len=0):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         _pos = self.Head.ReadData(_lpData, _pos)
 | 
 |  |  |         self.ActNum,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
 | 
 |  |  |         self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
 | 
 |  |  |         self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
 | 
 |  |  |         self.LastDayOnlyExchange,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.ExchangeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         for i in range(self.ExchangeCount):
 | 
 |  |  |             temExchangeItemList = tagMCActCollectWordsExchangeItem()
 | 
 |  |  |             _pos = temExchangeItemList.ReadData(_lpData, _pos)
 | 
 |  |  |             self.ExchangeItemList.append(temExchangeItemList)
 | 
 |  |  |         return _pos
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.Head = tagHead()
 | 
 |  |  |         self.Head.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xAA
 | 
 |  |  |         self.Head.SubCmd = 0x40
 | 
 |  |  |         self.ActNum = 0
 | 
 |  |  |         self.StartDate = ""
 | 
 |  |  |         self.EndtDate = ""
 | 
 |  |  |         self.LimitLV = 0
 | 
 |  |  |         self.LastDayOnlyExchange = 0
 | 
 |  |  |         self.ExchangeCount = 0
 | 
 |  |  |         self.ExchangeItemList = list()
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         length = 0
 | 
 |  |  |         length += self.Head.GetLength()
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += 10
 | 
 |  |  |         length += 10
 | 
 |  |  |         length += 2
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += 1
 | 
 |  |  |         for i in range(self.ExchangeCount):
 | 
 |  |  |             length += self.ExchangeItemList[i].GetLength()
 | 
 |  |  | 
 | 
 |  |  |         return length
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         data = ''
 | 
 |  |  |         data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.ActNum)
 | 
 |  |  |         data = CommFunc.WriteString(data, 10, self.StartDate)
 | 
 |  |  |         data = CommFunc.WriteString(data, 10, self.EndtDate)
 | 
 |  |  |         data = CommFunc.WriteWORD(data, self.LimitLV)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.LastDayOnlyExchange)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.ExchangeCount)
 | 
 |  |  |         for i in range(self.ExchangeCount):
 | 
 |  |  |             data = CommFunc.WriteString(data, self.ExchangeItemList[i].GetLength(), self.ExchangeItemList[i].GetBuffer())
 | 
 |  |  |         return data
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''
 | 
 |  |  |                                 Head:%s,
 | 
 |  |  |                                 ActNum:%d,
 | 
 |  |  |                                 StartDate:%s,
 | 
 |  |  |                                 EndtDate:%s,
 | 
 |  |  |                                 LimitLV:%d,
 | 
 |  |  |                                 LastDayOnlyExchange:%d,
 | 
 |  |  |                                 ExchangeCount:%d,
 | 
 |  |  |                                 ExchangeItemList:%s
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Head.OutputString(),
 | 
 |  |  |                                 self.ActNum,
 | 
 |  |  |                                 self.StartDate,
 | 
 |  |  |                                 self.EndtDate,
 | 
 |  |  |                                 self.LimitLV,
 | 
 |  |  |                                 self.LastDayOnlyExchange,
 | 
 |  |  |                                 self.ExchangeCount,
 | 
 |  |  |                                 "..."
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagMCActCollectWordsInfo=tagMCActCollectWordsInfo()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActCollectWordsInfo.Head.Cmd,m_NAtagMCActCollectWordsInfo.Head.SubCmd))] = m_NAtagMCActCollectWordsInfo
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # AA 41 集字活动玩家信息 #tagMCActCollectWordsPlayerInfo
 | 
 |  |  | 
 | 
 |  |  | class  tagMCActCollectWordsExchangeInfo(Structure):
 | 
 |  |  |     _pack_ = 1
 | 
 |  |  |     _fields_ = [
 | 
 |  |  |                   ("ExchangeNum", c_ubyte),    #兑换编号
 | 
 |  |  |                   ("ExchangeCount", c_ushort),    #已兑换次数
 | 
 |  |  |                   ]
 | 
 |  |  | 
 | 
 |  |  |     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.ExchangeNum = 0
 | 
 |  |  |         self.ExchangeCount = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         return sizeof(tagMCActCollectWordsExchangeInfo)
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         return string_at(addressof(self), self.GetLength())
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''// AA 41 集字活动玩家信息 //tagMCActCollectWordsPlayerInfo:
 | 
 |  |  |                                 ExchangeNum:%d,
 | 
 |  |  |                                 ExchangeCount:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.ExchangeNum,
 | 
 |  |  |                                 self.ExchangeCount
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | class  tagMCActCollectWordsPlayerInfo(Structure):
 | 
 |  |  |     Head = tagHead()
 | 
 |  |  |     ActNum = 0    #(BYTE ActNum)//活动编号,1 或 2,相互独立的活动,可同时开启
 | 
 |  |  |     ExchangeCount = 0    #(BYTE ExchangeCount)
 | 
 |  |  |     ExchangeInfoList = list()    #(vector<tagMCActCollectWordsExchangeInfo> ExchangeInfoList)//兑换数据列表
 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xAA
 | 
 |  |  |         self.Head.SubCmd = 0x41
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def ReadData(self, _lpData, _pos=0, _Len=0):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         _pos = self.Head.ReadData(_lpData, _pos)
 | 
 |  |  |         self.ActNum,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.ExchangeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         for i in range(self.ExchangeCount):
 | 
 |  |  |             temExchangeInfoList = tagMCActCollectWordsExchangeInfo()
 | 
 |  |  |             _pos = temExchangeInfoList.ReadData(_lpData, _pos)
 | 
 |  |  |             self.ExchangeInfoList.append(temExchangeInfoList)
 | 
 |  |  |         return _pos
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.Head = tagHead()
 | 
 |  |  |         self.Head.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xAA
 | 
 |  |  |         self.Head.SubCmd = 0x41
 | 
 |  |  |         self.ActNum = 0
 | 
 |  |  |         self.ExchangeCount = 0
 | 
 |  |  |         self.ExchangeInfoList = list()
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         length = 0
 | 
 |  |  |         length += self.Head.GetLength()
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += 1
 | 
 |  |  |         for i in range(self.ExchangeCount):
 | 
 |  |  |             length += self.ExchangeInfoList[i].GetLength()
 | 
 |  |  | 
 | 
 |  |  |         return length
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         data = ''
 | 
 |  |  |         data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.ActNum)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.ExchangeCount)
 | 
 |  |  |         for i in range(self.ExchangeCount):
 | 
 |  |  |             data = CommFunc.WriteString(data, self.ExchangeInfoList[i].GetLength(), self.ExchangeInfoList[i].GetBuffer())
 | 
 |  |  |         return data
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''
 | 
 |  |  |                                 Head:%s,
 | 
 |  |  |                                 ActNum:%d,
 | 
 |  |  |                                 ExchangeCount:%d,
 | 
 |  |  |                                 ExchangeInfoList:%s
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Head.OutputString(),
 | 
 |  |  |                                 self.ActNum,
 | 
 |  |  |                                 self.ExchangeCount,
 | 
 |  |  |                                 "..."
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagMCActCollectWordsPlayerInfo=tagMCActCollectWordsPlayerInfo()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActCollectWordsPlayerInfo.Head.Cmd,m_NAtagMCActCollectWordsPlayerInfo.Head.SubCmd))] = m_NAtagMCActCollectWordsPlayerInfo
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # AA 0C 登录奖励活动信息 #tagMCActLoginAwardInfo
 | 
 |  |  | 
 | 
 |  |  | class  tagMCActLoginAwardAction(Structure):
 |