| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # C0 01 跨服PK匹配成功 #tagGCCrossRealmPKMatchOK
|
| | |
|
| | | class tagGCCrossRealmPKMatchOK(Structure):
|
| | | Head = tagHead()
|
| | | NameLen = 0 #(BYTE NameLen)
|
| | | PlayerName = "" #(String PlayerName)// 跨服名字
|
| | | TagNameLen = 0 #(BYTE TagNameLen)
|
| | | TagPlayerName = "" #(String TagPlayerName)// 对手名字
|
| | | TagJob = 0 #(BYTE TagJob)// 对手职业
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xC0
|
| | | self.Head.SubCmd = 0x01
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | _pos = self.Head.ReadData(_lpData, _pos)
|
| | | self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
|
| | | self.TagNameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.TagPlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
|
| | | self.TagJob,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xC0
|
| | | self.Head.SubCmd = 0x01
|
| | | self.NameLen = 0
|
| | | self.PlayerName = ""
|
| | | self.TagNameLen = 0
|
| | | self.TagPlayerName = ""
|
| | | self.TagJob = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 1
|
| | | length += len(self.PlayerName)
|
| | | length += 1
|
| | | length += len(self.TagPlayerName)
|
| | | length += 1
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
|
| | | data = CommFunc.WriteBYTE(data, self.NameLen)
|
| | | data = CommFunc.WriteString(data, self.NameLen, self.PlayerName)
|
| | | data = CommFunc.WriteBYTE(data, self.TagNameLen)
|
| | | data = CommFunc.WriteString(data, self.NameLen, self.TagPlayerName)
|
| | | data = CommFunc.WriteBYTE(data, self.TagJob)
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | NameLen:%d,
|
| | | PlayerName:%s,
|
| | | TagNameLen:%d,
|
| | | TagPlayerName:%s,
|
| | | TagJob:%d
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.NameLen,
|
| | | self.PlayerName,
|
| | | self.TagNameLen,
|
| | | self.TagPlayerName,
|
| | | self.TagJob
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagGCCrossRealmPKMatchOK=tagGCCrossRealmPKMatchOK()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossRealmPKMatchOK.Head.Cmd,m_NAtagGCCrossRealmPKMatchOK.Head.SubCmd))] = m_NAtagGCCrossRealmPKMatchOK
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # C0 03 跨服PK战斗结果 #tagGCCrossRealmPKOverInfo
|
| | |
|
| | | class tagGCCrossRealmPKOverInfo(Structure):
|
| | | Head = tagHead()
|
| | | TimeStr = "" #(char TimeStr[19])// 结算时间,格式 yyyy-MM-dd HH:mm:ss
|
| | | OverType = 0 #(BYTE OverType)// 0-正常,1-有人离线
|
| | | WinnerID = 0 #(DWORD WinnerID)// 胜方ID
|
| | | RoundCount = 0 #(BYTE RoundCount)// PK回合数
|
| | | RoundWinnerID = list() #(vector<DWORD> RoundWinnerID)// 回合获胜ID列表
|
| | | AddScore = 0 #(WORD AddScore)// 本场加分
|
| | | Score = 0 #(WORD Score)// 当前积分
|
| | | DanLV = 0 #(BYTE DanLV)// 当前段位
|
| | | CWinCnt = 0 #(WORD CWinCnt)// 当前连胜数
|
| | | TagNameLen = 0 #(BYTE TagNameLen)
|
| | | TagName = "" #(String TagName)
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xC0
|
| | | self.Head.SubCmd = 0x03
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | _pos = self.Head.ReadData(_lpData, _pos)
|
| | | self.TimeStr,_pos = CommFunc.ReadString(_lpData, _pos,19)
|
| | | self.OverType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.WinnerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.RoundCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.RoundCount):
|
| | | value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
|
| | | self.RoundWinnerID.append(value)
|
| | | self.AddScore,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.Score,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.DanLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.CWinCnt,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.TagNameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.TagName,_pos = CommFunc.ReadString(_lpData, _pos,self.TagNameLen)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xC0
|
| | | self.Head.SubCmd = 0x03
|
| | | self.TimeStr = ""
|
| | | self.OverType = 0
|
| | | self.WinnerID = 0
|
| | | self.RoundCount = 0
|
| | | self.RoundWinnerID = list()
|
| | | self.AddScore = 0
|
| | | self.Score = 0
|
| | | self.DanLV = 0
|
| | | self.CWinCnt = 0
|
| | | self.TagNameLen = 0
|
| | | self.TagName = ""
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 19
|
| | | length += 1
|
| | | length += 4
|
| | | length += 1
|
| | | length += 4 * self.RoundCount
|
| | | length += 2
|
| | | length += 2
|
| | | length += 1
|
| | | length += 2
|
| | | length += 1
|
| | | length += len(self.TagName)
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
|
| | | data = CommFunc.WriteString(data, 19, self.TimeStr)
|
| | | data = CommFunc.WriteBYTE(data, self.OverType)
|
| | | data = CommFunc.WriteDWORD(data, self.WinnerID)
|
| | | data = CommFunc.WriteBYTE(data, self.RoundCount)
|
| | | for i in range(self.RoundCount):
|
| | | data = CommFunc.WriteDWORD(data, self.RoundWinnerID[i])
|
| | | data = CommFunc.WriteWORD(data, self.AddScore)
|
| | | data = CommFunc.WriteWORD(data, self.Score)
|
| | | data = CommFunc.WriteBYTE(data, self.DanLV)
|
| | | data = CommFunc.WriteWORD(data, self.CWinCnt)
|
| | | data = CommFunc.WriteBYTE(data, self.TagNameLen)
|
| | | data = CommFunc.WriteString(data, self.TagNameLen, self.TagName)
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | TimeStr:%s,
|
| | | OverType:%d,
|
| | | WinnerID:%d,
|
| | | RoundCount:%d,
|
| | | RoundWinnerID:%s,
|
| | | AddScore:%d,
|
| | | Score:%d,
|
| | | DanLV:%d,
|
| | | CWinCnt:%d,
|
| | | TagNameLen:%d,
|
| | | TagName:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.TimeStr,
|
| | | self.OverType,
|
| | | self.WinnerID,
|
| | | self.RoundCount,
|
| | | "...",
|
| | | self.AddScore,
|
| | | self.Score,
|
| | | self.DanLV,
|
| | | self.CWinCnt,
|
| | | self.TagNameLen,
|
| | | self.TagName
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagGCCrossRealmPKOverInfo=tagGCCrossRealmPKOverInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossRealmPKOverInfo.Head.Cmd,m_NAtagGCCrossRealmPKOverInfo.Head.SubCmd))] = m_NAtagGCCrossRealmPKOverInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # C0 02 跨服PK开始匹配 #tagGCCrossRealmPKStartMatch
|
| | |
|
| | | class tagGCCrossRealmPKStartMatch(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Cmd = 0xC0
|
| | | self.SubCmd = 0x02
|
| | | return
|
| | |
|
| | | def ReadData(self, stringData, _pos=0, _len=0):
|
| | | self.Clear()
|
| | | memmove(addressof(self), stringData[_pos:], self.GetLength())
|
| | | return _pos + self.GetLength()
|
| | |
|
| | | def Clear(self):
|
| | | self.Cmd = 0xC0
|
| | | self.SubCmd = 0x02
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagGCCrossRealmPKStartMatch)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// C0 02 跨服PK开始匹配 //tagGCCrossRealmPKStartMatch:
|
| | | Cmd:%s,
|
| | | SubCmd:%s
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagGCCrossRealmPKStartMatch=tagGCCrossRealmPKStartMatch()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossRealmPKStartMatch.Cmd,m_NAtagGCCrossRealmPKStartMatch.SubCmd))] = m_NAtagGCCrossRealmPKStartMatch
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # D1 25 通知可进入跨服王者争霸 #tagCanEnterMergeKing
|
| | |
|
| | | class tagCanEnterMergeKing(Structure):
|
| | |
| | |
|
| | | m_NAtagMCFuncOpenStateList=tagMCFuncOpenStateList()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFuncOpenStateList.Head.Cmd,m_NAtagMCFuncOpenStateList.Head.SubCmd))] = m_NAtagMCFuncOpenStateList
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A3 1E 玩家聚魂孔信息 #tagMCGatherSoulHoleInfo
|
| | |
|
| | | class tagMCGatherSoulHoleInfo(Structure):
|
| | | Head = tagHead()
|
| | | Count = 0 #(BYTE Count)// 孔信息数
|
| | | GatherSoulDataList = list() #(vector<DWORD> GatherSoulDataList)// 孔数据信息, 数据与背包数据相同
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xA3
|
| | | self.Head.SubCmd = 0x1E
|
| | | 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.GatherSoulDataList.append(value)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xA3
|
| | | self.Head.SubCmd = 0x1E
|
| | | self.Count = 0
|
| | | self.GatherSoulDataList = 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.GatherSoulDataList[i])
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | Count:%d,
|
| | | GatherSoulDataList:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.Count,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagMCGatherSoulHoleInfo=tagMCGatherSoulHoleInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCGatherSoulHoleInfo.Head.Cmd,m_NAtagMCGatherSoulHoleInfo.Head.SubCmd))] = m_NAtagMCGatherSoulHoleInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | |
| | | Head = tagHead()
|
| | | MapID = 0 #(DWORD MapID)
|
| | | FuncLineID = 0 #(BYTE FuncLineID)
|
| | | XianyuanCoinAdd = 0 #(WORD XianyuanCoinAdd)// 增加的仙缘币,0代表已达上限
|
| | | Relation = 0 #(BYTE Relation)// 当时的关系:0-无,1-好友,2-盟友
|
| | | RelationCoinAdd = 0 #(BYTE RelationCoinAdd)// 社交关系总加成
|
| | | XianyuanCoinAdd = 0 #(WORD XianyuanCoinAdd)// 实际增加的仙缘币
|
| | | Reason = 0 #(BYTE Reason)//仙缘币为0时的原因:1-助战次数上限;2-每日获得上限
|
| | | CallPlayerID = 0 #(DWORD CallPlayerID)// 助战的玩家ID,有值时代表真实助战,没有值时为自己打的
|
| | | NameLen = 0 #(BYTE NameLen)
|
| | | CallPlayerName = "" #(String CallPlayerName)// 助战的玩家名,size = NameLen
|
| | | IsSweep = 0 #(BYTE IsSweep)// 是否扫荡
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | |
| | | _pos = self.Head.ReadData(_lpData, _pos)
|
| | | self.MapID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.FuncLineID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.Relation,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.RelationCoinAdd,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.XianyuanCoinAdd,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.Reason,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.CallPlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.CallPlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
|
| | | self.IsSweep,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | |
| | | self.Head.SubCmd = 0x08
|
| | | self.MapID = 0
|
| | | self.FuncLineID = 0
|
| | | self.Relation = 0
|
| | | self.RelationCoinAdd = 0
|
| | | self.XianyuanCoinAdd = 0
|
| | | self.Reason = 0
|
| | | self.CallPlayerID = 0
|
| | | self.NameLen = 0
|
| | | self.CallPlayerName = ""
|
| | | self.IsSweep = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | |
| | | length += self.Head.GetLength()
|
| | | length += 4
|
| | | length += 1
|
| | | length += 1
|
| | | length += 1
|
| | | length += 2
|
| | | length += 1
|
| | | length += 4
|
| | | length += 1
|
| | | length += len(self.CallPlayerName)
|
| | | length += 1
|
| | |
|
| | | return length
|
| | |
|
| | |
| | | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
|
| | | data = CommFunc.WriteDWORD(data, self.MapID)
|
| | | data = CommFunc.WriteBYTE(data, self.FuncLineID)
|
| | | data = CommFunc.WriteBYTE(data, self.Relation)
|
| | | data = CommFunc.WriteBYTE(data, self.RelationCoinAdd)
|
| | | data = CommFunc.WriteWORD(data, self.XianyuanCoinAdd)
|
| | | data = CommFunc.WriteBYTE(data, self.Reason)
|
| | | data = CommFunc.WriteDWORD(data, self.CallPlayerID)
|
| | | data = CommFunc.WriteBYTE(data, self.NameLen)
|
| | | data = CommFunc.WriteString(data, self.NameLen, self.CallPlayerName)
|
| | | data = CommFunc.WriteBYTE(data, self.IsSweep)
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | |
| | | Head:%s,
|
| | | MapID:%d,
|
| | | FuncLineID:%d,
|
| | | Relation:%d,
|
| | | RelationCoinAdd:%d,
|
| | | XianyuanCoinAdd:%d,
|
| | | Reason:%d,
|
| | | CallPlayerID:%d,
|
| | | NameLen:%d,
|
| | | CallPlayerName:%s
|
| | | CallPlayerName:%s,
|
| | | IsSweep:%d
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.MapID,
|
| | | self.FuncLineID,
|
| | | self.Relation,
|
| | | self.RelationCoinAdd,
|
| | | self.XianyuanCoinAdd,
|
| | | self.Reason,
|
| | | self.CallPlayerID,
|
| | | self.NameLen,
|
| | | self.CallPlayerName
|
| | | self.CallPlayerName,
|
| | | self.IsSweep
|
| | | )
|
| | | return DumpString
|
| | |
|