|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # 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 | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagGCClearAuctionItemInfo=tagGCClearAuctionItemInfo() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCClearAuctionItemInfo.Head.Cmd,m_NAtagGCClearAuctionItemInfo.Head.SubCmd))] = m_NAtagGCClearAuctionItemInfo | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # B5 11 部位升星自动购买拍品消耗信息 #tagGCEquipStarAutoBuyCostInfo | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagGCEquipStarAutoBuyCostInfo(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ("ClassLV", c_ubyte),    # 当前要升星的境界阶 | 
|---|
|  |  |  | ("EquipPlace", c_ubyte),    #当前要升星的装备位 | 
|---|
|  |  |  | ("CurStar", c_ubyte),    #当前星级 | 
|---|
|  |  |  | ("CurRate", c_ubyte),    #当前自动购买后的总概率,不满100则代表拍品库存不足 | 
|---|
|  |  |  | ("AutoBuyCostMoney", c_int),    #自动购买所需总消耗 | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Cmd = 0xB5 | 
|---|
|  |  |  | self.SubCmd = 0x11 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, stringData, _pos=0, _len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | memmove(addressof(self), stringData[_pos:], self.GetLength()) | 
|---|
|  |  |  | return _pos + self.GetLength() | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Cmd = 0xB5 | 
|---|
|  |  |  | self.SubCmd = 0x11 | 
|---|
|  |  |  | self.ClassLV = 0 | 
|---|
|  |  |  | self.EquipPlace = 0 | 
|---|
|  |  |  | self.CurStar = 0 | 
|---|
|  |  |  | self.CurRate = 0 | 
|---|
|  |  |  | self.AutoBuyCostMoney = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagGCEquipStarAutoBuyCostInfo) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''// B5 11 部位升星自动购买拍品消耗信息 //tagGCEquipStarAutoBuyCostInfo: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s, | 
|---|
|  |  |  | ClassLV:%d, | 
|---|
|  |  |  | EquipPlace:%d, | 
|---|
|  |  |  | CurStar:%d, | 
|---|
|  |  |  | CurRate:%d, | 
|---|
|  |  |  | AutoBuyCostMoney:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | self.SubCmd, | 
|---|
|  |  |  | self.ClassLV, | 
|---|
|  |  |  | self.EquipPlace, | 
|---|
|  |  |  | self.CurStar, | 
|---|
|  |  |  | self.CurRate, | 
|---|
|  |  |  | self.AutoBuyCostMoney | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagGCEquipStarAutoBuyCostInfo=tagGCEquipStarAutoBuyCostInfo() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCEquipStarAutoBuyCostInfo.Cmd,m_NAtagGCEquipStarAutoBuyCostInfo.SubCmd))] = m_NAtagGCEquipStarAutoBuyCostInfo | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # 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): | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagMCEquipPartStarInfo=tagMCEquipPartStarInfo() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCEquipPartStarInfo.Head.Cmd,m_NAtagMCEquipPartStarInfo.Head.SubCmd))] = m_NAtagMCEquipPartStarInfo | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # A3 B2 装备部位星级套装激活信息 #tagMCEquipPartSuiteActivateInfo | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagMCEquipPartSuiteActivateInfo(Structure): | 
|---|
|  |  |  | Head = tagHead() | 
|---|
|  |  |  | Count = 0    #(BYTE Count) | 
|---|
|  |  |  | SuiteActivateStateInfo = list()    #(vector<DWORD> SuiteActivateStateInfo)//激活状态值列表,每个数按位存31个激活索引,每个位代表对应的激活索引是否已激活 | 
|---|
|  |  |  | data = None | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Head.Cmd = 0xA3 | 
|---|
|  |  |  | self.Head.SubCmd = 0xB2 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, _lpData, _pos=0, _Len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | _pos = self.Head.ReadData(_lpData, _pos) | 
|---|
|  |  |  | self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos) | 
|---|
|  |  |  | for i in range(self.Count): | 
|---|
|  |  |  | value,_pos=CommFunc.ReadDWORD(_lpData,_pos) | 
|---|
|  |  |  | self.SuiteActivateStateInfo.append(value) | 
|---|
|  |  |  | return _pos | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Head = tagHead() | 
|---|
|  |  |  | self.Head.Clear() | 
|---|
|  |  |  | self.Head.Cmd = 0xA3 | 
|---|
|  |  |  | self.Head.SubCmd = 0xB2 | 
|---|
|  |  |  | self.Count = 0 | 
|---|
|  |  |  | self.SuiteActivateStateInfo = list() | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | length = 0 | 
|---|
|  |  |  | length += self.Head.GetLength() | 
|---|
|  |  |  | length += 1 | 
|---|
|  |  |  | length += 4 * self.Count | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return length | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | data = '' | 
|---|
|  |  |  | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.Count) | 
|---|
|  |  |  | for i in range(self.Count): | 
|---|
|  |  |  | data = CommFunc.WriteDWORD(data, self.SuiteActivateStateInfo[i]) | 
|---|
|  |  |  | return data | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = ''' | 
|---|
|  |  |  | Head:%s, | 
|---|
|  |  |  | Count:%d, | 
|---|
|  |  |  | SuiteActivateStateInfo:%s | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Head.OutputString(), | 
|---|
|  |  |  | self.Count, | 
|---|
|  |  |  | "..." | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagMCEquipPartSuiteActivateInfo=tagMCEquipPartSuiteActivateInfo() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCEquipPartSuiteActivateInfo.Head.Cmd,m_NAtagMCEquipPartSuiteActivateInfo.Head.SubCmd))] = m_NAtagMCEquipPartSuiteActivateInfo | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # 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 | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # AA 24 每日免费直购礼包信息 #tagMCDayFreeGoldGiftState | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagMCDayFreeGoldGiftState(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("Cmd", c_ubyte), | 
|---|
|  |  |  | ("SubCmd", c_ubyte), | 
|---|
|  |  |  | ("DayFreeGoldGiftState", c_ubyte),    #每日免费直购礼包是否已领奖 0-未领 1-已领 | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Cmd = 0xAA | 
|---|
|  |  |  | self.SubCmd = 0x24 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, stringData, _pos=0, _len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | memmove(addressof(self), stringData[_pos:], self.GetLength()) | 
|---|
|  |  |  | return _pos + self.GetLength() | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Cmd = 0xAA | 
|---|
|  |  |  | self.SubCmd = 0x24 | 
|---|
|  |  |  | self.DayFreeGoldGiftState = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagMCDayFreeGoldGiftState) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''// AA 24 每日免费直购礼包信息 //tagMCDayFreeGoldGiftState: | 
|---|
|  |  |  | Cmd:%s, | 
|---|
|  |  |  | SubCmd:%s, | 
|---|
|  |  |  | DayFreeGoldGiftState:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Cmd, | 
|---|
|  |  |  | self.SubCmd, | 
|---|
|  |  |  | self.DayFreeGoldGiftState | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagMCDayFreeGoldGiftState=tagMCDayFreeGoldGiftState() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCDayFreeGoldGiftState.Cmd,m_NAtagMCDayFreeGoldGiftState.SubCmd))] = m_NAtagMCDayFreeGoldGiftState | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | 
|---|
|  |  |  | _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 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # 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 | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # AA 11 限时特惠活动信息 #tagMCSpringSaleInfo | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagMCSpringSaleItem(Structure): | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagMCXJSDRecharge=tagMCXJSDRecharge() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCXJSDRecharge.Cmd,m_NAtagMCXJSDRecharge.SubCmd))] = m_NAtagMCXJSDRecharge | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # AB 01 Boss首杀玩家奖励信息 #tagMCBossFirstKillStateInfo | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagMCBossFirstKillState(Structure): | 
|---|
|  |  |  | _pack_ = 1 | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("NPCID", c_int), | 
|---|
|  |  |  | ("FKState", c_int),    # 玩家该boss首杀相关状态,按位存:个位-玩家是否击杀过,十位-是否已领取首杀全服奖励,百位-是否已领取个人首杀奖励 | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 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.NPCID = 0 | 
|---|
|  |  |  | self.FKState = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | return sizeof(tagMCBossFirstKillState) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | return string_at(addressof(self), self.GetLength()) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''// AB 01 Boss首杀玩家奖励信息 //tagMCBossFirstKillStateInfo: | 
|---|
|  |  |  | NPCID:%d, | 
|---|
|  |  |  | FKState:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.NPCID, | 
|---|
|  |  |  | self.FKState | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | class  tagMCBossFirstKillStateInfo(Structure): | 
|---|
|  |  |  | Head = tagHead() | 
|---|
|  |  |  | BossCount = 0    #(BYTE BossCount) | 
|---|
|  |  |  | FirstKillStateList = list()    #(vector<tagMCBossFirstKillState> FirstKillStateList) | 
|---|
|  |  |  | data = None | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | self.Head.Cmd = 0xAB | 
|---|
|  |  |  | self.Head.SubCmd = 0x01 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ReadData(self, _lpData, _pos=0, _Len=0): | 
|---|
|  |  |  | self.Clear() | 
|---|
|  |  |  | _pos = self.Head.ReadData(_lpData, _pos) | 
|---|
|  |  |  | self.BossCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) | 
|---|
|  |  |  | for i in range(self.BossCount): | 
|---|
|  |  |  | temFirstKillStateList = tagMCBossFirstKillState() | 
|---|
|  |  |  | _pos = temFirstKillStateList.ReadData(_lpData, _pos) | 
|---|
|  |  |  | self.FirstKillStateList.append(temFirstKillStateList) | 
|---|
|  |  |  | return _pos | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.Head = tagHead() | 
|---|
|  |  |  | self.Head.Clear() | 
|---|
|  |  |  | self.Head.Cmd = 0xAB | 
|---|
|  |  |  | self.Head.SubCmd = 0x01 | 
|---|
|  |  |  | self.BossCount = 0 | 
|---|
|  |  |  | self.FirstKillStateList = list() | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | length = 0 | 
|---|
|  |  |  | length += self.Head.GetLength() | 
|---|
|  |  |  | length += 1 | 
|---|
|  |  |  | for i in range(self.BossCount): | 
|---|
|  |  |  | length += self.FirstKillStateList[i].GetLength() | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return length | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetBuffer(self): | 
|---|
|  |  |  | data = '' | 
|---|
|  |  |  | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) | 
|---|
|  |  |  | data = CommFunc.WriteBYTE(data, self.BossCount) | 
|---|
|  |  |  | for i in range(self.BossCount): | 
|---|
|  |  |  | data = CommFunc.WriteString(data, self.FirstKillStateList[i].GetLength(), self.FirstKillStateList[i].GetBuffer()) | 
|---|
|  |  |  | return data | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = ''' | 
|---|
|  |  |  | Head:%s, | 
|---|
|  |  |  | BossCount:%d, | 
|---|
|  |  |  | FirstKillStateList:%s | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.Head.OutputString(), | 
|---|
|  |  |  | self.BossCount, | 
|---|
|  |  |  | "..." | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | m_NAtagMCBossFirstKillStateInfo=tagMCBossFirstKillStateInfo() | 
|---|
|  |  |  | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCBossFirstKillStateInfo.Head.Cmd,m_NAtagMCBossFirstKillStateInfo.Head.SubCmd))] = m_NAtagMCBossFirstKillStateInfo | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | # 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 | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #------------------------------------------------------ | 
|---|
|  |  |  | 
|---|
|  |  |  | _fields_ = [ | 
|---|
|  |  |  | ("DataMapID", c_int),    # 地图ID | 
|---|
|  |  |  | ("RemainTime", c_int),    # 剩余时间秒 | 
|---|
|  |  |  | ("RegainCnt", c_ubyte),    # 今日已恢复次数 | 
|---|
|  |  |  | ] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def __init__(self): | 
|---|
|  |  |  | 
|---|
|  |  |  | def Clear(self): | 
|---|
|  |  |  | self.DataMapID = 0 | 
|---|
|  |  |  | self.RemainTime = 0 | 
|---|
|  |  |  | self.RegainCnt = 0 | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetLength(self): | 
|---|
|  |  |  | 
|---|
|  |  |  | def OutputString(self): | 
|---|
|  |  |  | DumpString = '''// B2 09 副本次数恢复剩余时间 //tagMCFBCntRegainRemainTime: | 
|---|
|  |  |  | DataMapID:%d, | 
|---|
|  |  |  | RemainTime:%d | 
|---|
|  |  |  | RemainTime:%d, | 
|---|
|  |  |  | RegainCnt:%d | 
|---|
|  |  |  | '''\ | 
|---|
|  |  |  | %( | 
|---|
|  |  |  | self.DataMapID, | 
|---|
|  |  |  | self.RemainTime | 
|---|
|  |  |  | self.RemainTime, | 
|---|
|  |  |  | self.RegainCnt | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | return DumpString | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | ("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 | 
|---|
|  |  |  |  | 
|---|