|  |  | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # A9 23 竞技场对战记录列表 #tagGCArenaBattleRecordList
 | 
 |  |  | 
 | 
 |  |  | class  tagGCArenaBattleRecord(Structure):
 | 
 |  |  |     PlayerID = 0    #(DWORD PlayerID)//目标玩家ID,小于10000为机器人ID
 | 
 |  |  |     PlayerName = ""    #(char PlayerName[33])
 | 
 |  |  |     Job = 0    #(BYTE Job)
 | 
 |  |  |     LV = 0    #(WORD LV)//等级
 | 
 |  |  |     RealmLV = 0    #(WORD RealmLV)//境界,机器人读境界表取等级对应境界
 | 
 |  |  |     FightPower = 0    #(DWORD FightPower)//战力,机器人读等级表取等级对应战力
 | 
 |  |  |     AddScoreLen = 0    #(BYTE AddScoreLen)
 | 
 |  |  |     AddScore = ""    #(String AddScore)//本次对战增加的积分,有正负
 | 
 |  |  |     IsWin = 0    #(BYTE IsWin)//是否获胜
 | 
 |  |  |     Time = 0    #(DWORD Time)//时间戳
 | 
 |  |  |     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.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33)
 | 
 |  |  |         self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
 | 
 |  |  |         self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
 | 
 |  |  |         self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.AddScoreLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.AddScore,_pos = CommFunc.ReadString(_lpData, _pos,self.AddScoreLen)
 | 
 |  |  |         self.IsWin,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.Time,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         return _pos
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.PlayerID = 0
 | 
 |  |  |         self.PlayerName = ""
 | 
 |  |  |         self.Job = 0
 | 
 |  |  |         self.LV = 0
 | 
 |  |  |         self.RealmLV = 0
 | 
 |  |  |         self.FightPower = 0
 | 
 |  |  |         self.AddScoreLen = 0
 | 
 |  |  |         self.AddScore = ""
 | 
 |  |  |         self.IsWin = 0
 | 
 |  |  |         self.Time = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         length = 0
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 33
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += 2
 | 
 |  |  |         length += 2
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += len(self.AddScore)
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += 4
 | 
 |  |  | 
 | 
 |  |  |         return length
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         data = ''
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.PlayerID)
 | 
 |  |  |         data = CommFunc.WriteString(data, 33, self.PlayerName)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.Job)
 | 
 |  |  |         data = CommFunc.WriteWORD(data, self.LV)
 | 
 |  |  |         data = CommFunc.WriteWORD(data, self.RealmLV)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.FightPower)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.AddScoreLen)
 | 
 |  |  |         data = CommFunc.WriteString(data, self.AddScoreLen, self.AddScore)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.IsWin)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.Time)
 | 
 |  |  |         return data
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''
 | 
 |  |  |                                 PlayerID:%d,
 | 
 |  |  |                                 PlayerName:%s,
 | 
 |  |  |                                 Job:%d,
 | 
 |  |  |                                 LV:%d,
 | 
 |  |  |                                 RealmLV:%d,
 | 
 |  |  |                                 FightPower:%d,
 | 
 |  |  |                                 AddScoreLen:%d,
 | 
 |  |  |                                 AddScore:%s,
 | 
 |  |  |                                 IsWin:%d,
 | 
 |  |  |                                 Time:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.PlayerID,
 | 
 |  |  |                                 self.PlayerName,
 | 
 |  |  |                                 self.Job,
 | 
 |  |  |                                 self.LV,
 | 
 |  |  |                                 self.RealmLV,
 | 
 |  |  |                                 self.FightPower,
 | 
 |  |  |                                 self.AddScoreLen,
 | 
 |  |  |                                 self.AddScore,
 | 
 |  |  |                                 self.IsWin,
 | 
 |  |  |                                 self.Time
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | class  tagGCArenaBattleRecordList(Structure):
 | 
 |  |  |     Head = tagHead()
 | 
 |  |  |     RecordCount = 0    #(BYTE RecordCount)
 | 
 |  |  |     BattleRecordList = list()    #(vector<tagGCArenaBattleRecord> BattleRecordList)// 对战列表
 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xA9
 | 
 |  |  |         self.Head.SubCmd = 0x23
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def ReadData(self, _lpData, _pos=0, _Len=0):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         _pos = self.Head.ReadData(_lpData, _pos)
 | 
 |  |  |         self.RecordCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         for i in range(self.RecordCount):
 | 
 |  |  |             temBattleRecordList = tagGCArenaBattleRecord()
 | 
 |  |  |             _pos = temBattleRecordList.ReadData(_lpData, _pos)
 | 
 |  |  |             self.BattleRecordList.append(temBattleRecordList)
 | 
 |  |  |         return _pos
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.Head = tagHead()
 | 
 |  |  |         self.Head.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xA9
 | 
 |  |  |         self.Head.SubCmd = 0x23
 | 
 |  |  |         self.RecordCount = 0
 | 
 |  |  |         self.BattleRecordList = list()
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         length = 0
 | 
 |  |  |         length += self.Head.GetLength()
 | 
 |  |  |         length += 1
 | 
 |  |  |         for i in range(self.RecordCount):
 | 
 |  |  |             length += self.BattleRecordList[i].GetLength()
 | 
 |  |  | 
 | 
 |  |  |         return length
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         data = ''
 | 
 |  |  |         data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.RecordCount)
 | 
 |  |  |         for i in range(self.RecordCount):
 | 
 |  |  |             data = CommFunc.WriteString(data, self.BattleRecordList[i].GetLength(), self.BattleRecordList[i].GetBuffer())
 | 
 |  |  |         return data
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''
 | 
 |  |  |                                 Head:%s,
 | 
 |  |  |                                 RecordCount:%d,
 | 
 |  |  |                                 BattleRecordList:%s
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Head.OutputString(),
 | 
 |  |  |                                 self.RecordCount,
 | 
 |  |  |                                 "..."
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagGCArenaBattleRecordList=tagGCArenaBattleRecordList()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCArenaBattleRecordList.Head.Cmd,m_NAtagGCArenaBattleRecordList.Head.SubCmd))] = m_NAtagGCArenaBattleRecordList
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # A9 22 竞技场匹配玩家列表 #tagGCArenaMatchList
 | 
 |  |  | 
 | 
 |  |  | class  tagGCArenaMatchInfo(Structure):
 | 
 |  |  |     PlayerID = 0    #(DWORD PlayerID)//目标玩家ID,小于10000为机器人ID
 | 
 |  |  |     PlayerName = ""    #(char PlayerName[33])
 | 
 |  |  |     Job = 0    #(BYTE Job)
 | 
 |  |  |     LV = 0    #(WORD LV)//等级
 | 
 |  |  |     RealmLV = 0    #(WORD RealmLV)//境界,机器人读境界表取等级对应境界
 | 
 |  |  |     FightPower = 0    #(DWORD FightPower)//战力,机器人读等级表取等级对应战力
 | 
 |  |  |     Score = 0    #(DWORD Score)//积分
 | 
 |  |  |     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.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33)
 | 
 |  |  |         self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
 | 
 |  |  |         self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
 | 
 |  |  |         self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.Score,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         return _pos
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.PlayerID = 0
 | 
 |  |  |         self.PlayerName = ""
 | 
 |  |  |         self.Job = 0
 | 
 |  |  |         self.LV = 0
 | 
 |  |  |         self.RealmLV = 0
 | 
 |  |  |         self.FightPower = 0
 | 
 |  |  |         self.Score = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         length = 0
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 33
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += 2
 | 
 |  |  |         length += 2
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  | 
 | 
 |  |  |         return length
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         data = ''
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.PlayerID)
 | 
 |  |  |         data = CommFunc.WriteString(data, 33, self.PlayerName)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.Job)
 | 
 |  |  |         data = CommFunc.WriteWORD(data, self.LV)
 | 
 |  |  |         data = CommFunc.WriteWORD(data, self.RealmLV)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.FightPower)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.Score)
 | 
 |  |  |         return data
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''
 | 
 |  |  |                                 PlayerID:%d,
 | 
 |  |  |                                 PlayerName:%s,
 | 
 |  |  |                                 Job:%d,
 | 
 |  |  |                                 LV:%d,
 | 
 |  |  |                                 RealmLV:%d,
 | 
 |  |  |                                 FightPower:%d,
 | 
 |  |  |                                 Score:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.PlayerID,
 | 
 |  |  |                                 self.PlayerName,
 | 
 |  |  |                                 self.Job,
 | 
 |  |  |                                 self.LV,
 | 
 |  |  |                                 self.RealmLV,
 | 
 |  |  |                                 self.FightPower,
 | 
 |  |  |                                 self.Score
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | class  tagGCArenaMatchList(Structure):
 | 
 |  |  |     Head = tagHead()
 | 
 |  |  |     MatchCount = 0    #(BYTE MatchCount)
 | 
 |  |  |     MatchList = list()    #(vector<tagGCArenaMatchInfo> MatchList)// 匹配列表
 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xA9
 | 
 |  |  |         self.Head.SubCmd = 0x22
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def ReadData(self, _lpData, _pos=0, _Len=0):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         _pos = self.Head.ReadData(_lpData, _pos)
 | 
 |  |  |         self.MatchCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         for i in range(self.MatchCount):
 | 
 |  |  |             temMatchList = tagGCArenaMatchInfo()
 | 
 |  |  |             _pos = temMatchList.ReadData(_lpData, _pos)
 | 
 |  |  |             self.MatchList.append(temMatchList)
 | 
 |  |  |         return _pos
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.Head = tagHead()
 | 
 |  |  |         self.Head.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xA9
 | 
 |  |  |         self.Head.SubCmd = 0x22
 | 
 |  |  |         self.MatchCount = 0
 | 
 |  |  |         self.MatchList = list()
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         length = 0
 | 
 |  |  |         length += self.Head.GetLength()
 | 
 |  |  |         length += 1
 | 
 |  |  |         for i in range(self.MatchCount):
 | 
 |  |  |             length += self.MatchList[i].GetLength()
 | 
 |  |  | 
 | 
 |  |  |         return length
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         data = ''
 | 
 |  |  |         data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.MatchCount)
 | 
 |  |  |         for i in range(self.MatchCount):
 | 
 |  |  |             data = CommFunc.WriteString(data, self.MatchList[i].GetLength(), self.MatchList[i].GetBuffer())
 | 
 |  |  |         return data
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''
 | 
 |  |  |                                 Head:%s,
 | 
 |  |  |                                 MatchCount:%d,
 | 
 |  |  |                                 MatchList:%s
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Head.OutputString(),
 | 
 |  |  |                                 self.MatchCount,
 | 
 |  |  |                                 "..."
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagGCArenaMatchList=tagGCArenaMatchList()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCArenaMatchList.Head.Cmd,m_NAtagGCArenaMatchList.Head.SubCmd))] = m_NAtagGCArenaMatchList
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # A9 09 通知BOSS关注记录 #tagGCBossAttentionInfo
 | 
 |  |  | 
 | 
 |  |  | class  tagGCBossAttention(Structure):
 | 
 |  |  | 
 |  |  |                   ("SubCmd", c_ubyte),
 | 
 |  |  |                   ("Point", c_int),    # 复活点数
 | 
 |  |  |                   ("TotalPoint", c_int),    # 复活总点数
 | 
 |  |  |                   ("RebornCnt", c_ushort),    # 复活次数
 | 
 |  |  |                   ("RebornCnt", c_ushort),    # 今日已复活次数
 | 
 |  |  |                   ("TotalRebornCnt", c_ushort),    # 每日可复活总次数,0为不限制
 | 
 |  |  |                   ]
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  | 
 |  |  |         self.Point = 0
 | 
 |  |  |         self.TotalPoint = 0
 | 
 |  |  |         self.RebornCnt = 0
 | 
 |  |  |         self.TotalRebornCnt = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  | 
 |  |  |                                 SubCmd:%s,
 | 
 |  |  |                                 Point:%d,
 | 
 |  |  |                                 TotalPoint:%d,
 | 
 |  |  |                                 RebornCnt:%d
 | 
 |  |  |                                 RebornCnt:%d,
 | 
 |  |  |                                 TotalRebornCnt:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Cmd,
 | 
 |  |  |                                 self.SubCmd,
 | 
 |  |  |                                 self.Point,
 | 
 |  |  |                                 self.TotalPoint,
 | 
 |  |  |                                 self.RebornCnt
 | 
 |  |  |                                 self.RebornCnt,
 | 
 |  |  |                                 self.TotalRebornCnt
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # B0 01 新增协助 #tagGCAssistInfoList
 | 
 |  |  | 
 | 
 |  |  | class  tagGCAssistInfo(Structure):
 | 
 |  |  |     AssistGUID = ""    #(char AssistGUID[40])//协助GUID
 | 
 |  |  |     PlayerID = 0    #(DWORD PlayerID)
 | 
 |  |  |     PlayerName = ""    #(char PlayerName[33])
 | 
 |  |  |     Job = 0    #(BYTE Job)
 | 
 |  |  |     LV = 0    #(WORD LV)//等级
 | 
 |  |  |     RealmLV = 0    #(BYTE RealmLV)//境界
 | 
 |  |  |     MapID = 0    #(DWORD MapID)
 | 
 |  |  |     LineID = 0    #(DWORD LineID)
 | 
 |  |  |     NPCID = 0    #(DWORD NPCID)
 | 
 |  |  |     ExDataLen = 0    #(WORD ExDataLen)
 | 
 |  |  |     ExData = ""    #(String ExData)//其他自定义数据
 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def ReadData(self, _lpData, _pos=0, _Len=0):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.AssistGUID,_pos = CommFunc.ReadString(_lpData, _pos,40)
 | 
 |  |  |         self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33)
 | 
 |  |  |         self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
 | 
 |  |  |         self.RealmLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.MapID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.LineID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.NPCID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.ExDataLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
 | 
 |  |  |         self.ExData,_pos = CommFunc.ReadString(_lpData, _pos,self.ExDataLen)
 | 
 |  |  |         return _pos
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.AssistGUID = ""
 | 
 |  |  |         self.PlayerID = 0
 | 
 |  |  |         self.PlayerName = ""
 | 
 |  |  |         self.Job = 0
 | 
 |  |  |         self.LV = 0
 | 
 |  |  |         self.RealmLV = 0
 | 
 |  |  |         self.MapID = 0
 | 
 |  |  |         self.LineID = 0
 | 
 |  |  |         self.NPCID = 0
 | 
 |  |  |         self.ExDataLen = 0
 | 
 |  |  |         self.ExData = ""
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         length = 0
 | 
 |  |  |         length += 40
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 33
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += 2
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 2
 | 
 |  |  |         length += len(self.ExData)
 | 
 |  |  | 
 | 
 |  |  |         return length
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         data = ''
 | 
 |  |  |         data = CommFunc.WriteString(data, 40, self.AssistGUID)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.PlayerID)
 | 
 |  |  |         data = CommFunc.WriteString(data, 33, self.PlayerName)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.Job)
 | 
 |  |  |         data = CommFunc.WriteWORD(data, self.LV)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.RealmLV)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.MapID)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.LineID)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.NPCID)
 | 
 |  |  |         data = CommFunc.WriteWORD(data, self.ExDataLen)
 | 
 |  |  |         data = CommFunc.WriteString(data, self.ExDataLen, self.ExData)
 | 
 |  |  |         return data
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''
 | 
 |  |  |                                 AssistGUID:%s,
 | 
 |  |  |                                 PlayerID:%d,
 | 
 |  |  |                                 PlayerName:%s,
 | 
 |  |  |                                 Job:%d,
 | 
 |  |  |                                 LV:%d,
 | 
 |  |  |                                 RealmLV:%d,
 | 
 |  |  |                                 MapID:%d,
 | 
 |  |  |                                 LineID:%d,
 | 
 |  |  |                                 NPCID:%d,
 | 
 |  |  |                                 ExDataLen:%d,
 | 
 |  |  |                                 ExData:%s
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.AssistGUID,
 | 
 |  |  |                                 self.PlayerID,
 | 
 |  |  |                                 self.PlayerName,
 | 
 |  |  |                                 self.Job,
 | 
 |  |  |                                 self.LV,
 | 
 |  |  |                                 self.RealmLV,
 | 
 |  |  |                                 self.MapID,
 | 
 |  |  |                                 self.LineID,
 | 
 |  |  |                                 self.NPCID,
 | 
 |  |  |                                 self.ExDataLen,
 | 
 |  |  |                                 self.ExData
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | class  tagGCAssistInfoList(Structure):
 | 
 |  |  |     Head = tagHead()
 | 
 |  |  |     Count = 0    #(BYTE Count)
 | 
 |  |  |     AssistInfoList = list()    #(vector<tagGCAssistInfo> AssistInfoList)
 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xB0
 | 
 |  |  |         self.Head.SubCmd = 0x01
 | 
 |  |  |         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):
 | 
 |  |  |             temAssistInfoList = tagGCAssistInfo()
 | 
 |  |  |             _pos = temAssistInfoList.ReadData(_lpData, _pos)
 | 
 |  |  |             self.AssistInfoList.append(temAssistInfoList)
 | 
 |  |  |         return _pos
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.Head = tagHead()
 | 
 |  |  |         self.Head.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xB0
 | 
 |  |  |         self.Head.SubCmd = 0x01
 | 
 |  |  |         self.Count = 0
 | 
 |  |  |         self.AssistInfoList = list()
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         length = 0
 | 
 |  |  |         length += self.Head.GetLength()
 | 
 |  |  |         length += 1
 | 
 |  |  |         for i in range(self.Count):
 | 
 |  |  |             length += self.AssistInfoList[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.AssistInfoList[i].GetLength(), self.AssistInfoList[i].GetBuffer())
 | 
 |  |  |         return data
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''
 | 
 |  |  |                                 Head:%s,
 | 
 |  |  |                                 Count:%d,
 | 
 |  |  |                                 AssistInfoList:%s
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Head.OutputString(),
 | 
 |  |  |                                 self.Count,
 | 
 |  |  |                                 "..."
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagGCAssistInfoList=tagGCAssistInfoList()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCAssistInfoList.Head.Cmd,m_NAtagGCAssistInfoList.Head.SubCmd))] = m_NAtagGCAssistInfoList
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # B0 03 正在进行中的协助 #tagGCAssistingInfo
 | 
 |  |  | 
 | 
 |  |  | class  tagGCAssistingInfo(Structure):
 | 
 |  |  |     Head = tagHead()
 | 
 |  |  |     AssistGUID = ""    #(char AssistGUID[40])//协助GUID
 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xB0
 | 
 |  |  |         self.Head.SubCmd = 0x03
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def ReadData(self, _lpData, _pos=0, _Len=0):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         _pos = self.Head.ReadData(_lpData, _pos)
 | 
 |  |  |         self.AssistGUID,_pos = CommFunc.ReadString(_lpData, _pos,40)
 | 
 |  |  |         return _pos
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.Head = tagHead()
 | 
 |  |  |         self.Head.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xB0
 | 
 |  |  |         self.Head.SubCmd = 0x03
 | 
 |  |  |         self.AssistGUID = ""
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         length = 0
 | 
 |  |  |         length += self.Head.GetLength()
 | 
 |  |  |         length += 40
 | 
 |  |  | 
 | 
 |  |  |         return length
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         data = ''
 | 
 |  |  |         data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
 | 
 |  |  |         data = CommFunc.WriteString(data, 40, self.AssistGUID)
 | 
 |  |  |         return data
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''
 | 
 |  |  |                                 Head:%s,
 | 
 |  |  |                                 AssistGUID:%s
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Head.OutputString(),
 | 
 |  |  |                                 self.AssistGUID
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagGCAssistingInfo=tagGCAssistingInfo()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCAssistingInfo.Head.Cmd,m_NAtagGCAssistingInfo.Head.SubCmd))] = m_NAtagGCAssistingInfo
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # B0 08 协助结束 #tagGCAssistOver
 | 
 |  |  | 
 | 
 |  |  | class  tagGCAssistOver(Structure):
 | 
 |  |  |     Head = tagHead()
 | 
 |  |  |     IsTagPlayerReason = 0    #(BYTE IsTagPlayerReason)//是否发布方原因
 | 
 |  |  |     ReasonLen = 0    #(BYTE ReasonLen)
 | 
 |  |  |     Reason = ""    #(String Reason)//原因
 | 
 |  |  |     AssistGUID = ""    #(char AssistGUID[40])//协助GUID
 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xB0
 | 
 |  |  |         self.Head.SubCmd = 0x08
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def ReadData(self, _lpData, _pos=0, _Len=0):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         _pos = self.Head.ReadData(_lpData, _pos)
 | 
 |  |  |         self.IsTagPlayerReason,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.ReasonLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.Reason,_pos = CommFunc.ReadString(_lpData, _pos,self.ReasonLen)
 | 
 |  |  |         self.AssistGUID,_pos = CommFunc.ReadString(_lpData, _pos,40)
 | 
 |  |  |         return _pos
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.Head = tagHead()
 | 
 |  |  |         self.Head.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xB0
 | 
 |  |  |         self.Head.SubCmd = 0x08
 | 
 |  |  |         self.IsTagPlayerReason = 0
 | 
 |  |  |         self.ReasonLen = 0
 | 
 |  |  |         self.Reason = ""
 | 
 |  |  |         self.AssistGUID = ""
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         length = 0
 | 
 |  |  |         length += self.Head.GetLength()
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += len(self.Reason)
 | 
 |  |  |         length += 40
 | 
 |  |  | 
 | 
 |  |  |         return length
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         data = ''
 | 
 |  |  |         data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.IsTagPlayerReason)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.ReasonLen)
 | 
 |  |  |         data = CommFunc.WriteString(data, self.ReasonLen, self.Reason)
 | 
 |  |  |         data = CommFunc.WriteString(data, 40, self.AssistGUID)
 | 
 |  |  |         return data
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''
 | 
 |  |  |                                 Head:%s,
 | 
 |  |  |                                 IsTagPlayerReason:%d,
 | 
 |  |  |                                 ReasonLen:%d,
 | 
 |  |  |                                 Reason:%s,
 | 
 |  |  |                                 AssistGUID:%s
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Head.OutputString(),
 | 
 |  |  |                                 self.IsTagPlayerReason,
 | 
 |  |  |                                 self.ReasonLen,
 | 
 |  |  |                                 self.Reason,
 | 
 |  |  |                                 self.AssistGUID
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagGCAssistOver=tagGCAssistOver()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCAssistOver.Head.Cmd,m_NAtagGCAssistOver.Head.SubCmd))] = m_NAtagGCAssistOver
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # B0 06 可接收协助感谢礼物个数 #tagGCCanGetAssistThanksGiftCount
 | 
 |  |  | 
 | 
 |  |  | class  tagGCCanGetAssistThanksGiftCount(Structure):
 | 
 |  |  |     _pack_ = 1
 | 
 |  |  |     _fields_ = [
 | 
 |  |  |                   ("Cmd", c_ubyte),
 | 
 |  |  |                   ("SubCmd", c_ubyte),
 | 
 |  |  |                   ("CanGetCount", c_ubyte),     | 
 |  |  |                   ]
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Cmd = 0xB0
 | 
 |  |  |         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 = 0xB0
 | 
 |  |  |         self.SubCmd = 0x06
 | 
 |  |  |         self.CanGetCount = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         return sizeof(tagGCCanGetAssistThanksGiftCount)
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         return string_at(addressof(self), self.GetLength())
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''// B0 06 可接收协助感谢礼物个数 //tagGCCanGetAssistThanksGiftCount:
 | 
 |  |  |                                 Cmd:%s,
 | 
 |  |  |                                 SubCmd:%s,
 | 
 |  |  |                                 CanGetCount:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Cmd,
 | 
 |  |  |                                 self.SubCmd,
 | 
 |  |  |                                 self.CanGetCount
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagGCCanGetAssistThanksGiftCount=tagGCCanGetAssistThanksGiftCount()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCanGetAssistThanksGiftCount.Cmd,m_NAtagGCCanGetAssistThanksGiftCount.SubCmd))] = m_NAtagGCCanGetAssistThanksGiftCount
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # B0 02 删除协助 #tagGCClearAssist
 | 
 |  |  | 
 | 
 |  |  | class  tagGCClearAssist(Structure):
 | 
 |  |  |     Head = tagHead()
 | 
 |  |  |     AssistGUID = ""    #(char AssistGUID[40])//协助GUID
 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xB0
 | 
 |  |  |         self.Head.SubCmd = 0x02
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def ReadData(self, _lpData, _pos=0, _Len=0):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         _pos = self.Head.ReadData(_lpData, _pos)
 | 
 |  |  |         self.AssistGUID,_pos = CommFunc.ReadString(_lpData, _pos,40)
 | 
 |  |  |         return _pos
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.Head = tagHead()
 | 
 |  |  |         self.Head.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xB0
 | 
 |  |  |         self.Head.SubCmd = 0x02
 | 
 |  |  |         self.AssistGUID = ""
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         length = 0
 | 
 |  |  |         length += self.Head.GetLength()
 | 
 |  |  |         length += 40
 | 
 |  |  | 
 | 
 |  |  |         return length
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         data = ''
 | 
 |  |  |         data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
 | 
 |  |  |         data = CommFunc.WriteString(data, 40, self.AssistGUID)
 | 
 |  |  |         return data
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''
 | 
 |  |  |                                 Head:%s,
 | 
 |  |  |                                 AssistGUID:%s
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Head.OutputString(),
 | 
 |  |  |                                 self.AssistGUID
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagGCClearAssist=tagGCClearAssist()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCClearAssist.Head.Cmd,m_NAtagGCClearAssist.Head.SubCmd))] = m_NAtagGCClearAssist
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | #B0 26 家族悬赏任务完成情况 #tagFamilyArrestOverStateInfo
 | 
 |  |  | 
 | 
 |  |  | class  tagFamilyArrestOverState(Structure):
 | 
 |  |  | 
 |  |  | 
 | 
 |  |  | m_NAtagFamilyArrestOverStateInfo=tagFamilyArrestOverStateInfo()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagFamilyArrestOverStateInfo.Head.Cmd,m_NAtagFamilyArrestOverStateInfo.Head.SubCmd))] = m_NAtagFamilyArrestOverStateInfo
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # B0 05 接收协助感谢礼物预览 #tagGCGetAssistThanksGiftPreview
 | 
 |  |  | 
 | 
 |  |  | class  tagGCGetAssistThanksGiftPreview(Structure):
 | 
 |  |  |     Head = tagHead()
 | 
 |  |  |     ItemID = 0    #(DWORD ItemID)//礼盒ID
 | 
 |  |  |     PlayerID = 0    #(DWORD PlayerID)//发起玩家ID
 | 
 |  |  |     PlayerName = ""    #(char PlayerName[33])
 | 
 |  |  |     Job = 0    #(BYTE Job)
 | 
 |  |  |     LV = 0    #(WORD LV)
 | 
 |  |  |     RealmLV = 0    #(BYTE RealmLV)//境界
 | 
 |  |  |     MapID = 0    #(DWORD MapID)
 | 
 |  |  |     LineID = 0    #(DWORD LineID)
 | 
 |  |  |     NPCID = 0    #(DWORD NPCID)
 | 
 |  |  |     ExDataLen = 0    #(WORD ExDataLen)
 | 
 |  |  |     ExData = ""    #(String ExData)//其他自定义数据
 | 
 |  |  |     TimeStr = ""    #(char TimeStr[19])//协助时间yyyy-MM-dd hh:mm:ss
 | 
 |  |  |     ExtraAward = 0    #(BYTE ExtraAward)//是否有额外奖励
 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xB0
 | 
 |  |  |         self.Head.SubCmd = 0x05
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def ReadData(self, _lpData, _pos=0, _Len=0):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         _pos = self.Head.ReadData(_lpData, _pos)
 | 
 |  |  |         self.ItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33)
 | 
 |  |  |         self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
 | 
 |  |  |         self.RealmLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.MapID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.LineID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.NPCID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.ExDataLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
 | 
 |  |  |         self.ExData,_pos = CommFunc.ReadString(_lpData, _pos,self.ExDataLen)
 | 
 |  |  |         self.TimeStr,_pos = CommFunc.ReadString(_lpData, _pos,19)
 | 
 |  |  |         self.ExtraAward,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         return _pos
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.Head = tagHead()
 | 
 |  |  |         self.Head.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xB0
 | 
 |  |  |         self.Head.SubCmd = 0x05
 | 
 |  |  |         self.ItemID = 0
 | 
 |  |  |         self.PlayerID = 0
 | 
 |  |  |         self.PlayerName = ""
 | 
 |  |  |         self.Job = 0
 | 
 |  |  |         self.LV = 0
 | 
 |  |  |         self.RealmLV = 0
 | 
 |  |  |         self.MapID = 0
 | 
 |  |  |         self.LineID = 0
 | 
 |  |  |         self.NPCID = 0
 | 
 |  |  |         self.ExDataLen = 0
 | 
 |  |  |         self.ExData = ""
 | 
 |  |  |         self.TimeStr = ""
 | 
 |  |  |         self.ExtraAward = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         length = 0
 | 
 |  |  |         length += self.Head.GetLength()
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 33
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += 2
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 2
 | 
 |  |  |         length += len(self.ExData)
 | 
 |  |  |         length += 19
 | 
 |  |  |         length += 1
 | 
 |  |  | 
 | 
 |  |  |         return length
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         data = ''
 | 
 |  |  |         data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.ItemID)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.PlayerID)
 | 
 |  |  |         data = CommFunc.WriteString(data, 33, self.PlayerName)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.Job)
 | 
 |  |  |         data = CommFunc.WriteWORD(data, self.LV)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.RealmLV)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.MapID)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.LineID)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.NPCID)
 | 
 |  |  |         data = CommFunc.WriteWORD(data, self.ExDataLen)
 | 
 |  |  |         data = CommFunc.WriteString(data, self.ExDataLen, self.ExData)
 | 
 |  |  |         data = CommFunc.WriteString(data, 19, self.TimeStr)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.ExtraAward)
 | 
 |  |  |         return data
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''
 | 
 |  |  |                                 Head:%s,
 | 
 |  |  |                                 ItemID:%d,
 | 
 |  |  |                                 PlayerID:%d,
 | 
 |  |  |                                 PlayerName:%s,
 | 
 |  |  |                                 Job:%d,
 | 
 |  |  |                                 LV:%d,
 | 
 |  |  |                                 RealmLV:%d,
 | 
 |  |  |                                 MapID:%d,
 | 
 |  |  |                                 LineID:%d,
 | 
 |  |  |                                 NPCID:%d,
 | 
 |  |  |                                 ExDataLen:%d,
 | 
 |  |  |                                 ExData:%s,
 | 
 |  |  |                                 TimeStr:%s,
 | 
 |  |  |                                 ExtraAward:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Head.OutputString(),
 | 
 |  |  |                                 self.ItemID,
 | 
 |  |  |                                 self.PlayerID,
 | 
 |  |  |                                 self.PlayerName,
 | 
 |  |  |                                 self.Job,
 | 
 |  |  |                                 self.LV,
 | 
 |  |  |                                 self.RealmLV,
 | 
 |  |  |                                 self.MapID,
 | 
 |  |  |                                 self.LineID,
 | 
 |  |  |                                 self.NPCID,
 | 
 |  |  |                                 self.ExDataLen,
 | 
 |  |  |                                 self.ExData,
 | 
 |  |  |                                 self.TimeStr,
 | 
 |  |  |                                 self.ExtraAward
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagGCGetAssistThanksGiftPreview=tagGCGetAssistThanksGiftPreview()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCGetAssistThanksGiftPreview.Head.Cmd,m_NAtagGCGetAssistThanksGiftPreview.Head.SubCmd))] = m_NAtagGCGetAssistThanksGiftPreview
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # B0 04 使用协助感谢礼盒预览 #tagGCUseAssistThanksGiftPreview
 | 
 |  |  | 
 | 
 |  |  | class  tagGCAssistPlayerInfo(Structure):
 | 
 |  |  |     PlayerID = 0    #(DWORD PlayerID)
 | 
 |  |  |     PlayerName = ""    #(char PlayerName[33])
 | 
 |  |  |     Job = 0    #(BYTE Job)
 | 
 |  |  |     LV = 0    #(WORD LV)
 | 
 |  |  |     RealmLV = 0    #(BYTE RealmLV)//境界
 | 
 |  |  |     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.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33)
 | 
 |  |  |         self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
 | 
 |  |  |         self.RealmLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         return _pos
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.PlayerID = 0
 | 
 |  |  |         self.PlayerName = ""
 | 
 |  |  |         self.Job = 0
 | 
 |  |  |         self.LV = 0
 | 
 |  |  |         self.RealmLV = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         length = 0
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 33
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += 2
 | 
 |  |  |         length += 1
 | 
 |  |  | 
 | 
 |  |  |         return length
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         data = ''
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.PlayerID)
 | 
 |  |  |         data = CommFunc.WriteString(data, 33, self.PlayerName)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.Job)
 | 
 |  |  |         data = CommFunc.WriteWORD(data, self.LV)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.RealmLV)
 | 
 |  |  |         return data
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''
 | 
 |  |  |                                 PlayerID:%d,
 | 
 |  |  |                                 PlayerName:%s,
 | 
 |  |  |                                 Job:%d,
 | 
 |  |  |                                 LV:%d,
 | 
 |  |  |                                 RealmLV:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.PlayerID,
 | 
 |  |  |                                 self.PlayerName,
 | 
 |  |  |                                 self.Job,
 | 
 |  |  |                                 self.LV,
 | 
 |  |  |                                 self.RealmLV
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | class  tagGCUseAssistThanksGiftPreview(Structure):
 | 
 |  |  |     Head = tagHead()
 | 
 |  |  |     ItemID = 0    #(DWORD ItemID)//礼盒ID
 | 
 |  |  |     MapID = 0    #(DWORD MapID)
 | 
 |  |  |     LineID = 0    #(DWORD LineID)
 | 
 |  |  |     NPCID = 0    #(DWORD NPCID)
 | 
 |  |  |     ExDataLen = 0    #(WORD ExDataLen)
 | 
 |  |  |     ExData = ""    #(String ExData)//其他自定义数据
 | 
 |  |  |     AssistPlayerCount = 0    #(BYTE AssistPlayerCount)
 | 
 |  |  |     AssistPlayerList = list()    #(vector<tagGCAssistPlayerInfo> AssistPlayerList)//协助玩家列表
 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xB0
 | 
 |  |  |         self.Head.SubCmd = 0x04
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def ReadData(self, _lpData, _pos=0, _Len=0):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         _pos = self.Head.ReadData(_lpData, _pos)
 | 
 |  |  |         self.ItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.MapID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.LineID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.NPCID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.ExDataLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
 | 
 |  |  |         self.ExData,_pos = CommFunc.ReadString(_lpData, _pos,self.ExDataLen)
 | 
 |  |  |         self.AssistPlayerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         for i in range(self.AssistPlayerCount):
 | 
 |  |  |             temAssistPlayerList = tagGCAssistPlayerInfo()
 | 
 |  |  |             _pos = temAssistPlayerList.ReadData(_lpData, _pos)
 | 
 |  |  |             self.AssistPlayerList.append(temAssistPlayerList)
 | 
 |  |  |         return _pos
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.Head = tagHead()
 | 
 |  |  |         self.Head.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xB0
 | 
 |  |  |         self.Head.SubCmd = 0x04
 | 
 |  |  |         self.ItemID = 0
 | 
 |  |  |         self.MapID = 0
 | 
 |  |  |         self.LineID = 0
 | 
 |  |  |         self.NPCID = 0
 | 
 |  |  |         self.ExDataLen = 0
 | 
 |  |  |         self.ExData = ""
 | 
 |  |  |         self.AssistPlayerCount = 0
 | 
 |  |  |         self.AssistPlayerList = list()
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         length = 0
 | 
 |  |  |         length += self.Head.GetLength()
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 2
 | 
 |  |  |         length += len(self.ExData)
 | 
 |  |  |         length += 1
 | 
 |  |  |         for i in range(self.AssistPlayerCount):
 | 
 |  |  |             length += self.AssistPlayerList[i].GetLength()
 | 
 |  |  | 
 | 
 |  |  |         return length
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         data = ''
 | 
 |  |  |         data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.ItemID)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.MapID)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.LineID)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.NPCID)
 | 
 |  |  |         data = CommFunc.WriteWORD(data, self.ExDataLen)
 | 
 |  |  |         data = CommFunc.WriteString(data, self.ExDataLen, self.ExData)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.AssistPlayerCount)
 | 
 |  |  |         for i in range(self.AssistPlayerCount):
 | 
 |  |  |             data = CommFunc.WriteString(data, self.AssistPlayerList[i].GetLength(), self.AssistPlayerList[i].GetBuffer())
 | 
 |  |  |         return data
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''
 | 
 |  |  |                                 Head:%s,
 | 
 |  |  |                                 ItemID:%d,
 | 
 |  |  |                                 MapID:%d,
 | 
 |  |  |                                 LineID:%d,
 | 
 |  |  |                                 NPCID:%d,
 | 
 |  |  |                                 ExDataLen:%d,
 | 
 |  |  |                                 ExData:%s,
 | 
 |  |  |                                 AssistPlayerCount:%d,
 | 
 |  |  |                                 AssistPlayerList:%s
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Head.OutputString(),
 | 
 |  |  |                                 self.ItemID,
 | 
 |  |  |                                 self.MapID,
 | 
 |  |  |                                 self.LineID,
 | 
 |  |  |                                 self.NPCID,
 | 
 |  |  |                                 self.ExDataLen,
 | 
 |  |  |                                 self.ExData,
 | 
 |  |  |                                 self.AssistPlayerCount,
 | 
 |  |  |                                 "..."
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagGCUseAssistThanksGiftPreview=tagGCUseAssistThanksGiftPreview()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCUseAssistThanksGiftPreview.Head.Cmd,m_NAtagGCUseAssistThanksGiftPreview.Head.SubCmd))] = m_NAtagGCUseAssistThanksGiftPreview
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | 
 |  |  |                   ("EquipPlace", c_ubyte),    #当前要升星的装备位
 | 
 |  |  |                   ("CurStar", c_ubyte),    #当前星级
 | 
 |  |  |                   ("CurRate", c_ubyte),    #当前自动购买后的总概率,不满100则代表拍品库存不足
 | 
 |  |  |                   ("AutoBuyCostMoney", c_ushort),    #自动购买所需总消耗
 | 
 |  |  |                   ("AutoBuyCostMoney", c_int),    #自动购买所需总消耗
 | 
 |  |  |                   ]
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # A3 C3 竞技场玩家信息 #tagMCArenaPlayerInfo
 | 
 |  |  | 
 | 
 |  |  | class  tagMCArenaPlayerInfo(Structure):
 | 
 |  |  |     _pack_ = 1
 | 
 |  |  |     _fields_ = [
 | 
 |  |  |                   ("Cmd", c_ubyte),
 | 
 |  |  |                   ("SubCmd", c_ubyte),
 | 
 |  |  |                   ("IsReset", c_ubyte),    #是否是重置的
 | 
 |  |  |                   ("Score", c_int),    #当前积分
 | 
 |  |  |                   ("BattleCountToday", c_ubyte),    #今日已挑战次数
 | 
 |  |  |                   ("MatchRefreshCount", c_ubyte),    #当前已刷新匹配列表次数,每次挑战后会重置
 | 
 |  |  |                   ("ItemAddBattleCountToday", c_ubyte),    #今日已使用物品增加的挑战次数
 | 
 |  |  |                   ]
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Cmd = 0xA3
 | 
 |  |  |         self.SubCmd = 0xC3
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def ReadData(self, stringData, _pos=0, _len=0):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         memmove(addressof(self), stringData[_pos:], self.GetLength())
 | 
 |  |  |         return _pos + self.GetLength()
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.Cmd = 0xA3
 | 
 |  |  |         self.SubCmd = 0xC3
 | 
 |  |  |         self.IsReset = 0
 | 
 |  |  |         self.Score = 0
 | 
 |  |  |         self.BattleCountToday = 0
 | 
 |  |  |         self.MatchRefreshCount = 0
 | 
 |  |  |         self.ItemAddBattleCountToday = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         return sizeof(tagMCArenaPlayerInfo)
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         return string_at(addressof(self), self.GetLength())
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''// A3 C3 竞技场玩家信息 //tagMCArenaPlayerInfo:
 | 
 |  |  |                                 Cmd:%s,
 | 
 |  |  |                                 SubCmd:%s,
 | 
 |  |  |                                 IsReset:%d,
 | 
 |  |  |                                 Score:%d,
 | 
 |  |  |                                 BattleCountToday:%d,
 | 
 |  |  |                                 MatchRefreshCount:%d,
 | 
 |  |  |                                 ItemAddBattleCountToday:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Cmd,
 | 
 |  |  |                                 self.SubCmd,
 | 
 |  |  |                                 self.IsReset,
 | 
 |  |  |                                 self.Score,
 | 
 |  |  |                                 self.BattleCountToday,
 | 
 |  |  |                                 self.MatchRefreshCount,
 | 
 |  |  |                                 self.ItemAddBattleCountToday
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagMCArenaPlayerInfo=tagMCArenaPlayerInfo()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCArenaPlayerInfo.Cmd,m_NAtagMCArenaPlayerInfo.SubCmd))] = m_NAtagMCArenaPlayerInfo
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # A3 0F 通知玩家悬赏任务信息 #tagMCArrestTaskInfo
 | 
 |  |  | 
 | 
 |  |  | class  tagMCArrestTaskInfo(Structure):
 | 
 |  |  | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # A3 C2 大师强化等级激活信息 #tagMCMasterPlusLVInfo
 | 
 |  |  | 
 | 
 |  |  | class  tagMCMasterPlusLV(Structure):
 | 
 |  |  |     _pack_ = 1
 | 
 |  |  |     _fields_ = [
 | 
 |  |  |                   ("ClassLV", c_ubyte),     | 
 |  |  |                   ("MasterPlusLV", 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.ClassLV = 0
 | 
 |  |  |         self.MasterPlusLV = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         return sizeof(tagMCMasterPlusLV)
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         return string_at(addressof(self), self.GetLength())
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''// A3 C2 大师强化等级激活信息 //tagMCMasterPlusLVInfo:
 | 
 |  |  |                                 ClassLV:%d,
 | 
 |  |  |                                 MasterPlusLV:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.ClassLV,
 | 
 |  |  |                                 self.MasterPlusLV
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | class  tagMCMasterPlusLVInfo(Structure):
 | 
 |  |  |     Head = tagHead()
 | 
 |  |  |     Count = 0    #(BYTE Count)// 信息个数
 | 
 |  |  |     MasterPlusLVInfoList = list()    #(vector<tagMCMasterPlusLV> MasterPlusLVInfoList)// 信息列表
 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xA3
 | 
 |  |  |         self.Head.SubCmd = 0xC2
 | 
 |  |  |         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):
 | 
 |  |  |             temMasterPlusLVInfoList = tagMCMasterPlusLV()
 | 
 |  |  |             _pos = temMasterPlusLVInfoList.ReadData(_lpData, _pos)
 | 
 |  |  |             self.MasterPlusLVInfoList.append(temMasterPlusLVInfoList)
 | 
 |  |  |         return _pos
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.Head = tagHead()
 | 
 |  |  |         self.Head.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xA3
 | 
 |  |  |         self.Head.SubCmd = 0xC2
 | 
 |  |  |         self.Count = 0
 | 
 |  |  |         self.MasterPlusLVInfoList = list()
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         length = 0
 | 
 |  |  |         length += self.Head.GetLength()
 | 
 |  |  |         length += 1
 | 
 |  |  |         for i in range(self.Count):
 | 
 |  |  |             length += self.MasterPlusLVInfoList[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.MasterPlusLVInfoList[i].GetLength(), self.MasterPlusLVInfoList[i].GetBuffer())
 | 
 |  |  |         return data
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''
 | 
 |  |  |                                 Head:%s,
 | 
 |  |  |                                 Count:%d,
 | 
 |  |  |                                 MasterPlusLVInfoList:%s
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Head.OutputString(),
 | 
 |  |  |                                 self.Count,
 | 
 |  |  |                                 "..."
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagMCMasterPlusLVInfo=tagMCMasterPlusLVInfo()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCMasterPlusLVInfo.Head.Cmd,m_NAtagMCMasterPlusLVInfo.Head.SubCmd))] = m_NAtagMCMasterPlusLVInfo
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | #A3 1B 玩家自动战斗设置储存信息通知#tagMCAutoFightSetting
 | 
 |  |  | 
 | 
 |  |  | class  tagMCAutoFightSetting(Structure):
 | 
 |  |  | 
 |  |  |     StoveLV = 0    #(BYTE StoveLV)// 炼丹炉等级
 | 
 |  |  |     StoveExp = 0    #(DWORD StoveExp)// 炼丹炉经验
 | 
 |  |  |     ItemID = 0    #(DWORD ItemID)// 合成物品id
 | 
 |  |  |     ItemCnt = 0    #(BYTE ItemCnt)// 丹药数量
 | 
 |  |  |     ItemCnt = 0    #(WORD ItemCnt)// 丹药数量
 | 
 |  |  |     StoveCnt = 0    #(WORD StoveCnt)// 丹药数量
 | 
 |  |  |     InfoList = list()    #(vector<tagMCPlayerStoveInfo> InfoList)
 | 
 |  |  |     data = None
 | 
 |  |  | 
 |  |  |         self.StoveLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.StoveExp,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.ItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.ItemCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.ItemCnt,_pos = CommFunc.ReadWORD(_lpData, _pos)
 | 
 |  |  |         self.StoveCnt,_pos = CommFunc.ReadWORD(_lpData, _pos)
 | 
 |  |  |         for i in range(self.StoveCnt):
 | 
 |  |  |             temInfoList = tagMCPlayerStoveInfo()
 | 
 |  |  | 
 |  |  |         length += 1
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += 2
 | 
 |  |  |         length += 2
 | 
 |  |  |         for i in range(self.StoveCnt):
 | 
 |  |  |             length += self.InfoList[i].GetLength()
 | 
 |  |  | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.StoveLV)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.StoveExp)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.ItemID)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.ItemCnt)
 | 
 |  |  |         data = CommFunc.WriteWORD(data, self.ItemCnt)
 | 
 |  |  |         data = CommFunc.WriteWORD(data, self.StoveCnt)
 | 
 |  |  |         for i in range(self.StoveCnt):
 | 
 |  |  |             data = CommFunc.WriteString(data, self.InfoList[i].GetLength(), self.InfoList[i].GetBuffer())
 | 
 |  |  | 
 |  |  |     _fields_ = [
 | 
 |  |  |                   ("RecordIndex", c_ushort),    #第几个记录值 每个key存31个succid   0-30为0, 31-61为1..
 | 
 |  |  |                   ("Record", c_int),    #对应是否领取值
 | 
 |  |  |                   ("PassportRecord", c_int),    #通行证奖励是否领取值
 | 
 |  |  |                   ]
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.RecordIndex = 0
 | 
 |  |  |         self.Record = 0
 | 
 |  |  |         self.PassportRecord = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''//A3 42  成就完成领奖记录列表 //tagMCSuccessFinishAwardRecordList:
 | 
 |  |  |                                 RecordIndex:%d,
 | 
 |  |  |                                 Record:%d
 | 
 |  |  |                                 Record:%d,
 | 
 |  |  |                                 PassportRecord:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.RecordIndex,
 | 
 |  |  |                                 self.Record
 | 
 |  |  |                                 self.Record,
 | 
 |  |  |                                 self.PassportRecord
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | #A3 01 坐骑培养信息 #tagTrainHorseData
 | 
 |  |  | 
 | 
 |  |  | class  tagMCHorseInfo(Structure):
 | 
 |  |  | class  tagTrainHorseData(Structure):
 | 
 |  |  |     _pack_ = 1
 | 
 |  |  |     _fields_ = [
 | 
 |  |  |                   ("HorseID", c_int),    #ID
 | 
 |  |  |                   ("LV", c_ubyte),    #等级
 | 
 |  |  |                   ("Exp", c_int),    #经验
 | 
 |  |  |                   ("Cmd", c_ubyte),
 | 
 |  |  |                   ("SubCmd", c_ubyte),
 | 
 |  |  |                   ("LV", c_ubyte),    #等阶
 | 
 |  |  |                   ("EatItemCount", c_int),    #当前阶已吃丹个数
 | 
 |  |  |                   ("SkinPlusState", c_int),    #幻化激活状态,按位存储是否激活,幻化编号ID对应位
 | 
 |  |  |                   ]
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Cmd = 0xA3
 | 
 |  |  |         self.SubCmd = 0x01
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def ReadData(self, stringData, _pos=0, _len=0):
 | 
 |  |  | 
 |  |  |         return _pos + self.GetLength()
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.HorseID = 0
 | 
 |  |  |         self.Cmd = 0xA3
 | 
 |  |  |         self.SubCmd = 0x01
 | 
 |  |  |         self.LV = 0
 | 
 |  |  |         self.Exp = 0
 | 
 |  |  |         self.EatItemCount = 0
 | 
 |  |  |         self.SkinPlusState = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         return sizeof(tagMCHorseInfo)
 | 
 |  |  |         return sizeof(tagTrainHorseData)
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         return string_at(addressof(self), self.GetLength())
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''//A3 01 坐骑培养信息 //tagTrainHorseData:
 | 
 |  |  |                                 HorseID:%d,
 | 
 |  |  |                                 Cmd:%s,
 | 
 |  |  |                                 SubCmd:%s,
 | 
 |  |  |                                 LV:%d,
 | 
 |  |  |                                 Exp:%d
 | 
 |  |  |                                 EatItemCount:%d,
 | 
 |  |  |                                 SkinPlusState:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.HorseID,
 | 
 |  |  |                                 self.Cmd,
 | 
 |  |  |                                 self.SubCmd,
 | 
 |  |  |                                 self.LV,
 | 
 |  |  |                                 self.Exp
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | class  tagTrainHorseData(Structure):
 | 
 |  |  |     Head = tagHead()
 | 
 |  |  |     Multiple = 0    #(BYTE Multiple)//下次暴击倍数
 | 
 |  |  |     Num = 0    #(BYTE Num)//个数
 | 
 |  |  |     InfoList = list()    #(vector<tagMCHorseInfo> InfoList)// 坐骑数据列表
 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xA3
 | 
 |  |  |         self.Head.SubCmd = 0x01
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def ReadData(self, _lpData, _pos=0, _Len=0):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         _pos = self.Head.ReadData(_lpData, _pos)
 | 
 |  |  |         self.Multiple,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.Num,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         for i in range(self.Num):
 | 
 |  |  |             temInfoList = tagMCHorseInfo()
 | 
 |  |  |             _pos = temInfoList.ReadData(_lpData, _pos)
 | 
 |  |  |             self.InfoList.append(temInfoList)
 | 
 |  |  |         return _pos
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.Head = tagHead()
 | 
 |  |  |         self.Head.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xA3
 | 
 |  |  |         self.Head.SubCmd = 0x01
 | 
 |  |  |         self.Multiple = 0
 | 
 |  |  |         self.Num = 0
 | 
 |  |  |         self.InfoList = list()
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         length = 0
 | 
 |  |  |         length += self.Head.GetLength()
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += 1
 | 
 |  |  |         for i in range(self.Num):
 | 
 |  |  |             length += self.InfoList[i].GetLength()
 | 
 |  |  | 
 | 
 |  |  |         return length
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         data = ''
 | 
 |  |  |         data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.Multiple)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.Num)
 | 
 |  |  |         for i in range(self.Num):
 | 
 |  |  |             data = CommFunc.WriteString(data, self.InfoList[i].GetLength(), self.InfoList[i].GetBuffer())
 | 
 |  |  |         return data
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''
 | 
 |  |  |                                 Head:%s,
 | 
 |  |  |                                 Multiple:%d,
 | 
 |  |  |                                 Num:%d,
 | 
 |  |  |                                 InfoList:%s
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Head.OutputString(),
 | 
 |  |  |                                 self.Multiple,
 | 
 |  |  |                                 self.Num,
 | 
 |  |  |                                 "..."
 | 
 |  |  |                                 self.EatItemCount,
 | 
 |  |  |                                 self.SkinPlusState
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagTrainHorseData=tagTrainHorseData()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagTrainHorseData.Head.Cmd,m_NAtagTrainHorseData.Head.SubCmd))] = m_NAtagTrainHorseData
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagTrainHorseData.Cmd,m_NAtagTrainHorseData.SubCmd))] = m_NAtagTrainHorseData
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | 
 |  |  | 
 | 
 |  |  | m_NAtagMCCollectAwardItemInfo=tagMCCollectAwardItemInfo()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCollectAwardItemInfo.Head.Cmd,m_NAtagMCCollectAwardItemInfo.Head.SubCmd))] = m_NAtagMCCollectAwardItemInfo
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # A7 20 创角奖励领奖状态 #tagMCCreateRoleAwardState
 | 
 |  |  | 
 | 
 |  |  | class  tagMCCreateRoleAwardState(Structure):
 | 
 |  |  |     _pack_ = 1
 | 
 |  |  |     _fields_ = [
 | 
 |  |  |                   ("Cmd", c_ubyte),
 | 
 |  |  |                   ("SubCmd", c_ubyte),
 | 
 |  |  |                   ("GetState", c_ubyte),    # 是否已领取
 | 
 |  |  |                   ]
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Cmd = 0xA7
 | 
 |  |  |         self.SubCmd = 0x20
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def ReadData(self, stringData, _pos=0, _len=0):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         memmove(addressof(self), stringData[_pos:], self.GetLength())
 | 
 |  |  |         return _pos + self.GetLength()
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.Cmd = 0xA7
 | 
 |  |  |         self.SubCmd = 0x20
 | 
 |  |  |         self.GetState = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         return sizeof(tagMCCreateRoleAwardState)
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         return string_at(addressof(self), self.GetLength())
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''// A7 20 创角奖励领奖状态 //tagMCCreateRoleAwardState:
 | 
 |  |  |                                 Cmd:%s,
 | 
 |  |  |                                 SubCmd:%s,
 | 
 |  |  |                                 GetState:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Cmd,
 | 
 |  |  |                                 self.SubCmd,
 | 
 |  |  |                                 self.GetState
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagMCCreateRoleAwardState=tagMCCreateRoleAwardState()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCreateRoleAwardState.Cmd,m_NAtagMCCreateRoleAwardState.SubCmd))] = m_NAtagMCCreateRoleAwardState
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # AA 40 集字活动信息 #tagMCActCollectWordsInfo
 | 
 |  |  | 
 | 
 |  |  | class  tagMCActCollectWordsNeedItem(Structure):
 | 
 |  |  |     _pack_ = 1
 | 
 |  |  |     _fields_ = [
 | 
 |  |  |                   ("ItemID", c_int),     | 
 |  |  |                   ("ItemCount", c_ushort),     | 
 |  |  |                   ("IsBind", c_ubyte),     | 
 |  |  |                   ]
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def ReadData(self, stringData, _pos=0, _len=0):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         memmove(addressof(self), stringData[_pos:], self.GetLength())
 | 
 |  |  |         return _pos + self.GetLength()
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.ItemID = 0
 | 
 |  |  |         self.ItemCount = 0
 | 
 |  |  |         self.IsBind = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         return sizeof(tagMCActCollectWordsNeedItem)
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         return string_at(addressof(self), self.GetLength())
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''// AA 40 集字活动信息 //tagMCActCollectWordsInfo:
 | 
 |  |  |                                 ItemID:%d,
 | 
 |  |  |                                 ItemCount:%d,
 | 
 |  |  |                                 IsBind:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.ItemID,
 | 
 |  |  |                                 self.ItemCount,
 | 
 |  |  |                                 self.IsBind
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | class  tagMCActCollectWordsExchangeItem(Structure):
 | 
 |  |  |     ExchangeNum = 0    #(BYTE ExchangeNum)//兑换编号
 | 
 |  |  |     ExchangeCountMax = 0    #(BYTE ExchangeCountMax)//最大兑换次数,0不限制
 | 
 |  |  |     ItemID = 0    #(DWORD ItemID)//目标物品
 | 
 |  |  |     ItemCount = 0    #(WORD ItemCount)
 | 
 |  |  |     IsBind = 0    #(BYTE IsBind)
 | 
 |  |  |     NeedItemCount = 0    #(BYTE NeedItemCount)
 | 
 |  |  |     NeedItemList = list()    #(vector<tagMCActCollectWordsNeedItem> NeedItemList)// 所需物品列表
 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def ReadData(self, _lpData, _pos=0, _Len=0):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.ExchangeNum,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.ExchangeCountMax,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.ItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.ItemCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
 | 
 |  |  |         self.IsBind,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.NeedItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         for i in range(self.NeedItemCount):
 | 
 |  |  |             temNeedItemList = tagMCActCollectWordsNeedItem()
 | 
 |  |  |             _pos = temNeedItemList.ReadData(_lpData, _pos)
 | 
 |  |  |             self.NeedItemList.append(temNeedItemList)
 | 
 |  |  |         return _pos
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.ExchangeNum = 0
 | 
 |  |  |         self.ExchangeCountMax = 0
 | 
 |  |  |         self.ItemID = 0
 | 
 |  |  |         self.ItemCount = 0
 | 
 |  |  |         self.IsBind = 0
 | 
 |  |  |         self.NeedItemCount = 0
 | 
 |  |  |         self.NeedItemList = list()
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         length = 0
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 2
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += 1
 | 
 |  |  |         for i in range(self.NeedItemCount):
 | 
 |  |  |             length += self.NeedItemList[i].GetLength()
 | 
 |  |  | 
 | 
 |  |  |         return length
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         data = ''
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.ExchangeNum)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.ExchangeCountMax)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.ItemID)
 | 
 |  |  |         data = CommFunc.WriteWORD(data, self.ItemCount)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.IsBind)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.NeedItemCount)
 | 
 |  |  |         for i in range(self.NeedItemCount):
 | 
 |  |  |             data = CommFunc.WriteString(data, self.NeedItemList[i].GetLength(), self.NeedItemList[i].GetBuffer())
 | 
 |  |  |         return data
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''
 | 
 |  |  |                                 ExchangeNum:%d,
 | 
 |  |  |                                 ExchangeCountMax:%d,
 | 
 |  |  |                                 ItemID:%d,
 | 
 |  |  |                                 ItemCount:%d,
 | 
 |  |  |                                 IsBind:%d,
 | 
 |  |  |                                 NeedItemCount:%d,
 | 
 |  |  |                                 NeedItemList:%s
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.ExchangeNum,
 | 
 |  |  |                                 self.ExchangeCountMax,
 | 
 |  |  |                                 self.ItemID,
 | 
 |  |  |                                 self.ItemCount,
 | 
 |  |  |                                 self.IsBind,
 | 
 |  |  |                                 self.NeedItemCount,
 | 
 |  |  |                                 "..."
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | class  tagMCActCollectWordsInfo(Structure):
 | 
 |  |  |     Head = tagHead()
 | 
 |  |  |     ActNum = 0    #(BYTE ActNum)//活动编号,1 或 2,相互独立的活动,可同时开启
 | 
 |  |  |     StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
 | 
 |  |  |     EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
 | 
 |  |  |     LimitLV = 0    #(WORD LimitLV)// 限制等级
 | 
 |  |  |     LastDayOnlyExchange = 0    #(BYTE LastDayOnlyExchange)//最后一天是否仅兑换
 | 
 |  |  |     ExchangeCount = 0    #(BYTE ExchangeCount)
 | 
 |  |  |     ExchangeItemList = list()    #(vector<tagMCActCollectWordsExchangeItem> ExchangeItemList)//兑换组合列表
 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xAA
 | 
 |  |  |         self.Head.SubCmd = 0x40
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def ReadData(self, _lpData, _pos=0, _Len=0):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         _pos = self.Head.ReadData(_lpData, _pos)
 | 
 |  |  |         self.ActNum,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
 | 
 |  |  |         self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
 | 
 |  |  |         self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
 | 
 |  |  |         self.LastDayOnlyExchange,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.ExchangeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         for i in range(self.ExchangeCount):
 | 
 |  |  |             temExchangeItemList = tagMCActCollectWordsExchangeItem()
 | 
 |  |  |             _pos = temExchangeItemList.ReadData(_lpData, _pos)
 | 
 |  |  |             self.ExchangeItemList.append(temExchangeItemList)
 | 
 |  |  |         return _pos
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.Head = tagHead()
 | 
 |  |  |         self.Head.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xAA
 | 
 |  |  |         self.Head.SubCmd = 0x40
 | 
 |  |  |         self.ActNum = 0
 | 
 |  |  |         self.StartDate = ""
 | 
 |  |  |         self.EndtDate = ""
 | 
 |  |  |         self.LimitLV = 0
 | 
 |  |  |         self.LastDayOnlyExchange = 0
 | 
 |  |  |         self.ExchangeCount = 0
 | 
 |  |  |         self.ExchangeItemList = list()
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         length = 0
 | 
 |  |  |         length += self.Head.GetLength()
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += 10
 | 
 |  |  |         length += 10
 | 
 |  |  |         length += 2
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += 1
 | 
 |  |  |         for i in range(self.ExchangeCount):
 | 
 |  |  |             length += self.ExchangeItemList[i].GetLength()
 | 
 |  |  | 
 | 
 |  |  |         return length
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         data = ''
 | 
 |  |  |         data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.ActNum)
 | 
 |  |  |         data = CommFunc.WriteString(data, 10, self.StartDate)
 | 
 |  |  |         data = CommFunc.WriteString(data, 10, self.EndtDate)
 | 
 |  |  |         data = CommFunc.WriteWORD(data, self.LimitLV)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.LastDayOnlyExchange)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.ExchangeCount)
 | 
 |  |  |         for i in range(self.ExchangeCount):
 | 
 |  |  |             data = CommFunc.WriteString(data, self.ExchangeItemList[i].GetLength(), self.ExchangeItemList[i].GetBuffer())
 | 
 |  |  |         return data
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''
 | 
 |  |  |                                 Head:%s,
 | 
 |  |  |                                 ActNum:%d,
 | 
 |  |  |                                 StartDate:%s,
 | 
 |  |  |                                 EndtDate:%s,
 | 
 |  |  |                                 LimitLV:%d,
 | 
 |  |  |                                 LastDayOnlyExchange:%d,
 | 
 |  |  |                                 ExchangeCount:%d,
 | 
 |  |  |                                 ExchangeItemList:%s
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Head.OutputString(),
 | 
 |  |  |                                 self.ActNum,
 | 
 |  |  |                                 self.StartDate,
 | 
 |  |  |                                 self.EndtDate,
 | 
 |  |  |                                 self.LimitLV,
 | 
 |  |  |                                 self.LastDayOnlyExchange,
 | 
 |  |  |                                 self.ExchangeCount,
 | 
 |  |  |                                 "..."
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagMCActCollectWordsInfo=tagMCActCollectWordsInfo()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActCollectWordsInfo.Head.Cmd,m_NAtagMCActCollectWordsInfo.Head.SubCmd))] = m_NAtagMCActCollectWordsInfo
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # AA 41 集字活动玩家信息 #tagMCActCollectWordsPlayerInfo
 | 
 |  |  | 
 | 
 |  |  | class  tagMCActCollectWordsExchangeInfo(Structure):
 | 
 |  |  |     _pack_ = 1
 | 
 |  |  |     _fields_ = [
 | 
 |  |  |                   ("ExchangeNum", c_ubyte),    #兑换编号
 | 
 |  |  |                   ("ExchangeCount", c_ushort),    #已兑换次数
 | 
 |  |  |                   ]
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def ReadData(self, stringData, _pos=0, _len=0):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         memmove(addressof(self), stringData[_pos:], self.GetLength())
 | 
 |  |  |         return _pos + self.GetLength()
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.ExchangeNum = 0
 | 
 |  |  |         self.ExchangeCount = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         return sizeof(tagMCActCollectWordsExchangeInfo)
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         return string_at(addressof(self), self.GetLength())
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''// AA 41 集字活动玩家信息 //tagMCActCollectWordsPlayerInfo:
 | 
 |  |  |                                 ExchangeNum:%d,
 | 
 |  |  |                                 ExchangeCount:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.ExchangeNum,
 | 
 |  |  |                                 self.ExchangeCount
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | class  tagMCActCollectWordsPlayerInfo(Structure):
 | 
 |  |  |     Head = tagHead()
 | 
 |  |  |     ActNum = 0    #(BYTE ActNum)//活动编号,1 或 2,相互独立的活动,可同时开启
 | 
 |  |  |     ExchangeCount = 0    #(BYTE ExchangeCount)
 | 
 |  |  |     ExchangeInfoList = list()    #(vector<tagMCActCollectWordsExchangeInfo> ExchangeInfoList)//兑换数据列表
 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xAA
 | 
 |  |  |         self.Head.SubCmd = 0x41
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def ReadData(self, _lpData, _pos=0, _Len=0):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         _pos = self.Head.ReadData(_lpData, _pos)
 | 
 |  |  |         self.ActNum,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.ExchangeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         for i in range(self.ExchangeCount):
 | 
 |  |  |             temExchangeInfoList = tagMCActCollectWordsExchangeInfo()
 | 
 |  |  |             _pos = temExchangeInfoList.ReadData(_lpData, _pos)
 | 
 |  |  |             self.ExchangeInfoList.append(temExchangeInfoList)
 | 
 |  |  |         return _pos
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.Head = tagHead()
 | 
 |  |  |         self.Head.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xAA
 | 
 |  |  |         self.Head.SubCmd = 0x41
 | 
 |  |  |         self.ActNum = 0
 | 
 |  |  |         self.ExchangeCount = 0
 | 
 |  |  |         self.ExchangeInfoList = list()
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         length = 0
 | 
 |  |  |         length += self.Head.GetLength()
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += 1
 | 
 |  |  |         for i in range(self.ExchangeCount):
 | 
 |  |  |             length += self.ExchangeInfoList[i].GetLength()
 | 
 |  |  | 
 | 
 |  |  |         return length
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         data = ''
 | 
 |  |  |         data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.ActNum)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.ExchangeCount)
 | 
 |  |  |         for i in range(self.ExchangeCount):
 | 
 |  |  |             data = CommFunc.WriteString(data, self.ExchangeInfoList[i].GetLength(), self.ExchangeInfoList[i].GetBuffer())
 | 
 |  |  |         return data
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''
 | 
 |  |  |                                 Head:%s,
 | 
 |  |  |                                 ActNum:%d,
 | 
 |  |  |                                 ExchangeCount:%d,
 | 
 |  |  |                                 ExchangeInfoList:%s
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Head.OutputString(),
 | 
 |  |  |                                 self.ActNum,
 | 
 |  |  |                                 self.ExchangeCount,
 | 
 |  |  |                                 "..."
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagMCActCollectWordsPlayerInfo=tagMCActCollectWordsPlayerInfo()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActCollectWordsPlayerInfo.Head.Cmd,m_NAtagMCActCollectWordsPlayerInfo.Head.SubCmd))] = m_NAtagMCActCollectWordsPlayerInfo
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # AA 0C 登录奖励活动信息 #tagMCActLoginAwardInfo
 | 
 |  |  | 
 | 
 |  |  | class  tagMCActLoginAwardAction(Structure):
 | 
 |  |  | 
 |  |  | 
 | 
 |  |  | m_NAtagMCActLoginAwardPlayerInfo=tagMCActLoginAwardPlayerInfo()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActLoginAwardPlayerInfo.Head.Cmd,m_NAtagMCActLoginAwardPlayerInfo.Head.SubCmd))] = m_NAtagMCActLoginAwardPlayerInfo
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # AA 27 充值返利活动信息 #tagMCActRechargePrizeInfo
 | 
 |  |  | 
 | 
 |  |  | class  tagMCActRechargePrize(Structure):
 | 
 |  |  |     _pack_ = 1
 | 
 |  |  |     _fields_ = [
 | 
 |  |  |                   ("CTGID", c_ushort),    # 对应充值表充值ID
 | 
 |  |  |                   ("GoldPrize", c_int),    #返利仙玉数
 | 
 |  |  |                   ("PrizeCountLimit", 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.CTGID = 0
 | 
 |  |  |         self.GoldPrize = 0
 | 
 |  |  |         self.PrizeCountLimit = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         return sizeof(tagMCActRechargePrize)
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         return string_at(addressof(self), self.GetLength())
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''// AA 27 充值返利活动信息 //tagMCActRechargePrizeInfo:
 | 
 |  |  |                                 CTGID:%d,
 | 
 |  |  |                                 GoldPrize:%d,
 | 
 |  |  |                                 PrizeCountLimit:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.CTGID,
 | 
 |  |  |                                 self.GoldPrize,
 | 
 |  |  |                                 self.PrizeCountLimit
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | class  tagMCActRechargePrizeDay(Structure):
 | 
 |  |  |     Prizes = 0    #(BYTE Prizes)// 返利档数
 | 
 |  |  |     PrizeInfo = list()    #(vector<tagMCActRechargePrize> PrizeInfo)// 返利档信息
 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def ReadData(self, _lpData, _pos=0, _Len=0):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Prizes,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         for i in range(self.Prizes):
 | 
 |  |  |             temPrizeInfo = tagMCActRechargePrize()
 | 
 |  |  |             _pos = temPrizeInfo.ReadData(_lpData, _pos)
 | 
 |  |  |             self.PrizeInfo.append(temPrizeInfo)
 | 
 |  |  |         return _pos
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.Prizes = 0
 | 
 |  |  |         self.PrizeInfo = list()
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         length = 0
 | 
 |  |  |         length += 1
 | 
 |  |  |         for i in range(self.Prizes):
 | 
 |  |  |             length += self.PrizeInfo[i].GetLength()
 | 
 |  |  | 
 | 
 |  |  |         return length
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         data = ''
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.Prizes)
 | 
 |  |  |         for i in range(self.Prizes):
 | 
 |  |  |             data = CommFunc.WriteString(data, self.PrizeInfo[i].GetLength(), self.PrizeInfo[i].GetBuffer())
 | 
 |  |  |         return data
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''
 | 
 |  |  |                                 Prizes:%d,
 | 
 |  |  |                                 PrizeInfo:%s
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Prizes,
 | 
 |  |  |                                 "..."
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | class  tagMCActRechargePrizeInfo(Structure):
 | 
 |  |  |     Head = tagHead()
 | 
 |  |  |     StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
 | 
 |  |  |     EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
 | 
 |  |  |     IsDayReset = 0    #(BYTE IsDayReset)//是否每天重置
 | 
 |  |  |     PrizeDays = 0    #(BYTE PrizeDays)
 | 
 |  |  |     PrizeDayInfo = list()    #(vector<tagMCActRechargePrizeDay> PrizeDayInfo)//每天对应信息; 如果只有一天,但是活动有多天,则代表每天奖励都一样
 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xAA
 | 
 |  |  |         self.Head.SubCmd = 0x27
 | 
 |  |  |         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.IsDayReset,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.PrizeDays,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         for i in range(self.PrizeDays):
 | 
 |  |  |             temPrizeDayInfo = tagMCActRechargePrizeDay()
 | 
 |  |  |             _pos = temPrizeDayInfo.ReadData(_lpData, _pos)
 | 
 |  |  |             self.PrizeDayInfo.append(temPrizeDayInfo)
 | 
 |  |  |         return _pos
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.Head = tagHead()
 | 
 |  |  |         self.Head.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xAA
 | 
 |  |  |         self.Head.SubCmd = 0x27
 | 
 |  |  |         self.StartDate = ""
 | 
 |  |  |         self.EndtDate = ""
 | 
 |  |  |         self.IsDayReset = 0
 | 
 |  |  |         self.PrizeDays = 0
 | 
 |  |  |         self.PrizeDayInfo = list()
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         length = 0
 | 
 |  |  |         length += self.Head.GetLength()
 | 
 |  |  |         length += 10
 | 
 |  |  |         length += 10
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += 1
 | 
 |  |  |         for i in range(self.PrizeDays):
 | 
 |  |  |             length += self.PrizeDayInfo[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.WriteBYTE(data, self.IsDayReset)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.PrizeDays)
 | 
 |  |  |         for i in range(self.PrizeDays):
 | 
 |  |  |             data = CommFunc.WriteString(data, self.PrizeDayInfo[i].GetLength(), self.PrizeDayInfo[i].GetBuffer())
 | 
 |  |  |         return data
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''
 | 
 |  |  |                                 Head:%s,
 | 
 |  |  |                                 StartDate:%s,
 | 
 |  |  |                                 EndtDate:%s,
 | 
 |  |  |                                 IsDayReset:%d,
 | 
 |  |  |                                 PrizeDays:%d,
 | 
 |  |  |                                 PrizeDayInfo:%s
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Head.OutputString(),
 | 
 |  |  |                                 self.StartDate,
 | 
 |  |  |                                 self.EndtDate,
 | 
 |  |  |                                 self.IsDayReset,
 | 
 |  |  |                                 self.PrizeDays,
 | 
 |  |  |                                 "..."
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagMCActRechargePrizeInfo=tagMCActRechargePrizeInfo()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActRechargePrizeInfo.Head.Cmd,m_NAtagMCActRechargePrizeInfo.Head.SubCmd))] = m_NAtagMCActRechargePrizeInfo
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | 
 |  |  |     _pack_ = 1
 | 
 |  |  |     _fields_ = [
 | 
 |  |  |                   ("ItemID", c_int),    
 | 
 |  |  |                   ("ItemCount", c_ushort),     | 
 |  |  |                   ("ItemCount", c_int),     | 
 |  |  |                   ("IsBind", c_ubyte),    
 | 
 |  |  |                   ]
 | 
 |  |  | 
 | 
 |  |  | 
 |  |  | 
 | 
 |  |  | m_NAtagMCCostRebatePlayerInfo=tagMCCostRebatePlayerInfo()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCostRebatePlayerInfo.Cmd,m_NAtagMCCostRebatePlayerInfo.SubCmd))] = m_NAtagMCCostRebatePlayerInfo
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # AA 25 每日礼包活动信息 #tagMCDailyGiftbagInfo
 | 
 |  |  | 
 | 
 |  |  | class  tagMCDailyGiftbagItem(Structure):
 | 
 |  |  |     _pack_ = 1
 | 
 |  |  |     _fields_ = [
 | 
 |  |  |                   ("ItemID", c_int),     | 
 |  |  |                   ("ItemCount", 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.ItemID = 0
 | 
 |  |  |         self.ItemCount = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         return sizeof(tagMCDailyGiftbagItem)
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         return string_at(addressof(self), self.GetLength())
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''// AA 25 每日礼包活动信息 //tagMCDailyGiftbagInfo:
 | 
 |  |  |                                 ItemID:%d,
 | 
 |  |  |                                 ItemCount:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.ItemID,
 | 
 |  |  |                                 self.ItemCount
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | class  tagMCDailyGiftbag(Structure):
 | 
 |  |  |     GiftID = 0    #(DWORD GiftID)//礼包ID,0为免费
 | 
 |  |  |     OrderInfoLen = 0    #(BYTE OrderInfoLen)
 | 
 |  |  |     OrderInfo = ""    #(String OrderInfo)//商品编号
 | 
 |  |  |     BuyCountLimit = 0    #(BYTE BuyCountLimit)//限购数
 | 
 |  |  |     RMB = 0    #(DWORD RMB)//所需RMB,元
 | 
 |  |  |     GiftItemCount = 0    #(BYTE GiftItemCount)// 礼包物品数
 | 
 |  |  |     ItemInfo = list()    #(vector<tagMCDailyGiftbagItem> ItemInfo)// 物品信息
 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def ReadData(self, _lpData, _pos=0, _Len=0):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.GiftID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.OrderInfoLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.OrderInfo,_pos = CommFunc.ReadString(_lpData, _pos,self.OrderInfoLen)
 | 
 |  |  |         self.BuyCountLimit,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.RMB,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.GiftItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         for i in range(self.GiftItemCount):
 | 
 |  |  |             temItemInfo = tagMCDailyGiftbagItem()
 | 
 |  |  |             _pos = temItemInfo.ReadData(_lpData, _pos)
 | 
 |  |  |             self.ItemInfo.append(temItemInfo)
 | 
 |  |  |         return _pos
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.GiftID = 0
 | 
 |  |  |         self.OrderInfoLen = 0
 | 
 |  |  |         self.OrderInfo = ""
 | 
 |  |  |         self.BuyCountLimit = 0
 | 
 |  |  |         self.RMB = 0
 | 
 |  |  |         self.GiftItemCount = 0
 | 
 |  |  |         self.ItemInfo = list()
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         length = 0
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += len(self.OrderInfo)
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 1
 | 
 |  |  |         for i in range(self.GiftItemCount):
 | 
 |  |  |             length += self.ItemInfo[i].GetLength()
 | 
 |  |  | 
 | 
 |  |  |         return length
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         data = ''
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.GiftID)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.OrderInfoLen)
 | 
 |  |  |         data = CommFunc.WriteString(data, self.OrderInfoLen, self.OrderInfo)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.BuyCountLimit)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.RMB)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.GiftItemCount)
 | 
 |  |  |         for i in range(self.GiftItemCount):
 | 
 |  |  |             data = CommFunc.WriteString(data, self.ItemInfo[i].GetLength(), self.ItemInfo[i].GetBuffer())
 | 
 |  |  |         return data
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''
 | 
 |  |  |                                 GiftID:%d,
 | 
 |  |  |                                 OrderInfoLen:%d,
 | 
 |  |  |                                 OrderInfo:%s,
 | 
 |  |  |                                 BuyCountLimit:%d,
 | 
 |  |  |                                 RMB:%d,
 | 
 |  |  |                                 GiftItemCount:%d,
 | 
 |  |  |                                 ItemInfo:%s
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.GiftID,
 | 
 |  |  |                                 self.OrderInfoLen,
 | 
 |  |  |                                 self.OrderInfo,
 | 
 |  |  |                                 self.BuyCountLimit,
 | 
 |  |  |                                 self.RMB,
 | 
 |  |  |                                 self.GiftItemCount,
 | 
 |  |  |                                 "..."
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | class  tagMCDailyGiftbagInfo(Structure):
 | 
 |  |  |     Head = tagHead()
 | 
 |  |  |     GiftbagCount = 0    #(BYTE GiftbagCount)// 礼包数
 | 
 |  |  |     GiftbagInfo = list()    #(vector<tagMCDailyGiftbag> GiftbagInfo)// 礼包信息
 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xAA
 | 
 |  |  |         self.Head.SubCmd = 0x25
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def ReadData(self, _lpData, _pos=0, _Len=0):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         _pos = self.Head.ReadData(_lpData, _pos)
 | 
 |  |  |         self.GiftbagCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         for i in range(self.GiftbagCount):
 | 
 |  |  |             temGiftbagInfo = tagMCDailyGiftbag()
 | 
 |  |  |             _pos = temGiftbagInfo.ReadData(_lpData, _pos)
 | 
 |  |  |             self.GiftbagInfo.append(temGiftbagInfo)
 | 
 |  |  |         return _pos
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.Head = tagHead()
 | 
 |  |  |         self.Head.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xAA
 | 
 |  |  |         self.Head.SubCmd = 0x25
 | 
 |  |  |         self.GiftbagCount = 0
 | 
 |  |  |         self.GiftbagInfo = list()
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         length = 0
 | 
 |  |  |         length += self.Head.GetLength()
 | 
 |  |  |         length += 1
 | 
 |  |  |         for i in range(self.GiftbagCount):
 | 
 |  |  |             length += self.GiftbagInfo[i].GetLength()
 | 
 |  |  | 
 | 
 |  |  |         return length
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         data = ''
 | 
 |  |  |         data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.GiftbagCount)
 | 
 |  |  |         for i in range(self.GiftbagCount):
 | 
 |  |  |             data = CommFunc.WriteString(data, self.GiftbagInfo[i].GetLength(), self.GiftbagInfo[i].GetBuffer())
 | 
 |  |  |         return data
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''
 | 
 |  |  |                                 Head:%s,
 | 
 |  |  |                                 GiftbagCount:%d,
 | 
 |  |  |                                 GiftbagInfo:%s
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Head.OutputString(),
 | 
 |  |  |                                 self.GiftbagCount,
 | 
 |  |  |                                 "..."
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagMCDailyGiftbagInfo=tagMCDailyGiftbagInfo()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCDailyGiftbagInfo.Head.Cmd,m_NAtagMCDailyGiftbagInfo.Head.SubCmd))] = m_NAtagMCDailyGiftbagInfo
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # AA 26 每日礼包玩家活动信息 #tagMCDailyGiftbagPlayerInfo
 | 
 |  |  | 
 | 
 |  |  | class  tagMCDailyGiftbagBuyCount(Structure):
 | 
 |  |  |     _pack_ = 1
 | 
 |  |  |     _fields_ = [
 | 
 |  |  |                   ("GiftbagID", c_int),    #礼包ID
 | 
 |  |  |                   ("BuyCount", 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.GiftbagID = 0
 | 
 |  |  |         self.BuyCount = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         return sizeof(tagMCDailyGiftbagBuyCount)
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         return string_at(addressof(self), self.GetLength())
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''// AA 26 每日礼包玩家活动信息 //tagMCDailyGiftbagPlayerInfo:
 | 
 |  |  |                                 GiftbagID:%d,
 | 
 |  |  |                                 BuyCount:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.GiftbagID,
 | 
 |  |  |                                 self.BuyCount
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | class  tagMCDailyGiftbagPlayerInfo(Structure):
 | 
 |  |  |     Head = tagHead()
 | 
 |  |  |     Count = 0    #(BYTE Count)
 | 
 |  |  |     BuyCountList = list()    #(vector<tagMCDailyGiftbagBuyCount> BuyCountList)//礼包购买次数信息
 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xAA
 | 
 |  |  |         self.Head.SubCmd = 0x26
 | 
 |  |  |         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):
 | 
 |  |  |             temBuyCountList = tagMCDailyGiftbagBuyCount()
 | 
 |  |  |             _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 = 0x26
 | 
 |  |  |         self.Count = 0
 | 
 |  |  |         self.BuyCountList = list()
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         length = 0
 | 
 |  |  |         length += self.Head.GetLength()
 | 
 |  |  |         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.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,
 | 
 |  |  |                                 Count:%d,
 | 
 |  |  |                                 BuyCountList:%s
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Head.OutputString(),
 | 
 |  |  |                                 self.Count,
 | 
 |  |  |                                 "..."
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagMCDailyGiftbagPlayerInfo=tagMCDailyGiftbagPlayerInfo()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCDailyGiftbagPlayerInfo.Head.Cmd,m_NAtagMCDailyGiftbagPlayerInfo.Head.SubCmd))] = m_NAtagMCDailyGiftbagPlayerInfo
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | 
 |  |  |     _fields_ = [
 | 
 |  |  |                   ("Cmd", c_ubyte),
 | 
 |  |  |                   ("SubCmd", c_ubyte),
 | 
 |  |  |                   ("FirstGoldRewardState", c_ubyte),    #首充奖励是否已领奖
 | 
 |  |  |                   ("FirstGoldRewardState", c_ubyte),    #首充奖励领奖记录,按位记录首充第X天是否已领取,第1天为第0索引位
 | 
 |  |  |                   ("FirstGoldTry", c_ubyte),    #首充试用状态0-不可试用 1-可试用 2-已试用
 | 
 |  |  |                   ("FirstGoldServerDay", c_ushort),    #首充时是开服第几天,从1开始,0代表未记录充值
 | 
 |  |  |                   ]
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  | 
 |  |  |         self.SubCmd = 0x02
 | 
 |  |  |         self.FirstGoldRewardState = 0
 | 
 |  |  |         self.FirstGoldTry = 0
 | 
 |  |  |         self.FirstGoldServerDay = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  | 
 |  |  |                                 Cmd:%s,
 | 
 |  |  |                                 SubCmd:%s,
 | 
 |  |  |                                 FirstGoldRewardState:%d,
 | 
 |  |  |                                 FirstGoldTry:%d
 | 
 |  |  |                                 FirstGoldTry:%d,
 | 
 |  |  |                                 FirstGoldServerDay:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Cmd,
 | 
 |  |  |                                 self.SubCmd,
 | 
 |  |  |                                 self.FirstGoldRewardState,
 | 
 |  |  |                                 self.FirstGoldTry
 | 
 |  |  |                                 self.FirstGoldTry,
 | 
 |  |  |                                 self.FirstGoldServerDay
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 |  |  | 
 | 
 |  |  | m_NAtagMCNewXJSDRecharge=tagMCNewXJSDRecharge()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCNewXJSDRecharge.Cmd,m_NAtagMCNewXJSDRecharge.SubCmd))] = m_NAtagMCNewXJSDRecharge
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # AA 28 充值返利玩家活动信息 #tagMCRechargePrizePlayerInfo
 | 
 |  |  | 
 | 
 |  |  | class  tagMCRechargePrizeInfo(Structure):
 | 
 |  |  |     _pack_ = 1
 | 
 |  |  |     _fields_ = [
 | 
 |  |  |                   ("CTGID", c_ushort),    # 对应充值表充值ID
 | 
 |  |  |                   ("PrizeCount", 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.CTGID = 0
 | 
 |  |  |         self.PrizeCount = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         return sizeof(tagMCRechargePrizeInfo)
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         return string_at(addressof(self), self.GetLength())
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''// AA 28 充值返利玩家活动信息 //tagMCRechargePrizePlayerInfo:
 | 
 |  |  |                                 CTGID:%d,
 | 
 |  |  |                                 PrizeCount:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.CTGID,
 | 
 |  |  |                                 self.PrizeCount
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | class  tagMCRechargePrizePlayerInfo(Structure):
 | 
 |  |  |     Head = tagHead()
 | 
 |  |  |     Count = 0    #(BYTE Count)
 | 
 |  |  |     PlayerInfoList = list()    #(vector<tagMCRechargePrizeInfo> PlayerInfoList)//玩家返利信息列表
 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xAA
 | 
 |  |  |         self.Head.SubCmd = 0x28
 | 
 |  |  |         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):
 | 
 |  |  |             temPlayerInfoList = tagMCRechargePrizeInfo()
 | 
 |  |  |             _pos = temPlayerInfoList.ReadData(_lpData, _pos)
 | 
 |  |  |             self.PlayerInfoList.append(temPlayerInfoList)
 | 
 |  |  |         return _pos
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.Head = tagHead()
 | 
 |  |  |         self.Head.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xAA
 | 
 |  |  |         self.Head.SubCmd = 0x28
 | 
 |  |  |         self.Count = 0
 | 
 |  |  |         self.PlayerInfoList = list()
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         length = 0
 | 
 |  |  |         length += self.Head.GetLength()
 | 
 |  |  |         length += 1
 | 
 |  |  |         for i in range(self.Count):
 | 
 |  |  |             length += self.PlayerInfoList[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.PlayerInfoList[i].GetLength(), self.PlayerInfoList[i].GetBuffer())
 | 
 |  |  |         return data
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''
 | 
 |  |  |                                 Head:%s,
 | 
 |  |  |                                 Count:%d,
 | 
 |  |  |                                 PlayerInfoList:%s
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Head.OutputString(),
 | 
 |  |  |                                 self.Count,
 | 
 |  |  |                                 "..."
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagMCRechargePrizePlayerInfo=tagMCRechargePrizePlayerInfo()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCRechargePrizePlayerInfo.Head.Cmd,m_NAtagMCRechargePrizePlayerInfo.Head.SubCmd))] = m_NAtagMCRechargePrizePlayerInfo
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # B0 27 活跃放置信息 #tagMCActivityPlaceInfo
 | 
 |  |  | 
 | 
 |  |  | class  tagMCActivityPlaceInfo(Structure):
 | 
 |  |  |     Head = tagHead()
 | 
 |  |  |     StartTime = 0    #(DWORD StartTime)// 开始探索time时间戳,完成一次探索会自动下一次探索并更新该时间
 | 
 |  |  |     PlaceCount = 0    #(BYTE PlaceCount)// 剩余未完成探索次数
 | 
 |  |  |     RewardCount = 0    #(BYTE RewardCount)// 累计未领取探索奖励次数
 | 
 |  |  |     RewardLen = 0    #(BYTE RewardLen)
 | 
 |  |  |     RewardInfo = ""    #(String RewardInfo)//累计未领取探索奖励 [[itemID, count], ...]
 | 
 |  |  |     TodayExp = 0    #(DWORD TodayExp)
 | 
 |  |  |     TodayExpPoint = 0    #(DWORD TodayExpPoint)
 | 
 |  |  |     YestordayExp = 0    #(DWORD YestordayExp)
 | 
 |  |  |     YestordayExpPoint = 0    #(DWORD YestordayExpPoint)
 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xB0
 | 
 |  |  |         self.Head.SubCmd = 0x27
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def ReadData(self, _lpData, _pos=0, _Len=0):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         _pos = self.Head.ReadData(_lpData, _pos)
 | 
 |  |  |         self.StartTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.PlaceCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.RewardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.RewardLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.RewardInfo,_pos = CommFunc.ReadString(_lpData, _pos,self.RewardLen)
 | 
 |  |  |         self.TodayExp,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.TodayExpPoint,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.YestordayExp,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.YestordayExpPoint,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         return _pos
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.Head = tagHead()
 | 
 |  |  |         self.Head.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xB0
 | 
 |  |  |         self.Head.SubCmd = 0x27
 | 
 |  |  |         self.StartTime = 0
 | 
 |  |  |         self.PlaceCount = 0
 | 
 |  |  |         self.RewardCount = 0
 | 
 |  |  |         self.RewardLen = 0
 | 
 |  |  |         self.RewardInfo = ""
 | 
 |  |  |         self.TodayExp = 0
 | 
 |  |  |         self.TodayExpPoint = 0
 | 
 |  |  |         self.YestordayExp = 0
 | 
 |  |  |         self.YestordayExpPoint = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         length = 0
 | 
 |  |  |         length += self.Head.GetLength()
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += len(self.RewardInfo)
 | 
 |  |  |         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.WriteDWORD(data, self.StartTime)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.PlaceCount)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.RewardCount)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.RewardLen)
 | 
 |  |  |         data = CommFunc.WriteString(data, self.RewardLen, self.RewardInfo)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.TodayExp)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.TodayExpPoint)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.YestordayExp)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.YestordayExpPoint)
 | 
 |  |  |         return data
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''
 | 
 |  |  |                                 Head:%s,
 | 
 |  |  |                                 StartTime:%d,
 | 
 |  |  |                                 PlaceCount:%d,
 | 
 |  |  |                                 RewardCount:%d,
 | 
 |  |  |                                 RewardLen:%d,
 | 
 |  |  |                                 RewardInfo:%s,
 | 
 |  |  |                                 TodayExp:%d,
 | 
 |  |  |                                 TodayExpPoint:%d,
 | 
 |  |  |                                 YestordayExp:%d,
 | 
 |  |  |                                 YestordayExpPoint:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Head.OutputString(),
 | 
 |  |  |                                 self.StartTime,
 | 
 |  |  |                                 self.PlaceCount,
 | 
 |  |  |                                 self.RewardCount,
 | 
 |  |  |                                 self.RewardLen,
 | 
 |  |  |                                 self.RewardInfo,
 | 
 |  |  |                                 self.TodayExp,
 | 
 |  |  |                                 self.TodayExpPoint,
 | 
 |  |  |                                 self.YestordayExp,
 | 
 |  |  |                                 self.YestordayExpPoint
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagMCActivityPlaceInfo=tagMCActivityPlaceInfo()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActivityPlaceInfo.Head.Cmd,m_NAtagMCActivityPlaceInfo.Head.SubCmd))] = m_NAtagMCActivityPlaceInfo
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | #B0 25 家族悬赏任务奖励领取情况 #tagFamilyArrestAwardReceiveState
 | 
 |  |  | 
 | 
 |  |  | class  tagFamilyArrestAwardReceiveState(Structure):
 | 
 |  |  | 
 |  |  | 
 | 
 |  |  | m_NAtagMCFishResult=tagMCFishResult()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFishResult.Cmd,m_NAtagMCFishResult.SubCmd))] = m_NAtagMCFishResult
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # B0 07 今日协助活跃令信息 #tagMCTodayAssistMoneyInfo
 | 
 |  |  | 
 | 
 |  |  | class  tagMCTodayAssistMoneyInfo(Structure):
 | 
 |  |  |     _pack_ = 1
 | 
 |  |  |     _fields_ = [
 | 
 |  |  |                   ("Cmd", c_ubyte),
 | 
 |  |  |                   ("SubCmd", c_ubyte),
 | 
 |  |  |                   ("TodayAssistMoney", c_ushort),    #今日已获得活跃令,不含社交加成
 | 
 |  |  |                   ("SocialMoney", c_ushort),    #社交额外加成
 | 
 |  |  |                   ]
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Cmd = 0xB0
 | 
 |  |  |         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 = 0xB0
 | 
 |  |  |         self.SubCmd = 0x07
 | 
 |  |  |         self.TodayAssistMoney = 0
 | 
 |  |  |         self.SocialMoney = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         return sizeof(tagMCTodayAssistMoneyInfo)
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         return string_at(addressof(self), self.GetLength())
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''// B0 07 今日协助活跃令信息 //tagMCTodayAssistMoneyInfo:
 | 
 |  |  |                                 Cmd:%s,
 | 
 |  |  |                                 SubCmd:%s,
 | 
 |  |  |                                 TodayAssistMoney:%d,
 | 
 |  |  |                                 SocialMoney:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Cmd,
 | 
 |  |  |                                 self.SubCmd,
 | 
 |  |  |                                 self.TodayAssistMoney,
 | 
 |  |  |                                 self.SocialMoney
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagMCTodayAssistMoneyInfo=tagMCTodayAssistMoneyInfo()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCTodayAssistMoneyInfo.Cmd,m_NAtagMCTodayAssistMoneyInfo.SubCmd))] = m_NAtagMCTodayAssistMoneyInfo
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | 
 |  |  |                   ("Cmd", c_ubyte),
 | 
 |  |  |                   ("SubCmd", c_ubyte),
 | 
 |  |  |                   ("Floor", c_int),    # 已通关层
 | 
 |  |  |                   ("ServerRewardRecord", c_int),    #全服挑战层领奖记录,按奖励记录二进制位存储是否已领取
 | 
 |  |  |                   ]
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  | 
 |  |  |         self.Cmd = 0xB2
 | 
 |  |  |         self.SubCmd = 0x13
 | 
 |  |  |         self.Floor = 0
 | 
 |  |  |         self.ServerRewardRecord = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  | 
 |  |  |         DumpString = '''// B2 13 天星塔通关层数 //tagMCSkyTowerInfo:
 | 
 |  |  |                                 Cmd:%s,
 | 
 |  |  |                                 SubCmd:%s,
 | 
 |  |  |                                 Floor:%d
 | 
 |  |  |                                 Floor:%d,
 | 
 |  |  |                                 ServerRewardRecord:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Cmd,
 | 
 |  |  |                                 self.SubCmd,
 | 
 |  |  |                                 self.Floor
 | 
 |  |  |                                 self.Floor,
 | 
 |  |  |                                 self.ServerRewardRecord
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 |  |  | 
 | 
 |  |  | m_NAtagMCAddMaliciousAtkPlayer=tagMCAddMaliciousAtkPlayer()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCAddMaliciousAtkPlayer.Cmd,m_NAtagMCAddMaliciousAtkPlayer.SubCmd))] = m_NAtagMCAddMaliciousAtkPlayer
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | # B4 15 Boss伤血排行榜信息 #tagMCBossHurtValueRankInfo
 | 
 |  |  | 
 | 
 |  |  | class  tagMCBossHurtValueAssist(Structure):
 | 
 |  |  |     PlayerID = 0    #(DWORD PlayerID)// 助战玩家ID
 | 
 |  |  |     PlayerName = ""    #(char PlayerName[33])
 | 
 |  |  |     HurtValue = 0    #(DWORD HurtValue)//不超过亿部分
 | 
 |  |  |     HurtValueEx = 0    #(DWORD HurtValueEx)//支持超过20亿
 | 
 |  |  |     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.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33)
 | 
 |  |  |         self.HurtValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.HurtValueEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         return _pos
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.PlayerID = 0
 | 
 |  |  |         self.PlayerName = ""
 | 
 |  |  |         self.HurtValue = 0
 | 
 |  |  |         self.HurtValueEx = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         length = 0
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 33
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  | 
 | 
 |  |  |         return length
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         data = ''
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.PlayerID)
 | 
 |  |  |         data = CommFunc.WriteString(data, 33, self.PlayerName)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.HurtValue)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.HurtValueEx)
 | 
 |  |  |         return data
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''
 | 
 |  |  |                                 PlayerID:%d,
 | 
 |  |  |                                 PlayerName:%s,
 | 
 |  |  |                                 HurtValue:%d,
 | 
 |  |  |                                 HurtValueEx:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.PlayerID,
 | 
 |  |  |                                 self.PlayerName,
 | 
 |  |  |                                 self.HurtValue,
 | 
 |  |  |                                 self.HurtValueEx
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | class  tagMCBossHurtValue(Structure):
 | 
 |  |  |     HurtType = 0    #(BYTE HurtType)// 伤血类型 1-玩家,2-队伍
 | 
 |  |  |     HurtID = 0    #(DWORD HurtID)//玩家时为玩家ID,队伍时为队伍ID
 | 
 |  |  |     HurtName = ""    #(char HurtName[33])// 名称
 | 
 |  |  |     HurtValue = 0    #(DWORD HurtValue)//不超过亿部分
 | 
 |  |  |     HurtValueEx = 0    #(DWORD HurtValueEx)//支持超过20亿
 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def ReadData(self, _lpData, _pos=0, _Len=0):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.HurtType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         self.HurtID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.HurtName,_pos = CommFunc.ReadString(_lpData, _pos,33)
 | 
 |  |  |         self.HurtValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.HurtValueEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         return _pos
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.HurtType = 0
 | 
 |  |  |         self.HurtID = 0
 | 
 |  |  |         self.HurtName = ""
 | 
 |  |  |         self.HurtValue = 0
 | 
 |  |  |         self.HurtValueEx = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         length = 0
 | 
 |  |  |         length += 1
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 33
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 4
 | 
 |  |  | 
 | 
 |  |  |         return length
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         data = ''
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.HurtType)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.HurtID)
 | 
 |  |  |         data = CommFunc.WriteString(data, 33, self.HurtName)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.HurtValue)
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.HurtValueEx)
 | 
 |  |  |         return data
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''
 | 
 |  |  |                                 HurtType:%d,
 | 
 |  |  |                                 HurtID:%d,
 | 
 |  |  |                                 HurtName:%s,
 | 
 |  |  |                                 HurtValue:%d,
 | 
 |  |  |                                 HurtValueEx:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.HurtType,
 | 
 |  |  |                                 self.HurtID,
 | 
 |  |  |                                 self.HurtName,
 | 
 |  |  |                                 self.HurtValue,
 | 
 |  |  |                                 self.HurtValueEx
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | class  tagMCBossHurtValueRankInfo(Structure):
 | 
 |  |  |     Head = tagHead()
 | 
 |  |  |     ObjID = 0    #(DWORD ObjID)//NPC实例ID
 | 
 |  |  |     HurtCount = 0    #(BYTE HurtCount)//伤血数目
 | 
 |  |  |     HurtValueList = list()    #(vector<tagMCBossHurtValue> HurtValueList)
 | 
 |  |  |     AssistHurtCount = 0    #(BYTE AssistHurtCount)//助战伤血数目
 | 
 |  |  |     AssistHurtValueList = list()    #(vector<tagMCBossHurtValueAssist> AssistHurtValueList)
 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xB4
 | 
 |  |  |         self.Head.SubCmd = 0x15
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def ReadData(self, _lpData, _pos=0, _Len=0):
 | 
 |  |  |         self.Clear()
 | 
 |  |  |         _pos = self.Head.ReadData(_lpData, _pos)
 | 
 |  |  |         self.ObjID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
 | 
 |  |  |         self.HurtCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         for i in range(self.HurtCount):
 | 
 |  |  |             temHurtValueList = tagMCBossHurtValue()
 | 
 |  |  |             _pos = temHurtValueList.ReadData(_lpData, _pos)
 | 
 |  |  |             self.HurtValueList.append(temHurtValueList)
 | 
 |  |  |         self.AssistHurtCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
 | 
 |  |  |         for i in range(self.AssistHurtCount):
 | 
 |  |  |             temAssistHurtValueList = tagMCBossHurtValueAssist()
 | 
 |  |  |             _pos = temAssistHurtValueList.ReadData(_lpData, _pos)
 | 
 |  |  |             self.AssistHurtValueList.append(temAssistHurtValueList)
 | 
 |  |  |         return _pos
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  |         self.Head = tagHead()
 | 
 |  |  |         self.Head.Clear()
 | 
 |  |  |         self.Head.Cmd = 0xB4
 | 
 |  |  |         self.Head.SubCmd = 0x15
 | 
 |  |  |         self.ObjID = 0
 | 
 |  |  |         self.HurtCount = 0
 | 
 |  |  |         self.HurtValueList = list()
 | 
 |  |  |         self.AssistHurtCount = 0
 | 
 |  |  |         self.AssistHurtValueList = list()
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  |         length = 0
 | 
 |  |  |         length += self.Head.GetLength()
 | 
 |  |  |         length += 4
 | 
 |  |  |         length += 1
 | 
 |  |  |         for i in range(self.HurtCount):
 | 
 |  |  |             length += self.HurtValueList[i].GetLength()
 | 
 |  |  |         length += 1
 | 
 |  |  |         for i in range(self.AssistHurtCount):
 | 
 |  |  |             length += self.AssistHurtValueList[i].GetLength()
 | 
 |  |  | 
 | 
 |  |  |         return length
 | 
 |  |  | 
 | 
 |  |  |     def GetBuffer(self):
 | 
 |  |  |         data = ''
 | 
 |  |  |         data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
 | 
 |  |  |         data = CommFunc.WriteDWORD(data, self.ObjID)
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.HurtCount)
 | 
 |  |  |         for i in range(self.HurtCount):
 | 
 |  |  |             data = CommFunc.WriteString(data, self.HurtValueList[i].GetLength(), self.HurtValueList[i].GetBuffer())
 | 
 |  |  |         data = CommFunc.WriteBYTE(data, self.AssistHurtCount)
 | 
 |  |  |         for i in range(self.AssistHurtCount):
 | 
 |  |  |             data = CommFunc.WriteString(data, self.AssistHurtValueList[i].GetLength(), self.AssistHurtValueList[i].GetBuffer())
 | 
 |  |  |         return data
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  |         DumpString = '''
 | 
 |  |  |                                 Head:%s,
 | 
 |  |  |                                 ObjID:%d,
 | 
 |  |  |                                 HurtCount:%d,
 | 
 |  |  |                                 HurtValueList:%s,
 | 
 |  |  |                                 AssistHurtCount:%d,
 | 
 |  |  |                                 AssistHurtValueList:%s
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Head.OutputString(),
 | 
 |  |  |                                 self.ObjID,
 | 
 |  |  |                                 self.HurtCount,
 | 
 |  |  |                                 "...",
 | 
 |  |  |                                 self.AssistHurtCount,
 | 
 |  |  |                                 "..."
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | m_NAtagMCBossHurtValueRankInfo=tagMCBossHurtValueRankInfo()
 | 
 |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCBossHurtValueRankInfo.Head.Cmd,m_NAtagMCBossHurtValueRankInfo.Head.SubCmd))] = m_NAtagMCBossHurtValueRankInfo
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #------------------------------------------------------
 | 
 |  |  | 
 |  |  |     PosY = 0    #(WORD PosY)
 | 
 |  |  |     HurtCount = 0    #(WORD HurtCount)//伤害数目
 | 
 |  |  |     HurtList = list()    #(vector<tagSkillPosHurtObj> HurtList)//size = HurtCount
 | 
 |  |  |     SkillElementID = 0    #(WORD SkillElementID)//专精技能ID
 | 
 |  |  |     data = None
 | 
 |  |  | 
 | 
 |  |  |     def __init__(self):
 | 
 |  |  | 
 |  |  |             temHurtList = tagSkillPosHurtObj()
 | 
 |  |  |             _pos = temHurtList.ReadData(_lpData, _pos)
 | 
 |  |  |             self.HurtList.append(temHurtList)
 | 
 |  |  |         self.SkillElementID,_pos = CommFunc.ReadWORD(_lpData, _pos)
 | 
 |  |  |         return _pos
 | 
 |  |  | 
 | 
 |  |  |     def Clear(self):
 | 
 |  |  | 
 |  |  |         self.PosY = 0
 | 
 |  |  |         self.HurtCount = 0
 | 
 |  |  |         self.HurtList = list()
 | 
 |  |  |         self.SkillElementID = 0
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     def GetLength(self):
 | 
 |  |  | 
 |  |  |         length += 2
 | 
 |  |  |         for i in range(self.HurtCount):
 | 
 |  |  |             length += self.HurtList[i].GetLength()
 | 
 |  |  |         length += 2
 | 
 |  |  | 
 | 
 |  |  |         return length
 | 
 |  |  | 
 | 
 |  |  | 
 |  |  |         data = CommFunc.WriteWORD(data, self.HurtCount)
 | 
 |  |  |         for i in range(self.HurtCount):
 | 
 |  |  |             data = CommFunc.WriteString(data, self.HurtList[i].GetLength(), self.HurtList[i].GetBuffer())
 | 
 |  |  |         data = CommFunc.WriteWORD(data, self.SkillElementID)
 | 
 |  |  |         return data
 | 
 |  |  | 
 | 
 |  |  |     def OutputString(self):
 | 
 |  |  | 
 |  |  |                                 PosX:%d,
 | 
 |  |  |                                 PosY:%d,
 | 
 |  |  |                                 HurtCount:%d,
 | 
 |  |  |                                 HurtList:%s
 | 
 |  |  |                                 HurtList:%s,
 | 
 |  |  |                                 SkillElementID:%d
 | 
 |  |  |                                 '''\
 | 
 |  |  |                                 %(
 | 
 |  |  |                                 self.Head.OutputString(),
 | 
 |  |  | 
 |  |  |                                 self.PosX,
 | 
 |  |  |                                 self.PosY,
 | 
 |  |  |                                 self.HurtCount,
 | 
 |  |  |                                 "..."
 | 
 |  |  |                                 "...",
 | 
 |  |  |                                 self.SkillElementID
 | 
 |  |  |                                 )
 | 
 |  |  |         return DumpString
 | 
 |  |  | 
 |