|  |  | 
 |  |  | # A0 07 副本地图功能线路人数 #tagGCFBLinePlayerCnt
 | 
 |  |  | 
 | 
 |  |  | class  tagGCFBLineInfo(Structure):
 | 
 |  |  |     _pack_ = 1
 | 
 |  |  |     _fields_ = [
 | 
 |  |  |                   ("FBLineID", c_ubyte),    # 功能线路ID
 | 
 |  |  |                   ("PlayerCnt", c_ushort),    # 线路当前玩家数
 | 
 |  |  |                   ]
 | 
 |  |  |     FBLineID = 0    #(BYTE FBLineID)// 功能线路ID
 | 
 |  |  |     PlayerCnt = 0    #(WORD PlayerCnt)// 线路当前玩家数
 | 
 |  |  |     ExtraStrLen = 0    #(WORD ExtraStrLen)// 长度
 | 
 |  |  |     ExtraStr = ""    #(String ExtraStr)// 额外信息
 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def ReadData(self, stringData, _pos=0, _len=0):
 | 
 |  |  |     def ReadData(self, _lpData, _pos=0, _Len=0):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         memmove(addressof(self), stringData[_pos:], self.GetLength())
 | 
 |  |  |         return _pos + self.GetLength()
 | 
 |  |  |         self.FBLineID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.PlayerCnt,_pos = CommFunc.ReadWORD(_lpData, _pos)
 | 
 |  |  |         self.ExtraStrLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
 | 
 |  |  |         self.ExtraStr,_pos = CommFunc.ReadString(_lpData, _pos,self.ExtraStrLen)
 | 
 |  |  |         return _pos
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.FBLineID = 0
 | 
 |  |  |         self.PlayerCnt = 0
 | 
 |  |  |         self.ExtraStrLen = 0
 | 
 |  |  |         self.ExtraStr = ""
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         return sizeof(tagGCFBLineInfo)
 | 
 |  |  |         length = 0
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += 2
 | 
 |  |  |         length += 2
 | 
 |  |  |         length += len(self.ExtraStr)
 | 
 |  |  | 
 | 
 |  |  |         return length
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         return string_at(addressof(self), self.GetLength())
 | 
 |  |  |         data = ''
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.FBLineID)
 | 
 |  |  |         data = CommFunc.WriteWORD(data, self.PlayerCnt)
 | 
 |  |  |         data = CommFunc.WriteWORD(data, self.ExtraStrLen)
 | 
 |  |  |         data = CommFunc.WriteString(data, self.ExtraStrLen, self.ExtraStr)
 | 
 |  |  |         return data
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''// A0 07 副本地图功能线路人数 //tagGCFBLinePlayerCnt:
 | 
 |  |  |         DumpString = '''
 | 
 |  |  |                                 FBLineID:%d,
 | 
 |  |  |                                 PlayerCnt:%d
 | 
 |  |  |                                 PlayerCnt:%d,
 | 
 |  |  |                                 ExtraStrLen:%d,
 | 
 |  |  |                                 ExtraStr:%s
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.FBLineID,
 | 
 |  |  |                                 self.PlayerCnt
 | 
 |  |  |                                 self.PlayerCnt,
 | 
 |  |  |                                 self.ExtraStrLen,
 | 
 |  |  |                                 self.ExtraStr
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # AC 11 节日红包活动信息 #tagGCFeastRedPacketInfo
 | 
 |  |  | 
 | 
 |  |  | class  tagGCFeastRedPacketDay(Structure):
 | 
 |  |  |     RedPacketCount = 0    #(BYTE RedPacketCount)
 | 
 |  |  |     RedPacketIDList = list()    #(vector<WORD> RedPacketIDList)// 当日定时发放的系统红包表ID列表
 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def ReadData(self, _lpData, _pos=0, _Len=0):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.RedPacketCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         for i in range(self.RedPacketCount):
 | 
 |  |  |             value,_pos=CommFunc.ReadWORD(_lpData,_pos)
 | 
 |  |  |             self.RedPacketIDList.append(value)
 | 
 |  |  |         return _pos
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.RedPacketCount = 0
 | 
 |  |  |         self.RedPacketIDList = list()
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         length = 0
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += 2 * self.RedPacketCount
 | 
 |  |  | 
 | 
 |  |  |         return length
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         data = ''
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.RedPacketCount)
 | 
 |  |  |         for i in range(self.RedPacketCount):
 | 
 |  |  |             data = CommFunc.WriteWORD(data, self.RedPacketIDList[i])
 | 
 |  |  |         return data
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''
 | 
 |  |  |                                 RedPacketCount:%d,
 | 
 |  |  |                                 RedPacketIDList:%s
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.RedPacketCount,
 | 
 |  |  |                                 "..."
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | class  tagGCFeastRedPacketInfo(Structure):
 | 
 |  |  |     Head = tagHead()
 | 
 |  |  |     StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
 | 
 |  |  |     EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
 | 
 |  |  |     LimitLV = 0    #(WORD LimitLV)// 限制等级
 | 
 |  |  |     ResetType = 0    #(BYTE ResetType)// 重置类型 0-0点重置 1-5点重置
 | 
 |  |  |     RedPacketDays = 0    #(BYTE RedPacketDays)
 | 
 |  |  |     RedPacketDayList = list()    #(vector<tagGCFeastRedPacketDay> RedPacketDayList)// 每日系统红包信息
 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xAC
 | 
 |  |  |         self.Head.SubCmd = 0x11
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def ReadData(self, _lpData, _pos=0, _Len=0):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         _pos = self.Head.ReadData(_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.ResetType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.RedPacketDays,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         for i in range(self.RedPacketDays):
 | 
 |  |  |             temRedPacketDayList = tagGCFeastRedPacketDay()
 | 
 |  |  |             _pos = temRedPacketDayList.ReadData(_lpData, _pos)
 | 
 |  |  |             self.RedPacketDayList.append(temRedPacketDayList)
 | 
 |  |  |         return _pos
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.Head = tagHead()
 | 
 |  |  |         self.Head.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xAC
 | 
 |  |  |         self.Head.SubCmd = 0x11
 | 
 |  |  |         self.StartDate = ""
 | 
 |  |  |         self.EndtDate = ""
 | 
 |  |  |         self.LimitLV = 0
 | 
 |  |  |         self.ResetType = 0
 | 
 |  |  |         self.RedPacketDays = 0
 | 
 |  |  |         self.RedPacketDayList = list()
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         length = 0
 | 
 |  |  |         length += self.Head.GetLength()
 | 
 |  |  |         length += 10
 | 
 |  |  |         length += 10
 | 
 |  |  |         length += 2
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += 1
 | 
 |  |  |         for i in range(self.RedPacketDays):
 | 
 |  |  |             length += self.RedPacketDayList[i].GetLength()
 | 
 |  |  | 
 | 
 |  |  |         return length
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         data = ''
 | 
 |  |  |         data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
 | 
 |  |  |         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.ResetType)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.RedPacketDays)
 | 
 |  |  |         for i in range(self.RedPacketDays):
 | 
 |  |  |             data = CommFunc.WriteString(data, self.RedPacketDayList[i].GetLength(), self.RedPacketDayList[i].GetBuffer())
 | 
 |  |  |         return data
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''
 | 
 |  |  |                                 Head:%s,
 | 
 |  |  |                                 StartDate:%s,
 | 
 |  |  |                                 EndtDate:%s,
 | 
 |  |  |                                 LimitLV:%d,
 | 
 |  |  |                                 ResetType:%d,
 | 
 |  |  |                                 RedPacketDays:%d,
 | 
 |  |  |                                 RedPacketDayList:%s
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Head.OutputString(),
 | 
 |  |  |                                 self.StartDate,
 | 
 |  |  |                                 self.EndtDate,
 | 
 |  |  |                                 self.LimitLV,
 | 
 |  |  |                                 self.ResetType,
 | 
 |  |  |                                 self.RedPacketDays,
 | 
 |  |  |                                 "..."
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagGCFeastRedPacketInfo=tagGCFeastRedPacketInfo()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFeastRedPacketInfo.Head.Cmd,m_NAtagGCFeastRedPacketInfo.Head.SubCmd))] = m_NAtagGCFeastRedPacketInfo
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # AC 02 通知仙魔之争信息 #tagGCXMZZInfo
 | 
 |  |  | 
 | 
 |  |  | class  tagGCXMZZInfo(Structure):
 | 
 |  |  | 
 |  |  | 
 | 
 |  |  | m_NAtagGCMultiRealmPointInfo=tagGCMultiRealmPointInfo()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCMultiRealmPointInfo.Head.Cmd,m_NAtagGCMultiRealmPointInfo.Head.SubCmd))] = m_NAtagGCMultiRealmPointInfo
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # AC 0B 新仙界盛典活动信息 #tagGCNewFairyCeremonyInfo
 | 
 |  |  | 
 | 
 |  |  | class  tagGCNewFairyCeremonyInfo(Structure):
 | 
 |  |  |     Head = tagHead()
 | 
 |  |  |     StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
 | 
 |  |  |     EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
 | 
 |  |  |     WorldLV = 0    #(WORD WorldLV)// 世界等级
 | 
 |  |  |     LimitLV = 0    #(WORD LimitLV)// 限制等级
 | 
 |  |  |     ResetType = 0    #(BYTE ResetType)// 重置类型 0-0点重置 1-5点重置
 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xAC
 | 
 |  |  |         self.Head.SubCmd = 0x0B
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def ReadData(self, _lpData, _pos=0, _Len=0):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         _pos = self.Head.ReadData(_lpData, _pos)
 | 
 |  |  |         self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
 | 
 |  |  |         self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
 | 
 |  |  |         self.WorldLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
 | 
 |  |  |         self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
 | 
 |  |  |         self.ResetType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         return _pos
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.Head = tagHead()
 | 
 |  |  |         self.Head.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xAC
 | 
 |  |  |         self.Head.SubCmd = 0x0B
 | 
 |  |  |         self.StartDate = ""
 | 
 |  |  |         self.EndtDate = ""
 | 
 |  |  |         self.WorldLV = 0
 | 
 |  |  |         self.LimitLV = 0
 | 
 |  |  |         self.ResetType = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         length = 0
 | 
 |  |  |         length += self.Head.GetLength()
 | 
 |  |  |         length += 10
 | 
 |  |  |         length += 10
 | 
 |  |  |         length += 2
 | 
 |  |  |         length += 2
 | 
 |  |  |         length += 1
 | 
 |  |  | 
 | 
 |  |  |         return length
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         data = ''
 | 
 |  |  |         data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
 | 
 |  |  |         data = CommFunc.WriteString(data, 10, self.StartDate)
 | 
 |  |  |         data = CommFunc.WriteString(data, 10, self.EndtDate)
 | 
 |  |  |         data = CommFunc.WriteWORD(data, self.WorldLV)
 | 
 |  |  |         data = CommFunc.WriteWORD(data, self.LimitLV)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.ResetType)
 | 
 |  |  |         return data
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''
 | 
 |  |  |                                 Head:%s,
 | 
 |  |  |                                 StartDate:%s,
 | 
 |  |  |                                 EndtDate:%s,
 | 
 |  |  |                                 WorldLV:%d,
 | 
 |  |  |                                 LimitLV:%d,
 | 
 |  |  |                                 ResetType:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Head.OutputString(),
 | 
 |  |  |                                 self.StartDate,
 | 
 |  |  |                                 self.EndtDate,
 | 
 |  |  |                                 self.WorldLV,
 | 
 |  |  |                                 self.LimitLV,
 | 
 |  |  |                                 self.ResetType
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagGCNewFairyCeremonyInfo=tagGCNewFairyCeremonyInfo()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCNewFairyCeremonyInfo.Head.Cmd,m_NAtagGCNewFairyCeremonyInfo.Head.SubCmd))] = m_NAtagGCNewFairyCeremonyInfo
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | 
 |  |  |     RealmLV = 0    #(WORD RealmLV)//境界
 | 
 |  |  |     OnlineType = 0    #(BYTE OnlineType)//在线状态, 0 不在线 1在线
 | 
 |  |  |     IsInTeam = 0    #(BYTE IsInTeam)//是否有队伍
 | 
 |  |  |     ServerGroupID = 0    #(DWORD ServerGroupID)//服务器组ID
 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  | 
 |  |  |         self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
 | 
 |  |  |         self.OnlineType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.IsInTeam,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.ServerGroupID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         return _pos
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  | 
 |  |  |         self.RealmLV = 0
 | 
 |  |  |         self.OnlineType = 0
 | 
 |  |  |         self.IsInTeam = 0
 | 
 |  |  |         self.ServerGroupID = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  | 
 |  |  |         length += 2
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += 4
 | 
 |  |  | 
 | 
 |  |  |         return length
 | 
 |  |  | 
 | 
 |  |  | 
 |  |  |         data = CommFunc.WriteWORD(data, self.RealmLV)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.OnlineType)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.IsInTeam)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.ServerGroupID)
 | 
 |  |  |         return data
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  | 
 |  |  |                                 LV:%d,
 | 
 |  |  |                                 RealmLV:%d,
 | 
 |  |  |                                 OnlineType:%d,
 | 
 |  |  |                                 IsInTeam:%d
 | 
 |  |  |                                 IsInTeam:%d,
 | 
 |  |  |                                 ServerGroupID:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Head.OutputString(),
 | 
 |  |  | 
 |  |  |                                 self.LV,
 | 
 |  |  |                                 self.RealmLV,
 | 
 |  |  |                                 self.OnlineType,
 | 
 |  |  |                                 self.IsInTeam
 | 
 |  |  |                                 self.IsInTeam,
 | 
 |  |  |                                 self.ServerGroupID
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # C0 05 跨服PK赛季排行榜 #tagGCCrossRealmPKBillboardInfo
 | 
 |  |  | 
 | 
 |  |  | class  tagGCCrossRealmPKBillboardData(Structure):
 | 
 |  |  |     PlayerID = 0    #(DWORD PlayerID)
 | 
 |  |  |     NameLen = 0    #(BYTE NameLen)
 | 
 |  |  |     PlayerName = ""    #(String PlayerName)
 | 
 |  |  |     Job = 0    #(BYTE Job)
 | 
 |  |  |     FightPower = 0    #(DWORD FightPower)
 | 
 |  |  |     RealmLV = 0    #(WORD RealmLV)
 | 
 |  |  |     PKScore = 0    #(DWORD PKScore)
 | 
 |  |  |     DanLV = 0    #(BYTE DanLV)
 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def ReadData(self, _lpData, _pos=0, _Len=0):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
 | 
 |  |  |         self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
 | 
 |  |  |         self.PKScore,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.DanLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         return _pos
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.PlayerID = 0
 | 
 |  |  |         self.NameLen = 0
 | 
 |  |  |         self.PlayerName = ""
 | 
 |  |  |         self.Job = 0
 | 
 |  |  |         self.FightPower = 0
 | 
 |  |  |         self.RealmLV = 0
 | 
 |  |  |         self.PKScore = 0
 | 
 |  |  |         self.DanLV = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         length = 0
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += len(self.PlayerName)
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 2
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 1
 | 
 |  |  | 
 | 
 |  |  |         return length
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         data = ''
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.PlayerID)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.NameLen)
 | 
 |  |  |         data = CommFunc.WriteString(data, self.NameLen, self.PlayerName)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.Job)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.FightPower)
 | 
 |  |  |         data = CommFunc.WriteWORD(data, self.RealmLV)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.PKScore)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.DanLV)
 | 
 |  |  |         return data
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''
 | 
 |  |  |                                 PlayerID:%d,
 | 
 |  |  |                                 NameLen:%d,
 | 
 |  |  |                                 PlayerName:%s,
 | 
 |  |  |                                 Job:%d,
 | 
 |  |  |                                 FightPower:%d,
 | 
 |  |  |                                 RealmLV:%d,
 | 
 |  |  |                                 PKScore:%d,
 | 
 |  |  |                                 DanLV:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.PlayerID,
 | 
 |  |  |                                 self.NameLen,
 | 
 |  |  |                                 self.PlayerName,
 | 
 |  |  |                                 self.Job,
 | 
 |  |  |                                 self.FightPower,
 | 
 |  |  |                                 self.RealmLV,
 | 
 |  |  |                                 self.PKScore,
 | 
 |  |  |                                 self.DanLV
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | class  tagGCCrossRealmPKBillboardInfo(Structure):
 | 
 |  |  |     Head = tagHead()
 | 
 |  |  |     ZoneID = 0    #(BYTE ZoneID)// 赛区ID     | 
 |  |  |     SeasonID = 0    #(BYTE SeasonID)// 赛季ID     | 
 |  |  |     Count = 0    #(WORD Count)
 | 
 |  |  |     PKBillboardList = list()    #(vector<tagGCCrossRealmPKBillboardData> PKBillboardList)
 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xC0
 | 
 |  |  |         self.Head.SubCmd = 0x05
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def ReadData(self, _lpData, _pos=0, _Len=0):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         _pos = self.Head.ReadData(_lpData, _pos)
 | 
 |  |  |         self.ZoneID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.SeasonID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos)
 | 
 |  |  |         for i in range(self.Count):
 | 
 |  |  |             temPKBillboardList = tagGCCrossRealmPKBillboardData()
 | 
 |  |  |             _pos = temPKBillboardList.ReadData(_lpData, _pos)
 | 
 |  |  |             self.PKBillboardList.append(temPKBillboardList)
 | 
 |  |  |         return _pos
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.Head = tagHead()
 | 
 |  |  |         self.Head.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xC0
 | 
 |  |  |         self.Head.SubCmd = 0x05
 | 
 |  |  |         self.ZoneID = 0
 | 
 |  |  |         self.SeasonID = 0
 | 
 |  |  |         self.Count = 0
 | 
 |  |  |         self.PKBillboardList = list()
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         length = 0
 | 
 |  |  |         length += self.Head.GetLength()
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += 2
 | 
 |  |  |         for i in range(self.Count):
 | 
 |  |  |             length += self.PKBillboardList[i].GetLength()
 | 
 |  |  | 
 | 
 |  |  |         return length
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         data = ''
 | 
 |  |  |         data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.ZoneID)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.SeasonID)
 | 
 |  |  |         data = CommFunc.WriteWORD(data, self.Count)
 | 
 |  |  |         for i in range(self.Count):
 | 
 |  |  |             data = CommFunc.WriteString(data, self.PKBillboardList[i].GetLength(), self.PKBillboardList[i].GetBuffer())
 | 
 |  |  |         return data
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''
 | 
 |  |  |                                 Head:%s,
 | 
 |  |  |                                 ZoneID:%d,
 | 
 |  |  |                                 SeasonID:%d,
 | 
 |  |  |                                 Count:%d,
 | 
 |  |  |                                 PKBillboardList:%s
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Head.OutputString(),
 | 
 |  |  |                                 self.ZoneID,
 | 
 |  |  |                                 self.SeasonID,
 | 
 |  |  |                                 self.Count,
 | 
 |  |  |                                 "..."
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagGCCrossRealmPKBillboardInfo=tagGCCrossRealmPKBillboardInfo()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossRealmPKBillboardInfo.Head.Cmd,m_NAtagGCCrossRealmPKBillboardInfo.Head.SubCmd))] = m_NAtagGCCrossRealmPKBillboardInfo
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # C0 01 跨服PK匹配成功 #tagGCCrossRealmPKMatchOK
 | 
 |  |  | 
 | 
 |  |  | class  tagGCCrossRealmPKMatchPlayer(Structure):
 | 
 |  |  |     PlayerID = 0    #(DWORD PlayerID)
 | 
 |  |  |     NameLen = 0    #(BYTE NameLen)
 | 
 |  |  |     PlayerName = ""    #(String PlayerName)// 跨服名字
 | 
 |  |  |     Job = 0    #(BYTE Job)
 | 
 |  |  |     LV = 0    #(WORD LV)
 | 
 |  |  |     MaxHP = 0    #(DWORD MaxHP)// 默认满血
 | 
 |  |  |     MaxProDef = 0    #(DWORD MaxProDef)// 最大护盾
 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def ReadData(self, _lpData, _pos=0, _Len=0):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
 | 
 |  |  |         self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
 | 
 |  |  |         self.MaxHP,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.MaxProDef,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         return _pos
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.PlayerID = 0
 | 
 |  |  |         self.NameLen = 0
 | 
 |  |  |         self.PlayerName = ""
 | 
 |  |  |         self.Job = 0
 | 
 |  |  |         self.LV = 0
 | 
 |  |  |         self.MaxHP = 0
 | 
 |  |  |         self.MaxProDef = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         length = 0
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += len(self.PlayerName)
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += 2
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  | 
 | 
 |  |  |         return length
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         data = ''
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.PlayerID)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.NameLen)
 | 
 |  |  |         data = CommFunc.WriteString(data, self.NameLen, self.PlayerName)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.Job)
 | 
 |  |  |         data = CommFunc.WriteWORD(data, self.LV)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.MaxHP)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.MaxProDef)
 | 
 |  |  |         return data
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''
 | 
 |  |  |                                 PlayerID:%d,
 | 
 |  |  |                                 NameLen:%d,
 | 
 |  |  |                                 PlayerName:%s,
 | 
 |  |  |                                 Job:%d,
 | 
 |  |  |                                 LV:%d,
 | 
 |  |  |                                 MaxHP:%d,
 | 
 |  |  |                                 MaxProDef:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.PlayerID,
 | 
 |  |  |                                 self.NameLen,
 | 
 |  |  |                                 self.PlayerName,
 | 
 |  |  |                                 self.Job,
 | 
 |  |  |                                 self.LV,
 | 
 |  |  |                                 self.MaxHP,
 | 
 |  |  |                                 self.MaxProDef
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | class  tagGCCrossRealmPKMatchOK(Structure):
 | 
 |  |  |     Head = tagHead()
 | 
 |  |  |     RoomID = 0    #(WORD RoomID)// 房间ID
 | 
 |  |  |     NameLen = 0    #(BYTE NameLen)
 | 
 |  |  |     PlayerName = ""    #(String PlayerName)// 跨服名字
 | 
 |  |  |     TagNameLen = 0    #(BYTE TagNameLen)
 | 
 |  |  |     TagPlayerName = ""    #(String TagPlayerName)// 对手名字
 | 
 |  |  |     TagJob = 0    #(BYTE TagJob)// 对手职业
 | 
 |  |  |     Number = 0    #(BYTE Number)// 位置编号;1-左,2-右
 | 
 |  |  |     MatchPlayerCount = 0    #(BYTE MatchPlayerCount)
 | 
 |  |  |     MatchPlayer = list()    #(vector<tagGCCrossRealmPKMatchPlayer> MatchPlayer)// 匹配到的玩家
 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  | 
 |  |  |     def ReadData(self, _lpData, _pos=0, _Len=0):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         _pos = self.Head.ReadData(_lpData, _pos)
 | 
 |  |  |         self.RoomID,_pos = CommFunc.ReadWORD(_lpData, _pos)
 | 
 |  |  |         self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
 | 
 |  |  |         self.TagNameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.TagPlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
 | 
 |  |  |         self.TagJob,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.Number,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.MatchPlayerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         for i in range(self.MatchPlayerCount):
 | 
 |  |  |             temMatchPlayer = tagGCCrossRealmPKMatchPlayer()
 | 
 |  |  |             _pos = temMatchPlayer.ReadData(_lpData, _pos)
 | 
 |  |  |             self.MatchPlayer.append(temMatchPlayer)
 | 
 |  |  |         return _pos
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  | 
 |  |  |         self.Head.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xC0
 | 
 |  |  |         self.Head.SubCmd = 0x01
 | 
 |  |  |         self.RoomID = 0
 | 
 |  |  |         self.NameLen = 0
 | 
 |  |  |         self.PlayerName = ""
 | 
 |  |  |         self.TagNameLen = 0
 | 
 |  |  |         self.TagPlayerName = ""
 | 
 |  |  |         self.TagJob = 0
 | 
 |  |  |         self.Number = 0
 | 
 |  |  |         self.MatchPlayerCount = 0
 | 
 |  |  |         self.MatchPlayer = list()
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         length = 0
 | 
 |  |  |         length += self.Head.GetLength()
 | 
 |  |  |         length += 2
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += len(self.PlayerName)
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += len(self.TagPlayerName)
 | 
 |  |  |         length += 1
 | 
 |  |  |         for i in range(self.MatchPlayerCount):
 | 
 |  |  |             length += self.MatchPlayer[i].GetLength()
 | 
 |  |  | 
 | 
 |  |  |         return length
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         data = ''
 | 
 |  |  |         data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
 | 
 |  |  |         data = CommFunc.WriteWORD(data, self.RoomID)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.NameLen)
 | 
 |  |  |         data = CommFunc.WriteString(data, self.NameLen, self.PlayerName)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.TagNameLen)
 | 
 |  |  |         data = CommFunc.WriteString(data, self.NameLen, self.TagPlayerName)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.TagJob)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.Number)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.MatchPlayerCount)
 | 
 |  |  |         for i in range(self.MatchPlayerCount):
 | 
 |  |  |             data = CommFunc.WriteString(data, self.MatchPlayer[i].GetLength(), self.MatchPlayer[i].GetBuffer())
 | 
 |  |  |         return data
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''
 | 
 |  |  |                                 Head:%s,
 | 
 |  |  |                                 RoomID:%d,
 | 
 |  |  |                                 NameLen:%d,
 | 
 |  |  |                                 PlayerName:%s,
 | 
 |  |  |                                 TagNameLen:%d,
 | 
 |  |  |                                 TagPlayerName:%s,
 | 
 |  |  |                                 TagJob:%d
 | 
 |  |  |                                 Number:%d,
 | 
 |  |  |                                 MatchPlayerCount:%d,
 | 
 |  |  |                                 MatchPlayer:%s
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Head.OutputString(),
 | 
 |  |  |                                 self.RoomID,
 | 
 |  |  |                                 self.NameLen,
 | 
 |  |  |                                 self.PlayerName,
 | 
 |  |  |                                 self.TagNameLen,
 | 
 |  |  |                                 self.TagPlayerName,
 | 
 |  |  |                                 self.TagJob
 | 
 |  |  |                                 self.Number,
 | 
 |  |  |                                 self.MatchPlayerCount,
 | 
 |  |  |                                 "..."
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 |  |  |     RoundCount = 0    #(BYTE RoundCount)// PK回合数
 | 
 |  |  |     RoundWinnerID = list()    #(vector<DWORD> RoundWinnerID)// 回合获胜ID列表
 | 
 |  |  |     AddScore = 0    #(WORD AddScore)// 本场加分
 | 
 |  |  |     Score = 0    #(WORD Score)// 当前积分
 | 
 |  |  |     Score = 0    #(DWORD Score)// 当前积分
 | 
 |  |  |     DanLV = 0    #(BYTE DanLV)// 当前段位
 | 
 |  |  |     CWinCnt = 0    #(WORD CWinCnt)// 当前连胜数
 | 
 |  |  |     TagNameLen = 0    #(BYTE TagNameLen)
 | 
 |  |  | 
 |  |  |             value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
 | 
 |  |  |             self.RoundWinnerID.append(value)
 | 
 |  |  |         self.AddScore,_pos = CommFunc.ReadWORD(_lpData, _pos)
 | 
 |  |  |         self.Score,_pos = CommFunc.ReadWORD(_lpData, _pos)
 | 
 |  |  |         self.Score,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.DanLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.CWinCnt,_pos = CommFunc.ReadWORD(_lpData, _pos)
 | 
 |  |  |         self.TagNameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  | 
 |  |  |         length += 1
 | 
 |  |  |         length += 4 * self.RoundCount
 | 
 |  |  |         length += 2
 | 
 |  |  |         length += 2
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += 2
 | 
 |  |  |         length += 1
 | 
 |  |  | 
 |  |  |         for i in range(self.RoundCount):
 | 
 |  |  |             data = CommFunc.WriteDWORD(data, self.RoundWinnerID[i])
 | 
 |  |  |         data = CommFunc.WriteWORD(data, self.AddScore)
 | 
 |  |  |         data = CommFunc.WriteWORD(data, self.Score)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.Score)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.DanLV)
 | 
 |  |  |         data = CommFunc.WriteWORD(data, self.CWinCnt)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.TagNameLen)
 | 
 |  |  | 
 |  |  | 
 | 
 |  |  | m_NAtagGCCrossRealmPKOverInfo=tagGCCrossRealmPKOverInfo()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossRealmPKOverInfo.Head.Cmd,m_NAtagGCCrossRealmPKOverInfo.Head.SubCmd))] = m_NAtagGCCrossRealmPKOverInfo
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # C0 04 跨服PK赛区赛季信息 #tagGCCrossRealmPKSeasonInfo
 | 
 |  |  | 
 | 
 |  |  | class  tagGCCrossRealmPKSeason(Structure):
 | 
 |  |  |     SeasonID = 0    #(WORD SeasonID)// 当前赛季ID
 | 
 |  |  |     StartDate = ""    #(char StartDate[10])// 开始日期 yyyy-MM-dd
 | 
 |  |  |     EndDate = ""    #(char EndDate[10])// 结束日期 yyyy-MM-dd
 | 
 |  |  |     EndTime = ""    #(char EndTime[5])// 赛季结算时间,赛季奖励该时间后才可领取 hh:mm
 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def ReadData(self, _lpData, _pos=0, _Len=0):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.SeasonID,_pos = CommFunc.ReadWORD(_lpData, _pos)
 | 
 |  |  |         self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
 | 
 |  |  |         self.EndDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
 | 
 |  |  |         self.EndTime,_pos = CommFunc.ReadString(_lpData, _pos,5)
 | 
 |  |  |         return _pos
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.SeasonID = 0
 | 
 |  |  |         self.StartDate = ""
 | 
 |  |  |         self.EndDate = ""
 | 
 |  |  |         self.EndTime = ""
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         length = 0
 | 
 |  |  |         length += 2
 | 
 |  |  |         length += 10
 | 
 |  |  |         length += 10
 | 
 |  |  |         length += 5
 | 
 |  |  | 
 | 
 |  |  |         return length
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         data = ''
 | 
 |  |  |         data = CommFunc.WriteWORD(data, self.SeasonID)
 | 
 |  |  |         data = CommFunc.WriteString(data, 10, self.StartDate)
 | 
 |  |  |         data = CommFunc.WriteString(data, 10, self.EndDate)
 | 
 |  |  |         data = CommFunc.WriteString(data, 5, self.EndTime)
 | 
 |  |  |         return data
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''
 | 
 |  |  |                                 SeasonID:%d,
 | 
 |  |  |                                 StartDate:%s,
 | 
 |  |  |                                 EndDate:%s,
 | 
 |  |  |                                 EndTime:%s
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.SeasonID,
 | 
 |  |  |                                 self.StartDate,
 | 
 |  |  |                                 self.EndDate,
 | 
 |  |  |                                 self.EndTime
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | class  tagGCCrossRealmPKZone(Structure):
 | 
 |  |  |     ZoneID = 0    #(BYTE ZoneID)// 赛区ID
 | 
 |  |  |     ZoneNameLen = 0    #(BYTE ZoneNameLen)
 | 
 |  |  |     ZoneName = ""    #(String ZoneName)// 赛区名
 | 
 |  |  |     SeasonCount = 0    #(WORD SeasonCount)
 | 
 |  |  |     SeasonList = list()    #(vector<tagGCCrossRealmPKSeason> SeasonList)// 赛季列表
 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def ReadData(self, _lpData, _pos=0, _Len=0):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.ZoneID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.ZoneNameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.ZoneName,_pos = CommFunc.ReadString(_lpData, _pos,self.ZoneNameLen)
 | 
 |  |  |         self.SeasonCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
 | 
 |  |  |         for i in range(self.SeasonCount):
 | 
 |  |  |             temSeasonList = tagGCCrossRealmPKSeason()
 | 
 |  |  |             _pos = temSeasonList.ReadData(_lpData, _pos)
 | 
 |  |  |             self.SeasonList.append(temSeasonList)
 | 
 |  |  |         return _pos
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.ZoneID = 0
 | 
 |  |  |         self.ZoneNameLen = 0
 | 
 |  |  |         self.ZoneName = ""
 | 
 |  |  |         self.SeasonCount = 0
 | 
 |  |  |         self.SeasonList = list()
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         length = 0
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += len(self.ZoneName)
 | 
 |  |  |         length += 2
 | 
 |  |  |         for i in range(self.SeasonCount):
 | 
 |  |  |             length += self.SeasonList[i].GetLength()
 | 
 |  |  | 
 | 
 |  |  |         return length
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         data = ''
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.ZoneID)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.ZoneNameLen)
 | 
 |  |  |         data = CommFunc.WriteString(data, self.ZoneNameLen, self.ZoneName)
 | 
 |  |  |         data = CommFunc.WriteWORD(data, self.SeasonCount)
 | 
 |  |  |         for i in range(self.SeasonCount):
 | 
 |  |  |             data = CommFunc.WriteString(data, self.SeasonList[i].GetLength(), self.SeasonList[i].GetBuffer())
 | 
 |  |  |         return data
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''
 | 
 |  |  |                                 ZoneID:%d,
 | 
 |  |  |                                 ZoneNameLen:%d,
 | 
 |  |  |                                 ZoneName:%s,
 | 
 |  |  |                                 SeasonCount:%d,
 | 
 |  |  |                                 SeasonList:%s
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.ZoneID,
 | 
 |  |  |                                 self.ZoneNameLen,
 | 
 |  |  |                                 self.ZoneName,
 | 
 |  |  |                                 self.SeasonCount,
 | 
 |  |  |                                 "..."
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | class  tagGCCrossRealmPKSeasonInfo(Structure):
 | 
 |  |  |     Head = tagHead()
 | 
 |  |  |     ZoneCount = 0    #(BYTE ZoneCount)// 赛区个数
 | 
 |  |  |     ZoneList = list()    #(vector<tagGCCrossRealmPKZone> ZoneList)// 赛区列表
 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xC0
 | 
 |  |  |         self.Head.SubCmd = 0x04
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def ReadData(self, _lpData, _pos=0, _Len=0):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         _pos = self.Head.ReadData(_lpData, _pos)
 | 
 |  |  |         self.ZoneCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         for i in range(self.ZoneCount):
 | 
 |  |  |             temZoneList = tagGCCrossRealmPKZone()
 | 
 |  |  |             _pos = temZoneList.ReadData(_lpData, _pos)
 | 
 |  |  |             self.ZoneList.append(temZoneList)
 | 
 |  |  |         return _pos
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.Head = tagHead()
 | 
 |  |  |         self.Head.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xC0
 | 
 |  |  |         self.Head.SubCmd = 0x04
 | 
 |  |  |         self.ZoneCount = 0
 | 
 |  |  |         self.ZoneList = list()
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         length = 0
 | 
 |  |  |         length += self.Head.GetLength()
 | 
 |  |  |         length += 1
 | 
 |  |  |         for i in range(self.ZoneCount):
 | 
 |  |  |             length += self.ZoneList[i].GetLength()
 | 
 |  |  | 
 | 
 |  |  |         return length
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         data = ''
 | 
 |  |  |         data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.ZoneCount)
 | 
 |  |  |         for i in range(self.ZoneCount):
 | 
 |  |  |             data = CommFunc.WriteString(data, self.ZoneList[i].GetLength(), self.ZoneList[i].GetBuffer())
 | 
 |  |  |         return data
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''
 | 
 |  |  |                                 Head:%s,
 | 
 |  |  |                                 ZoneCount:%d,
 | 
 |  |  |                                 ZoneList:%s
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Head.OutputString(),
 | 
 |  |  |                                 self.ZoneCount,
 | 
 |  |  |                                 "..."
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagGCCrossRealmPKSeasonInfo=tagGCCrossRealmPKSeasonInfo()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossRealmPKSeasonInfo.Head.Cmd,m_NAtagGCCrossRealmPKSeasonInfo.Head.SubCmd))] = m_NAtagGCCrossRealmPKSeasonInfo
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # C0 06 跨服PK本服赛季状态 #tagGCCrossRealmPKSeasonState
 | 
 |  |  | 
 | 
 |  |  | class  tagGCCrossRealmPKSeasonState(Structure):
 | 
 |  |  |     _pack_ = 1
 | 
 |  |  |     _fields_ = [
 | 
 |  |  |                   ("Cmd", c_ubyte),
 | 
 |  |  |                   ("SubCmd", c_ubyte),
 | 
 |  |  |                   ("ZoneID", c_ubyte),    # 所属赛区ID
 | 
 |  |  |                   ("SeasonID", c_ushort),    # 当前赛季ID
 | 
 |  |  |                   ("SeasonState", c_ubyte),    # 赛季状态;0-未开启,1-开启中,2-已结束
 | 
 |  |  |                   ("MatchState", c_ubyte),    # 匹配状态;0-未开启;1-开启中
 | 
 |  |  |                   ]
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Cmd = 0xC0
 | 
 |  |  |         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 = 0xC0
 | 
 |  |  |         self.SubCmd = 0x06
 | 
 |  |  |         self.ZoneID = 0
 | 
 |  |  |         self.SeasonID = 0
 | 
 |  |  |         self.SeasonState = 0
 | 
 |  |  |         self.MatchState = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         return sizeof(tagGCCrossRealmPKSeasonState)
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         return string_at(addressof(self), self.GetLength())
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''// C0 06 跨服PK本服赛季状态 //tagGCCrossRealmPKSeasonState:
 | 
 |  |  |                                 Cmd:%s,
 | 
 |  |  |                                 SubCmd:%s,
 | 
 |  |  |                                 ZoneID:%d,
 | 
 |  |  |                                 SeasonID:%d,
 | 
 |  |  |                                 SeasonState:%d,
 | 
 |  |  |                                 MatchState:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Cmd,
 | 
 |  |  |                                 self.SubCmd,
 | 
 |  |  |                                 self.ZoneID,
 | 
 |  |  |                                 self.SeasonID,
 | 
 |  |  |                                 self.SeasonState,
 | 
 |  |  |                                 self.MatchState
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagGCCrossRealmPKSeasonState=tagGCCrossRealmPKSeasonState()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossRealmPKSeasonState.Cmd,m_NAtagGCCrossRealmPKSeasonState.SubCmd))] = m_NAtagGCCrossRealmPKSeasonState
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | 
 |  |  | 
 | 
 |  |  | m_NAtagGCCrossRealmPKStartMatch=tagGCCrossRealmPKStartMatch()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossRealmPKStartMatch.Cmd,m_NAtagGCCrossRealmPKStartMatch.SubCmd))] = m_NAtagGCCrossRealmPKStartMatch
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # D1 25 通知可进入跨服王者争霸 #tagCanEnterMergeKing
 | 
 |  |  | 
 | 
 |  |  | class  tagCanEnterMergeKing(Structure):
 | 
 |  |  |     _pack_ = 1
 | 
 |  |  |     _fields_ = [
 | 
 |  |  |                   ("Cmd", c_ubyte),
 | 
 |  |  |                   ("SubCmd", c_ubyte),
 | 
 |  |  |                   ("GroupType", c_ubyte),    # 战斗赛事组类型,如16强等
 | 
 |  |  |                   ]
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Cmd = 0xD1
 | 
 |  |  |         self.SubCmd = 0x25
 | 
 |  |  |         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 = 0xD1
 | 
 |  |  |         self.SubCmd = 0x25
 | 
 |  |  |         self.GroupType = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         return sizeof(tagCanEnterMergeKing)
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         return string_at(addressof(self), self.GetLength())
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''// D1 25 通知可进入跨服王者争霸 //tagCanEnterMergeKing:
 | 
 |  |  |                                 Cmd:%s,
 | 
 |  |  |                                 SubCmd:%s,
 | 
 |  |  |                                 GroupType:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Cmd,
 | 
 |  |  |                                 self.SubCmd,
 | 
 |  |  |                                 self.GroupType
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagCanEnterMergeKing=tagCanEnterMergeKing()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCanEnterMergeKing.Cmd,m_NAtagCanEnterMergeKing.SubCmd))] = m_NAtagCanEnterMergeKing
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # D1 24 通知可进入跨服PK匹配 #tagCanEnterMergePK
 | 
 |  |  | 
 | 
 |  |  | class  tagCanEnterMergePKMember(Structure):
 | 
 |  |  |     Head = tagHead()
 | 
 |  |  |     AccIDLen = 0    #(BYTE AccIDLen)
 | 
 |  |  |     AccID = ""    #(String AccID)
 | 
 |  |  |     NameLen = 0    #(BYTE NameLen)
 | 
 |  |  |     PlayerName = ""    #(String PlayerName)
 | 
 |  |  |     Job = 0    #(BYTE Job)
 | 
 |  |  |     PKCnt = 0    #(DWORD PKCnt)// 已PK次数
 | 
 |  |  |     PKCWinCnt = 0    #(DWORD PKCWinCnt)// 当前连胜次数
 | 
 |  |  |     Score = 0    #(DWORD Score)// 赛季积分
 | 
 |  |  |     DayScore = 0    #(DWORD DayScore)// 当日积分
 | 
 |  |  |     PKWinCnt = 0    #(DWORD PKWinCnt)// 累计胜利次数
 | 
 |  |  |     MaxCWinCnt = 0    #(DWORD MaxCWinCnt)// 最大连胜次数
 | 
 |  |  |     Grade = 0    #(BYTE Grade)// 当前段位
 | 
 |  |  |     FightPower = 0    #(DWORD FightPower)// 战斗力
 | 
 |  |  |     PlayerLV = 0    #(WORD PlayerLV)// 等级
 | 
 |  |  |     MaxHP = 0    #(DWORD MaxHP)// 最大生命值
 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xD1
 | 
 |  |  |         self.Head.SubCmd = 0x24
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def ReadData(self, _lpData, _pos=0, _Len=0):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         _pos = self.Head.ReadData(_lpData, _pos)
 | 
 |  |  |         self.AccIDLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.AccID,_pos = CommFunc.ReadString(_lpData, _pos,self.AccIDLen)
 | 
 |  |  |         self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
 | 
 |  |  |         self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.PKCnt,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.PKCWinCnt,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.Score,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.DayScore,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.PKWinCnt,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.MaxCWinCnt,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.Grade,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.PlayerLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
 | 
 |  |  |         self.MaxHP,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         return _pos
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.Head = tagHead()
 | 
 |  |  |         self.Head.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xD1
 | 
 |  |  |         self.Head.SubCmd = 0x24
 | 
 |  |  |         self.AccIDLen = 0
 | 
 |  |  |         self.AccID = ""
 | 
 |  |  |         self.NameLen = 0
 | 
 |  |  |         self.PlayerName = ""
 | 
 |  |  |         self.Job = 0
 | 
 |  |  |         self.PKCnt = 0
 | 
 |  |  |         self.PKCWinCnt = 0
 | 
 |  |  |         self.Score = 0
 | 
 |  |  |         self.DayScore = 0
 | 
 |  |  |         self.PKWinCnt = 0
 | 
 |  |  |         self.MaxCWinCnt = 0
 | 
 |  |  |         self.Grade = 0
 | 
 |  |  |         self.FightPower = 0
 | 
 |  |  |         self.PlayerLV = 0
 | 
 |  |  |         self.MaxHP = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         length = 0
 | 
 |  |  |         length += self.Head.GetLength()
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += len(self.AccID)
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += len(self.PlayerName)
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 2
 | 
 |  |  |         length += 4
 | 
 |  |  | 
 | 
 |  |  |         return length
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         data = ''
 | 
 |  |  |         data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.AccIDLen)
 | 
 |  |  |         data = CommFunc.WriteString(data, self.AccIDLen, self.AccID)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.NameLen)
 | 
 |  |  |         data = CommFunc.WriteString(data, self.NameLen, self.PlayerName)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.Job)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.PKCnt)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.PKCWinCnt)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.Score)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.DayScore)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.PKWinCnt)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.MaxCWinCnt)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.Grade)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.FightPower)
 | 
 |  |  |         data = CommFunc.WriteWORD(data, self.PlayerLV)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.MaxHP)
 | 
 |  |  |         return data
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''
 | 
 |  |  |                                 Head:%s,
 | 
 |  |  |                                 AccIDLen:%d,
 | 
 |  |  |                                 AccID:%s,
 | 
 |  |  |                                 NameLen:%d,
 | 
 |  |  |                                 PlayerName:%s,
 | 
 |  |  |                                 Job:%d,
 | 
 |  |  |                                 PKCnt:%d,
 | 
 |  |  |                                 PKCWinCnt:%d,
 | 
 |  |  |                                 Score:%d,
 | 
 |  |  |                                 DayScore:%d,
 | 
 |  |  |                                 PKWinCnt:%d,
 | 
 |  |  |                                 MaxCWinCnt:%d,
 | 
 |  |  |                                 Grade:%d,
 | 
 |  |  |                                 FightPower:%d,
 | 
 |  |  |                                 PlayerLV:%d,
 | 
 |  |  |                                 MaxHP:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Head.OutputString(),
 | 
 |  |  |                                 self.AccIDLen,
 | 
 |  |  |                                 self.AccID,
 | 
 |  |  |                                 self.NameLen,
 | 
 |  |  |                                 self.PlayerName,
 | 
 |  |  |                                 self.Job,
 | 
 |  |  |                                 self.PKCnt,
 | 
 |  |  |                                 self.PKCWinCnt,
 | 
 |  |  |                                 self.Score,
 | 
 |  |  |                                 self.DayScore,
 | 
 |  |  |                                 self.PKWinCnt,
 | 
 |  |  |                                 self.MaxCWinCnt,
 | 
 |  |  |                                 self.Grade,
 | 
 |  |  |                                 self.FightPower,
 | 
 |  |  |                                 self.PlayerLV,
 | 
 |  |  |                                 self.MaxHP
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | class  tagCanEnterMergePK(Structure):
 | 
 |  |  |     Head = tagHead()
 | 
 |  |  |     MapID = 0    #(DWORD MapID)// 要进入的地图ID
 | 
 |  |  |     RoomID = 0    #(DWORD RoomID)// 要进入的房间ID
 | 
 |  |  |     MemberCnt = 0    #(BYTE MemberCnt)// 对战玩家个数
 | 
 |  |  |     MemberList = list()    #(vector<tagCanEnterMergePKMember> MemberList)// 对战玩家详细信息
 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xD1
 | 
 |  |  |         self.Head.SubCmd = 0x24
 | 
 |  |  |         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.RoomID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.MemberCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         for i in range(self.MemberCnt):
 | 
 |  |  |             temMemberList = tagCanEnterMergePKMember()
 | 
 |  |  |             _pos = temMemberList.ReadData(_lpData, _pos)
 | 
 |  |  |             self.MemberList.append(temMemberList)
 | 
 |  |  |         return _pos
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.Head = tagHead()
 | 
 |  |  |         self.Head.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xD1
 | 
 |  |  |         self.Head.SubCmd = 0x24
 | 
 |  |  |         self.MapID = 0
 | 
 |  |  |         self.RoomID = 0
 | 
 |  |  |         self.MemberCnt = 0
 | 
 |  |  |         self.MemberList = list()
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         length = 0
 | 
 |  |  |         length += self.Head.GetLength()
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 1
 | 
 |  |  |         for i in range(self.MemberCnt):
 | 
 |  |  |             length += self.MemberList[i].GetLength()
 | 
 |  |  | 
 | 
 |  |  |         return length
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         data = ''
 | 
 |  |  |         data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.MapID)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.RoomID)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.MemberCnt)
 | 
 |  |  |         for i in range(self.MemberCnt):
 | 
 |  |  |             data = CommFunc.WriteString(data, self.MemberList[i].GetLength(), self.MemberList[i].GetBuffer())
 | 
 |  |  |         return data
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''
 | 
 |  |  |                                 Head:%s,
 | 
 |  |  |                                 MapID:%d,
 | 
 |  |  |                                 RoomID:%d,
 | 
 |  |  |                                 MemberCnt:%d,
 | 
 |  |  |                                 MemberList:%s
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Head.OutputString(),
 | 
 |  |  |                                 self.MapID,
 | 
 |  |  |                                 self.RoomID,
 | 
 |  |  |                                 self.MemberCnt,
 | 
 |  |  |                                 "..."
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagCanEnterMergePK=tagCanEnterMergePK()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCanEnterMergePK.Head.Cmd,m_NAtagCanEnterMergePK.Head.SubCmd))] = m_NAtagCanEnterMergePK
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # D1 23 通知可进入跨服活动 #tagCanEnterMergeServer
 | 
 |  |  | 
 | 
 |  |  | class  tagCanEnterMergeServer(Structure):
 | 
 |  |  |     Head = tagHead()
 | 
 |  |  |     ActionType = 0    #(BYTE ActionType)//活动类型
 | 
 |  |  |     MapID = 0    #(DWORD MapID)// 登录后在中转地图时要跳转进入的地图ID
 | 
 |  |  |     LineID = 0    #(DWORD LineID)// 要进入的线路或地图扩展数据
 | 
 |  |  |     NewAccIDLen = 0    #(BYTE NewAccIDLen)
 | 
 |  |  |     NewAccID = ""    #(String NewAccID)
 | 
 |  |  |     NewPswLen = 0    #(BYTE NewPswLen)
 | 
 |  |  |     NewPsw = ""    #(String NewPsw)
 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xD1
 | 
 |  |  |         self.Head.SubCmd = 0x23
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def ReadData(self, _lpData, _pos=0, _Len=0):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         _pos = self.Head.ReadData(_lpData, _pos)
 | 
 |  |  |         self.ActionType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.MapID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.LineID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.NewAccIDLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.NewAccID,_pos = CommFunc.ReadString(_lpData, _pos,self.NewAccIDLen)
 | 
 |  |  |         self.NewPswLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.NewPsw,_pos = CommFunc.ReadString(_lpData, _pos,self.NewPswLen)
 | 
 |  |  |         return _pos
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.Head = tagHead()
 | 
 |  |  |         self.Head.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xD1
 | 
 |  |  |         self.Head.SubCmd = 0x23
 | 
 |  |  |         self.ActionType = 0
 | 
 |  |  |         self.MapID = 0
 | 
 |  |  |         self.LineID = 0
 | 
 |  |  |         self.NewAccIDLen = 0
 | 
 |  |  |         self.NewAccID = ""
 | 
 |  |  |         self.NewPswLen = 0
 | 
 |  |  |         self.NewPsw = ""
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         length = 0
 | 
 |  |  |         length += self.Head.GetLength()
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += len(self.NewAccID)
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += len(self.NewPsw)
 | 
 |  |  | 
 | 
 |  |  |         return length
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         data = ''
 | 
 |  |  |         data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.ActionType)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.MapID)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.LineID)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.NewAccIDLen)
 | 
 |  |  |         data = CommFunc.WriteString(data, self.NewAccIDLen, self.NewAccID)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.NewPswLen)
 | 
 |  |  |         data = CommFunc.WriteString(data, self.NewPswLen, self.NewPsw)
 | 
 |  |  |         return data
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''
 | 
 |  |  |                                 Head:%s,
 | 
 |  |  |                                 ActionType:%d,
 | 
 |  |  |                                 MapID:%d,
 | 
 |  |  |                                 LineID:%d,
 | 
 |  |  |                                 NewAccIDLen:%d,
 | 
 |  |  |                                 NewAccID:%s,
 | 
 |  |  |                                 NewPswLen:%d,
 | 
 |  |  |                                 NewPsw:%s
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Head.OutputString(),
 | 
 |  |  |                                 self.ActionType,
 | 
 |  |  |                                 self.MapID,
 | 
 |  |  |                                 self.LineID,
 | 
 |  |  |                                 self.NewAccIDLen,
 | 
 |  |  |                                 self.NewAccID,
 | 
 |  |  |                                 self.NewPswLen,
 | 
 |  |  |                                 self.NewPsw
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagCanEnterMergeServer=tagCanEnterMergeServer()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCanEnterMergeServer.Head.Cmd,m_NAtagCanEnterMergeServer.Head.SubCmd))] = m_NAtagCanEnterMergeServer
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | #D1 08 上传数据查询结果 #tagMergeRegisterQueryResult
 | 
 |  |  | 
 | 
 |  |  | class  tagMergeRegisterQueryResult(Structure):
 | 
 |  |  |     Head = tagHead()
 | 
 |  |  |     NewAccIDLen = 0    #(BYTE NewAccIDLen)
 | 
 |  |  |     NewAccID = ""    #(String NewAccID)
 | 
 |  |  |     NewPswLen = 0    #(BYTE NewPswLen)
 | 
 |  |  |     NewPsw = ""    #(String NewPsw)
 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xD1
 | 
 |  |  |         self.Head.SubCmd = 0x08
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def ReadData(self, _lpData, _pos=0, _Len=0):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         _pos = self.Head.ReadData(_lpData, _pos)
 | 
 |  |  |         self.NewAccIDLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.NewAccID,_pos = CommFunc.ReadString(_lpData, _pos,self.NewAccIDLen)
 | 
 |  |  |         self.NewPswLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.NewPsw,_pos = CommFunc.ReadString(_lpData, _pos,self.NewPswLen)
 | 
 |  |  |         return _pos
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.Head = tagHead()
 | 
 |  |  |         self.Head.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xD1
 | 
 |  |  |         self.Head.SubCmd = 0x08
 | 
 |  |  |         self.NewAccIDLen = 0
 | 
 |  |  |         self.NewAccID = ""
 | 
 |  |  |         self.NewPswLen = 0
 | 
 |  |  |         self.NewPsw = ""
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         length = 0
 | 
 |  |  |         length += self.Head.GetLength()
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += len(self.NewAccID)
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += len(self.NewPsw)
 | 
 |  |  | 
 | 
 |  |  |         return length
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         data = ''
 | 
 |  |  |         data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.NewAccIDLen)
 | 
 |  |  |         data = CommFunc.WriteString(data, self.NewAccIDLen, self.NewAccID)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.NewPswLen)
 | 
 |  |  |         data = CommFunc.WriteString(data, self.NewPswLen, self.NewPsw)
 | 
 |  |  |         return data
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''
 | 
 |  |  |                                 Head:%s,
 | 
 |  |  |                                 NewAccIDLen:%d,
 | 
 |  |  |                                 NewAccID:%s,
 | 
 |  |  |                                 NewPswLen:%d,
 | 
 |  |  |                                 NewPsw:%s
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Head.OutputString(),
 | 
 |  |  |                                 self.NewAccIDLen,
 | 
 |  |  |                                 self.NewAccID,
 | 
 |  |  |                                 self.NewPswLen,
 | 
 |  |  |                                 self.NewPsw
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagMergeRegisterQueryResult=tagMergeRegisterQueryResult()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMergeRegisterQueryResult.Head.Cmd,m_NAtagMergeRegisterQueryResult.Head.SubCmd))] = m_NAtagMergeRegisterQueryResult
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | #D1 16  跨服赛服务器信息 #tagMergeServerInfo
 | 
 |  |  | 
 | 
 |  |  | class  tagMergeServerInfo(Structure):
 | 
 |  |  |     Head = tagHead()
 | 
 |  |  |     ServerIPLen = 0    #(BYTE ServerIPLen)
 | 
 |  |  |     ServerIP = ""    #(String ServerIP)
 | 
 |  |  |     Port = 0    #(DWORD Port)
 | 
 |  |  |     IsMergeServer = 0    #(BYTE IsMergeServer)
 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xD1
 | 
 |  |  |         self.Head.SubCmd = 0x16
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def ReadData(self, _lpData, _pos=0, _Len=0):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         _pos = self.Head.ReadData(_lpData, _pos)
 | 
 |  |  |         self.ServerIPLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.ServerIP,_pos = CommFunc.ReadString(_lpData, _pos,self.ServerIPLen)
 | 
 |  |  |         self.Port,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.IsMergeServer,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         return _pos
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.Head = tagHead()
 | 
 |  |  |         self.Head.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xD1
 | 
 |  |  |         self.Head.SubCmd = 0x16
 | 
 |  |  |         self.ServerIPLen = 0
 | 
 |  |  |         self.ServerIP = ""
 | 
 |  |  |         self.Port = 0
 | 
 |  |  |         self.IsMergeServer = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         length = 0
 | 
 |  |  |         length += self.Head.GetLength()
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += len(self.ServerIP)
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 1
 | 
 |  |  | 
 | 
 |  |  |         return length
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         data = ''
 | 
 |  |  |         data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.ServerIPLen)
 | 
 |  |  |         data = CommFunc.WriteString(data, self.ServerIPLen, self.ServerIP)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.Port)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.IsMergeServer)
 | 
 |  |  |         return data
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''
 | 
 |  |  |                                 Head:%s,
 | 
 |  |  |                                 ServerIPLen:%d,
 | 
 |  |  |                                 ServerIP:%s,
 | 
 |  |  |                                 Port:%d,
 | 
 |  |  |                                 IsMergeServer:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Head.OutputString(),
 | 
 |  |  |                                 self.ServerIPLen,
 | 
 |  |  |                                 self.ServerIP,
 | 
 |  |  |                                 self.Port,
 | 
 |  |  |                                 self.IsMergeServer
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagMergeServerInfo=tagMergeServerInfo()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMergeServerInfo.Head.Cmd,m_NAtagMergeServerInfo.Head.SubCmd))] = m_NAtagMergeServerInfo
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # D1 27 通知跨服PK战斗结果 #tagMergePKOverInfo
 | 
 |  |  | 
 | 
 |  |  | class  tagMergePKOver(Structure):
 | 
 |  |  |     TimeLen = 0    #(BYTE TimeLen)
 | 
 |  |  |     TimeStr = ""    #(String TimeStr)// yyyy-MM-dd HH:mm:ss
 | 
 |  |  |     RoomID = 0    #(DWORD RoomID)
 | 
 |  |  |     OverType = 0    #(BYTE OverType)
 | 
 |  |  |     RemainTime = 0    #(DWORD RemainTime)
 | 
 |  |  |     WinnerAccIDLen = 0    #(BYTE WinnerAccIDLen)
 | 
 |  |  |     WinnerAccID = ""    #(String WinnerAccID)
 | 
 |  |  |     LoserAccIDLen = 0    #(BYTE LoserAccIDLen)
 | 
 |  |  |     LoserAccID = ""    #(String LoserAccID)
 | 
 |  |  |     WinnerID = 0    #(DWORD WinnerID)
 | 
 |  |  |     LoserID = 0    #(DWORD LoserID)
 | 
 |  |  |     WinnerNameLen = 0    #(BYTE WinnerNameLen)
 | 
 |  |  |     WinnerName = ""    #(String WinnerName)
 | 
 |  |  |     LoserNameLen = 0    #(BYTE LoserNameLen)
 | 
 |  |  |     LoserName = ""    #(String LoserName)
 | 
 |  |  |     WinnerAddScore = 0    #(WORD WinnerAddScore)
 | 
 |  |  |     LoserAddScoreLen = 0    #(BYTE LoserAddScoreLen)
 | 
 |  |  |     LoserAddScore = ""    #(String LoserAddScore)// 失败附加分,支持负值
 | 
 |  |  |     WinnerWinCnt = 0    #(BYTE WinnerWinCnt)// 比分获胜方获胜次数
 | 
 |  |  |     LoserWinCnt = 0    #(BYTE LoserWinCnt)// 比分失败方获胜次数
 | 
 |  |  |     WinnerCWinCnt = 0    #(WORD WinnerCWinCnt)// 获胜者连胜数
 | 
 |  |  |     LuckyItemID = 0    #(DWORD LuckyItemID)
 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def ReadData(self, _lpData, _pos=0, _Len=0):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.TimeLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.TimeStr,_pos = CommFunc.ReadString(_lpData, _pos,self.TimeLen)
 | 
 |  |  |         self.RoomID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.OverType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.RemainTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.WinnerAccIDLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.WinnerAccID,_pos = CommFunc.ReadString(_lpData, _pos,self.WinnerAccIDLen)
 | 
 |  |  |         self.LoserAccIDLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.LoserAccID,_pos = CommFunc.ReadString(_lpData, _pos,self.LoserAccIDLen)
 | 
 |  |  |         self.WinnerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.LoserID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.WinnerNameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.WinnerName,_pos = CommFunc.ReadString(_lpData, _pos,self.WinnerNameLen)
 | 
 |  |  |         self.LoserNameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.LoserName,_pos = CommFunc.ReadString(_lpData, _pos,self.LoserNameLen)
 | 
 |  |  |         self.WinnerAddScore,_pos = CommFunc.ReadWORD(_lpData, _pos)
 | 
 |  |  |         self.LoserAddScoreLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.LoserAddScore,_pos = CommFunc.ReadString(_lpData, _pos,self.LoserAddScoreLen)
 | 
 |  |  |         self.WinnerWinCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.LoserWinCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.WinnerCWinCnt,_pos = CommFunc.ReadWORD(_lpData, _pos)
 | 
 |  |  |         self.LuckyItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         return _pos
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.TimeLen = 0
 | 
 |  |  |         self.TimeStr = ""
 | 
 |  |  |         self.RoomID = 0
 | 
 |  |  |         self.OverType = 0
 | 
 |  |  |         self.RemainTime = 0
 | 
 |  |  |         self.WinnerAccIDLen = 0
 | 
 |  |  |         self.WinnerAccID = ""
 | 
 |  |  |         self.LoserAccIDLen = 0
 | 
 |  |  |         self.LoserAccID = ""
 | 
 |  |  |         self.WinnerID = 0
 | 
 |  |  |         self.LoserID = 0
 | 
 |  |  |         self.WinnerNameLen = 0
 | 
 |  |  |         self.WinnerName = ""
 | 
 |  |  |         self.LoserNameLen = 0
 | 
 |  |  |         self.LoserName = ""
 | 
 |  |  |         self.WinnerAddScore = 0
 | 
 |  |  |         self.LoserAddScoreLen = 0
 | 
 |  |  |         self.LoserAddScore = ""
 | 
 |  |  |         self.WinnerWinCnt = 0
 | 
 |  |  |         self.LoserWinCnt = 0
 | 
 |  |  |         self.WinnerCWinCnt = 0
 | 
 |  |  |         self.LuckyItemID = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         length = 0
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += len(self.TimeStr)
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += len(self.WinnerAccID)
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += len(self.LoserAccID)
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += len(self.WinnerName)
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += len(self.LoserName)
 | 
 |  |  |         length += 2
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += len(self.LoserAddScore)
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += 2
 | 
 |  |  |         length += 4
 | 
 |  |  | 
 | 
 |  |  |         return length
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         data = ''
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.TimeLen)
 | 
 |  |  |         data = CommFunc.WriteString(data, self.TimeLen, self.TimeStr)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.RoomID)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.OverType)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.RemainTime)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.WinnerAccIDLen)
 | 
 |  |  |         data = CommFunc.WriteString(data, self.WinnerAccIDLen, self.WinnerAccID)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.LoserAccIDLen)
 | 
 |  |  |         data = CommFunc.WriteString(data, self.LoserAccIDLen, self.LoserAccID)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.WinnerID)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.LoserID)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.WinnerNameLen)
 | 
 |  |  |         data = CommFunc.WriteString(data, self.WinnerNameLen, self.WinnerName)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.LoserNameLen)
 | 
 |  |  |         data = CommFunc.WriteString(data, self.LoserNameLen, self.LoserName)
 | 
 |  |  |         data = CommFunc.WriteWORD(data, self.WinnerAddScore)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.LoserAddScoreLen)
 | 
 |  |  |         data = CommFunc.WriteString(data, self.LoserAddScoreLen, self.LoserAddScore)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.WinnerWinCnt)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.LoserWinCnt)
 | 
 |  |  |         data = CommFunc.WriteWORD(data, self.WinnerCWinCnt)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.LuckyItemID)
 | 
 |  |  |         return data
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''
 | 
 |  |  |                                 TimeLen:%d,
 | 
 |  |  |                                 TimeStr:%s,
 | 
 |  |  |                                 RoomID:%d,
 | 
 |  |  |                                 OverType:%d,
 | 
 |  |  |                                 RemainTime:%d,
 | 
 |  |  |                                 WinnerAccIDLen:%d,
 | 
 |  |  |                                 WinnerAccID:%s,
 | 
 |  |  |                                 LoserAccIDLen:%d,
 | 
 |  |  |                                 LoserAccID:%s,
 | 
 |  |  |                                 WinnerID:%d,
 | 
 |  |  |                                 LoserID:%d,
 | 
 |  |  |                                 WinnerNameLen:%d,
 | 
 |  |  |                                 WinnerName:%s,
 | 
 |  |  |                                 LoserNameLen:%d,
 | 
 |  |  |                                 LoserName:%s,
 | 
 |  |  |                                 WinnerAddScore:%d,
 | 
 |  |  |                                 LoserAddScoreLen:%d,
 | 
 |  |  |                                 LoserAddScore:%s,
 | 
 |  |  |                                 WinnerWinCnt:%d,
 | 
 |  |  |                                 LoserWinCnt:%d,
 | 
 |  |  |                                 WinnerCWinCnt:%d,
 | 
 |  |  |                                 LuckyItemID:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.TimeLen,
 | 
 |  |  |                                 self.TimeStr,
 | 
 |  |  |                                 self.RoomID,
 | 
 |  |  |                                 self.OverType,
 | 
 |  |  |                                 self.RemainTime,
 | 
 |  |  |                                 self.WinnerAccIDLen,
 | 
 |  |  |                                 self.WinnerAccID,
 | 
 |  |  |                                 self.LoserAccIDLen,
 | 
 |  |  |                                 self.LoserAccID,
 | 
 |  |  |                                 self.WinnerID,
 | 
 |  |  |                                 self.LoserID,
 | 
 |  |  |                                 self.WinnerNameLen,
 | 
 |  |  |                                 self.WinnerName,
 | 
 |  |  |                                 self.LoserNameLen,
 | 
 |  |  |                                 self.LoserName,
 | 
 |  |  |                                 self.WinnerAddScore,
 | 
 |  |  |                                 self.LoserAddScoreLen,
 | 
 |  |  |                                 self.LoserAddScore,
 | 
 |  |  |                                 self.WinnerWinCnt,
 | 
 |  |  |                                 self.LoserWinCnt,
 | 
 |  |  |                                 self.WinnerCWinCnt,
 | 
 |  |  |                                 self.LuckyItemID
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | class  tagMergePKOverInfo(Structure):
 | 
 |  |  |     Head = tagHead()
 | 
 |  |  |     Count = 0    #(BYTE Count)
 | 
 |  |  |     PKOverList = list()    #(vector<tagMergePKOver> PKOverList)
 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xD1
 | 
 |  |  |         self.Head.SubCmd = 0x27
 | 
 |  |  |         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):
 | 
 |  |  |             temPKOverList = tagMergePKOver()
 | 
 |  |  |             _pos = temPKOverList.ReadData(_lpData, _pos)
 | 
 |  |  |             self.PKOverList.append(temPKOverList)
 | 
 |  |  |         return _pos
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.Head = tagHead()
 | 
 |  |  |         self.Head.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xD1
 | 
 |  |  |         self.Head.SubCmd = 0x27
 | 
 |  |  |         self.Count = 0
 | 
 |  |  |         self.PKOverList = list()
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         length = 0
 | 
 |  |  |         length += self.Head.GetLength()
 | 
 |  |  |         length += 1
 | 
 |  |  |         for i in range(self.Count):
 | 
 |  |  |             length += self.PKOverList[i].GetLength()
 | 
 |  |  | 
 | 
 |  |  |         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.WriteString(data, self.PKOverList[i].GetLength(), self.PKOverList[i].GetBuffer())
 | 
 |  |  |         return data
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''
 | 
 |  |  |                                 Head:%s,
 | 
 |  |  |                                 Count:%d,
 | 
 |  |  |                                 PKOverList:%s
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Head.OutputString(),
 | 
 |  |  |                                 self.Count,
 | 
 |  |  |                                 "..."
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagMergePKOverInfo=tagMergePKOverInfo()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMergePKOverInfo.Head.Cmd,m_NAtagMergePKOverInfo.Head.SubCmd))] = m_NAtagMergePKOverInfo
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # D1 28 跨服PK赛季信息 #tagGCMergePKSeasonInfo
 | 
 |  |  | 
 | 
 |  |  | class  tagGCMergePKSeasonInfo(Structure):
 | 
 |  |  |     _pack_ = 1
 | 
 |  |  |     _fields_ = [
 | 
 |  |  |                   ("Cmd", c_ubyte),
 | 
 |  |  |                   ("SubCmd", c_ubyte),
 | 
 |  |  |                   ("SeasonID", c_int),    # 赛季ID
 | 
 |  |  |                   ("SeasonStartTime", c_int),    # 赛季开始时间
 | 
 |  |  |                   ("SeasonCycle", c_ubyte),    # 赛季周期天数
 | 
 |  |  |                   ("IsSeasonEnd", c_ubyte),    # 赛季是否结束
 | 
 |  |  |                   ]
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Cmd = 0xD1
 | 
 |  |  |         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 = 0xD1
 | 
 |  |  |         self.SubCmd = 0x28
 | 
 |  |  |         self.SeasonID = 0
 | 
 |  |  |         self.SeasonStartTime = 0
 | 
 |  |  |         self.SeasonCycle = 0
 | 
 |  |  |         self.IsSeasonEnd = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         return sizeof(tagGCMergePKSeasonInfo)
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         return string_at(addressof(self), self.GetLength())
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''// D1 28 跨服PK赛季信息 //tagGCMergePKSeasonInfo:
 | 
 |  |  |                                 Cmd:%s,
 | 
 |  |  |                                 SubCmd:%s,
 | 
 |  |  |                                 SeasonID:%d,
 | 
 |  |  |                                 SeasonStartTime:%d,
 | 
 |  |  |                                 SeasonCycle:%d,
 | 
 |  |  |                                 IsSeasonEnd:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Cmd,
 | 
 |  |  |                                 self.SubCmd,
 | 
 |  |  |                                 self.SeasonID,
 | 
 |  |  |                                 self.SeasonStartTime,
 | 
 |  |  |                                 self.SeasonCycle,
 | 
 |  |  |                                 self.IsSeasonEnd
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagGCMergePKSeasonInfo=tagGCMergePKSeasonInfo()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCMergePKSeasonInfo.Cmd,m_NAtagGCMergePKSeasonInfo.SubCmd))] = m_NAtagGCMergePKSeasonInfo
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # D1 26 通知跨服PK续胜结果 #tagRecoverMergePKWinOK
 | 
 |  |  | 
 | 
 |  |  | class  tagRecoverMergePKWinOK(Structure):
 | 
 |  |  |     _pack_ = 1
 | 
 |  |  |     _fields_ = [
 | 
 |  |  |                   ("Cmd", c_ubyte),
 | 
 |  |  |                   ("SubCmd", c_ubyte),
 | 
 |  |  |                   ]
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Cmd = 0xD1
 | 
 |  |  |         self.SubCmd = 0x26
 | 
 |  |  |         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 = 0xD1
 | 
 |  |  |         self.SubCmd = 0x26
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         return sizeof(tagRecoverMergePKWinOK)
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         return string_at(addressof(self), self.GetLength())
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''// D1 26 通知跨服PK续胜结果 //tagRecoverMergePKWinOK:
 | 
 |  |  |                                 Cmd:%s,
 | 
 |  |  |                                 SubCmd:%s
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Cmd,
 | 
 |  |  |                                 self.SubCmd
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagRecoverMergePKWinOK=tagRecoverMergePKWinOK()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagRecoverMergePKWinOK.Cmd,m_NAtagRecoverMergePKWinOK.SubCmd))] = m_NAtagRecoverMergePKWinOK
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | 
 |  |  | 
 | 
 |  |  | m_NAtagMCCoinToGoldReport=tagMCCoinToGoldReport()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCoinToGoldReport.Head.Cmd,m_NAtagMCCoinToGoldReport.Head.SubCmd))] = m_NAtagMCCoinToGoldReport
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # A1 12 玩家初始化 #tagMCDBPlayer
 | 
 |  |  | 
 | 
 |  |  | class  tagMCDBPlayer(Structure):
 | 
 |  |  |     Head = tagHead()
 | 
 |  |  |     AccID = ""    #(char AccID[65])//帐号名, 该角色所在的帐号的用户名
 | 
 |  |  |     PlayerID = 0    #(DWORD PlayerID)
 | 
 |  |  |     PlayerName = ""    #(char PlayerName[33])//size = 14
 | 
 |  |  |     AccState = 0    #(BYTE AccState)//0: 未创建, 1: 创建OK,正常登录 2:封号 3:已删除
 | 
 |  |  |     GMLevel = 0    #(BYTE GMLevel)//GM等级, 0:不是GM  >=1 : GM的等级
 | 
 |  |  |     Sex = 0    #(BYTE Sex)//性别
 | 
 |  |  |     Job = 0    #(BYTE Job)//职业, 0.新手 1.游侠 2.战士 3.弓箭手 4.术士 5.道士
 | 
 |  |  |     ReincarnationLv = 0    #(WORD ReincarnationLv)// 转生等级
 | 
 |  |  |     LV = 0    #(WORD LV)//等级
 | 
 |  |  |     LVEx = 0    #(WORD LVEx)//玩家等级副本,用于转生
 | 
 |  |  |     LV2 = 0    #(WORD LV2)//大师等级
 | 
 |  |  |     ExpPoint = 0    #(DWORD ExpPoint)//扩充经验点数
 | 
 |  |  |     TotalExp = 0    #(DWORD TotalExp)//总经验
 | 
 |  |  |     Family = 0    #(DWORD Family)//家族
 | 
 |  |  |     FamilyName = ""    #(char FamilyName[33])//家族名称
 | 
 |  |  |     TeamHornor = 0    #(int TeamHornor)//组队荣誉
 | 
 |  |  |     FamilyHornor = 0    #(int FamilyHornor)//家族荣耀
 | 
 |  |  |     FamilyActiveValue = 0    #(int FamilyActiveValue)//家族活跃度
 | 
 |  |  |     LastWeekFamilyActiveValue = 0    #(int LastWeekFamilyActiveValue)//上周家族活跃度
 | 
 |  |  |     CountryHornor = 0    #(int CountryHornor)//本周国家功勋值
 | 
 |  |  |     CountryLastWeekHornor = 0    #(int CountryLastWeekHornor)//上周国家功勋值
 | 
 |  |  |     Mate = 0    #(DWORD Mate)
 | 
 |  |  |     Gold = 0    #(DWORD Gold)//金子
 | 
 |  |  |     GoldPaper = 0    #(DWORD GoldPaper)//金票
 | 
 |  |  |     Silver = 0    #(DWORD Silver)//银子
 | 
 |  |  |     SilverPaper = 0    #(DWORD SilverPaper)//银票
 | 
 |  |  |     FightPoint = 0    #(DWORD FightPoint)//战斗值
 | 
 |  |  |     HappyPoint = 0    #(DWORD HappyPoint)//脱机挂时长(秒)
 | 
 |  |  |     LineID = 0    #(BYTE LineID)//角色所在线路
 | 
 |  |  |     MapID = 0    #(WORD MapID)//角色所在地图
 | 
 |  |  |     PosX = 0    #(WORD PosX)//角色坐标
 | 
 |  |  |     PosY = 0    #(WORD PosY)
 | 
 |  |  |     RebornMapID = 0    #(WORD RebornMapID)//重生点地图ID
 | 
 |  |  |     RebornPosX = 0    #(WORD RebornPosX)
 | 
 |  |  |     RebornPosY = 0    #(WORD RebornPosY)
 | 
 |  |  |     State = 0    #(BYTE State)//角色状态   0.正常在线1.脱机挂在线 2脱机挂死亡
 | 
 |  |  |     HP = 0    #(DWORD HP)//当前HP
 | 
 |  |  |     XP = 0    #(DWORD XP)//当前XP
 | 
 |  |  |     HPRestoreSetting = 0    #(WORD HPRestoreSetting)//少于这个值%自动喝血
 | 
 |  |  |     MPRestoreSetting = 0    #(WORD MPRestoreSetting)//少于这个值%自动喝魔
 | 
 |  |  |     FreePoint = 0    #(DWORD FreePoint)//未分配点数
 | 
 |  |  |     FreeSkillPoint = 0    #(DWORD FreeSkillPoint)//未分配的技能点
 | 
 |  |  |     BaseSTR = 0    #(int BaseSTR)//裸体力量
 | 
 |  |  |     BasePNE = 0    #(int BasePNE)//裸体真元
 | 
 |  |  |     BasePHY = 0    #(int BasePHY)//裸体筋骨
 | 
 |  |  |     BaseCON = 0    #(int BaseCON)//裸体体魄
 | 
 |  |  |     STR = 0    #(int STR)//力量
 | 
 |  |  |     PNE = 0    #(int PNE)//真元
 | 
 |  |  |     PHY = 0    #(int PHY)//筋骨
 | 
 |  |  |     CON = 0    #(int CON)//体魄
 | 
 |  |  |     PKValue = 0    #(WORD PKValue)//衡量PK能力的一项属性,由攻防计算而得
 | 
 |  |  |     BackpackLV = 0    #(BYTE BackpackLV)//背包等级
 | 
 |  |  |     WarehouseLV = 0    #(BYTE WarehouseLV)//仓库等级
 | 
 |  |  |     TeamID = 0    #(DWORD TeamID)//队伍ID
 | 
 |  |  |     UseGoldType = 0    #(BYTE UseGoldType)//默认用金子/金票        类型为MoneyType
 | 
 |  |  |     UseSilverType = 0    #(BYTE UseSilverType)//默认用的银子/银票
 | 
 |  |  |     AttackMode = 0    #(BYTE AttackMode)//攻击模式
 | 
 |  |  |     LastWeekOnlineTime = 0    #(DWORD LastWeekOnlineTime)//上周在线时间
 | 
 |  |  |     FBID = 0    #(BYTE FBID)//fb id
 | 
 |  |  |     FamilyLV = 0    #(BYTE FamilyLV)//家族等级
 | 
 |  |  |     FriendFavor = 0    #(DWORD FriendFavor)//好友人气值
 | 
 |  |  |     Energy = 0    #(DWORD Energy)//精力值
 | 
 |  |  |     EquipShowSwitch = 0    #(DWORD EquipShowSwitch)//装备显示开关
 | 
 |  |  |     LuckValue = 0    #(DWORD LuckValue)//幸运值
 | 
 |  |  |     ExAttr1 = 0    #(DWORD ExAttr1)//扩展属性1,各项目专用
 | 
 |  |  |     ExAttr2 = 0    #(DWORD ExAttr2)//扩展属性2,各项目专用
 | 
 |  |  |     ExAttr3 = 0    #(DWORD ExAttr3)//扩展属性3,各项目专用
 | 
 |  |  |     ExAttr4 = 0    #(DWORD ExAttr4)//扩展属性4,各项目专用
 | 
 |  |  |     ExAttr5 = 0    #(DWORD ExAttr5)//扩展属性5,各项目专用
 | 
 |  |  |     Faction = 0    #(BYTE Faction)//阵营
 | 
 |  |  |     InfamyValue = 0    #(DWORD InfamyValue)//恶名值
 | 
 |  |  |     OfficialRank = 0    #(BYTE OfficialRank)//官阶,官职等级
 | 
 |  |  |     ChangeCoinPointTotal = 0    #(DWORD ChangeCoinPointTotal)//兑换的点数总计
 | 
 |  |  |     VIPLv = 0    #(BYTE VIPLv)//VIP等级
 | 
 |  |  |     VIPLvForPhone = 0    #(BYTE VIPLvForPhone)//移动VIP等级
 | 
 |  |  |     ExAttr6 = 0    #(DWORD ExAttr6)//扩展属性6,各项目专用
 | 
 |  |  |     ExAttr7 = 0    #(DWORD ExAttr7)//扩展属性7,各项目专用
 | 
 |  |  |     ExAttr8 = 0    #(DWORD ExAttr8)//扩展属性8,各项目专用
 | 
 |  |  |     ExAttr9 = 0    #(DWORD ExAttr9)//扩展属性9,各项目专用
 | 
 |  |  |     ExAttr10 = 0    #(DWORD ExAttr10)//扩展属性10,各项目专用
 | 
 |  |  |     ModelMark = 0    #(DWORD ModelMark)// 变形模型mark
 | 
 |  |  |     ExAttr11 = 0    #(DWORD ExAttr11)//预留的扩展属性字段,用来存放项目特定的属性
 | 
 |  |  |     ExAttr12 = 0    #(DWORD ExAttr12)//预留的扩展属性字段,用来存放项目特定的属性
 | 
 |  |  |     ExAttr13 = 0    #(DWORD ExAttr13)//预留的扩展属性字段,用来存放项目特定的属性
 | 
 |  |  |     ExAttr14 = 0    #(DWORD ExAttr14)//预留的扩展属性字段,用来存放项目特定的属性
 | 
 |  |  |     OperateInfo = 0    #(DWORD OperateInfo)//玩家附加运营商信息
 | 
 |  |  |     Operate = ""    #(char Operate[15])//所属运营商平台名
 | 
 |  |  |     ServerID = 0    #(DWORD ServerID)//所属区服ID
 | 
 |  |  |     ExAttr15 = 0    #(DWORD ExAttr15)//预留的扩展属性字段,用来存放项目特定的属性
 | 
 |  |  |     ExAttr16 = 0    #(DWORD ExAttr16)//预留的扩展属性字段,用来存放项目特定的属性
 | 
 |  |  |     ExAttr17 = 0    #(DWORD ExAttr17)//预留的扩展属性字段,用来存放项目特定的属性
 | 
 |  |  |     ExAttr18 = 0    #(DWORD ExAttr18)//预留的扩展属性字段,用来存放项目特定的属性
 | 
 |  |  |     ExAttr19 = 0    #(DWORD ExAttr19)//预留的扩展属性字段,用来存放项目特定的属性
 | 
 |  |  |     ExAttr20 = 0    #(DWORD ExAttr20)//预留的扩展属性字段,用来存放项目特定的属性
 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xA1
 | 
 |  |  |         self.Head.SubCmd = 0x12
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def ReadData(self, _lpData, _pos=0, _Len=0):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         _pos = self.Head.ReadData(_lpData, _pos)
 | 
 |  |  |         self.AccID,_pos = CommFunc.ReadString(_lpData, _pos,65)
 | 
 |  |  |         self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33)
 | 
 |  |  |         self.AccState,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.GMLevel,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.Sex,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.ReincarnationLv,_pos = CommFunc.ReadWORD(_lpData, _pos)
 | 
 |  |  |         self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
 | 
 |  |  |         self.LVEx,_pos = CommFunc.ReadWORD(_lpData, _pos)
 | 
 |  |  |         self.LV2,_pos = CommFunc.ReadWORD(_lpData, _pos)
 | 
 |  |  |         self.ExpPoint,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.TotalExp,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.Family,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.FamilyName,_pos = CommFunc.ReadString(_lpData, _pos,33)
 | 
 |  |  |         self.TeamHornor,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.FamilyHornor,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.FamilyActiveValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.LastWeekFamilyActiveValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.CountryHornor,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.CountryLastWeekHornor,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.Mate,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.Gold,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.GoldPaper,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.Silver,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.SilverPaper,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.FightPoint,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.HappyPoint,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.LineID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.MapID,_pos = CommFunc.ReadWORD(_lpData, _pos)
 | 
 |  |  |         self.PosX,_pos = CommFunc.ReadWORD(_lpData, _pos)
 | 
 |  |  |         self.PosY,_pos = CommFunc.ReadWORD(_lpData, _pos)
 | 
 |  |  |         self.RebornMapID,_pos = CommFunc.ReadWORD(_lpData, _pos)
 | 
 |  |  |         self.RebornPosX,_pos = CommFunc.ReadWORD(_lpData, _pos)
 | 
 |  |  |         self.RebornPosY,_pos = CommFunc.ReadWORD(_lpData, _pos)
 | 
 |  |  |         self.State,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.HP,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.XP,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.HPRestoreSetting,_pos = CommFunc.ReadWORD(_lpData, _pos)
 | 
 |  |  |         self.MPRestoreSetting,_pos = CommFunc.ReadWORD(_lpData, _pos)
 | 
 |  |  |         self.FreePoint,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.FreeSkillPoint,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.BaseSTR,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.BasePNE,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.BasePHY,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.BaseCON,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.STR,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.PNE,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.PHY,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.CON,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.PKValue,_pos = CommFunc.ReadWORD(_lpData, _pos)
 | 
 |  |  |         self.BackpackLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.WarehouseLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.TeamID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.UseGoldType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.UseSilverType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.AttackMode,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.LastWeekOnlineTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.FBID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.FamilyLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.FriendFavor,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.Energy,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.EquipShowSwitch,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.LuckValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.ExAttr1,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.ExAttr2,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.ExAttr3,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.ExAttr4,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.ExAttr5,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.Faction,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.InfamyValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.OfficialRank,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.ChangeCoinPointTotal,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.VIPLv,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.VIPLvForPhone,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.ExAttr6,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.ExAttr7,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.ExAttr8,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.ExAttr9,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.ExAttr10,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.ModelMark,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.ExAttr11,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.ExAttr12,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.ExAttr13,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.ExAttr14,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.OperateInfo,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.Operate,_pos = CommFunc.ReadString(_lpData, _pos,15)
 | 
 |  |  |         self.ServerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.ExAttr15,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.ExAttr16,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.ExAttr17,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.ExAttr18,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.ExAttr19,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.ExAttr20,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         return _pos
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.Head = tagHead()
 | 
 |  |  |         self.Head.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xA1
 | 
 |  |  |         self.Head.SubCmd = 0x12
 | 
 |  |  |         self.AccID = ""
 | 
 |  |  |         self.PlayerID = 0
 | 
 |  |  |         self.PlayerName = ""
 | 
 |  |  |         self.AccState = 0
 | 
 |  |  |         self.GMLevel = 0
 | 
 |  |  |         self.Sex = 0
 | 
 |  |  |         self.Job = 0
 | 
 |  |  |         self.ReincarnationLv = 0
 | 
 |  |  |         self.LV = 0
 | 
 |  |  |         self.LVEx = 0
 | 
 |  |  |         self.LV2 = 0
 | 
 |  |  |         self.ExpPoint = 0
 | 
 |  |  |         self.TotalExp = 0
 | 
 |  |  |         self.Family = 0
 | 
 |  |  |         self.FamilyName = ""
 | 
 |  |  |         self.TeamHornor = 0
 | 
 |  |  |         self.FamilyHornor = 0
 | 
 |  |  |         self.FamilyActiveValue = 0
 | 
 |  |  |         self.LastWeekFamilyActiveValue = 0
 | 
 |  |  |         self.CountryHornor = 0
 | 
 |  |  |         self.CountryLastWeekHornor = 0
 | 
 |  |  |         self.Mate = 0
 | 
 |  |  |         self.Gold = 0
 | 
 |  |  |         self.GoldPaper = 0
 | 
 |  |  |         self.Silver = 0
 | 
 |  |  |         self.SilverPaper = 0
 | 
 |  |  |         self.FightPoint = 0
 | 
 |  |  |         self.HappyPoint = 0
 | 
 |  |  |         self.LineID = 0
 | 
 |  |  |         self.MapID = 0
 | 
 |  |  |         self.PosX = 0
 | 
 |  |  |         self.PosY = 0
 | 
 |  |  |         self.RebornMapID = 0
 | 
 |  |  |         self.RebornPosX = 0
 | 
 |  |  |         self.RebornPosY = 0
 | 
 |  |  |         self.State = 0
 | 
 |  |  |         self.HP = 0
 | 
 |  |  |         self.XP = 0
 | 
 |  |  |         self.HPRestoreSetting = 0
 | 
 |  |  |         self.MPRestoreSetting = 0
 | 
 |  |  |         self.FreePoint = 0
 | 
 |  |  |         self.FreeSkillPoint = 0
 | 
 |  |  |         self.BaseSTR = 0
 | 
 |  |  |         self.BasePNE = 0
 | 
 |  |  |         self.BasePHY = 0
 | 
 |  |  |         self.BaseCON = 0
 | 
 |  |  |         self.STR = 0
 | 
 |  |  |         self.PNE = 0
 | 
 |  |  |         self.PHY = 0
 | 
 |  |  |         self.CON = 0
 | 
 |  |  |         self.PKValue = 0
 | 
 |  |  |         self.BackpackLV = 0
 | 
 |  |  |         self.WarehouseLV = 0
 | 
 |  |  |         self.TeamID = 0
 | 
 |  |  |         self.UseGoldType = 0
 | 
 |  |  |         self.UseSilverType = 0
 | 
 |  |  |         self.AttackMode = 0
 | 
 |  |  |         self.LastWeekOnlineTime = 0
 | 
 |  |  |         self.FBID = 0
 | 
 |  |  |         self.FamilyLV = 0
 | 
 |  |  |         self.FriendFavor = 0
 | 
 |  |  |         self.Energy = 0
 | 
 |  |  |         self.EquipShowSwitch = 0
 | 
 |  |  |         self.LuckValue = 0
 | 
 |  |  |         self.ExAttr1 = 0
 | 
 |  |  |         self.ExAttr2 = 0
 | 
 |  |  |         self.ExAttr3 = 0
 | 
 |  |  |         self.ExAttr4 = 0
 | 
 |  |  |         self.ExAttr5 = 0
 | 
 |  |  |         self.Faction = 0
 | 
 |  |  |         self.InfamyValue = 0
 | 
 |  |  |         self.OfficialRank = 0
 | 
 |  |  |         self.ChangeCoinPointTotal = 0
 | 
 |  |  |         self.VIPLv = 0
 | 
 |  |  |         self.VIPLvForPhone = 0
 | 
 |  |  |         self.ExAttr6 = 0
 | 
 |  |  |         self.ExAttr7 = 0
 | 
 |  |  |         self.ExAttr8 = 0
 | 
 |  |  |         self.ExAttr9 = 0
 | 
 |  |  |         self.ExAttr10 = 0
 | 
 |  |  |         self.ModelMark = 0
 | 
 |  |  |         self.ExAttr11 = 0
 | 
 |  |  |         self.ExAttr12 = 0
 | 
 |  |  |         self.ExAttr13 = 0
 | 
 |  |  |         self.ExAttr14 = 0
 | 
 |  |  |         self.OperateInfo = 0
 | 
 |  |  |         self.Operate = ""
 | 
 |  |  |         self.ServerID = 0
 | 
 |  |  |         self.ExAttr15 = 0
 | 
 |  |  |         self.ExAttr16 = 0
 | 
 |  |  |         self.ExAttr17 = 0
 | 
 |  |  |         self.ExAttr18 = 0
 | 
 |  |  |         self.ExAttr19 = 0
 | 
 |  |  |         self.ExAttr20 = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         length = 0
 | 
 |  |  |         length += self.Head.GetLength()
 | 
 |  |  |         length += 65
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 33
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += 2
 | 
 |  |  |         length += 2
 | 
 |  |  |         length += 2
 | 
 |  |  |         length += 2
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 33
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += 2
 | 
 |  |  |         length += 2
 | 
 |  |  |         length += 2
 | 
 |  |  |         length += 2
 | 
 |  |  |         length += 2
 | 
 |  |  |         length += 2
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 2
 | 
 |  |  |         length += 2
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 2
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 15
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  | 
 | 
 |  |  |         return length
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         data = ''
 | 
 |  |  |         data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
 | 
 |  |  |         data = CommFunc.WriteString(data, 65, self.AccID)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.PlayerID)
 | 
 |  |  |         data = CommFunc.WriteString(data, 33, self.PlayerName)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.AccState)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.GMLevel)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.Sex)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.Job)
 | 
 |  |  |         data = CommFunc.WriteWORD(data, self.ReincarnationLv)
 | 
 |  |  |         data = CommFunc.WriteWORD(data, self.LV)
 | 
 |  |  |         data = CommFunc.WriteWORD(data, self.LVEx)
 | 
 |  |  |         data = CommFunc.WriteWORD(data, self.LV2)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.ExpPoint)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.TotalExp)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.Family)
 | 
 |  |  |         data = CommFunc.WriteString(data, 33, self.FamilyName)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.TeamHornor)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.FamilyHornor)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.FamilyActiveValue)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.LastWeekFamilyActiveValue)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.CountryHornor)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.CountryLastWeekHornor)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.Mate)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.Gold)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.GoldPaper)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.Silver)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.SilverPaper)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.FightPoint)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.HappyPoint)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.LineID)
 | 
 |  |  |         data = CommFunc.WriteWORD(data, self.MapID)
 | 
 |  |  |         data = CommFunc.WriteWORD(data, self.PosX)
 | 
 |  |  |         data = CommFunc.WriteWORD(data, self.PosY)
 | 
 |  |  |         data = CommFunc.WriteWORD(data, self.RebornMapID)
 | 
 |  |  |         data = CommFunc.WriteWORD(data, self.RebornPosX)
 | 
 |  |  |         data = CommFunc.WriteWORD(data, self.RebornPosY)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.State)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.HP)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.XP)
 | 
 |  |  |         data = CommFunc.WriteWORD(data, self.HPRestoreSetting)
 | 
 |  |  |         data = CommFunc.WriteWORD(data, self.MPRestoreSetting)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.FreePoint)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.FreeSkillPoint)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.BaseSTR)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.BasePNE)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.BasePHY)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.BaseCON)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.STR)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.PNE)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.PHY)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.CON)
 | 
 |  |  |         data = CommFunc.WriteWORD(data, self.PKValue)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.BackpackLV)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.WarehouseLV)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.TeamID)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.UseGoldType)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.UseSilverType)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.AttackMode)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.LastWeekOnlineTime)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.FBID)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.FamilyLV)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.FriendFavor)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.Energy)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.EquipShowSwitch)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.LuckValue)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.ExAttr1)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.ExAttr2)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.ExAttr3)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.ExAttr4)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.ExAttr5)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.Faction)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.InfamyValue)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.OfficialRank)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.ChangeCoinPointTotal)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.VIPLv)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.VIPLvForPhone)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.ExAttr6)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.ExAttr7)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.ExAttr8)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.ExAttr9)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.ExAttr10)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.ModelMark)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.ExAttr11)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.ExAttr12)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.ExAttr13)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.ExAttr14)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.OperateInfo)
 | 
 |  |  |         data = CommFunc.WriteString(data, 15, self.Operate)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.ServerID)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.ExAttr15)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.ExAttr16)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.ExAttr17)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.ExAttr18)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.ExAttr19)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.ExAttr20)
 | 
 |  |  |         return data
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''
 | 
 |  |  |                                 Head:%s,
 | 
 |  |  |                                 AccID:%s,
 | 
 |  |  |                                 PlayerID:%d,
 | 
 |  |  |                                 PlayerName:%s,
 | 
 |  |  |                                 AccState:%d,
 | 
 |  |  |                                 GMLevel:%d,
 | 
 |  |  |                                 Sex:%d,
 | 
 |  |  |                                 Job:%d,
 | 
 |  |  |                                 ReincarnationLv:%d,
 | 
 |  |  |                                 LV:%d,
 | 
 |  |  |                                 LVEx:%d,
 | 
 |  |  |                                 LV2:%d,
 | 
 |  |  |                                 ExpPoint:%d,
 | 
 |  |  |                                 TotalExp:%d,
 | 
 |  |  |                                 Family:%d,
 | 
 |  |  |                                 FamilyName:%s,
 | 
 |  |  |                                 TeamHornor:%d,
 | 
 |  |  |                                 FamilyHornor:%d,
 | 
 |  |  |                                 FamilyActiveValue:%d,
 | 
 |  |  |                                 LastWeekFamilyActiveValue:%d,
 | 
 |  |  |                                 CountryHornor:%d,
 | 
 |  |  |                                 CountryLastWeekHornor:%d,
 | 
 |  |  |                                 Mate:%d,
 | 
 |  |  |                                 Gold:%d,
 | 
 |  |  |                                 GoldPaper:%d,
 | 
 |  |  |                                 Silver:%d,
 | 
 |  |  |                                 SilverPaper:%d,
 | 
 |  |  |                                 FightPoint:%d,
 | 
 |  |  |                                 HappyPoint:%d,
 | 
 |  |  |                                 LineID:%d,
 | 
 |  |  |                                 MapID:%d,
 | 
 |  |  |                                 PosX:%d,
 | 
 |  |  |                                 PosY:%d,
 | 
 |  |  |                                 RebornMapID:%d,
 | 
 |  |  |                                 RebornPosX:%d,
 | 
 |  |  |                                 RebornPosY:%d,
 | 
 |  |  |                                 State:%d,
 | 
 |  |  |                                 HP:%d,
 | 
 |  |  |                                 XP:%d,
 | 
 |  |  |                                 HPRestoreSetting:%d,
 | 
 |  |  |                                 MPRestoreSetting:%d,
 | 
 |  |  |                                 FreePoint:%d,
 | 
 |  |  |                                 FreeSkillPoint:%d,
 | 
 |  |  |                                 BaseSTR:%d,
 | 
 |  |  |                                 BasePNE:%d,
 | 
 |  |  |                                 BasePHY:%d,
 | 
 |  |  |                                 BaseCON:%d,
 | 
 |  |  |                                 STR:%d,
 | 
 |  |  |                                 PNE:%d,
 | 
 |  |  |                                 PHY:%d,
 | 
 |  |  |                                 CON:%d,
 | 
 |  |  |                                 PKValue:%d,
 | 
 |  |  |                                 BackpackLV:%d,
 | 
 |  |  |                                 WarehouseLV:%d,
 | 
 |  |  |                                 TeamID:%d,
 | 
 |  |  |                                 UseGoldType:%d,
 | 
 |  |  |                                 UseSilverType:%d,
 | 
 |  |  |                                 AttackMode:%d,
 | 
 |  |  |                                 LastWeekOnlineTime:%d,
 | 
 |  |  |                                 FBID:%d,
 | 
 |  |  |                                 FamilyLV:%d,
 | 
 |  |  |                                 FriendFavor:%d,
 | 
 |  |  |                                 Energy:%d,
 | 
 |  |  |                                 EquipShowSwitch:%d,
 | 
 |  |  |                                 LuckValue:%d,
 | 
 |  |  |                                 ExAttr1:%d,
 | 
 |  |  |                                 ExAttr2:%d,
 | 
 |  |  |                                 ExAttr3:%d,
 | 
 |  |  |                                 ExAttr4:%d,
 | 
 |  |  |                                 ExAttr5:%d,
 | 
 |  |  |                                 Faction:%d,
 | 
 |  |  |                                 InfamyValue:%d,
 | 
 |  |  |                                 OfficialRank:%d,
 | 
 |  |  |                                 ChangeCoinPointTotal:%d,
 | 
 |  |  |                                 VIPLv:%d,
 | 
 |  |  |                                 VIPLvForPhone:%d,
 | 
 |  |  |                                 ExAttr6:%d,
 | 
 |  |  |                                 ExAttr7:%d,
 | 
 |  |  |                                 ExAttr8:%d,
 | 
 |  |  |                                 ExAttr9:%d,
 | 
 |  |  |                                 ExAttr10:%d,
 | 
 |  |  |                                 ModelMark:%d,
 | 
 |  |  |                                 ExAttr11:%d,
 | 
 |  |  |                                 ExAttr12:%d,
 | 
 |  |  |                                 ExAttr13:%d,
 | 
 |  |  |                                 ExAttr14:%d,
 | 
 |  |  |                                 OperateInfo:%d,
 | 
 |  |  |                                 Operate:%s,
 | 
 |  |  |                                 ServerID:%d,
 | 
 |  |  |                                 ExAttr15:%d,
 | 
 |  |  |                                 ExAttr16:%d,
 | 
 |  |  |                                 ExAttr17:%d,
 | 
 |  |  |                                 ExAttr18:%d,
 | 
 |  |  |                                 ExAttr19:%d,
 | 
 |  |  |                                 ExAttr20:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Head.OutputString(),
 | 
 |  |  |                                 self.AccID,
 | 
 |  |  |                                 self.PlayerID,
 | 
 |  |  |                                 self.PlayerName,
 | 
 |  |  |                                 self.AccState,
 | 
 |  |  |                                 self.GMLevel,
 | 
 |  |  |                                 self.Sex,
 | 
 |  |  |                                 self.Job,
 | 
 |  |  |                                 self.ReincarnationLv,
 | 
 |  |  |                                 self.LV,
 | 
 |  |  |                                 self.LVEx,
 | 
 |  |  |                                 self.LV2,
 | 
 |  |  |                                 self.ExpPoint,
 | 
 |  |  |                                 self.TotalExp,
 | 
 |  |  |                                 self.Family,
 | 
 |  |  |                                 self.FamilyName,
 | 
 |  |  |                                 self.TeamHornor,
 | 
 |  |  |                                 self.FamilyHornor,
 | 
 |  |  |                                 self.FamilyActiveValue,
 | 
 |  |  |                                 self.LastWeekFamilyActiveValue,
 | 
 |  |  |                                 self.CountryHornor,
 | 
 |  |  |                                 self.CountryLastWeekHornor,
 | 
 |  |  |                                 self.Mate,
 | 
 |  |  |                                 self.Gold,
 | 
 |  |  |                                 self.GoldPaper,
 | 
 |  |  |                                 self.Silver,
 | 
 |  |  |                                 self.SilverPaper,
 | 
 |  |  |                                 self.FightPoint,
 | 
 |  |  |                                 self.HappyPoint,
 | 
 |  |  |                                 self.LineID,
 | 
 |  |  |                                 self.MapID,
 | 
 |  |  |                                 self.PosX,
 | 
 |  |  |                                 self.PosY,
 | 
 |  |  |                                 self.RebornMapID,
 | 
 |  |  |                                 self.RebornPosX,
 | 
 |  |  |                                 self.RebornPosY,
 | 
 |  |  |                                 self.State,
 | 
 |  |  |                                 self.HP,
 | 
 |  |  |                                 self.XP,
 | 
 |  |  |                                 self.HPRestoreSetting,
 | 
 |  |  |                                 self.MPRestoreSetting,
 | 
 |  |  |                                 self.FreePoint,
 | 
 |  |  |                                 self.FreeSkillPoint,
 | 
 |  |  |                                 self.BaseSTR,
 | 
 |  |  |                                 self.BasePNE,
 | 
 |  |  |                                 self.BasePHY,
 | 
 |  |  |                                 self.BaseCON,
 | 
 |  |  |                                 self.STR,
 | 
 |  |  |                                 self.PNE,
 | 
 |  |  |                                 self.PHY,
 | 
 |  |  |                                 self.CON,
 | 
 |  |  |                                 self.PKValue,
 | 
 |  |  |                                 self.BackpackLV,
 | 
 |  |  |                                 self.WarehouseLV,
 | 
 |  |  |                                 self.TeamID,
 | 
 |  |  |                                 self.UseGoldType,
 | 
 |  |  |                                 self.UseSilverType,
 | 
 |  |  |                                 self.AttackMode,
 | 
 |  |  |                                 self.LastWeekOnlineTime,
 | 
 |  |  |                                 self.FBID,
 | 
 |  |  |                                 self.FamilyLV,
 | 
 |  |  |                                 self.FriendFavor,
 | 
 |  |  |                                 self.Energy,
 | 
 |  |  |                                 self.EquipShowSwitch,
 | 
 |  |  |                                 self.LuckValue,
 | 
 |  |  |                                 self.ExAttr1,
 | 
 |  |  |                                 self.ExAttr2,
 | 
 |  |  |                                 self.ExAttr3,
 | 
 |  |  |                                 self.ExAttr4,
 | 
 |  |  |                                 self.ExAttr5,
 | 
 |  |  |                                 self.Faction,
 | 
 |  |  |                                 self.InfamyValue,
 | 
 |  |  |                                 self.OfficialRank,
 | 
 |  |  |                                 self.ChangeCoinPointTotal,
 | 
 |  |  |                                 self.VIPLv,
 | 
 |  |  |                                 self.VIPLvForPhone,
 | 
 |  |  |                                 self.ExAttr6,
 | 
 |  |  |                                 self.ExAttr7,
 | 
 |  |  |                                 self.ExAttr8,
 | 
 |  |  |                                 self.ExAttr9,
 | 
 |  |  |                                 self.ExAttr10,
 | 
 |  |  |                                 self.ModelMark,
 | 
 |  |  |                                 self.ExAttr11,
 | 
 |  |  |                                 self.ExAttr12,
 | 
 |  |  |                                 self.ExAttr13,
 | 
 |  |  |                                 self.ExAttr14,
 | 
 |  |  |                                 self.OperateInfo,
 | 
 |  |  |                                 self.Operate,
 | 
 |  |  |                                 self.ServerID,
 | 
 |  |  |                                 self.ExAttr15,
 | 
 |  |  |                                 self.ExAttr16,
 | 
 |  |  |                                 self.ExAttr17,
 | 
 |  |  |                                 self.ExAttr18,
 | 
 |  |  |                                 self.ExAttr19,
 | 
 |  |  |                                 self.ExAttr20
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagMCDBPlayer=tagMCDBPlayer()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCDBPlayer.Head.Cmd,m_NAtagMCDBPlayer.Head.SubCmd))] = m_NAtagMCDBPlayer
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | 
 |  |  |                   ("Exp", c_int),    
 | 
 |  |  |                   ("State", c_ubyte),    #是否点击法宝认主
 | 
 |  |  |                   ("FBPassLV", c_ubyte),    #副本关卡
 | 
 |  |  |                   ("IsWear", c_ubyte),    #是否佩戴(仅适用王者法宝)
 | 
 |  |  |                   ]
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  | 
 |  |  |         self.Exp = 0
 | 
 |  |  |         self.State = 0
 | 
 |  |  |         self.FBPassLV = 0
 | 
 |  |  |         self.IsWear = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  | 
 |  |  |                                 LV:%d,
 | 
 |  |  |                                 Exp:%d,
 | 
 |  |  |                                 State:%d,
 | 
 |  |  |                                 FBPassLV:%d
 | 
 |  |  |                                 FBPassLV:%d,
 | 
 |  |  |                                 IsWear:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.MWID,
 | 
 |  |  |                                 self.LV,
 | 
 |  |  |                                 self.Exp,
 | 
 |  |  |                                 self.State,
 | 
 |  |  |                                 self.FBPassLV
 | 
 |  |  |                                 self.FBPassLV,
 | 
 |  |  |                                 self.IsWear
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 |  |  |                   ("APosY", c_ushort),    
 | 
 |  |  |                   ("BPosX", c_ushort),    
 | 
 |  |  |                   ("BPosY", c_ushort),    
 | 
 |  |  |                   ("Angle", c_ushort),     | 
 |  |  |                   ]
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  | 
 |  |  |         self.APosY = 0
 | 
 |  |  |         self.BPosX = 0
 | 
 |  |  |         self.BPosY = 0
 | 
 |  |  |         self.Angle = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  | 
 |  |  |                                 APosX:%d,
 | 
 |  |  |                                 APosY:%d,
 | 
 |  |  |                                 BPosX:%d,
 | 
 |  |  |                                 BPosY:%d
 | 
 |  |  |                                 BPosY:%d,
 | 
 |  |  |                                 Angle:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.APosX,
 | 
 |  |  |                                 self.APosY,
 | 
 |  |  |                                 self.BPosX,
 | 
 |  |  |                                 self.BPosY
 | 
 |  |  |                                 self.BPosY,
 | 
 |  |  |                                 self.Angle
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # A8 15 诛仙装备分解结果通知 #tagMCZhuXianDecomposeResult
 | 
 |  |  | 
 | 
 |  |  | class  tagMCZhuXianDecomposeItem(Structure):
 | 
 |  |  |     _pack_ = 1
 | 
 |  |  |     _fields_ = [
 | 
 |  |  |                   ("ItemID", c_int),    #物品ID
 | 
 |  |  |                   ("ItemCnt", c_ubyte),    #物品数量
 | 
 |  |  |                   ("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.ItemCnt = 0
 | 
 |  |  |         self.IsBind = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         return sizeof(tagMCZhuXianDecomposeItem)
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         return string_at(addressof(self), self.GetLength())
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''// A8 15 诛仙装备分解结果通知 //tagMCZhuXianDecomposeResult:
 | 
 |  |  |                                 ItemID:%d,
 | 
 |  |  |                                 ItemCnt:%d,
 | 
 |  |  |                                 IsBind:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.ItemID,
 | 
 |  |  |                                 self.ItemCnt,
 | 
 |  |  |                                 self.IsBind
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | class  tagMCZhuXianDecomposeResult(Structure):
 | 
 |  |  |     Head = tagHead()
 | 
 |  |  |     Cnt = 0    #(BYTE Cnt)//数量
 | 
 |  |  |     ItemList = list()    #(vector<tagMCZhuXianDecomposeItem> ItemList)
 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xA8
 | 
 |  |  |         self.Head.SubCmd = 0x15
 | 
 |  |  |         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):
 | 
 |  |  |             temItemList = tagMCZhuXianDecomposeItem()
 | 
 |  |  |             _pos = temItemList.ReadData(_lpData, _pos)
 | 
 |  |  |             self.ItemList.append(temItemList)
 | 
 |  |  |         return _pos
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.Head = tagHead()
 | 
 |  |  |         self.Head.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xA8
 | 
 |  |  |         self.Head.SubCmd = 0x15
 | 
 |  |  |         self.Cnt = 0
 | 
 |  |  |         self.ItemList = list()
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         length = 0
 | 
 |  |  |         length += self.Head.GetLength()
 | 
 |  |  |         length += 1
 | 
 |  |  |         for i in range(self.Cnt):
 | 
 |  |  |             length += self.ItemList[i].GetLength()
 | 
 |  |  | 
 | 
 |  |  |         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.WriteString(data, self.ItemList[i].GetLength(), self.ItemList[i].GetBuffer())
 | 
 |  |  |         return data
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''
 | 
 |  |  |                                 Head:%s,
 | 
 |  |  |                                 Cnt:%d,
 | 
 |  |  |                                 ItemList:%s
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Head.OutputString(),
 | 
 |  |  |                                 self.Cnt,
 | 
 |  |  |                                 "..."
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagMCZhuXianDecomposeResult=tagMCZhuXianDecomposeResult()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCZhuXianDecomposeResult.Head.Cmd,m_NAtagMCZhuXianDecomposeResult.Head.SubCmd))] = m_NAtagMCZhuXianDecomposeResult
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # AA 0C 登录奖励活动信息 #tagMCActLoginAwardInfo
 | 
 |  |  | 
 | 
 |  |  | class  tagMCActLoginAwardItem(Structure):
 | 
 |  |  |     _pack_ = 1
 | 
 |  |  |     _fields_ = [
 | 
 |  |  |                   ("ItemID", c_int),    # 物品ID
 | 
 |  |  |                   ("ItemCnt", 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.ItemCnt = 0
 | 
 |  |  |         self.IsBind = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         return sizeof(tagMCActLoginAwardItem)
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         return string_at(addressof(self), self.GetLength())
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''// AA 0C 登录奖励活动信息 //tagMCActLoginAwardInfo:
 | 
 |  |  |                                 ItemID:%d,
 | 
 |  |  |                                 ItemCnt:%d,
 | 
 |  |  |                                 IsBind:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.ItemID,
 | 
 |  |  |                                 self.ItemCnt,
 | 
 |  |  |                                 self.IsBind
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | class  tagMCActLoginAwardAction(Structure):
 | 
 |  |  |     TemplateID = 0    #(DWORD TemplateID)// 模板ID
 | 
 |  |  |     ActionType = 0    #(WORD ActionType)// 活动类别
 | 
 |  |  |     TotalTimes = 0    #(DWORD TotalTimes)// 可完成的总次数,0表示不限次数
 | 
 |  |  |     SingleTimes = 0    #(DWORD SingleTimes)// 单次领奖需要的次数
 | 
 |  |  |     Count = 0    #(BYTE Count)// 物品数
 | 
 |  |  |     ItemInfo = list()    #(vector<tagMCActLoginAwardItem> ItemInfo)// 物品信息
 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def ReadData(self, _lpData, _pos=0, _Len=0):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.TemplateID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.ActionType,_pos = CommFunc.ReadWORD(_lpData, _pos)
 | 
 |  |  |         self.TotalTimes,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.SingleTimes,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         for i in range(self.Count):
 | 
 |  |  |             temItemInfo = tagMCActLoginAwardItem()
 | 
 |  |  |             _pos = temItemInfo.ReadData(_lpData, _pos)
 | 
 |  |  |             self.ItemInfo.append(temItemInfo)
 | 
 |  |  |         return _pos
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.TemplateID = 0
 | 
 |  |  |         self.ActionType = 0
 | 
 |  |  |         self.TotalTimes = 0
 | 
 |  |  |         self.SingleTimes = 0
 | 
 |  |  |         self.Count = 0
 | 
 |  |  |         self.ItemInfo = list()
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         length = 0
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 2
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 1
 | 
 |  |  |         for i in range(self.Count):
 | 
 |  |  |             length += self.ItemInfo[i].GetLength()
 | 
 |  |  | 
 | 
 |  |  |         return length
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         data = ''
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.TemplateID)
 | 
 |  |  |         data = CommFunc.WriteWORD(data, self.ActionType)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.TotalTimes)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.SingleTimes)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.Count)
 | 
 |  |  |         for i in range(self.Count):
 | 
 |  |  |             data = CommFunc.WriteString(data, self.ItemInfo[i].GetLength(), self.ItemInfo[i].GetBuffer())
 | 
 |  |  |         return data
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''
 | 
 |  |  |                                 TemplateID:%d,
 | 
 |  |  |                                 ActionType:%d,
 | 
 |  |  |                                 TotalTimes:%d,
 | 
 |  |  |                                 SingleTimes:%d,
 | 
 |  |  |                                 Count:%d,
 | 
 |  |  |                                 ItemInfo:%s
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.TemplateID,
 | 
 |  |  |                                 self.ActionType,
 | 
 |  |  |                                 self.TotalTimes,
 | 
 |  |  |                                 self.SingleTimes,
 | 
 |  |  |                                 self.Count,
 | 
 |  |  |                                 "..."
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | class  tagMCActLoginAwardDayInfo(Structure):
 | 
 |  |  |     ActCnt = 0    #(BYTE ActCnt)// 数量
 | 
 |  |  |     TemplateList = list()    #(vector<WORD> TemplateList)// 模板列表
 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def ReadData(self, _lpData, _pos=0, _Len=0):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.ActCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         for i in range(self.ActCnt):
 | 
 |  |  |             value,_pos=CommFunc.ReadWORD(_lpData,_pos)
 | 
 |  |  |             self.TemplateList.append(value)
 | 
 |  |  |         return _pos
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.ActCnt = 0
 | 
 |  |  |         self.TemplateList = list()
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         length = 0
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += 2 * self.ActCnt
 | 
 |  |  | 
 | 
 |  |  |         return length
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         data = ''
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.ActCnt)
 | 
 |  |  |         for i in range(self.ActCnt):
 | 
 |  |  |             data = CommFunc.WriteWORD(data, self.TemplateList[i])
 | 
 |  |  |         return data
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''
 | 
 |  |  |                                 ActCnt:%d,
 | 
 |  |  |                                 TemplateList:%s
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.ActCnt,
 | 
 |  |  |                                 "..."
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | class  tagMCActLoginAwardInfo(Structure):
 | 
 |  |  |     Head = tagHead()
 | 
 |  |  |     StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
 | 
 |  |  |     EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
 | 
 |  |  |     AdvanceMinutes = 0    #(WORD AdvanceMinutes)// 提前显示分钟
 | 
 |  |  |     IsDayReset = 0    #(BYTE IsDayReset)//是否每天重置
 | 
 |  |  |     ResetType = 0    #(BYTE ResetType)// 重置类型,0-0点重置;1-5点重置
 | 
 |  |  |     LimitLV = 0    #(WORD LimitLV)// 限制等级
 | 
 |  |  |     DayCnt = 0    #(BYTE DayCnt)// 天数
 | 
 |  |  |     DayInfoList = list()    #(vector<tagMCActLoginAwardDayInfo> DayInfoList)// 每天模板
 | 
 |  |  |     TCount = 0    #(BYTE TCount)// 模板数
 | 
 |  |  |     ActionInfo = list()    #(vector<tagMCActLoginAwardAction> ActionInfo)// 活动模板信息
 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xAA
 | 
 |  |  |         self.Head.SubCmd = 0x0C
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def ReadData(self, _lpData, _pos=0, _Len=0):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         _pos = self.Head.ReadData(_lpData, _pos)
 | 
 |  |  |         self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
 | 
 |  |  |         self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
 | 
 |  |  |         self.AdvanceMinutes,_pos = CommFunc.ReadWORD(_lpData, _pos)
 | 
 |  |  |         self.IsDayReset,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.ResetType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
 | 
 |  |  |         self.DayCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         for i in range(self.DayCnt):
 | 
 |  |  |             temDayInfoList = tagMCActLoginAwardDayInfo()
 | 
 |  |  |             _pos = temDayInfoList.ReadData(_lpData, _pos)
 | 
 |  |  |             self.DayInfoList.append(temDayInfoList)
 | 
 |  |  |         self.TCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         for i in range(self.TCount):
 | 
 |  |  |             temActionInfo = tagMCActLoginAwardAction()
 | 
 |  |  |             _pos = temActionInfo.ReadData(_lpData, _pos)
 | 
 |  |  |             self.ActionInfo.append(temActionInfo)
 | 
 |  |  |         return _pos
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.Head = tagHead()
 | 
 |  |  |         self.Head.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xAA
 | 
 |  |  |         self.Head.SubCmd = 0x0C
 | 
 |  |  |         self.StartDate = ""
 | 
 |  |  |         self.EndtDate = ""
 | 
 |  |  |         self.AdvanceMinutes = 0
 | 
 |  |  |         self.IsDayReset = 0
 | 
 |  |  |         self.ResetType = 0
 | 
 |  |  |         self.LimitLV = 0
 | 
 |  |  |         self.DayCnt = 0
 | 
 |  |  |         self.DayInfoList = list()
 | 
 |  |  |         self.TCount = 0
 | 
 |  |  |         self.ActionInfo = list()
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         length = 0
 | 
 |  |  |         length += self.Head.GetLength()
 | 
 |  |  |         length += 10
 | 
 |  |  |         length += 10
 | 
 |  |  |         length += 2
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += 2
 | 
 |  |  |         length += 1
 | 
 |  |  |         for i in range(self.DayCnt):
 | 
 |  |  |             length += self.DayInfoList[i].GetLength()
 | 
 |  |  |         length += 1
 | 
 |  |  |         for i in range(self.TCount):
 | 
 |  |  |             length += self.ActionInfo[i].GetLength()
 | 
 |  |  | 
 | 
 |  |  |         return length
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         data = ''
 | 
 |  |  |         data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
 | 
 |  |  |         data = CommFunc.WriteString(data, 10, self.StartDate)
 | 
 |  |  |         data = CommFunc.WriteString(data, 10, self.EndtDate)
 | 
 |  |  |         data = CommFunc.WriteWORD(data, self.AdvanceMinutes)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.IsDayReset)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.ResetType)
 | 
 |  |  |         data = CommFunc.WriteWORD(data, self.LimitLV)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.DayCnt)
 | 
 |  |  |         for i in range(self.DayCnt):
 | 
 |  |  |             data = CommFunc.WriteString(data, self.DayInfoList[i].GetLength(), self.DayInfoList[i].GetBuffer())
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.TCount)
 | 
 |  |  |         for i in range(self.TCount):
 | 
 |  |  |             data = CommFunc.WriteString(data, self.ActionInfo[i].GetLength(), self.ActionInfo[i].GetBuffer())
 | 
 |  |  |         return data
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''
 | 
 |  |  |                                 Head:%s,
 | 
 |  |  |                                 StartDate:%s,
 | 
 |  |  |                                 EndtDate:%s,
 | 
 |  |  |                                 AdvanceMinutes:%d,
 | 
 |  |  |                                 IsDayReset:%d,
 | 
 |  |  |                                 ResetType:%d,
 | 
 |  |  |                                 LimitLV:%d,
 | 
 |  |  |                                 DayCnt:%d,
 | 
 |  |  |                                 DayInfoList:%s,
 | 
 |  |  |                                 TCount:%d,
 | 
 |  |  |                                 ActionInfo:%s
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Head.OutputString(),
 | 
 |  |  |                                 self.StartDate,
 | 
 |  |  |                                 self.EndtDate,
 | 
 |  |  |                                 self.AdvanceMinutes,
 | 
 |  |  |                                 self.IsDayReset,
 | 
 |  |  |                                 self.ResetType,
 | 
 |  |  |                                 self.LimitLV,
 | 
 |  |  |                                 self.DayCnt,
 | 
 |  |  |                                 "...",
 | 
 |  |  |                                 self.TCount,
 | 
 |  |  |                                 "..."
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagMCActLoginAwardInfo=tagMCActLoginAwardInfo()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActLoginAwardInfo.Head.Cmd,m_NAtagMCActLoginAwardInfo.Head.SubCmd))] = m_NAtagMCActLoginAwardInfo
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # AA 0D 登录奖励玩家活动信息 #tagMCActLoginAwardPlayerInfo
 | 
 |  |  | 
 | 
 |  |  | class  tagMCActLoginAwardTaskInfo(Structure):
 | 
 |  |  |     _pack_ = 1
 | 
 |  |  |     _fields_ = [
 | 
 |  |  |                   ("TemplateID", c_ushort),    # 模板ID
 | 
 |  |  |                   ("CurTimes", c_ushort),    #已完成次数
 | 
 |  |  |                   ("GotTimes", 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.TemplateID = 0
 | 
 |  |  |         self.CurTimes = 0
 | 
 |  |  |         self.GotTimes = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         return sizeof(tagMCActLoginAwardTaskInfo)
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         return string_at(addressof(self), self.GetLength())
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''// AA 0D 登录奖励玩家活动信息 //tagMCActLoginAwardPlayerInfo:
 | 
 |  |  |                                 TemplateID:%d,
 | 
 |  |  |                                 CurTimes:%d,
 | 
 |  |  |                                 GotTimes:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.TemplateID,
 | 
 |  |  |                                 self.CurTimes,
 | 
 |  |  |                                 self.GotTimes
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | class  tagMCActLoginAwardDayPlayerInfo(Structure):
 | 
 |  |  |     DayIndex = 0    #(DWORD DayIndex)//第X天
 | 
 |  |  |     ACount = 0    #(DWORD ACount)//任务条目数
 | 
 |  |  |     TaskList = list()    #(vector<tagMCActLoginAwardTaskInfo> TaskList)//活动完成次数信息
 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def ReadData(self, _lpData, _pos=0, _Len=0):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.DayIndex,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.ACount,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         for i in range(self.ACount):
 | 
 |  |  |             temTaskList = tagMCActLoginAwardTaskInfo()
 | 
 |  |  |             _pos = temTaskList.ReadData(_lpData, _pos)
 | 
 |  |  |             self.TaskList.append(temTaskList)
 | 
 |  |  |         return _pos
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.DayIndex = 0
 | 
 |  |  |         self.ACount = 0
 | 
 |  |  |         self.TaskList = list()
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         length = 0
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         for i in range(self.ACount):
 | 
 |  |  |             length += self.TaskList[i].GetLength()
 | 
 |  |  | 
 | 
 |  |  |         return length
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         data = ''
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.DayIndex)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.ACount)
 | 
 |  |  |         for i in range(self.ACount):
 | 
 |  |  |             data = CommFunc.WriteString(data, self.TaskList[i].GetLength(), self.TaskList[i].GetBuffer())
 | 
 |  |  |         return data
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''
 | 
 |  |  |                                 DayIndex:%d,
 | 
 |  |  |                                 ACount:%d,
 | 
 |  |  |                                 TaskList:%s
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.DayIndex,
 | 
 |  |  |                                 self.ACount,
 | 
 |  |  |                                 "..."
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | class  tagMCActLoginAwardPlayerInfo(Structure):
 | 
 |  |  |     Head = tagHead()
 | 
 |  |  |     Count = 0    #(BYTE Count)
 | 
 |  |  |     DayInfoList = list()    #(vector<tagMCActLoginAwardDayPlayerInfo> DayInfoList)//活动完成次数信息
 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xAA
 | 
 |  |  |         self.Head.SubCmd = 0x0D
 | 
 |  |  |         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):
 | 
 |  |  |             temDayInfoList = tagMCActLoginAwardDayPlayerInfo()
 | 
 |  |  |             _pos = temDayInfoList.ReadData(_lpData, _pos)
 | 
 |  |  |             self.DayInfoList.append(temDayInfoList)
 | 
 |  |  |         return _pos
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.Head = tagHead()
 | 
 |  |  |         self.Head.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xAA
 | 
 |  |  |         self.Head.SubCmd = 0x0D
 | 
 |  |  |         self.Count = 0
 | 
 |  |  |         self.DayInfoList = list()
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         length = 0
 | 
 |  |  |         length += self.Head.GetLength()
 | 
 |  |  |         length += 1
 | 
 |  |  |         for i in range(self.Count):
 | 
 |  |  |             length += self.DayInfoList[i].GetLength()
 | 
 |  |  | 
 | 
 |  |  |         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.WriteString(data, self.DayInfoList[i].GetLength(), self.DayInfoList[i].GetBuffer())
 | 
 |  |  |         return data
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''
 | 
 |  |  |                                 Head:%s,
 | 
 |  |  |                                 Count:%d,
 | 
 |  |  |                                 DayInfoList:%s
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Head.OutputString(),
 | 
 |  |  |                                 self.Count,
 | 
 |  |  |                                 "..."
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagMCActLoginAwardPlayerInfo=tagMCActLoginAwardPlayerInfo()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActLoginAwardPlayerInfo.Head.Cmd,m_NAtagMCActLoginAwardPlayerInfo.Head.SubCmd))] = m_NAtagMCActLoginAwardPlayerInfo
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # AA 1D 累计充值活动信息 #tagMCActTotalRechargeInfo
 | 
 |  |  | 
 | 
 |  |  | class  tagMCTotalRechargeAwardItem(Structure):
 | 
 |  |  | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # AA 20 节日巡礼活动信息 #tagMCFeastWeekPartyInfo
 | 
 |  |  | 
 | 
 |  |  | class  tagMCFeastWeekPartyItem(Structure):
 | 
 |  |  |     _pack_ = 1
 | 
 |  |  |     _fields_ = [
 | 
 |  |  |                   ("NeedPoint", c_ushort),    # 领奖需要积分
 | 
 |  |  |                   ("ItemID", c_int),    # 物品ID
 | 
 |  |  |                   ("ItemCnt", 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.NeedPoint = 0
 | 
 |  |  |         self.ItemID = 0
 | 
 |  |  |         self.ItemCnt = 0
 | 
 |  |  |         self.IsBind = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         return sizeof(tagMCFeastWeekPartyItem)
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         return string_at(addressof(self), self.GetLength())
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''// AA 20 节日巡礼活动信息 //tagMCFeastWeekPartyInfo:
 | 
 |  |  |                                 NeedPoint:%d,
 | 
 |  |  |                                 ItemID:%d,
 | 
 |  |  |                                 ItemCnt:%d,
 | 
 |  |  |                                 IsBind:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.NeedPoint,
 | 
 |  |  |                                 self.ItemID,
 | 
 |  |  |                                 self.ItemCnt,
 | 
 |  |  |                                 self.IsBind
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | class  tagMCFeastWeekPartyAction(Structure):
 | 
 |  |  |     TemplateID = 0    #(DWORD TemplateID)// 模板ID
 | 
 |  |  |     ActionType = 0    #(WORD ActionType)// 活动类别
 | 
 |  |  |     TotalTimes = 0    #(DWORD TotalTimes)// 可完成的总次数,0表示不限次数
 | 
 |  |  |     SingleTimes = 0    #(DWORD SingleTimes)// 单次领奖需要的次数
 | 
 |  |  |     Point = 0    #(DWORD Point)// 单次领奖积分
 | 
 |  |  |     Count = 0    #(BYTE Count)// 物品数
 | 
 |  |  |     ItemInfo = list()    #(vector<tagMCFeastWeekPartyItem> ItemInfo)// 物品信息
 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def ReadData(self, _lpData, _pos=0, _Len=0):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.TemplateID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.ActionType,_pos = CommFunc.ReadWORD(_lpData, _pos)
 | 
 |  |  |         self.TotalTimes,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.SingleTimes,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.Point,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         for i in range(self.Count):
 | 
 |  |  |             temItemInfo = tagMCFeastWeekPartyItem()
 | 
 |  |  |             _pos = temItemInfo.ReadData(_lpData, _pos)
 | 
 |  |  |             self.ItemInfo.append(temItemInfo)
 | 
 |  |  |         return _pos
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.TemplateID = 0
 | 
 |  |  |         self.ActionType = 0
 | 
 |  |  |         self.TotalTimes = 0
 | 
 |  |  |         self.SingleTimes = 0
 | 
 |  |  |         self.Point = 0
 | 
 |  |  |         self.Count = 0
 | 
 |  |  |         self.ItemInfo = list()
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         length = 0
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 2
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 1
 | 
 |  |  |         for i in range(self.Count):
 | 
 |  |  |             length += self.ItemInfo[i].GetLength()
 | 
 |  |  | 
 | 
 |  |  |         return length
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         data = ''
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.TemplateID)
 | 
 |  |  |         data = CommFunc.WriteWORD(data, self.ActionType)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.TotalTimes)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.SingleTimes)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.Point)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.Count)
 | 
 |  |  |         for i in range(self.Count):
 | 
 |  |  |             data = CommFunc.WriteString(data, self.ItemInfo[i].GetLength(), self.ItemInfo[i].GetBuffer())
 | 
 |  |  |         return data
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''
 | 
 |  |  |                                 TemplateID:%d,
 | 
 |  |  |                                 ActionType:%d,
 | 
 |  |  |                                 TotalTimes:%d,
 | 
 |  |  |                                 SingleTimes:%d,
 | 
 |  |  |                                 Point:%d,
 | 
 |  |  |                                 Count:%d,
 | 
 |  |  |                                 ItemInfo:%s
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.TemplateID,
 | 
 |  |  |                                 self.ActionType,
 | 
 |  |  |                                 self.TotalTimes,
 | 
 |  |  |                                 self.SingleTimes,
 | 
 |  |  |                                 self.Point,
 | 
 |  |  |                                 self.Count,
 | 
 |  |  |                                 "..."
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | class  tagMCFeastWeekPartyDayInfo(Structure):
 | 
 |  |  |     ActCnt = 0    #(BYTE ActCnt)// 数量
 | 
 |  |  |     TemplateList = list()    #(vector<WORD> TemplateList)// 模板列表
 | 
 |  |  |     PCount = 0    #(BYTE PCount)// 物品数
 | 
 |  |  |     PItemInfo = list()    #(vector<tagMCFeastWeekPartyItem> PItemInfo)// 物品信息
 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def ReadData(self, _lpData, _pos=0, _Len=0):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.ActCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         for i in range(self.ActCnt):
 | 
 |  |  |             value,_pos=CommFunc.ReadWORD(_lpData,_pos)
 | 
 |  |  |             self.TemplateList.append(value)
 | 
 |  |  |         self.PCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         for i in range(self.PCount):
 | 
 |  |  |             temPItemInfo = tagMCFeastWeekPartyItem()
 | 
 |  |  |             _pos = temPItemInfo.ReadData(_lpData, _pos)
 | 
 |  |  |             self.PItemInfo.append(temPItemInfo)
 | 
 |  |  |         return _pos
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.ActCnt = 0
 | 
 |  |  |         self.TemplateList = list()
 | 
 |  |  |         self.PCount = 0
 | 
 |  |  |         self.PItemInfo = list()
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         length = 0
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += 2 * self.ActCnt
 | 
 |  |  |         length += 1
 | 
 |  |  |         for i in range(self.PCount):
 | 
 |  |  |             length += self.PItemInfo[i].GetLength()
 | 
 |  |  | 
 | 
 |  |  |         return length
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         data = ''
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.ActCnt)
 | 
 |  |  |         for i in range(self.ActCnt):
 | 
 |  |  |             data = CommFunc.WriteWORD(data, self.TemplateList[i])
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.PCount)
 | 
 |  |  |         for i in range(self.PCount):
 | 
 |  |  |             data = CommFunc.WriteString(data, self.PItemInfo[i].GetLength(), self.PItemInfo[i].GetBuffer())
 | 
 |  |  |         return data
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''
 | 
 |  |  |                                 ActCnt:%d,
 | 
 |  |  |                                 TemplateList:%s,
 | 
 |  |  |                                 PCount:%d,
 | 
 |  |  |                                 PItemInfo:%s
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.ActCnt,
 | 
 |  |  |                                 "...",
 | 
 |  |  |                                 self.PCount,
 | 
 |  |  |                                 "..."
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | class  tagMCFeastWeekPartyInfo(Structure):
 | 
 |  |  |     Head = tagHead()
 | 
 |  |  |     StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
 | 
 |  |  |     EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
 | 
 |  |  |     AdvanceMinutes = 0    #(WORD AdvanceMinutes)// 提前显示分钟
 | 
 |  |  |     IsDayReset = 0    #(BYTE IsDayReset)//是否每天重置
 | 
 |  |  |     ResetType = 0    #(BYTE ResetType)// 重置类型,0-0点重置;1-5点重置
 | 
 |  |  |     LimitLV = 0    #(WORD LimitLV)// 限制等级
 | 
 |  |  |     DayCnt = 0    #(BYTE DayCnt)// 天数
 | 
 |  |  |     DayInfoList = list()    #(vector<tagMCFeastWeekPartyDayInfo> DayInfoList)// 每天模板
 | 
 |  |  |     TCount = 0    #(BYTE TCount)// 模板数
 | 
 |  |  |     ActionInfo = list()    #(vector<tagMCFeastWeekPartyAction> ActionInfo)// 活动模板信息
 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xAA
 | 
 |  |  |         self.Head.SubCmd = 0x20
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def ReadData(self, _lpData, _pos=0, _Len=0):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         _pos = self.Head.ReadData(_lpData, _pos)
 | 
 |  |  |         self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
 | 
 |  |  |         self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
 | 
 |  |  |         self.AdvanceMinutes,_pos = CommFunc.ReadWORD(_lpData, _pos)
 | 
 |  |  |         self.IsDayReset,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.ResetType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
 | 
 |  |  |         self.DayCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         for i in range(self.DayCnt):
 | 
 |  |  |             temDayInfoList = tagMCFeastWeekPartyDayInfo()
 | 
 |  |  |             _pos = temDayInfoList.ReadData(_lpData, _pos)
 | 
 |  |  |             self.DayInfoList.append(temDayInfoList)
 | 
 |  |  |         self.TCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         for i in range(self.TCount):
 | 
 |  |  |             temActionInfo = tagMCFeastWeekPartyAction()
 | 
 |  |  |             _pos = temActionInfo.ReadData(_lpData, _pos)
 | 
 |  |  |             self.ActionInfo.append(temActionInfo)
 | 
 |  |  |         return _pos
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.Head = tagHead()
 | 
 |  |  |         self.Head.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xAA
 | 
 |  |  |         self.Head.SubCmd = 0x20
 | 
 |  |  |         self.StartDate = ""
 | 
 |  |  |         self.EndtDate = ""
 | 
 |  |  |         self.AdvanceMinutes = 0
 | 
 |  |  |         self.IsDayReset = 0
 | 
 |  |  |         self.ResetType = 0
 | 
 |  |  |         self.LimitLV = 0
 | 
 |  |  |         self.DayCnt = 0
 | 
 |  |  |         self.DayInfoList = list()
 | 
 |  |  |         self.TCount = 0
 | 
 |  |  |         self.ActionInfo = list()
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         length = 0
 | 
 |  |  |         length += self.Head.GetLength()
 | 
 |  |  |         length += 10
 | 
 |  |  |         length += 10
 | 
 |  |  |         length += 2
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += 2
 | 
 |  |  |         length += 1
 | 
 |  |  |         for i in range(self.DayCnt):
 | 
 |  |  |             length += self.DayInfoList[i].GetLength()
 | 
 |  |  |         length += 1
 | 
 |  |  |         for i in range(self.TCount):
 | 
 |  |  |             length += self.ActionInfo[i].GetLength()
 | 
 |  |  | 
 | 
 |  |  |         return length
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         data = ''
 | 
 |  |  |         data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
 | 
 |  |  |         data = CommFunc.WriteString(data, 10, self.StartDate)
 | 
 |  |  |         data = CommFunc.WriteString(data, 10, self.EndtDate)
 | 
 |  |  |         data = CommFunc.WriteWORD(data, self.AdvanceMinutes)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.IsDayReset)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.ResetType)
 | 
 |  |  |         data = CommFunc.WriteWORD(data, self.LimitLV)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.DayCnt)
 | 
 |  |  |         for i in range(self.DayCnt):
 | 
 |  |  |             data = CommFunc.WriteString(data, self.DayInfoList[i].GetLength(), self.DayInfoList[i].GetBuffer())
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.TCount)
 | 
 |  |  |         for i in range(self.TCount):
 | 
 |  |  |             data = CommFunc.WriteString(data, self.ActionInfo[i].GetLength(), self.ActionInfo[i].GetBuffer())
 | 
 |  |  |         return data
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''
 | 
 |  |  |                                 Head:%s,
 | 
 |  |  |                                 StartDate:%s,
 | 
 |  |  |                                 EndtDate:%s,
 | 
 |  |  |                                 AdvanceMinutes:%d,
 | 
 |  |  |                                 IsDayReset:%d,
 | 
 |  |  |                                 ResetType:%d,
 | 
 |  |  |                                 LimitLV:%d,
 | 
 |  |  |                                 DayCnt:%d,
 | 
 |  |  |                                 DayInfoList:%s,
 | 
 |  |  |                                 TCount:%d,
 | 
 |  |  |                                 ActionInfo:%s
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Head.OutputString(),
 | 
 |  |  |                                 self.StartDate,
 | 
 |  |  |                                 self.EndtDate,
 | 
 |  |  |                                 self.AdvanceMinutes,
 | 
 |  |  |                                 self.IsDayReset,
 | 
 |  |  |                                 self.ResetType,
 | 
 |  |  |                                 self.LimitLV,
 | 
 |  |  |                                 self.DayCnt,
 | 
 |  |  |                                 "...",
 | 
 |  |  |                                 self.TCount,
 | 
 |  |  |                                 "..."
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagMCFeastWeekPartyInfo=tagMCFeastWeekPartyInfo()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFeastWeekPartyInfo.Head.Cmd,m_NAtagMCFeastWeekPartyInfo.Head.SubCmd))] = m_NAtagMCFeastWeekPartyInfo
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # AA 21 节日巡礼玩家活动信息 #tagMCFeastWeekPartyPlayerInfo
 | 
 |  |  | 
 | 
 |  |  | class  tagMCFeastWeekPartyTaskInfo(Structure):
 | 
 |  |  |     _pack_ = 1
 | 
 |  |  |     _fields_ = [
 | 
 |  |  |                   ("TemplateID", c_ushort),    # 模板ID
 | 
 |  |  |                   ("CurTimes", c_int),    #已完成次数
 | 
 |  |  |                   ("GotTimes", c_int),    #已领取次数
 | 
 |  |  |                   ]
 | 
 |  |  | 
 | 
 |  |  |     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.TemplateID = 0
 | 
 |  |  |         self.CurTimes = 0
 | 
 |  |  |         self.GotTimes = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         return sizeof(tagMCFeastWeekPartyTaskInfo)
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         return string_at(addressof(self), self.GetLength())
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''// AA 21 节日巡礼玩家活动信息 //tagMCFeastWeekPartyPlayerInfo:
 | 
 |  |  |                                 TemplateID:%d,
 | 
 |  |  |                                 CurTimes:%d,
 | 
 |  |  |                                 GotTimes:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.TemplateID,
 | 
 |  |  |                                 self.CurTimes,
 | 
 |  |  |                                 self.GotTimes
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | class  tagMCFeastWeekPartyDayPlayerInfo(Structure):
 | 
 |  |  |     DayIndex = 0    #(DWORD DayIndex)//第X天
 | 
 |  |  |     Point = 0    #(DWORD Point)//积分
 | 
 |  |  |     AwardRecord = 0    #(DWORD AwardRecord)//积分领奖记录
 | 
 |  |  |     ACount = 0    #(DWORD ACount)//任务条目数
 | 
 |  |  |     TaskList = list()    #(vector<tagMCFeastWeekPartyTaskInfo> TaskList)//活动完成次数信息
 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def ReadData(self, _lpData, _pos=0, _Len=0):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.DayIndex,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.Point,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.AwardRecord,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.ACount,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         for i in range(self.ACount):
 | 
 |  |  |             temTaskList = tagMCFeastWeekPartyTaskInfo()
 | 
 |  |  |             _pos = temTaskList.ReadData(_lpData, _pos)
 | 
 |  |  |             self.TaskList.append(temTaskList)
 | 
 |  |  |         return _pos
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.DayIndex = 0
 | 
 |  |  |         self.Point = 0
 | 
 |  |  |         self.AwardRecord = 0
 | 
 |  |  |         self.ACount = 0
 | 
 |  |  |         self.TaskList = list()
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         length = 0
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         for i in range(self.ACount):
 | 
 |  |  |             length += self.TaskList[i].GetLength()
 | 
 |  |  | 
 | 
 |  |  |         return length
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         data = ''
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.DayIndex)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.Point)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.AwardRecord)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.ACount)
 | 
 |  |  |         for i in range(self.ACount):
 | 
 |  |  |             data = CommFunc.WriteString(data, self.TaskList[i].GetLength(), self.TaskList[i].GetBuffer())
 | 
 |  |  |         return data
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''
 | 
 |  |  |                                 DayIndex:%d,
 | 
 |  |  |                                 Point:%d,
 | 
 |  |  |                                 AwardRecord:%d,
 | 
 |  |  |                                 ACount:%d,
 | 
 |  |  |                                 TaskList:%s
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.DayIndex,
 | 
 |  |  |                                 self.Point,
 | 
 |  |  |                                 self.AwardRecord,
 | 
 |  |  |                                 self.ACount,
 | 
 |  |  |                                 "..."
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | class  tagMCFeastWeekPartyPlayerInfo(Structure):
 | 
 |  |  |     Head = tagHead()
 | 
 |  |  |     Count = 0    #(BYTE Count)
 | 
 |  |  |     DayInfoList = list()    #(vector<tagMCFeastWeekPartyDayPlayerInfo> DayInfoList)//活动完成次数信息
 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xAA
 | 
 |  |  |         self.Head.SubCmd = 0x21
 | 
 |  |  |         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):
 | 
 |  |  |             temDayInfoList = tagMCFeastWeekPartyDayPlayerInfo()
 | 
 |  |  |             _pos = temDayInfoList.ReadData(_lpData, _pos)
 | 
 |  |  |             self.DayInfoList.append(temDayInfoList)
 | 
 |  |  |         return _pos
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.Head = tagHead()
 | 
 |  |  |         self.Head.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xAA
 | 
 |  |  |         self.Head.SubCmd = 0x21
 | 
 |  |  |         self.Count = 0
 | 
 |  |  |         self.DayInfoList = list()
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         length = 0
 | 
 |  |  |         length += self.Head.GetLength()
 | 
 |  |  |         length += 1
 | 
 |  |  |         for i in range(self.Count):
 | 
 |  |  |             length += self.DayInfoList[i].GetLength()
 | 
 |  |  | 
 | 
 |  |  |         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.WriteString(data, self.DayInfoList[i].GetLength(), self.DayInfoList[i].GetBuffer())
 | 
 |  |  |         return data
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''
 | 
 |  |  |                                 Head:%s,
 | 
 |  |  |                                 Count:%d,
 | 
 |  |  |                                 DayInfoList:%s
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Head.OutputString(),
 | 
 |  |  |                                 self.Count,
 | 
 |  |  |                                 "..."
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagMCFeastWeekPartyPlayerInfo=tagMCFeastWeekPartyPlayerInfo()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFeastWeekPartyPlayerInfo.Head.Cmd,m_NAtagMCFeastWeekPartyPlayerInfo.Head.SubCmd))] = m_NAtagMCFeastWeekPartyPlayerInfo
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # AA 02 首充信息 #tagMCFirstGoldInfo
 | 
 |  |  | 
 | 
 |  |  | class  tagMCFirstGoldInfo(Structure):
 | 
 |  |  | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # AA 23 新仙界盛典全民来嗨玩家信息 #tagMCNewAllPeoplePartyInfo
 | 
 |  |  | 
 | 
 |  |  | class  tagMCNewAllPeoplePartyCount(Structure):
 | 
 |  |  |     _pack_ = 1
 | 
 |  |  |     _fields_ = [
 | 
 |  |  |                   ("ActID", c_int),    #活动ID
 | 
 |  |  |                   ("CurTimes", 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.ActID = 0
 | 
 |  |  |         self.CurTimes = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         return sizeof(tagMCNewAllPeoplePartyCount)
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         return string_at(addressof(self), self.GetLength())
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''// AA 23 新仙界盛典全民来嗨玩家信息 //tagMCNewAllPeoplePartyInfo:
 | 
 |  |  |                                 ActID:%d,
 | 
 |  |  |                                 CurTimes:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.ActID,
 | 
 |  |  |                                 self.CurTimes
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | class  tagMCNewAllPeoplePartyInfo(Structure):
 | 
 |  |  |     Head = tagHead()
 | 
 |  |  |     CurPoint = 0    #(DWORD CurPoint)//当前总点数
 | 
 |  |  |     AwardRecord = 0    #(DWORD AwardRecord)//领奖记录 按奖励索引二进制位存储是否已领取
 | 
 |  |  |     Count = 0    #(BYTE Count)
 | 
 |  |  |     BuyCountList = list()    #(vector<tagMCNewAllPeoplePartyCount> BuyCountList)//活动完成次数信息
 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xAA
 | 
 |  |  |         self.Head.SubCmd = 0x23
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def ReadData(self, _lpData, _pos=0, _Len=0):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         _pos = self.Head.ReadData(_lpData, _pos)
 | 
 |  |  |         self.CurPoint,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.AwardRecord,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         for i in range(self.Count):
 | 
 |  |  |             temBuyCountList = tagMCNewAllPeoplePartyCount()
 | 
 |  |  |             _pos = temBuyCountList.ReadData(_lpData, _pos)
 | 
 |  |  |             self.BuyCountList.append(temBuyCountList)
 | 
 |  |  |         return _pos
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.Head = tagHead()
 | 
 |  |  |         self.Head.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xAA
 | 
 |  |  |         self.Head.SubCmd = 0x23
 | 
 |  |  |         self.CurPoint = 0
 | 
 |  |  |         self.AwardRecord = 0
 | 
 |  |  |         self.Count = 0
 | 
 |  |  |         self.BuyCountList = list()
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         length = 0
 | 
 |  |  |         length += self.Head.GetLength()
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 1
 | 
 |  |  |         for i in range(self.Count):
 | 
 |  |  |             length += self.BuyCountList[i].GetLength()
 | 
 |  |  | 
 | 
 |  |  |         return length
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         data = ''
 | 
 |  |  |         data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.CurPoint)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.AwardRecord)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.Count)
 | 
 |  |  |         for i in range(self.Count):
 | 
 |  |  |             data = CommFunc.WriteString(data, self.BuyCountList[i].GetLength(), self.BuyCountList[i].GetBuffer())
 | 
 |  |  |         return data
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''
 | 
 |  |  |                                 Head:%s,
 | 
 |  |  |                                 CurPoint:%d,
 | 
 |  |  |                                 AwardRecord:%d,
 | 
 |  |  |                                 Count:%d,
 | 
 |  |  |                                 BuyCountList:%s
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Head.OutputString(),
 | 
 |  |  |                                 self.CurPoint,
 | 
 |  |  |                                 self.AwardRecord,
 | 
 |  |  |                                 self.Count,
 | 
 |  |  |                                 "..."
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagMCNewAllPeoplePartyInfo=tagMCNewAllPeoplePartyInfo()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCNewAllPeoplePartyInfo.Head.Cmd,m_NAtagMCNewAllPeoplePartyInfo.Head.SubCmd))] = m_NAtagMCNewAllPeoplePartyInfo
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # AA 22 新仙界盛典充值大礼 #tagMCNewXJSDRecharge
 | 
 |  |  | 
 | 
 |  |  | class  tagMCNewXJSDRecharge(Structure):
 | 
 |  |  |     _pack_ = 1
 | 
 |  |  |     _fields_ = [
 | 
 |  |  |                   ("Cmd", c_ubyte),
 | 
 |  |  |                   ("SubCmd", c_ubyte),
 | 
 |  |  |                   ("State", c_ubyte),    #0-不可领 1-可领 2-已领取
 | 
 |  |  |                   ]
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Cmd = 0xAA
 | 
 |  |  |         self.SubCmd = 0x22
 | 
 |  |  |         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 = 0x22
 | 
 |  |  |         self.State = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         return sizeof(tagMCNewXJSDRecharge)
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         return string_at(addressof(self), self.GetLength())
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''// AA 22 新仙界盛典充值大礼 //tagMCNewXJSDRecharge:
 | 
 |  |  |                                 Cmd:%s,
 | 
 |  |  |                                 SubCmd:%s,
 | 
 |  |  |                                 State:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Cmd,
 | 
 |  |  |                                 self.SubCmd,
 | 
 |  |  |                                 self.State
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagMCNewXJSDRecharge=tagMCNewXJSDRecharge()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCNewXJSDRecharge.Cmd,m_NAtagMCNewXJSDRecharge.SubCmd))] = m_NAtagMCNewXJSDRecharge
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # AA 05 充值排行特惠信息 #tagMCRechargeRankTeHuiInfo
 | 
 |  |  | 
 | 
 |  |  | class  tagMCRechargeRankTeHuiInfo(Structure):
 | 
 |  |  | 
 |  |  | 
 | 
 |  |  | m_NAtagMCTotalRechargePlayerInfo=tagMCTotalRechargePlayerInfo()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCTotalRechargePlayerInfo.Cmd,m_NAtagMCTotalRechargePlayerInfo.SubCmd))] = m_NAtagMCTotalRechargePlayerInfo
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # AA 0A 周狂欢活动信息 #tagMCWeekPartyInfo
 | 
 |  |  | 
 | 
 |  |  | class  tagMCWeekPartyItem(Structure):
 | 
 |  |  |     _pack_ = 1
 | 
 |  |  |     _fields_ = [
 | 
 |  |  |                   ("NeedPoint", c_ushort),    # 领奖需要积分
 | 
 |  |  |                   ("ItemID", c_int),    # 物品ID
 | 
 |  |  |                   ("ItemCnt", 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.NeedPoint = 0
 | 
 |  |  |         self.ItemID = 0
 | 
 |  |  |         self.ItemCnt = 0
 | 
 |  |  |         self.IsBind = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         return sizeof(tagMCWeekPartyItem)
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         return string_at(addressof(self), self.GetLength())
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''// AA 0A 周狂欢活动信息 //tagMCWeekPartyInfo:
 | 
 |  |  |                                 NeedPoint:%d,
 | 
 |  |  |                                 ItemID:%d,
 | 
 |  |  |                                 ItemCnt:%d,
 | 
 |  |  |                                 IsBind:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.NeedPoint,
 | 
 |  |  |                                 self.ItemID,
 | 
 |  |  |                                 self.ItemCnt,
 | 
 |  |  |                                 self.IsBind
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | class  tagMCWeekPartyAction(Structure):
 | 
 |  |  |     TemplateID = 0    #(DWORD TemplateID)// 模板ID
 | 
 |  |  |     ActionType = 0    #(WORD ActionType)// 活动类别
 | 
 |  |  |     TotalTimes = 0    #(DWORD TotalTimes)// 可完成的总次数,0表示不限次数
 | 
 |  |  |     SingleTimes = 0    #(DWORD SingleTimes)// 单次领奖需要的次数
 | 
 |  |  |     Point = 0    #(DWORD Point)// 单次领奖积分
 | 
 |  |  |     Count = 0    #(BYTE Count)// 物品数
 | 
 |  |  |     ItemInfo = list()    #(vector<tagMCWeekPartyItem> ItemInfo)// 物品信息
 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def ReadData(self, _lpData, _pos=0, _Len=0):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.TemplateID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.ActionType,_pos = CommFunc.ReadWORD(_lpData, _pos)
 | 
 |  |  |         self.TotalTimes,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.SingleTimes,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.Point,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         for i in range(self.Count):
 | 
 |  |  |             temItemInfo = tagMCWeekPartyItem()
 | 
 |  |  |             _pos = temItemInfo.ReadData(_lpData, _pos)
 | 
 |  |  |             self.ItemInfo.append(temItemInfo)
 | 
 |  |  |         return _pos
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.TemplateID = 0
 | 
 |  |  |         self.ActionType = 0
 | 
 |  |  |         self.TotalTimes = 0
 | 
 |  |  |         self.SingleTimes = 0
 | 
 |  |  |         self.Point = 0
 | 
 |  |  |         self.Count = 0
 | 
 |  |  |         self.ItemInfo = list()
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         length = 0
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 2
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 1
 | 
 |  |  |         for i in range(self.Count):
 | 
 |  |  |             length += self.ItemInfo[i].GetLength()
 | 
 |  |  | 
 | 
 |  |  |         return length
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         data = ''
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.TemplateID)
 | 
 |  |  |         data = CommFunc.WriteWORD(data, self.ActionType)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.TotalTimes)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.SingleTimes)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.Point)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.Count)
 | 
 |  |  |         for i in range(self.Count):
 | 
 |  |  |             data = CommFunc.WriteString(data, self.ItemInfo[i].GetLength(), self.ItemInfo[i].GetBuffer())
 | 
 |  |  |         return data
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''
 | 
 |  |  |                                 TemplateID:%d,
 | 
 |  |  |                                 ActionType:%d,
 | 
 |  |  |                                 TotalTimes:%d,
 | 
 |  |  |                                 SingleTimes:%d,
 | 
 |  |  |                                 Point:%d,
 | 
 |  |  |                                 Count:%d,
 | 
 |  |  |                                 ItemInfo:%s
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.TemplateID,
 | 
 |  |  |                                 self.ActionType,
 | 
 |  |  |                                 self.TotalTimes,
 | 
 |  |  |                                 self.SingleTimes,
 | 
 |  |  |                                 self.Point,
 | 
 |  |  |                                 self.Count,
 | 
 |  |  |                                 "..."
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | class  tagMCWeekPartyDayInfo(Structure):
 | 
 |  |  |     ActCnt = 0    #(BYTE ActCnt)// 数量
 | 
 |  |  |     TemplateList = list()    #(vector<WORD> TemplateList)// 模板列表
 | 
 |  |  |     PCount = 0    #(BYTE PCount)// 物品数
 | 
 |  |  |     PItemInfo = list()    #(vector<tagMCWeekPartyItem> PItemInfo)// 物品信息
 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def ReadData(self, _lpData, _pos=0, _Len=0):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.ActCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         for i in range(self.ActCnt):
 | 
 |  |  |             value,_pos=CommFunc.ReadWORD(_lpData,_pos)
 | 
 |  |  |             self.TemplateList.append(value)
 | 
 |  |  |         self.PCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         for i in range(self.PCount):
 | 
 |  |  |             temPItemInfo = tagMCWeekPartyItem()
 | 
 |  |  |             _pos = temPItemInfo.ReadData(_lpData, _pos)
 | 
 |  |  |             self.PItemInfo.append(temPItemInfo)
 | 
 |  |  |         return _pos
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.ActCnt = 0
 | 
 |  |  |         self.TemplateList = list()
 | 
 |  |  |         self.PCount = 0
 | 
 |  |  |         self.PItemInfo = list()
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         length = 0
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += 2 * self.ActCnt
 | 
 |  |  |         length += 1
 | 
 |  |  |         for i in range(self.PCount):
 | 
 |  |  |             length += self.PItemInfo[i].GetLength()
 | 
 |  |  | 
 | 
 |  |  |         return length
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         data = ''
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.ActCnt)
 | 
 |  |  |         for i in range(self.ActCnt):
 | 
 |  |  |             data = CommFunc.WriteWORD(data, self.TemplateList[i])
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.PCount)
 | 
 |  |  |         for i in range(self.PCount):
 | 
 |  |  |             data = CommFunc.WriteString(data, self.PItemInfo[i].GetLength(), self.PItemInfo[i].GetBuffer())
 | 
 |  |  |         return data
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''
 | 
 |  |  |                                 ActCnt:%d,
 | 
 |  |  |                                 TemplateList:%s,
 | 
 |  |  |                                 PCount:%d,
 | 
 |  |  |                                 PItemInfo:%s
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.ActCnt,
 | 
 |  |  |                                 "...",
 | 
 |  |  |                                 self.PCount,
 | 
 |  |  |                                 "..."
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | class  tagMCWeekPartyInfo(Structure):
 | 
 |  |  |     Head = tagHead()
 | 
 |  |  |     StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
 | 
 |  |  |     EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
 | 
 |  |  |     AdvanceMinutes = 0    #(WORD AdvanceMinutes)// 提前显示分钟
 | 
 |  |  |     IsDayReset = 0    #(BYTE IsDayReset)//是否每天重置
 | 
 |  |  |     ResetType = 0    #(BYTE ResetType)// 重置类型,0-0点重置;1-5点重置
 | 
 |  |  |     LimitLV = 0    #(WORD LimitLV)// 限制等级
 | 
 |  |  |     DayCnt = 0    #(BYTE DayCnt)// 天数
 | 
 |  |  |     DayInfoList = list()    #(vector<tagMCWeekPartyDayInfo> DayInfoList)// 每天模板
 | 
 |  |  |     TCount = 0    #(BYTE TCount)// 模板数
 | 
 |  |  |     ActionInfo = list()    #(vector<tagMCWeekPartyAction> ActionInfo)// 活动模板信息
 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xAA
 | 
 |  |  |         self.Head.SubCmd = 0x0A
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def ReadData(self, _lpData, _pos=0, _Len=0):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         _pos = self.Head.ReadData(_lpData, _pos)
 | 
 |  |  |         self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
 | 
 |  |  |         self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
 | 
 |  |  |         self.AdvanceMinutes,_pos = CommFunc.ReadWORD(_lpData, _pos)
 | 
 |  |  |         self.IsDayReset,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.ResetType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
 | 
 |  |  |         self.DayCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         for i in range(self.DayCnt):
 | 
 |  |  |             temDayInfoList = tagMCWeekPartyDayInfo()
 | 
 |  |  |             _pos = temDayInfoList.ReadData(_lpData, _pos)
 | 
 |  |  |             self.DayInfoList.append(temDayInfoList)
 | 
 |  |  |         self.TCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         for i in range(self.TCount):
 | 
 |  |  |             temActionInfo = tagMCWeekPartyAction()
 | 
 |  |  |             _pos = temActionInfo.ReadData(_lpData, _pos)
 | 
 |  |  |             self.ActionInfo.append(temActionInfo)
 | 
 |  |  |         return _pos
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.Head = tagHead()
 | 
 |  |  |         self.Head.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xAA
 | 
 |  |  |         self.Head.SubCmd = 0x0A
 | 
 |  |  |         self.StartDate = ""
 | 
 |  |  |         self.EndtDate = ""
 | 
 |  |  |         self.AdvanceMinutes = 0
 | 
 |  |  |         self.IsDayReset = 0
 | 
 |  |  |         self.ResetType = 0
 | 
 |  |  |         self.LimitLV = 0
 | 
 |  |  |         self.DayCnt = 0
 | 
 |  |  |         self.DayInfoList = list()
 | 
 |  |  |         self.TCount = 0
 | 
 |  |  |         self.ActionInfo = list()
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         length = 0
 | 
 |  |  |         length += self.Head.GetLength()
 | 
 |  |  |         length += 10
 | 
 |  |  |         length += 10
 | 
 |  |  |         length += 2
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += 2
 | 
 |  |  |         length += 1
 | 
 |  |  |         for i in range(self.DayCnt):
 | 
 |  |  |             length += self.DayInfoList[i].GetLength()
 | 
 |  |  |         length += 1
 | 
 |  |  |         for i in range(self.TCount):
 | 
 |  |  |             length += self.ActionInfo[i].GetLength()
 | 
 |  |  | 
 | 
 |  |  |         return length
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         data = ''
 | 
 |  |  |         data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
 | 
 |  |  |         data = CommFunc.WriteString(data, 10, self.StartDate)
 | 
 |  |  |         data = CommFunc.WriteString(data, 10, self.EndtDate)
 | 
 |  |  |         data = CommFunc.WriteWORD(data, self.AdvanceMinutes)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.IsDayReset)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.ResetType)
 | 
 |  |  |         data = CommFunc.WriteWORD(data, self.LimitLV)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.DayCnt)
 | 
 |  |  |         for i in range(self.DayCnt):
 | 
 |  |  |             data = CommFunc.WriteString(data, self.DayInfoList[i].GetLength(), self.DayInfoList[i].GetBuffer())
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.TCount)
 | 
 |  |  |         for i in range(self.TCount):
 | 
 |  |  |             data = CommFunc.WriteString(data, self.ActionInfo[i].GetLength(), self.ActionInfo[i].GetBuffer())
 | 
 |  |  |         return data
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''
 | 
 |  |  |                                 Head:%s,
 | 
 |  |  |                                 StartDate:%s,
 | 
 |  |  |                                 EndtDate:%s,
 | 
 |  |  |                                 AdvanceMinutes:%d,
 | 
 |  |  |                                 IsDayReset:%d,
 | 
 |  |  |                                 ResetType:%d,
 | 
 |  |  |                                 LimitLV:%d,
 | 
 |  |  |                                 DayCnt:%d,
 | 
 |  |  |                                 DayInfoList:%s,
 | 
 |  |  |                                 TCount:%d,
 | 
 |  |  |                                 ActionInfo:%s
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Head.OutputString(),
 | 
 |  |  |                                 self.StartDate,
 | 
 |  |  |                                 self.EndtDate,
 | 
 |  |  |                                 self.AdvanceMinutes,
 | 
 |  |  |                                 self.IsDayReset,
 | 
 |  |  |                                 self.ResetType,
 | 
 |  |  |                                 self.LimitLV,
 | 
 |  |  |                                 self.DayCnt,
 | 
 |  |  |                                 "...",
 | 
 |  |  |                                 self.TCount,
 | 
 |  |  |                                 "..."
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagMCWeekPartyInfo=tagMCWeekPartyInfo()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCWeekPartyInfo.Head.Cmd,m_NAtagMCWeekPartyInfo.Head.SubCmd))] = m_NAtagMCWeekPartyInfo
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # AA 0B 周狂欢玩家活动信息 #tagMCWeekPartyPlayerInfo
 | 
 |  |  | 
 | 
 |  |  | class  tagMCWeekPartyTaskInfo(Structure):
 | 
 |  |  |     _pack_ = 1
 | 
 |  |  |     _fields_ = [
 | 
 |  |  |                   ("TemplateID", c_ushort),    # 模板ID
 | 
 |  |  |                   ("CurTimes", c_int),    #已完成次数
 | 
 |  |  |                   ("GotTimes", c_int),    #已领取次数
 | 
 |  |  |                   ]
 | 
 |  |  | 
 | 
 |  |  |     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.TemplateID = 0
 | 
 |  |  |         self.CurTimes = 0
 | 
 |  |  |         self.GotTimes = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         return sizeof(tagMCWeekPartyTaskInfo)
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         return string_at(addressof(self), self.GetLength())
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''// AA 0B 周狂欢玩家活动信息 //tagMCWeekPartyPlayerInfo:
 | 
 |  |  |                                 TemplateID:%d,
 | 
 |  |  |                                 CurTimes:%d,
 | 
 |  |  |                                 GotTimes:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.TemplateID,
 | 
 |  |  |                                 self.CurTimes,
 | 
 |  |  |                                 self.GotTimes
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | class  tagMCWeekPartyDayPlayerInfo(Structure):
 | 
 |  |  |     DayIndex = 0    #(DWORD DayIndex)//第X天
 | 
 |  |  |     Point = 0    #(DWORD Point)//积分
 | 
 |  |  |     AwardRecord = 0    #(DWORD AwardRecord)//积分领奖记录
 | 
 |  |  |     ACount = 0    #(DWORD ACount)//任务条目数
 | 
 |  |  |     TaskList = list()    #(vector<tagMCWeekPartyTaskInfo> TaskList)//活动完成次数信息
 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def ReadData(self, _lpData, _pos=0, _Len=0):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.DayIndex,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.Point,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.AwardRecord,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.ACount,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         for i in range(self.ACount):
 | 
 |  |  |             temTaskList = tagMCWeekPartyTaskInfo()
 | 
 |  |  |             _pos = temTaskList.ReadData(_lpData, _pos)
 | 
 |  |  |             self.TaskList.append(temTaskList)
 | 
 |  |  |         return _pos
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.DayIndex = 0
 | 
 |  |  |         self.Point = 0
 | 
 |  |  |         self.AwardRecord = 0
 | 
 |  |  |         self.ACount = 0
 | 
 |  |  |         self.TaskList = list()
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         length = 0
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         for i in range(self.ACount):
 | 
 |  |  |             length += self.TaskList[i].GetLength()
 | 
 |  |  | 
 | 
 |  |  |         return length
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         data = ''
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.DayIndex)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.Point)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.AwardRecord)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.ACount)
 | 
 |  |  |         for i in range(self.ACount):
 | 
 |  |  |             data = CommFunc.WriteString(data, self.TaskList[i].GetLength(), self.TaskList[i].GetBuffer())
 | 
 |  |  |         return data
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''
 | 
 |  |  |                                 DayIndex:%d,
 | 
 |  |  |                                 Point:%d,
 | 
 |  |  |                                 AwardRecord:%d,
 | 
 |  |  |                                 ACount:%d,
 | 
 |  |  |                                 TaskList:%s
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.DayIndex,
 | 
 |  |  |                                 self.Point,
 | 
 |  |  |                                 self.AwardRecord,
 | 
 |  |  |                                 self.ACount,
 | 
 |  |  |                                 "..."
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | class  tagMCWeekPartyPlayerInfo(Structure):
 | 
 |  |  |     Head = tagHead()
 | 
 |  |  |     Count = 0    #(BYTE Count)
 | 
 |  |  |     DayInfoList = list()    #(vector<tagMCWeekPartyDayPlayerInfo> DayInfoList)//活动完成次数信息
 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xAA
 | 
 |  |  |         self.Head.SubCmd = 0x0B
 | 
 |  |  |         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):
 | 
 |  |  |             temDayInfoList = tagMCWeekPartyDayPlayerInfo()
 | 
 |  |  |             _pos = temDayInfoList.ReadData(_lpData, _pos)
 | 
 |  |  |             self.DayInfoList.append(temDayInfoList)
 | 
 |  |  |         return _pos
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.Head = tagHead()
 | 
 |  |  |         self.Head.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xAA
 | 
 |  |  |         self.Head.SubCmd = 0x0B
 | 
 |  |  |         self.Count = 0
 | 
 |  |  |         self.DayInfoList = list()
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         length = 0
 | 
 |  |  |         length += self.Head.GetLength()
 | 
 |  |  |         length += 1
 | 
 |  |  |         for i in range(self.Count):
 | 
 |  |  |             length += self.DayInfoList[i].GetLength()
 | 
 |  |  | 
 | 
 |  |  |         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.WriteString(data, self.DayInfoList[i].GetLength(), self.DayInfoList[i].GetBuffer())
 | 
 |  |  |         return data
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''
 | 
 |  |  |                                 Head:%s,
 | 
 |  |  |                                 Count:%d,
 | 
 |  |  |                                 DayInfoList:%s
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Head.OutputString(),
 | 
 |  |  |                                 self.Count,
 | 
 |  |  |                                 "..."
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagMCWeekPartyPlayerInfo=tagMCWeekPartyPlayerInfo()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCWeekPartyPlayerInfo.Head.Cmd,m_NAtagMCWeekPartyPlayerInfo.Head.SubCmd))] = m_NAtagMCWeekPartyPlayerInfo
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | 
 |  |  | 
 | 
 |  |  | m_NAtagMCDiceAward=tagMCDiceAward()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCDiceAward.Cmd,m_NAtagMCDiceAward.SubCmd))] = m_NAtagMCDiceAward
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # AB 25 节日红包信息 #tagMCFeastRedPackInfo
 | 
 |  |  | 
 | 
 |  |  | class  tagMCFeastRedPackInfo(Structure):
 | 
 |  |  |     _pack_ = 1
 | 
 |  |  |     _fields_ = [
 | 
 |  |  |                   ("Cmd", c_ubyte),
 | 
 |  |  |                   ("SubCmd", c_ubyte),
 | 
 |  |  |                   ("MoneyNum", c_int),    # 累积抢到多少钱
 | 
 |  |  |                   ("GrabCnt", c_ushort),    # 已抢红包次数
 | 
 |  |  |                   ]
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Cmd = 0xAB
 | 
 |  |  |         self.SubCmd = 0x25
 | 
 |  |  |         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 = 0x25
 | 
 |  |  |         self.MoneyNum = 0
 | 
 |  |  |         self.GrabCnt = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         return sizeof(tagMCFeastRedPackInfo)
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         return string_at(addressof(self), self.GetLength())
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''// AB 25 节日红包信息 //tagMCFeastRedPackInfo:
 | 
 |  |  |                                 Cmd:%s,
 | 
 |  |  |                                 SubCmd:%s,
 | 
 |  |  |                                 MoneyNum:%d,
 | 
 |  |  |                                 GrabCnt:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Cmd,
 | 
 |  |  |                                 self.SubCmd,
 | 
 |  |  |                                 self.MoneyNum,
 | 
 |  |  |                                 self.GrabCnt
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagMCFeastRedPackInfo=tagMCFeastRedPackInfo()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFeastRedPackInfo.Cmd,m_NAtagMCFeastRedPackInfo.SubCmd))] = m_NAtagMCFeastRedPackInfo
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | 
 |  |  | class  tagMCClothesCoatLVInfo(Structure):
 | 
 |  |  |     _pack_ = 1
 | 
 |  |  |     _fields_ = [
 | 
 |  |  |                   ("Cmd", c_ubyte),
 | 
 |  |  |                   ("SubCmd", c_ubyte),
 | 
 |  |  |                   ("CoatIndex", c_int),    #时装索引
 | 
 |  |  |                   ("CoatLV", c_ubyte),    #时装等级
 | 
 |  |  |                   ("CoatExp", c_int),    #时装祝福值经验
 | 
 |  |  |                   ]
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Cmd = 0xB1
 | 
 |  |  |         self.SubCmd = 0x02
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def ReadData(self, stringData, _pos=0, _len=0):
 | 
 |  |  | 
 |  |  |         return _pos + self.GetLength()
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.Cmd = 0xB1
 | 
 |  |  |         self.SubCmd = 0x02
 | 
 |  |  |         self.CoatIndex = 0
 | 
 |  |  |         self.CoatLV = 0
 | 
 |  |  |         self.CoatExp = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''// B1 02 玩家时装皮肤激活状态 //tagMCClothesCoatSkinState:
 | 
 |  |  |                                 Cmd:%s,
 | 
 |  |  |                                 SubCmd:%s,
 | 
 |  |  |                                 CoatIndex:%d,
 | 
 |  |  |                                 CoatLV:%d,
 | 
 |  |  |                                 CoatExp:%d
 | 
 |  |  |                                 CoatLV:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Cmd,
 | 
 |  |  |                                 self.SubCmd,
 | 
 |  |  |                                 self.CoatIndex,
 | 
 |  |  |                                 self.CoatLV,
 | 
 |  |  |                                 self.CoatExp
 | 
 |  |  |                                 self.CoatLV
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | class  tagMCClothesCoatSkinState(Structure):
 | 
 |  |  |     Head = tagHead()
 | 
 |  |  |     SkinOpenState = 0    #(DWORD SkinOpenState)//时装激活状态, 按索引表示激活状态
 | 
 |  |  |     CoatNum = 0    #(BYTE CoatNum)//时装个数
 | 
 |  |  |     CoatChestLV = 0    #(DWORD CoatChestLV)//时装柜等级
 | 
 |  |  |     CoatChestExp = 0    #(DWORD CoatChestExp)//时装柜经验
 | 
 |  |  |     CoatNum = 0    #(WORD CoatNum)//时装个数
 | 
 |  |  |     CoatInfoList = list()    #(vector<tagMCClothesCoatLVInfo> CoatInfoList)// 时装数据列表
 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  | 
 |  |  |     def ReadData(self, _lpData, _pos=0, _Len=0):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         _pos = self.Head.ReadData(_lpData, _pos)
 | 
 |  |  |         self.SkinOpenState,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.CoatNum,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.CoatChestLV,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.CoatChestExp,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.CoatNum,_pos = CommFunc.ReadWORD(_lpData, _pos)
 | 
 |  |  |         for i in range(self.CoatNum):
 | 
 |  |  |             temCoatInfoList = tagMCClothesCoatLVInfo()
 | 
 |  |  |             _pos = temCoatInfoList.ReadData(_lpData, _pos)
 | 
 |  |  | 
 |  |  |         self.Head.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xB1
 | 
 |  |  |         self.Head.SubCmd = 0x02
 | 
 |  |  |         self.SkinOpenState = 0
 | 
 |  |  |         self.CoatChestLV = 0
 | 
 |  |  |         self.CoatChestExp = 0
 | 
 |  |  |         self.CoatNum = 0
 | 
 |  |  |         self.CoatInfoList = list()
 | 
 |  |  |         return
 | 
 |  |  | 
 |  |  |         length = 0
 | 
 |  |  |         length += self.Head.GetLength()
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 2
 | 
 |  |  |         for i in range(self.CoatNum):
 | 
 |  |  |             length += self.CoatInfoList[i].GetLength()
 | 
 |  |  | 
 | 
 |  |  | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         data = ''
 | 
 |  |  |         data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.SkinOpenState)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.CoatNum)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.CoatChestLV)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.CoatChestExp)
 | 
 |  |  |         data = CommFunc.WriteWORD(data, self.CoatNum)
 | 
 |  |  |         for i in range(self.CoatNum):
 | 
 |  |  |             data = CommFunc.WriteString(data, self.CoatInfoList[i].GetLength(), self.CoatInfoList[i].GetBuffer())
 | 
 |  |  |         return data
 | 
 |  |  | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''
 | 
 |  |  |                                 Head:%s,
 | 
 |  |  |                                 SkinOpenState:%d,
 | 
 |  |  |                                 CoatChestLV:%d,
 | 
 |  |  |                                 CoatChestExp:%d,
 | 
 |  |  |                                 CoatNum:%d,
 | 
 |  |  |                                 CoatInfoList:%s
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Head.OutputString(),
 | 
 |  |  |                                 self.SkinOpenState,
 | 
 |  |  |                                 self.CoatChestLV,
 | 
 |  |  |                                 self.CoatChestExp,
 | 
 |  |  |                                 self.CoatNum,
 | 
 |  |  |                                 "..."
 | 
 |  |  |                                 )
 | 
 |  |  | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # B2 12 诛仙BOSS协助次数 #tagMCZhuXianBossCnt
 | 
 |  |  | 
 | 
 |  |  | class  tagMCZhuXianBossCnt(Structure):
 | 
 |  |  |     _pack_ = 1
 | 
 |  |  |     _fields_ = [
 | 
 |  |  |                   ("Cmd", c_ubyte),
 | 
 |  |  |                   ("SubCmd", c_ubyte),
 | 
 |  |  |                   ("Cnt", c_ubyte),    # 剩余可协助次数
 | 
 |  |  |                   ]
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Cmd = 0xB2
 | 
 |  |  |         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 = 0xB2
 | 
 |  |  |         self.SubCmd = 0x12
 | 
 |  |  |         self.Cnt = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         return sizeof(tagMCZhuXianBossCnt)
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         return string_at(addressof(self), self.GetLength())
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''// B2 12 诛仙BOSS协助次数 //tagMCZhuXianBossCnt:
 | 
 |  |  |                                 Cmd:%s,
 | 
 |  |  |                                 SubCmd:%s,
 | 
 |  |  |                                 Cnt:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Cmd,
 | 
 |  |  |                                 self.SubCmd,
 | 
 |  |  |                                 self.Cnt
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | 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
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # B4 11 新增恶意攻击玩家 #tagMCAddMaliciousAtkPlayer
 | 
 |  |  | 
 | 
 |  |  | class  tagMCAddMaliciousAtkPlayer(Structure):
 | 
 |  |  | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # B4 13 通知玩家所有已学技能 #tagMCPlayerSkills
 | 
 |  |  | 
 | 
 |  |  | class  tagPlayerSkill(Structure):
 | 
 |  |  |     _pack_ = 1
 | 
 |  |  |     _fields_ = [
 | 
 |  |  |                   ("SkillID", c_int),    #技能ID
 | 
 |  |  |                   ("RemainTime", c_int),    #剩余时间
 | 
 |  |  |                   ("Proficiency", c_int),    #熟练度
 | 
 |  |  |                   ]
 | 
 |  |  | 
 | 
 |  |  |     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.SkillID = 0
 | 
 |  |  |         self.RemainTime = 0
 | 
 |  |  |         self.Proficiency = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         return sizeof(tagPlayerSkill)
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         return string_at(addressof(self), self.GetLength())
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''// B4 13 通知玩家所有已学技能 //tagMCPlayerSkills:
 | 
 |  |  |                                 SkillID:%d,
 | 
 |  |  |                                 RemainTime:%d,
 | 
 |  |  |                                 Proficiency:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.SkillID,
 | 
 |  |  |                                 self.RemainTime,
 | 
 |  |  |                                 self.Proficiency
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | class  tagMCPlayerSkills(Structure):
 | 
 |  |  |     Head = tagHead()
 | 
 |  |  |     Count = 0    #(WORD Count)//技能个数
 | 
 |  |  |     Skills = list()    #(vector<tagPlayerSkill> Skills)// 技能数据
 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xB4
 | 
 |  |  |         self.Head.SubCmd = 0x13
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def ReadData(self, _lpData, _pos=0, _Len=0):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         _pos = self.Head.ReadData(_lpData, _pos)
 | 
 |  |  |         self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos)
 | 
 |  |  |         for i in range(self.Count):
 | 
 |  |  |             temSkills = tagPlayerSkill()
 | 
 |  |  |             _pos = temSkills.ReadData(_lpData, _pos)
 | 
 |  |  |             self.Skills.append(temSkills)
 | 
 |  |  |         return _pos
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.Head = tagHead()
 | 
 |  |  |         self.Head.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xB4
 | 
 |  |  |         self.Head.SubCmd = 0x13
 | 
 |  |  |         self.Count = 0
 | 
 |  |  |         self.Skills = list()
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         length = 0
 | 
 |  |  |         length += self.Head.GetLength()
 | 
 |  |  |         length += 2
 | 
 |  |  |         for i in range(self.Count):
 | 
 |  |  |             length += self.Skills[i].GetLength()
 | 
 |  |  | 
 | 
 |  |  |         return length
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         data = ''
 | 
 |  |  |         data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
 | 
 |  |  |         data = CommFunc.WriteWORD(data, self.Count)
 | 
 |  |  |         for i in range(self.Count):
 | 
 |  |  |             data = CommFunc.WriteString(data, self.Skills[i].GetLength(), self.Skills[i].GetBuffer())
 | 
 |  |  |         return data
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''
 | 
 |  |  |                                 Head:%s,
 | 
 |  |  |                                 Count:%d,
 | 
 |  |  |                                 Skills:%s
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Head.OutputString(),
 | 
 |  |  |                                 self.Count,
 | 
 |  |  |                                 "..."
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagMCPlayerSkills=tagMCPlayerSkills()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCPlayerSkills.Head.Cmd,m_NAtagMCPlayerSkills.Head.SubCmd))] = m_NAtagMCPlayerSkills
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | #B4 0A 玩家移动 #tagMCPYPlayerMove
 | 
 |  |  | 
 | 
 |  |  | class  tagMCPYPlayerMove(Structure):
 | 
 |  |  | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | #D2 01 跨服赛报名(上传数据)状态 #tagMergeWarRegisterState
 | 
 |  |  | # C1 02 跨服PK玩家奖励记录 #tagMCCrossRealmPKAwardState
 | 
 |  |  | 
 | 
 |  |  | class  tagMergeWarRegisterState(Structure):
 | 
 |  |  | class  tagMCCrossRealmPKAwardState(Structure):
 | 
 |  |  |     _pack_ = 1
 | 
 |  |  |     _fields_ = [
 | 
 |  |  |                   ("Cmd", c_ubyte),
 | 
 |  |  |                   ("SubCmd", c_ubyte),
 | 
 |  |  |                   ("RegisterState", c_ubyte),     | 
 |  |  |                   ("DayPKCountAwardState", c_int),    # 每日匹配次数奖励记录,二进制位存储是否已领取,按匹配次数升序排序索引代表奖励位
 | 
 |  |  |                   ("DayWinCountAwardState", c_int),    # 每日胜利次数奖励记录,二进制位存储是否已领取,按胜利次数升序排序索引代表奖励位
 | 
 |  |  |                   ("DanLVAwardState", c_int),    # 段位达标奖励记录,二进制位存储是否已领取,按段位代表奖励位
 | 
 |  |  |                   ("SeasonAwardState", c_ubyte),    # 赛季结算奖励是否已领取
 | 
 |  |  |                   ]
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Cmd = 0xD2
 | 
 |  |  |         self.Cmd = 0xC1
 | 
 |  |  |         self.SubCmd = 0x02
 | 
 |  |  |         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 = 0x02
 | 
 |  |  |         self.DayPKCountAwardState = 0
 | 
 |  |  |         self.DayWinCountAwardState = 0
 | 
 |  |  |         self.DanLVAwardState = 0
 | 
 |  |  |         self.SeasonAwardState = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         return sizeof(tagMCCrossRealmPKAwardState)
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         return string_at(addressof(self), self.GetLength())
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''// C1 02 跨服PK玩家奖励记录 //tagMCCrossRealmPKAwardState:
 | 
 |  |  |                                 Cmd:%s,
 | 
 |  |  |                                 SubCmd:%s,
 | 
 |  |  |                                 DayPKCountAwardState:%d,
 | 
 |  |  |                                 DayWinCountAwardState:%d,
 | 
 |  |  |                                 DanLVAwardState:%d,
 | 
 |  |  |                                 SeasonAwardState:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Cmd,
 | 
 |  |  |                                 self.SubCmd,
 | 
 |  |  |                                 self.DayPKCountAwardState,
 | 
 |  |  |                                 self.DayWinCountAwardState,
 | 
 |  |  |                                 self.DanLVAwardState,
 | 
 |  |  |                                 self.SeasonAwardState
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagMCCrossRealmPKAwardState=tagMCCrossRealmPKAwardState()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCrossRealmPKAwardState.Cmd,m_NAtagMCCrossRealmPKAwardState.SubCmd))] = m_NAtagMCCrossRealmPKAwardState
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # C1 03 跨服PK玩家历史赛季信息 #tagMCCrossRealmPKPlayerHisSeasonInfo
 | 
 |  |  | 
 | 
 |  |  | class  tagMCCrossRealmPKPlayerHisSeason(Structure):
 | 
 |  |  |     _pack_ = 1
 | 
 |  |  |     _fields_ = [
 | 
 |  |  |                   ("SeasonID", c_ushort),    # 赛季ID
 | 
 |  |  |                   ("Order", c_ushort),    # 名次
 | 
 |  |  |                   ("DanLV", c_ubyte),    # 段位
 | 
 |  |  |                   ("Score", c_int),    # 积分
 | 
 |  |  |                   ("AwardLV", 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.SeasonID = 0
 | 
 |  |  |         self.Order = 0
 | 
 |  |  |         self.DanLV = 0
 | 
 |  |  |         self.Score = 0
 | 
 |  |  |         self.AwardLV = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         return sizeof(tagMCCrossRealmPKPlayerHisSeason)
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         return string_at(addressof(self), self.GetLength())
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''// C1 03 跨服PK玩家历史赛季信息 //tagMCCrossRealmPKPlayerHisSeasonInfo:
 | 
 |  |  |                                 SeasonID:%d,
 | 
 |  |  |                                 Order:%d,
 | 
 |  |  |                                 DanLV:%d,
 | 
 |  |  |                                 Score:%d,
 | 
 |  |  |                                 AwardLV:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.SeasonID,
 | 
 |  |  |                                 self.Order,
 | 
 |  |  |                                 self.DanLV,
 | 
 |  |  |                                 self.Score,
 | 
 |  |  |                                 self.AwardLV
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | class  tagMCCrossRealmPKPlayerHisSeasonInfo(Structure):
 | 
 |  |  |     Head = tagHead()
 | 
 |  |  |     Count = 0    #(WORD Count)// 赛季个数
 | 
 |  |  |     SeasonList = list()    #(vector<tagMCCrossRealmPKPlayerHisSeason> SeasonList)// 赛季信息列表
 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xC1
 | 
 |  |  |         self.Head.SubCmd = 0x03
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def ReadData(self, _lpData, _pos=0, _Len=0):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         _pos = self.Head.ReadData(_lpData, _pos)
 | 
 |  |  |         self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos)
 | 
 |  |  |         for i in range(self.Count):
 | 
 |  |  |             temSeasonList = tagMCCrossRealmPKPlayerHisSeason()
 | 
 |  |  |             _pos = temSeasonList.ReadData(_lpData, _pos)
 | 
 |  |  |             self.SeasonList.append(temSeasonList)
 | 
 |  |  |         return _pos
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.Head = tagHead()
 | 
 |  |  |         self.Head.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xC1
 | 
 |  |  |         self.Head.SubCmd = 0x03
 | 
 |  |  |         self.Count = 0
 | 
 |  |  |         self.SeasonList = list()
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         length = 0
 | 
 |  |  |         length += self.Head.GetLength()
 | 
 |  |  |         length += 2
 | 
 |  |  |         for i in range(self.Count):
 | 
 |  |  |             length += self.SeasonList[i].GetLength()
 | 
 |  |  | 
 | 
 |  |  |         return length
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         data = ''
 | 
 |  |  |         data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
 | 
 |  |  |         data = CommFunc.WriteWORD(data, self.Count)
 | 
 |  |  |         for i in range(self.Count):
 | 
 |  |  |             data = CommFunc.WriteString(data, self.SeasonList[i].GetLength(), self.SeasonList[i].GetBuffer())
 | 
 |  |  |         return data
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''
 | 
 |  |  |                                 Head:%s,
 | 
 |  |  |                                 Count:%d,
 | 
 |  |  |                                 SeasonList:%s
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Head.OutputString(),
 | 
 |  |  |                                 self.Count,
 | 
 |  |  |                                 "..."
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagMCCrossRealmPKPlayerHisSeasonInfo=tagMCCrossRealmPKPlayerHisSeasonInfo()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCrossRealmPKPlayerHisSeasonInfo.Head.Cmd,m_NAtagMCCrossRealmPKPlayerHisSeasonInfo.Head.SubCmd))] = m_NAtagMCCrossRealmPKPlayerHisSeasonInfo
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # C1 01 跨服PK玩家信息 #tagMCCrossRealmPKPlayerInfo
 | 
 |  |  | 
 | 
 |  |  | class  tagMCCrossRealmPKPlayerInfo(Structure):
 | 
 |  |  |     _pack_ = 1
 | 
 |  |  |     _fields_ = [
 | 
 |  |  |                   ("Cmd", c_ubyte),
 | 
 |  |  |                   ("SubCmd", c_ubyte),
 | 
 |  |  |                   ("Score", c_int),    # 当前积分
 | 
 |  |  |                   ("DanLV", c_ubyte),    # 当前段位
 | 
 |  |  |                   ("PKCount", c_ushort),    # PK次数
 | 
 |  |  |                   ("WinCount", c_ushort),    # 胜利次数
 | 
 |  |  |                   ("CWinCount", c_ushort),    # 连胜次数
 | 
 |  |  |                   ("DayPKCount", c_ubyte),    # 当日已PK次数
 | 
 |  |  |                   ("DayWinCount", c_ubyte),    # 当日已胜利次数
 | 
 |  |  |                   ("DayBuyCount", c_ubyte),    # 当日已购买次数
 | 
 |  |  |                   ("DayItemAddCount", c_ubyte),    # 当日物品增加次数
 | 
 |  |  |                   ]
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Cmd = 0xC1
 | 
 |  |  |         self.SubCmd = 0x01
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  | 
 |  |  |         return _pos + self.GetLength()
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.Cmd = 0xD2
 | 
 |  |  |         self.Cmd = 0xC1
 | 
 |  |  |         self.SubCmd = 0x01
 | 
 |  |  |         self.RegisterState = 0
 | 
 |  |  |         self.Score = 0
 | 
 |  |  |         self.DanLV = 0
 | 
 |  |  |         self.PKCount = 0
 | 
 |  |  |         self.WinCount = 0
 | 
 |  |  |         self.CWinCount = 0
 | 
 |  |  |         self.DayPKCount = 0
 | 
 |  |  |         self.DayWinCount = 0
 | 
 |  |  |         self.DayBuyCount = 0
 | 
 |  |  |         self.DayItemAddCount = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         return sizeof(tagMergeWarRegisterState)
 | 
 |  |  |         return sizeof(tagMCCrossRealmPKPlayerInfo)
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         return string_at(addressof(self), self.GetLength())
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''//D2 01 跨服赛报名(上传数据)状态 //tagMergeWarRegisterState:
 | 
 |  |  |         DumpString = '''// C1 01 跨服PK玩家信息 //tagMCCrossRealmPKPlayerInfo:
 | 
 |  |  |                                 Cmd:%s,
 | 
 |  |  |                                 SubCmd:%s,
 | 
 |  |  |                                 RegisterState:%d
 | 
 |  |  |                                 Score:%d,
 | 
 |  |  |                                 DanLV:%d,
 | 
 |  |  |                                 PKCount:%d,
 | 
 |  |  |                                 WinCount:%d,
 | 
 |  |  |                                 CWinCount:%d,
 | 
 |  |  |                                 DayPKCount:%d,
 | 
 |  |  |                                 DayWinCount:%d,
 | 
 |  |  |                                 DayBuyCount:%d,
 | 
 |  |  |                                 DayItemAddCount:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Cmd,
 | 
 |  |  |                                 self.SubCmd,
 | 
 |  |  |                                 self.RegisterState
 | 
 |  |  |                                 self.Score,
 | 
 |  |  |                                 self.DanLV,
 | 
 |  |  |                                 self.PKCount,
 | 
 |  |  |                                 self.WinCount,
 | 
 |  |  |                                 self.CWinCount,
 | 
 |  |  |                                 self.DayPKCount,
 | 
 |  |  |                                 self.DayWinCount,
 | 
 |  |  |                                 self.DayBuyCount,
 | 
 |  |  |                                 self.DayItemAddCount
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagMergeWarRegisterState=tagMergeWarRegisterState()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMergeWarRegisterState.Cmd,m_NAtagMergeWarRegisterState.SubCmd))] = m_NAtagMergeWarRegisterState
 | 
 |  |  | m_NAtagMCCrossRealmPKPlayerInfo=tagMCCrossRealmPKPlayerInfo()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCrossRealmPKPlayerInfo.Cmd,m_NAtagMCCrossRealmPKPlayerInfo.SubCmd))] = m_NAtagMCCrossRealmPKPlayerInfo
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # D2 09 跨服boss奖励领奖状态 #tagMCMergeBossAwardRecord
 | 
 |  |  | # C1 06 进入跨服服务器错误 #tagMCEnterCrossServerError
 | 
 |  |  | 
 | 
 |  |  | class  tagMCMergeBossAwardRecord(Structure):
 | 
 |  |  | class  tagMCEnterCrossServerError(Structure):
 | 
 |  |  |     _pack_ = 1
 | 
 |  |  |     _fields_ = [
 | 
 |  |  |                   ("Cmd", c_ubyte),
 | 
 |  |  |                   ("SubCmd", c_ubyte),
 | 
 |  |  |                   ("FirstJoinAwardState", c_ubyte),    # 首次参与奖励状态;0-不可领,1-可领,2-已领
 | 
 |  |  |                   ]
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Cmd = 0xD2
 | 
 |  |  |         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 = 0xD2
 | 
 |  |  |         self.SubCmd = 0x09
 | 
 |  |  |         self.FirstJoinAwardState = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         return sizeof(tagMCMergeBossAwardRecord)
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         return string_at(addressof(self), self.GetLength())
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''// D2 09 跨服boss奖励领奖状态 //tagMCMergeBossAwardRecord:
 | 
 |  |  |                                 Cmd:%s,
 | 
 |  |  |                                 SubCmd:%s,
 | 
 |  |  |                                 FirstJoinAwardState:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Cmd,
 | 
 |  |  |                                 self.SubCmd,
 | 
 |  |  |                                 self.FirstJoinAwardState
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagMCMergeBossAwardRecord=tagMCMergeBossAwardRecord()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCMergeBossAwardRecord.Cmd,m_NAtagMCMergeBossAwardRecord.SubCmd))] = m_NAtagMCMergeBossAwardRecord
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # D2 07 跨服王者争霸奖励相关 #tagMCMergeKingAwardInfo
 | 
 |  |  | 
 | 
 |  |  | class  tagMCMergeKingAwardInfo(Structure):
 | 
 |  |  |     _pack_ = 1
 | 
 |  |  |     _fields_ = [
 | 
 |  |  |                   ("Cmd", c_ubyte),
 | 
 |  |  |                   ("SubCmd", c_ubyte),
 | 
 |  |  |                   ("ServerHonour", c_ubyte),    # 全服荣耀值, 1 2 4 8等
 | 
 |  |  |                   ("ServerHonourAward", c_ubyte),    # 全服荣耀奖励是否已领取, 0否1是
 | 
 |  |  |                   ("RankAward", c_ubyte),    # 晋级排名奖励是否已领取, 0否1是
 | 
 |  |  |                   ("SupportAward", c_int),    # 竞猜积分奖励领取记录,按位表示
 | 
 |  |  |                   ("WorshipState", c_ubyte),    # 今日是否已膜拜, 0否1是
 | 
 |  |  |                   ]
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Cmd = 0xD2
 | 
 |  |  |         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 = 0xD2
 | 
 |  |  |         self.SubCmd = 0x07
 | 
 |  |  |         self.ServerHonour = 0
 | 
 |  |  |         self.ServerHonourAward = 0
 | 
 |  |  |         self.RankAward = 0
 | 
 |  |  |         self.SupportAward = 0
 | 
 |  |  |         self.WorshipState = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         return sizeof(tagMCMergeKingAwardInfo)
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         return string_at(addressof(self), self.GetLength())
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''// D2 07 跨服王者争霸奖励相关 //tagMCMergeKingAwardInfo:
 | 
 |  |  |                                 Cmd:%s,
 | 
 |  |  |                                 SubCmd:%s,
 | 
 |  |  |                                 ServerHonour:%d,
 | 
 |  |  |                                 ServerHonourAward:%d,
 | 
 |  |  |                                 RankAward:%d,
 | 
 |  |  |                                 SupportAward:%d,
 | 
 |  |  |                                 WorshipState:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Cmd,
 | 
 |  |  |                                 self.SubCmd,
 | 
 |  |  |                                 self.ServerHonour,
 | 
 |  |  |                                 self.ServerHonourAward,
 | 
 |  |  |                                 self.RankAward,
 | 
 |  |  |                                 self.SupportAward,
 | 
 |  |  |                                 self.WorshipState
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagMCMergeKingAwardInfo=tagMCMergeKingAwardInfo()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCMergeKingAwardInfo.Cmd,m_NAtagMCMergeKingAwardInfo.SubCmd))] = m_NAtagMCMergeKingAwardInfo
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # D2 08 跨服PK奖励领奖记录 #tagMCMergePKAwardRecord
 | 
 |  |  | 
 | 
 |  |  | class  tagMCMergePKAwardRecord(Structure):
 | 
 |  |  |     _pack_ = 1
 | 
 |  |  |     _fields_ = [
 | 
 |  |  |                   ("Cmd", c_ubyte),
 | 
 |  |  |                   ("SubCmd", c_ubyte),
 | 
 |  |  |                   ("FirstWinAwardRecord", c_int),    # 首次胜利奖励记录, 按位存储是否已领
 | 
 |  |  |                   ]
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Cmd = 0xD2
 | 
 |  |  |         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 = 0xD2
 | 
 |  |  |         self.SubCmd = 0x08
 | 
 |  |  |         self.FirstWinAwardRecord = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         return sizeof(tagMCMergePKAwardRecord)
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         return string_at(addressof(self), self.GetLength())
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''// D2 08 跨服PK奖励领奖记录 //tagMCMergePKAwardRecord:
 | 
 |  |  |                                 Cmd:%s,
 | 
 |  |  |                                 SubCmd:%s,
 | 
 |  |  |                                 FirstWinAwardRecord:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Cmd,
 | 
 |  |  |                                 self.SubCmd,
 | 
 |  |  |                                 self.FirstWinAwardRecord
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagMCMergePKAwardRecord=tagMCMergePKAwardRecord()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCMergePKAwardRecord.Cmd,m_NAtagMCMergePKAwardRecord.SubCmd))] = m_NAtagMCMergePKAwardRecord
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # D2 06 跨服PK次数通知 #tagMCMergePKCnt
 | 
 |  |  | 
 | 
 |  |  | class  tagMCMergePKCnt(Structure):
 | 
 |  |  |     _pack_ = 1
 | 
 |  |  |     _fields_ = [
 | 
 |  |  |                   ("Cmd", c_ubyte),
 | 
 |  |  |                   ("SubCmd", c_ubyte),
 | 
 |  |  |                   ("DayPKCnt", c_ushort),    # 当日已PK次数
 | 
 |  |  |                   ("DayBuyCnt", c_ushort),    # 当日已购买次数
 | 
 |  |  |                   ("UnUsedBuyCnt", c_ushort),    # 未使用的购买次数
 | 
 |  |  |                   ]
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Cmd = 0xD2
 | 
 |  |  |         self.Cmd = 0xC1
 | 
 |  |  |         self.SubCmd = 0x06
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  | 
 |  |  |         return _pos + self.GetLength()
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.Cmd = 0xD2
 | 
 |  |  |         self.Cmd = 0xC1
 | 
 |  |  |         self.SubCmd = 0x06
 | 
 |  |  |         self.DayPKCnt = 0
 | 
 |  |  |         self.DayBuyCnt = 0
 | 
 |  |  |         self.UnUsedBuyCnt = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         return sizeof(tagMCMergePKCnt)
 | 
 |  |  |         return sizeof(tagMCEnterCrossServerError)
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         return string_at(addressof(self), self.GetLength())
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''// D2 06 跨服PK次数通知 //tagMCMergePKCnt:
 | 
 |  |  |         DumpString = '''// C1 06 进入跨服服务器错误 //tagMCEnterCrossServerError:
 | 
 |  |  |                                 Cmd:%s,
 | 
 |  |  |                                 SubCmd:%s,
 | 
 |  |  |                                 DayPKCnt:%d,
 | 
 |  |  |                                 DayBuyCnt:%d,
 | 
 |  |  |                                 UnUsedBuyCnt:%d
 | 
 |  |  |                                 SubCmd:%s
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Cmd,
 | 
 |  |  |                                 self.SubCmd,
 | 
 |  |  |                                 self.DayPKCnt,
 | 
 |  |  |                                 self.DayBuyCnt,
 | 
 |  |  |                                 self.UnUsedBuyCnt
 | 
 |  |  |                                 self.SubCmd
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagMCMergePKCnt=tagMCMergePKCnt()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCMergePKCnt.Cmd,m_NAtagMCMergePKCnt.SubCmd))] = m_NAtagMCMergePKCnt | 
 |  |  | m_NAtagMCEnterCrossServerError=tagMCEnterCrossServerError()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCEnterCrossServerError.Cmd,m_NAtagMCEnterCrossServerError.SubCmd))] = m_NAtagMCEnterCrossServerError
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # C1 04 准备进入跨服服务器 #tagMCPrepareEnterCrossServer
 | 
 |  |  | 
 | 
 |  |  | class  tagMCPrepareEnterCrossServer(Structure):
 | 
 |  |  |     _pack_ = 1
 | 
 |  |  |     _fields_ = [
 | 
 |  |  |                   ("Cmd", c_ubyte),
 | 
 |  |  |                   ("SubCmd", c_ubyte),
 | 
 |  |  |                   ("DataMapID", c_int),     | 
 |  |  |                   ]
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Cmd = 0xC1
 | 
 |  |  |         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 = 0xC1
 | 
 |  |  |         self.SubCmd = 0x04
 | 
 |  |  |         self.DataMapID = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         return sizeof(tagMCPrepareEnterCrossServer)
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         return string_at(addressof(self), self.GetLength())
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''// C1 04 准备进入跨服服务器 //tagMCPrepareEnterCrossServer:
 | 
 |  |  |                                 Cmd:%s,
 | 
 |  |  |                                 SubCmd:%s,
 | 
 |  |  |                                 DataMapID:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Cmd,
 | 
 |  |  |                                 self.SubCmd,
 | 
 |  |  |                                 self.DataMapID
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagMCPrepareEnterCrossServer=tagMCPrepareEnterCrossServer()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCPrepareEnterCrossServer.Cmd,m_NAtagMCPrepareEnterCrossServer.SubCmd))] = m_NAtagMCPrepareEnterCrossServer
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # C1 05 开始进入跨服服务器 #tagMCStartEnterCrossServer
 | 
 |  |  | 
 | 
 |  |  | class  tagMCStartEnterCrossServer(Structure):
 | 
 |  |  |     _pack_ = 1
 | 
 |  |  |     _fields_ = [
 | 
 |  |  |                   ("Cmd", c_ubyte),
 | 
 |  |  |                   ("SubCmd", c_ubyte),
 | 
 |  |  |                   ]
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Cmd = 0xC1
 | 
 |  |  |         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 = 0xC1
 | 
 |  |  |         self.SubCmd = 0x05
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         return sizeof(tagMCStartEnterCrossServer)
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         return string_at(addressof(self), self.GetLength())
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''// C1 05 开始进入跨服服务器 //tagMCStartEnterCrossServer:
 | 
 |  |  |                                 Cmd:%s,
 | 
 |  |  |                                 SubCmd:%s
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Cmd,
 | 
 |  |  |                                 self.SubCmd
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagMCStartEnterCrossServer=tagMCStartEnterCrossServer()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCStartEnterCrossServer.Cmd,m_NAtagMCStartEnterCrossServer.SubCmd))] = m_NAtagMCStartEnterCrossServer |